diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-04-17 22:04:21 +0300 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-04-20 09:31:43 +0200 |
commit | f43bbe9e895a05a71ebfa5fb676f068621bd5014 (patch) | |
tree | fe2be9b9c87e5bec73deb60bdfb9c9205a492a27 | |
parent | 47a7037955bfa7405a0a676f214c26d136b8ca9a (diff) |
mac80211: Check existence of generated monX device
Fix then case when netsniff-ng fails if there is already an existing
monX device while generating one.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-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); |