1a418dabaf
git-svn-id: http://svn.sabayonlinux.org/overlay@2627 d7aec97c-591d-0410-af39-a8856400b30a
69 lines
2.6 KiB
SYSTEMD
69 lines
2.6 KiB
SYSTEMD
From: Johannes Berg <johannes@sipsolutions.net>
|
|
Date: Fri, 23 May 2008 15:31:51 +0000 (+0200)
|
|
Subject: use wext ioctl instead of sysfs to detect wireless
|
|
X-Git-Url: http://gitweb.freedesktop.org/?p=hal.git;a=commitdiff;h=41073645ea95e0bb478d6b26871a1bc4ccf832d1
|
|
|
|
use wext ioctl instead of sysfs to detect wireless
|
|
|
|
The canonical way to check whether a network interface has wireless
|
|
extensions is to try calling the SIOCGIWNAME ioctl on it.
|
|
---
|
|
|
|
--- a/hald/linux/device.c
|
|
+++ b/hald/linux/device.c
|
|
@@ -45,6 +45,10 @@
|
|
#include <linux/input.h>
|
|
#endif
|
|
|
|
+/* for wireless extensions */
|
|
+#include <linux/if.h>
|
|
+#include <linux/wireless.h>
|
|
+
|
|
#include <dbus/dbus.h>
|
|
#include <dbus/dbus-glib.h>
|
|
|
|
@@ -532,10 +536,14 @@ net_add (const gchar *sysfs_path, const
|
|
const char *addr;
|
|
const char *parent_subsys;
|
|
char bridge_path[HAL_PATH_MAX];
|
|
- char wireless_path[HAL_PATH_MAX];
|
|
char phy80211_path[HAL_PATH_MAX];
|
|
struct stat s;
|
|
dbus_uint64_t mac_address = 0;
|
|
+ int ioctl_fd;
|
|
+ struct iwreq iwr;
|
|
+
|
|
+ ioctl_fd = socket (PF_INET, SOCK_DGRAM, 0);
|
|
+ strncpy (iwr.ifr_ifrn.ifrn_name, ifname, IFNAMSIZ);
|
|
|
|
addr = hal_device_property_get_string (d, "net.address");
|
|
if (addr != NULL) {
|
|
@@ -554,8 +562,6 @@ net_add (const gchar *sysfs_path, const
|
|
}
|
|
|
|
snprintf (bridge_path, HAL_PATH_MAX, "%s/bridge", sysfs_path);
|
|
- /* wireless extensions */
|
|
- snprintf (wireless_path, HAL_PATH_MAX, "%s/wireless", sysfs_path);
|
|
/* cfg80211 */
|
|
snprintf (phy80211_path, HAL_PATH_MAX, "%s/phy80211", sysfs_path);
|
|
parent_subsys = hal_device_property_get_string (parent_dev, "info.subsystem");
|
|
@@ -565,7 +571,7 @@ net_add (const gchar *sysfs_path, const
|
|
hal_device_property_set_string (d, "info.category", "net.bluetooth");
|
|
hal_device_add_capability (d, "net.bluetooth");
|
|
hal_device_property_set_uint64 (d, "net.bluetooth.mac_address", mac_address);
|
|
- } else if ((stat (wireless_path, &s) == 0 && (s.st_mode & S_IFDIR)) ||
|
|
+ } else if ((ioctl (ioctl_fd, SIOCGIWNAME, &iwr) == 0) ||
|
|
(stat (phy80211_path, &s) == 0 && (s.st_mode & S_IFDIR))) {
|
|
hal_device_property_set_string (d, "info.product", "WLAN Interface");
|
|
hal_device_property_set_string (d, "info.category", "net.80211");
|
|
@@ -582,6 +588,8 @@ net_add (const gchar *sysfs_path, const
|
|
hal_device_add_capability (d, "net.80203");
|
|
hal_device_property_set_uint64 (d, "net.80203.mac_address", mac_address);
|
|
}
|
|
+
|
|
+ close (ioctl_fd);
|
|
} else if (media_type == ARPHRD_IRDA) {
|
|
hal_device_property_set_string (d, "info.product", "Networking Interface");
|
|
hal_device_property_set_string (d, "info.category", "net.irda");
|
|
|