static int interface_driver_is(const char* intf_name, const char* driver_name) { /* Return true if the net driver that underlies this device is the one * named. i.e. If the interface is an IP alias or VLAN interface, then * we look at the underlying interface. */ char intf_base_name[IF_NAMESIZE]; interface_get_basename(intf_name, intf_base_name); return interface_is(intf_base_name, driver_name); }
static int interface_to_ifindex(const char* intf_name) { struct ifreq ifr; int rc, sock; interface_get_basename(intf_name, ifr.ifr_name); CI_TRY(sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)); rc = ioctl(sock, SIOCGIFINDEX, &ifr); close(sock); if( rc == 0 ) return ifr.ifr_ifindex; else return rc; }
static int interface_to_ifindex(const char* intf_name) { struct ifreq ifr; int rc, sock; interface_get_basename(intf_name, ifr.ifr_name); if( (sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ) { E(fprintf(stderr, LPF "%s: ERROR: socket() failed (%d, %s)\n", __FUNCTION__, errno, strerror(errno))); return sock; } rc = ioctl(sock, SIOCGIFINDEX, &ifr); close(sock); if( rc == 0 ) { return ifr.ifr_ifindex; } else { E(fprintf(stderr, LPF "%s: ERROR: ioctl(SIOCGIFINDEX) failed (%d, %s)\n", __FUNCTION__, errno, strerror(errno))); return rc; } }