W systemie Linux, używając C, w jaki sposób znaleźć nazwę urządzenia mostkowego, do którego jest podłączony mój interfejs Ethernet? Czy jest potrzeba wykonania sekwencji ioctl()
, aby znaleźć główne urządzenie mostkowe?Jak mogę znaleźć nazwę urządzenia mostkowego dla mojego adaptera z zaczepem w C?
Mój program C zna nazwę urządzenia mojego adaptera TAP z pliku konfiguracyjnego (w tym przypadku tap0
). Ostatecznie potrzebuję adresu IP, na który odpowiada mój adapter TAP. Ponieważ jest zmostkowany, adapter TAP nie ma adresu IP; to jest urządzenie bridge
, które ma adres IP.
Mam urządzenie TAP i urządzenie VETH połączone razem. ip a
zawiera następujące informacje:
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
pamiętać, że tap0
i veth0
wprowadzane: każdy z ich mostka nadrzędnego jest br0
(czyli mają mostek master br0
).
Kiedy zadzwonić ioctl(SIOCGIFFLAGS)
, a następnie ioctl(SIOCGIFPFLAGS)
gdy ifr_name
jest tap0
jedynymi flagi które są ustawione są IFF_UP
i IFF_BROADCAST
. Nie mam pojęcia, dokąd się udać.
Można parsować wyjście 'brctl show' – stark
@stark To mniej pożądane niż parsowanie' ip a'. Wymaga to zainstalowania pakietu 'bridge-utils'. Wszystkie pomosty zostały skonfigurowane tylko przy użyciu pakietu 'iproute2'. – scottbb
Możesz spróbować użyć 'strace' na' ip a' i zobaczyć, co robi. –