mirror of
https://git.freebsd.org/ports.git
synced 2025-06-24 06:00:30 -04:00
56 lines
1.3 KiB
C
56 lines
1.3 KiB
C
--- src/backend.c.orig Wed May 3 02:41:00 2006
|
|
+++ src/backend.c Wed May 3 03:03:09 2006
|
|
@@ -20,6 +20,7 @@
|
|
#include <config.h>
|
|
#include <glibtop/netlist.h>
|
|
#include <glibtop/netload.h>
|
|
+#include <net/if_media.h>
|
|
#include "backend.h"
|
|
|
|
/* Check for all available devices. This really should be
|
|
@@ -131,7 +132,7 @@
|
|
|
|
g_strlcpy(request.ifr_name, devinfo->name, sizeof request.ifr_name);
|
|
|
|
- if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
|
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
|
goto out;
|
|
|
|
if (ioctl(fd, SIOCGIFFLAGS, &request) == -1)
|
|
@@ -148,16 +149,20 @@
|
|
}
|
|
}
|
|
|
|
+ if (devinfo->type == DEV_UNKNOWN) {
|
|
+ struct ifmediareq ifmr;
|
|
|
|
- if (ioctl(fd, SIOCGIWNAME, &request) >= 0) {
|
|
- devinfo->type = DEV_WIRELESS;
|
|
- }
|
|
+ memset(&ifmr, 0, sizeof(ifmr));
|
|
+ g_strlcpy(ifmr.ifm_name, devinfo->name, sizeof(ifmr.ifm_name));
|
|
|
|
- if (ioctl(fd, SIOCGIWENCODE, &request) >= 0) {
|
|
- g_assert_not_reached();
|
|
+ if (ioctl(fd, SIOCGIFMEDIA, &ifmr) >= 0) {
|
|
+ switch (IFM_TYPE(ifmr.ifm_current)) {
|
|
+ case IFM_ETHER: devinfo->type = DEV_ETHERNET; break;
|
|
+ case IFM_IEEE80211: devinfo->type = DEV_WIRELESS; break;
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
-
|
|
out:
|
|
if(fd != -1)
|
|
close(fd);
|
|
@@ -210,9 +215,6 @@
|
|
else {
|
|
devinfo.type = DEV_PPP;
|
|
}
|
|
- }
|
|
- else if (g_str_has_prefix(device, "eth")) {
|
|
- devinfo.type = DEV_ETHERNET;
|
|
}
|
|
|
|
get_additional_info(&devinfo);
|