2016-03-22 8 views
6

Linuxでは、Cを使用して、私のイーサネットインターフェイスが接続されているブリッジデバイスの名前を見つける方法はありますか?マスターブリッジデバイスを見つけるために必要なコールはioctl()コールのシーケンスですか?Cでタップアダプタのブリッジデバイス名を見つける方法はありますか?

私のCプログラムでは、(この場合は、tap0)コンフィギュレーションファイルから私のTAPアダプタのデバイス名を知っています。最終的には、私のTAPアダプターが応答するIPアドレスが必要です。ブリッジされているため、TAPアダプターにはIPアドレスがありません。 IPアドレスを持つデバイスはbridgeです。

私は一緒にブリッジTAPデバイスとVETHデバイスを持っています。 ip aは、以下を示す:

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
2: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 500 
    link/ether 22:d4:fa:a4:89:81 brd ff:ff:ff:ff:ff:ff 
3: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 22:8c:ee:b8:e3:30 brd ff:ff:ff:ff:ff:ff 
    inet 10.20.30.40/24 scope global br0 
     valid_lft forever preferred_lft forever 
45: veth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000 
    link/ether 22:8c:ee:b8:e3:30 brd ff:ff:ff:ff:ff:ff 

tap0veth0エントリ:そのブリッジマスターの各々(すなわち、それらはブリッジmaster br0を有する)br0あります。

私はioctl(SIOCGIFFLAGS)を呼び出し

、その後 ioctl(SIOCGIFPFLAGS) ifr_nametap0で、設定されている唯一のフラグは IFF_UPIFF_BROADCASTです。私はここからどこへ行くのか迷っている。

+0

あなたは 'のIP A'を解析するよりも望ましくだ' brctlのshow' – stark

+0

@starkの出力を解析することができます。そのため、 'bridge-utils'パッケージがインストールされている必要があります。すべてのブリッジングは、 'iproute2'スイートだけを使って設定されていました。 – scottbb

+2

あなたは 'ip a'で' strace'を試してみて、それが何をしているのか見ることができます。まだ –

答えて

1

のiputilsと友人は、カーネルとユーザー空間の間rtnetlink APIを使用します(POSIXソケットAPIは、すべての必要なタスクを実行するだけでは狭すぎるではありません、との通知を追加するクリーンな方法)。あなたのプロジェクトが小さければ、おそらくipユーティリティからの出力を解析する方が簡単で速くなるでしょう。これは、組込みLinuxプロジェクト用のネットワーク構成デーモンを作成した経験からのものです。 rtnetlink APIは、最初に使用するトリッキーですが、あなたは本当に(正確にする必要があり、多くのポインタとサイズ参照)が、その上に少し研究をしたいと出発点としてのiputilsソースを使用している場合。

関連する問題