web-dev-qa-db-ja.com

D-Bus経由のNetworkManager:ネットワークブリッジを追加する

NetworkManagerD-Busインターフェイス を使用して、ネットワークブリッジ接続を追加して有効にしようとしています。基本的に私はこのコマンドを模倣しようとしています:

nmcli connection add type bridge ifname br0 stp no

このワンライナーは、新しい接続を作成してアクティブにしますが、新しい仮想デバイスbr0も作成します。

D-Bus API 参照/org/freedesktop/NetworkManagerの場合、次のメソッドがリストされます。

どちらも同様の署名を持ち、入力としてデバイスを必要とするため、D-Bus GetDevices メソッドを介して取得できる既存のデバイス。ただし、ネットワークブリッジには仮想デバイスが必要です(または、ネットワークブリッジ用に仮想デバイスが作成されますか?)。当然、最初に新しいデバイスを作成してから、それを上記のいずれかのメソッドに渡しましたが、 reference は新しいデバイスを作成する方法を提供していません。

nmcliの実装 は内部でD-Busインターフェースを使用していると思うので、どういうわけか可能でなければなりませんか?

1
codepearlex

nmcli con addはAddAndActivate APIを使用しません。また、(それ自体は)デバイスを作成しません。発生することは、自動接続が有効になっている新しい接続プロファイルを追加することだけです。これにより、NetworkManagerが自動的にアクティブになり、デバイスが作成されます。

プロファイルとは何かを理解する必要があります。これは、ネットワークデバイスを構成するための一連の設定です。そして、そのプロファイルは「アクティブ化」される可能性があります。これは、実際に設定を使用する(そしてデバイスを作成する)ことを意味します。プロファイルはいつでも手動でアクティブ化できます。条件が正しい場合は、Networkmanagerが自動的にアクティブ化できます。デバイスを「作成」するAPIがプロファイルをアクティブ化しています。ソフトウェアデバイス(ブリッジなど)の場合、プロファイルをアクティブにすると、NetworkManagerが自動的にデバイスを作成します。

AddAndActivateは、(場合によっては)nmcli device connectおよびnmcli device wifi connectによって呼び出されます。これは、2つのステップを1つで実行し、1つの追加の処理を実行するという点で異なります。ユーザーは、NetworkManagerが追加する前に入力を試みる不完全な接続プロファイルを渡す可能性があります。したがって、これはAddConnection + Activate connectionだけではありません。通常、それはあなたが望むものではありません。最良の例は、Wi-FiプロファイルでSSIDのみを指定し、AddAndActivateがWi-Fiスキャン結果に基づいて追加の設定を自動的に入力することです。 AddConnection APIを使用すると、プロファイルは呼び出し元によって完全に決定され、デバイス(またはWi-Fiアクセスポイント)に関係なく、デフォルト設定でのみ完了します。

D-Busのデバイス引数はオプションです。少なくともActivateConnection APIの場合。その場合、NetworkManagerは適切なデバイスを自動的に検索または作成します。また、接続プロファイル引数はオプションである場合があります(代わりにデバイスのみを提供する場合)。

はい、ほとんどのNetworkmanagerクライアントツールは、nmcliを含め、同じ基礎となるD-Bus APIを使用します。これにより、他のアプリケーションと同じように動作する独自のアプリケーションを作成して、それらのツールと統合することができます。 D-Busをラップするglibベースのライブラリであるlibnmもあり、いくつかのクライアントアプリケーションは、D-Busを直接話す代わりにそれを使用します。

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/tree/ce59e749fbc99152d379b22563d6fd3295c7085a/examples にある例も参照してください

Networkmanager APIは、すべてプロファイル(接続)の作成とアクティブ化に関するものです。

1
thaller