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
注tap0
とveth0
エントリ:そのブリッジマスターの各々(すなわち、それらはブリッジmaster br0
を有する)br0
あります。
私はioctl(SIOCGIFFLAGS)
を呼び出し
ioctl(SIOCGIFPFLAGS)
ifr_name
が
tap0
で、設定されている唯一のフラグは
IFF_UP
と
IFF_BROADCAST
です。私はここからどこへ行くのか迷っている。
あなたは 'のIP A'を解析するよりも望ましくだ' brctlのshow' – stark
@starkの出力を解析することができます。そのため、 'bridge-utils'パッケージがインストールされている必要があります。すべてのブリッジングは、 'iproute2'スイートだけを使って設定されていました。 – scottbb
あなたは 'ip a'で' strace'を試してみて、それが何をしているのか見ることができます。まだ –