summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev.c15
-rw-r--r--dev.h1
-rw-r--r--mac80211.c4
3 files changed, 17 insertions, 3 deletions
diff --git a/dev.c b/dev.c
index b3249e6..45659a8 100644
--- a/dev.c
+++ b/dev.c
@@ -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;
diff --git a/dev.h b/dev.h
index 2d5f056..adb1c43 100644
--- a/dev.h
+++ b/dev.h
@@ -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);
diff --git a/mac80211.c b/mac80211.c
index c089574..09f15b7 100644
--- a/mac80211.c
+++ b/mac80211.c
@@ -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);