From 3c52e383f9220c0824498b07e9aa72537d6f6033 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 6 Nov 2013 19:29:50 +0100 Subject: [PATCH] wifi: always assume can_scan_ssid and use ap_scan=1 for infra mode We should use ap_scan=1 *except* for AP/IBSS/AdHoc, where ap_scan=2 is required. ap_scan for "infra" mode is all historical and was for old, crappy, and proprietary drivers that we should really stop hacking stuff for. Those drivers did not support probe-scanning for hidden APs and thus the supplicant just had to send all the config to the driver and hope things worked. All relevant and non-crappy drivers these days support at least one SSID probe and thus is_broadcast affecting ap_scan should no longer be something we support. If you have an old, crappy WEXT/proprietary/staging driver, and you use hidden APs, you're doing it wrong. So, in short, we must keep the ap_scan=2 logic for AP+AdHoc, but we can remove the is_broadcast and has_scan_capa_ssid arguments and the code where they change ap_scan. https://bugzilla.redhat.com/show_bug.cgi?id=1025371#c18 Signed-off-by: Thomas Haller --- src/devices/nm-device-wifi.c | 8 +++----- src/supplicant-manager/nm-supplicant-config.c | 12 +++--------- src/supplicant-manager/nm-supplicant-config.h | 4 +--- .../tests/test-supplicant-config.c | 6 +++--- src/wifi/wifi-utils-nl80211.c | 1 - src/wifi/wifi-utils-private.h | 1 - src/wifi/wifi-utils-wext.c | 1 - src/wifi/wifi-utils.c | 7 ------- src/wifi/wifi-utils.h | 2 -- 9 files changed, 10 insertions(+), 32 deletions(-) diff --git a/src/devices/nm-device-wifi.c b/src/devices/nm-device-wifi.c index fbf9d81b9d..47da9dd78d 100644 --- a/src/devices/nm-device-wifi.c +++ b/src/devices/nm-device-wifi.c @@ -2650,7 +2650,7 @@ remove_supplicant_timeouts (NMDeviceWifi *self) static NMSupplicantConfig * build_supplicant_config (NMDeviceWifi *self, NMConnection *connection, - NMAccessPoint *ap) + guint32 fixed_freq) { NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); NMSupplicantConfig *config = NULL; @@ -2674,9 +2674,7 @@ build_supplicant_config (NMDeviceWifi *self, if (!nm_supplicant_config_add_setting_wireless (config, s_wireless, - nm_ap_get_broadcast (ap), - nm_ap_get_freq (ap), - wifi_utils_can_scan_ssid (priv->wifi_data))) { + fixed_freq)) { nm_log_err (LOGD_WIFI, "Couldn't add 802-11-wireless setting to supplicant config."); goto error; } @@ -2973,7 +2971,7 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason) ensure_hotspot_frequency (self, s_wireless, ap); /* Build up the supplicant configuration */ - config = build_supplicant_config (self, connection, ap); + config = build_supplicant_config (self, connection, nm_ap_get_freq (ap)); if (config == NULL) { nm_log_err (LOGD_DEVICE | LOGD_WIFI, "Activation (%s/wireless): couldn't build wireless configuration.", diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c index 229f5e0025..6b36685bc1 100644 --- a/src/supplicant-manager/nm-supplicant-config.c +++ b/src/supplicant-manager/nm-supplicant-config.c @@ -334,9 +334,7 @@ nm_supplicant_config_get_blobs (NMSupplicantConfig * self) gboolean nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self, NMSettingWireless * setting, - gboolean is_broadcast, - guint32 fixed_freq, - gboolean has_scan_capa_ssid) + guint32 fixed_freq) { NMSupplicantConfigPrivate *priv; gboolean is_adhoc, is_ap; @@ -353,12 +351,8 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self, is_ap = (mode && !strcmp (mode, "ap")) ? TRUE : FALSE; if (is_adhoc || is_ap) priv->ap_scan = 2; - else if (is_broadcast == FALSE) { - /* drivers that support scanning specific SSIDs should use - * ap_scan=1, while those that do not should use ap_scan=2. - */ - priv->ap_scan = has_scan_capa_ssid ? 1 : 2; - } + else + priv->ap_scan = 1; id = nm_setting_wireless_get_ssid (setting); if (!nm_supplicant_config_add_option (self, "ssid", (char *) id->data, id->len, FALSE)) { diff --git a/src/supplicant-manager/nm-supplicant-config.h b/src/supplicant-manager/nm-supplicant-config.h index a8d304709a..75d6b779ff 100644 --- a/src/supplicant-manager/nm-supplicant-config.h +++ b/src/supplicant-manager/nm-supplicant-config.h @@ -65,9 +65,7 @@ GHashTable *nm_supplicant_config_get_blobs (NMSupplicantConfig *self); gboolean nm_supplicant_config_add_setting_wireless (NMSupplicantConfig *self, NMSettingWireless *setting, - gboolean is_broadcast, - guint32 adhoc_freq, - gboolean has_scan_capa_ssid); + guint32 fixed_freq); gboolean nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self, NMSettingWirelessSecurity *setting, diff --git a/src/supplicant-manager/tests/test-supplicant-config.c b/src/supplicant-manager/tests/test-supplicant-config.c index 95da39293d..458e1a1348 100644 --- a/src/supplicant-manager/tests/test-supplicant-config.c +++ b/src/supplicant-manager/tests/test-supplicant-config.c @@ -173,7 +173,7 @@ test_wifi_open (void) config = nm_supplicant_config_new (); - success = nm_supplicant_config_add_setting_wireless (config, s_wifi, TRUE, 0, TRUE); + success = nm_supplicant_config_add_setting_wireless (config, s_wifi, 0); ASSERT (success == TRUE, "wifi-open", "failed to add wireless setting to supplicant config."); @@ -272,7 +272,7 @@ test_wifi_wep_key (const char *detail, config = nm_supplicant_config_new (); - success = nm_supplicant_config_add_setting_wireless (config, s_wifi, TRUE, 0, TRUE); + success = nm_supplicant_config_add_setting_wireless (config, s_wifi, 0); ASSERT (success == TRUE, detail, "failed to add wireless setting to supplicant config."); @@ -405,7 +405,7 @@ test_wifi_wpa_psk (const char *detail, config = nm_supplicant_config_new (); - success = nm_supplicant_config_add_setting_wireless (config, s_wifi, TRUE, 0, TRUE); + success = nm_supplicant_config_add_setting_wireless (config, s_wifi, 0); ASSERT (success == TRUE, detail, "failed to add wireless setting to supplicant config."); diff --git a/src/wifi/wifi-utils-nl80211.c b/src/wifi/wifi-utils-nl80211.c index 5f65aef0e2..eb2534a22c 100644 --- a/src/wifi/wifi-utils-nl80211.c +++ b/src/wifi/wifi-utils-nl80211.c @@ -806,7 +806,6 @@ wifi_nl80211_init (const char *iface, int ifindex) nl80211->freqs = device_info.freqs; nl80211->num_freqs = device_info.num_freqs; - nl80211->parent.can_scan_ssid = device_info.can_scan_ssid; nl80211->parent.caps = device_info.caps; nm_log_info (LOGD_HW | LOGD_WIFI, diff --git a/src/wifi/wifi-utils-private.h b/src/wifi/wifi-utils-private.h index 83075090de..370f4fc0fd 100644 --- a/src/wifi/wifi-utils-private.h +++ b/src/wifi/wifi-utils-private.h @@ -30,7 +30,6 @@ struct WifiData { char *iface; int ifindex; NMDeviceWifiCapabilities caps; - gboolean can_scan_ssid; NM80211Mode (*get_mode) (WifiData *data); diff --git a/src/wifi/wifi-utils-wext.c b/src/wifi/wifi-utils-wext.c index 6e990aed76..5022550339 100644 --- a/src/wifi/wifi-utils-wext.c +++ b/src/wifi/wifi-utils-wext.c @@ -630,7 +630,6 @@ wifi_wext_init (const char *iface, int ifindex, gboolean check_scan) */ scan_capa_range = (struct iw_range_with_scan_capa *) ⦥ if (scan_capa_range->scan_capa & NM_IW_SCAN_CAPA_ESSID) { - wext->parent.can_scan_ssid = TRUE; nm_log_info (LOGD_HW | LOGD_WIFI, "(%s): driver supports SSID scans (scan_capa 0x%02X).", wext->parent.iface, diff --git a/src/wifi/wifi-utils.c b/src/wifi/wifi-utils.c index aa07a66089..b93cd40ea2 100644 --- a/src/wifi/wifi-utils.c +++ b/src/wifi/wifi-utils.c @@ -78,13 +78,6 @@ wifi_utils_get_caps (WifiData *data) return data->caps; } -gboolean -wifi_utils_can_scan_ssid (WifiData *data) -{ - g_return_val_if_fail (data != NULL, FALSE); - return data->can_scan_ssid; -} - NM80211Mode wifi_utils_get_mode (WifiData *data) { diff --git a/src/wifi/wifi-utils.h b/src/wifi/wifi-utils.h index 09583e7bd4..b917ef2f9d 100644 --- a/src/wifi/wifi-utils.h +++ b/src/wifi/wifi-utils.h @@ -37,8 +37,6 @@ void wifi_utils_deinit (WifiData *data); NMDeviceWifiCapabilities wifi_utils_get_caps (WifiData *data); -gboolean wifi_utils_can_scan_ssid (WifiData *data); - NM80211Mode wifi_utils_get_mode (WifiData *data); gboolean wifi_utils_set_mode (WifiData *data, const NM80211Mode mode);