diff options
-rw-r--r-- | dev.c | 15 | ||||
-rw-r--r-- | dev.h | 1 | ||||
-rw-r--r-- | mac80211.c | 4 |
3 files changed, 17 insertions, 3 deletions
@@ -13,7 +13,7 @@ #include "link.h" #include "built_in.h" -int device_ifindex(const char *ifname) +int device_ifindex_get(const char *ifname) { int ret, sock, index; struct ifreq ifr; @@ -27,8 +27,8 @@ int device_ifindex(const char *ifname) strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ret = ioctl(sock, SIOCGIFINDEX, &ifr); - if (unlikely(ret)) - panic("Cannot get ifindex from device!\n"); + if (ret) + return -1; index = ifr.ifr_ifindex; close(sock); @@ -36,6 +36,15 @@ int device_ifindex(const char *ifname) return index; } +int device_ifindex(const char *ifname) +{ + int index = device_ifindex_get(ifname); + if (unlikely(index <= 0)) + panic("Cannot get ifindex from device!\n"); + + return index; +} + int device_type(const char *ifname) { int ret, sock, type; @@ -7,6 +7,7 @@ extern size_t device_mtu(const char *ifname); extern int device_address(const char *ifname, int af, struct sockaddr_storage *ss); extern int device_ifindex(const char *ifname); +extern int device_ifindex_get(const char *ifname); extern int device_type(const char *ifname); extern short device_get_flags(const char *ifname); extern void device_set_flags(const char *ifname, const short flags); @@ -226,6 +226,10 @@ void enter_rfmon_mac80211(const char *device, char **mondev) char mondevice[32]; slprintf(mondevice, sizeof(mondevice), "mon%u", n); + + if (device_ifindex_get(mondevice) > 0) + continue; + ret = nl80211_add_mon_if(&nlstate, device, mondevice); if (ret == 0) { *mondev = xstrdup(mondevice); |