![通过 D-Bus 的 NetworkManager:添加网桥](https://linux22.com/image/1170891/%E9%80%9A%E8%BF%87%20D-Bus%20%E7%9A%84%20NetworkManager%EF%BC%9A%E6%B7%BB%E5%8A%A0%E7%BD%91%E6%A1%A5.png)
我正在尝试使用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 connect
AddAndActivate 在某些情况下由和调用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 通信。
Networkmanager API 主要用来创建配置文件(连接)并激活它们。