Search Linux Wireless

Re: [RFC] make wext wireless bits optional and deprecate them

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[removing linux-kernel and netdev from CC, I suppose they won't care too
much about these details]

On Mon, 2008-05-19 at 14:18 +0200, Johannes Berg wrote:
> > Instead of testing for wireless/, best thing would probably be to call
> > SIOCGIWRANGE on the device and if it returns EOPNOTSUP then it's not
> > wireless.  Some drivers may have to load firmware to figure out
> > supported rates and encryption capabilities, but to be honest, NM does
> > this to detect wireless devices and I haven't run into any issues in 4
> > years using it.  If there are issues with drivers, then we need to fix
> > the driver too.
> 
> I was about to propose calling SIOCGIWNAME since that is what
> wireless-tools do and that linux/wireless.h indicates.

Here's a patch, comments?

johannes

---
 hald/linux/device.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

--- hal.orig/hald/linux/device.c	2008-05-19 06:46:23.000000000 +0200
+++ hal/hald/linux/device.c	2008-05-19 06:55:25.000000000 +0200
@@ -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, IFNAMSIZ, ifname);
 
 		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");


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux