wifi: don't query nl80211 for non-WiFi devices (bgo #740131)

The upstream kernel added module aliases for nl80211 in commit
fb4e156886ce6e8309e912d8b370d192330d19d3, so querying nl80211
now auto-loads the module.  Previously NM was doing this to
determine whether an ethernet-like device was a Wi-Fi device
that supported nl80211, but this leads to the nl80211 loading
on platforms that will never have or use Wi-Fi.

Since every nl80211-capable device will already have
DEVTYPE=wlan set (from /sys/class/net/wlan0/uevent), we can use
that as an indicator that the ethernet-like device is WiFi
instead of asking nl80211.

https://bugzilla.gnome.org/show_bug.cgi?id=740131
This commit is contained in:
Dan Williams
2014-11-14 11:05:16 -06:00
parent eeb4306111
commit 45bfb653f3
5 changed files with 10 additions and 53 deletions

View File

@@ -162,13 +162,20 @@ wifi_utils_deinit (WifiData *data)
}
gboolean
wifi_utils_is_wifi (const char *iface, const char *sysfs_path)
wifi_utils_is_wifi (const char *iface, const char *sysfs_path, const char *devtype)
{
char phy80211_path[255];
struct stat s;
g_return_val_if_fail (iface != NULL, FALSE);
if (g_strcmp0 (devtype, "wlan") == 0) {
/* All Wi-Fi drivers should set DEVTYPE=wlan. Since the kernel's
* cfg80211/nl80211 stack does, this check should match any nl80211
* capable driver (including mac82011-based ones). */
return TRUE;
}
if (sysfs_path) {
/* Check for nl80211 sysfs paths */
g_snprintf (phy80211_path, sizeof (phy80211_path), "%s/phy80211", sysfs_path);
@@ -176,9 +183,6 @@ wifi_utils_is_wifi (const char *iface, const char *sysfs_path)
return TRUE;
}
if (wifi_nl80211_is_wifi (iface))
return TRUE;
#if HAVE_WEXT
if (wifi_wext_is_wifi (iface))
return TRUE;