NetworkManager через D-Bus: Добавить сетевой мост

Я пытаюсь использовать интерфейс D-Bus из NetworkManager для добавления и включения подключения через сетевой мост. В основном я пытаюсь имитировать эту команду:

nmcli connection add type bridge ifname br0 stp no

Этот однострочный файл создает и активирует новое соединение, но также создает новое виртуальное устройство br0 .

В справочнике API D-Bus для / org / freedesktop / NetworkManager перечислены следующие методы:

Оба имеют одинаковую подпись и требовать устройство в качестве ввода, то есть существующее устройство, которое можно получить с помощью метода D-Bus GetDevices . Однако для сетевого моста требуется виртуальное устройство (или виртуальное устройство создано для сетевого моста?). Естественно, я сначала рассмотрел создание нового устройства, а затем передал его одному из методов, перечисленных выше, но ссылка не предлагает никаких методов для создания новых устройств.

Я думаю, что реализация nmcli использует интерфейс D-Bus под капотом, так что это должно быть каким-то образом?

1
задан 20 February 2020 в 18:22

1 ответ

nmcli con add не использует API AddAndActivate. Он также (сам) не создает устройство. Происходит только то, что он добавляет новый профиль подключения с включенным автоматическим подключением, который NetworkManager автоматически активирует и тем самым создает устройство.

Вы должны понимать, что такое профиль: это набор настроек для настройки сетевого устройства. И этот профиль может быть «активирован», что означает фактическое использование настроек (и создание устройства). Вы всегда можете активировать профиль вручную, или Networkmanager может сделать это автоматически, если условия подходят. API для «создания» устройства активирует профиль. В случае программного устройства (например, моста) NetworkManager автоматически создает его при активации профиля.

AddAndActivate вызывается (в некоторых случаях) nmcli device connect и nmcli device wifi connect . Он отличается тем, что выполняет два шага в одном и делает еще одну вещь: пользователь может передать неполный профиль подключения, который NetworkManager пытается заполнить перед его добавлением. Таким образом, это больше, чем просто соединение AddConnection + Activate. Обычно это не то, что вам нужно. Лучший пример - указать только SSID в профиле Wi-Fi, и AddAndActivate автоматически заполнит дополнительные настройки на основе результатов сканирования Wi-Fi. С помощью API AddConnection профиль полностью определяется вызывающим абонентом и заполняется только с настройками по умолчанию, независимо от устройства (или точки доступа Wi-Fi).

Аргумент устройства на D-Bus может быть необязательным. По крайней мере, для ActivateConnection API. В этом случае NetworkManager автоматически найдет или создаст подходящее устройство. Кроме того, аргумент профиля подключения может быть необязательным (если вместо этого вы указываете только устройство).

Да, большинство клиентских инструментов Networkmanager будут использовать один и тот же базовый API D-Bus, включая nmcli. Это позволяет вам написать собственное приложение, которое выполняет то же, что и другие приложения, и, таким образом, интегрироваться с этими инструментами. Существует также libnm, библиотека на основе glib, которая обертывает D-Bus, и несколько клиентских приложений используют ее вместо непосредственного взаимодействия с D-Bus.

См. Также примеры на https: //gitlab.freedesktop.org / NetworkManager / NetworkManager / tree / ce59e749fbc99152d379b22563d6fd3295c7085a / examples

API Networkmanager - это создание профилей (соединений) и их активация.

1
ответ дан 21 February 2020 в 04:04

Другие вопросы по тегам:

Похожие вопросы: