Make iface_type() work on FreeBSD

This commit is contained in:
Gerome Fournier 2018-02-07 11:26:34 +01:00
parent e23eea9438
commit 9212ee658b

View File

@ -14,10 +14,10 @@
#include "i3status.h"
#ifdef __linux__
#define LOOPBACK_DEV "lo"
#else
#ifdef __OpenBSD__
#define LOOPBACK_DEV "lo0"
#else
#define LOOPBACK_DEV "lo"
#endif
static bool sysfs_devtype(char *dest, size_t n, const char *ifnam) {
@ -67,24 +67,7 @@ static bool is_virtual(const char *ifname) {
}
static net_type_t iface_type(const char *ifname) {
#ifdef __linux__
char devtype[32];
if (!sysfs_devtype(devtype, sizeof(devtype), ifname))
return NET_TYPE_OTHER;
/* Default to Ethernet when no devtype is available */
if (!devtype[0])
return NET_TYPE_ETHERNET;
if (strcmp(devtype, "wlan") == 0)
return NET_TYPE_WIRELESS;
if (strcmp(devtype, "wwan") == 0)
return NET_TYPE_OTHER;
return NET_TYPE_OTHER;
#elif __OpenBSD__
#ifdef __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
@ -127,7 +110,22 @@ static net_type_t iface_type(const char *ifname) {
return NET_TYPE_ETHERNET;
}
#else
#error Missing implementation to determine interface type.
char devtype[32];
if (!sysfs_devtype(devtype, sizeof(devtype), ifname))
return NET_TYPE_OTHER;
/* Default to Ethernet when no devtype is available */
if (!devtype[0])
return NET_TYPE_ETHERNET;
if (strcmp(devtype, "wlan") == 0)
return NET_TYPE_WIRELESS;
if (strcmp(devtype, "wwan") == 0)
return NET_TYPE_OTHER;
return NET_TYPE_OTHER;
#endif
}