How can I find the bridge device name for my tap adapter in C?

Viewed 1920

On Linux, using C, how can I find the find the name of the bridge device my ethernet interface is attached to? Is there a sequence of ioctl() calls I need to make to find the master bridge device?

My C program knows the device name of my TAP adapter from a configuration file (in this case, tap0). Ultimately, I need the IP address that my TAP adapter responds to. Because it is bridged, the TAP adapter does not have an IP address; it is the bridge device that has the IP address.

I have a TAP device and VETH device bridged together. ip a shows the following:

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

Note the tap0 and veth0 entries: each of their bridge master is br0 (i.e., they have bridge master br0).

When I call ioctl(SIOCGIFFLAGS), and subsequently ioctl(SIOCGIFPFLAGS) when ifr_name is tap0, the only flags that are set are IFF_UP and IFF_BROADCAST. I'm at a loss of where to go from here.

1 Answers
Related