X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ffirst_network_device.c;h=3d06217fdde789eb40c3309e732e3c3b735fdfc1;hb=0f4fbf70afc607e2dcb14ef8292911042490d1dc;hp=b930f5357a709e803c635b499132b6cd160a5cb1;hpb=4345fa9d9715a912c55828565783311e3fab4f0f;p=i3%2Fi3status diff --git a/src/first_network_device.c b/src/first_network_device.c index b930f53..3d06217 100644 --- a/src/first_network_device.c +++ b/src/first_network_device.c @@ -1,15 +1,20 @@ // vim:ts=4:sw=4:expandtab +#include #include #include #include #include -#ifdef __OpenBSD__ +#if defined(__OpenBSD__) || defined(__DragonFly__) #include #include #include #include +#endif +#if defined(__OpenBSD__) #include #include +#elif defined(__DragonFly__) +#include #endif #include "i3status.h" @@ -67,7 +72,7 @@ static bool is_virtual(const char *ifname) { } static net_type_t iface_type(const char *ifname) { -#ifdef __OpenBSD__ +#if defined(__OpenBSD__) /* *First determine if the device is a wireless device by trying two ioctl(2) * commands against it. If either succeeds we can be sure it's a wireless @@ -78,14 +83,23 @@ static net_type_t iface_type(const char *ifname) { struct ifreq ifr; struct ieee80211_bssid bssid; struct ieee80211_nwid nwid; +#elif defined(__DragonFly__) + struct ieee80211req ifr; +#endif +#if defined(__OpenBSD__) || defined(__DragonFly__) struct ifmediareq ifmr; - - int s, ibssid, inwid; - + int s; +#endif +#if defined(__OpenBSD__) + int ibssid, inwid; +#endif +#if defined(__OpenBSD__) || defined(__DragonFly__) if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1) return NET_TYPE_OTHER; memset(&ifr, 0, sizeof(ifr)); +#endif +#if defined(__OpenBSD__) ifr.ifr_data = (caddr_t)&nwid; (void)strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); inwid = ioctl(s, SIOCG80211NWID, (caddr_t)&ifr); @@ -98,7 +112,15 @@ static net_type_t iface_type(const char *ifname) { close(s); return NET_TYPE_WIRELESS; } - +#elif defined(__DragonFly__) + (void)strlcpy(ifr.i_name, ifname, sizeof(ifr.i_name)); + ifr.i_type = IEEE80211_IOC_NUMSSIDS; + if (ioctl(s, SIOCG80211, &ifr) == 0) { + close(s); + return NET_TYPE_WIRELESS; + } +#endif +#if defined(__OpenBSD__) || defined(__DragonFly__) (void)memset(&ifmr, 0, sizeof(ifmr)); (void)strlcpy(ifmr.ifm_name, ifname, sizeof(ifmr.ifm_name));