通过 D-Bus 的 NetworkManager:添加网桥

通过 D-Bus 的 NetworkManager:添加网桥

我正在尝试使用D-Bus 接口网络管理器添加并启用网桥连接。基本上我试图模仿这个命令:

nmcli connection add type bridge ifname br0 stp no

此行代码创建并激活了一个新的连接,但它也创建了一个新的虚拟设备br0

D-Bus API参考列出/org/freedesktop/NetworkManager以下方法:

两者都具有相似的签名,并且需要设备作为输入,因此可以通过 D-Bus 检索现有设备获取设备方法。但是,网桥需要虚拟设备(或者为网桥创建虚拟设备?)。我自然而然地考虑先创建一个新设备,然后将其传递给上面列出的方法之一,但参考不提供任何创建新设备的方法。

我觉得nmcli 实现在底层使用 D-Bus 接口,那么以某种方式实现是否可行?

答案1

nmcli con add不使用 AddAndActivate API。它本身也不会创建设备。它只会添加一个启用了自动连接的新连接配置文件,NetworkManager 将自动激活该配置文件,从而创建设备。

您应该了解配置文件是什么:它是一组用于配置网络设备的设置。并且该配置文件可能被“激活”,这意味着实际使用这些设置(并创建设备)。您始终可以手动激活配置文件,或者如果条件合适,Networkmanager 可能会自动执行此操作。“创建”设备的 API 是激活配置文件。对于软件设备(例如网桥),NetworkManager 会在您激活配置文件时自动创建它。

nmcli device connectAddAndActivate 在某些情况下由和调用nmcli device wifi connect。它的不同之处在于它将两个步骤合二为一,并且它还做了一件额外的事情:用户可能会传递一个不完整的连接配置文件,NetworkManager 会在添加它之前尝试填写该配置文件。因此,它不仅仅是 AddConnection + Activate 连接。通常,这不是你想要的。最好的例子是在 Wi-Fi 配置文件中只指定 SSID,AddAndActivate 会根据 Wi-Fi 扫描结果自动填写额外设置。使用 AddConnection API,配置文件完全由调用者确定,并且仅使用默认设置完成,与设备(或 Wi-Fi 接入点)无关。

D-Bus 上的设备参数可能是可选的。至少对于 ActivateConnection API 来说是这样。在这种情况下,NetworkManager 将自动查找或创建合适的设备。此外,连接配置文件参数可能是可选的(如果您只提供设备)。

是的,大多数 Networkmanager 客户端工具将使用相同的底层 D-Bus API,包括 nmcli。这样您就可以编写自己的应用程序来执行其他应用程序所做的事情,从而与这些工具集成。还有 libnm,这是一个基于 glib 的库,它包装了 D-Bus,并且许多客户端应用程序都使用它,而不是直接与 D-Bus 通信。

另请参阅https://gitlab.freedesktop.org/NetworkManager/NetworkManager/tree/ce59e749fbc99152d379b22563d6fd3295c7085a/examples

Networkmanager API 主要用来创建配置文件(连接)并激活它们。

相关内容