aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'hal-0.5.11-patches/0002-use-wext-ioctl-instead-of-sysfs-to-detect-wireless.patch')
-rw-r--r--hal-0.5.11-patches/0002-use-wext-ioctl-instead-of-sysfs-to-detect-wireless.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/hal-0.5.11-patches/0002-use-wext-ioctl-instead-of-sysfs-to-detect-wireless.patch b/hal-0.5.11-patches/0002-use-wext-ioctl-instead-of-sysfs-to-detect-wireless.patch
new file mode 100644
index 00000000..307139b6
--- /dev/null
+++ b/hal-0.5.11-patches/0002-use-wext-ioctl-instead-of-sysfs-to-detect-wireless.patch
@@ -0,0 +1,72 @@
+From 32b8adc895fa4cf76cb4fc4c4eed3f39aaa72654 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes@sipsolutions.net>
+Date: Fri, 23 May 2008 17:31:51 +0200
+Subject: [PATCH 02/48] 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.
+---
+ hald/linux/device.c | 16 ++++++++++++----
+ 1 files changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/hald/linux/device.c b/hald/linux/device.c
+index 596e113..cf884e1 100644
+--- 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 gchar *device_file, HalDevice *parent_de
+ 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 gchar *device_file, HalDevice *parent_de
+ }
+
+ 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 gchar *device_file, HalDevice *parent_de
+ 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 gchar *device_file, HalDevice *parent_de
+ 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");
+--
+1.6.1.2
+