From a7af023b84bd2bd8f3bd1f91db7fab83b58d6539 Mon Sep 17 00:00:00 2001 From: Daniel Kurtz Date: Sat, 9 Oct 2010 16:22:39 +0300 Subject: [PATCH] dbus: Fix passive/active scans in some cases Currently the DBus Interface.Scan API is counter-intuitive. It issues ProbeRequests when doing passive scans when channels are specified, and does not issue ProbeRequests for broadcast active scans. This patch updates DBus API .Scan() logic per the test cases listed below: 1) Interface.Scan({'Type':'passive'}) Request: Passive scan (all channels) Should be: No ProbeRequests; Passive Scan results for all channels Previous: 1 ProbeRequest on all channels for both broadcast SSID and selected network (scan_ssid=1) This Patch: --No change--: 1 ProbeRequest on all channels for both broadcast SSID and selected network (scan_ssid=1) 2) Interface.Scan({'Type':'passive', 'Channel':(2412, 20)}) Request: Passive scan (1 channel) Should be: No ProbeRequests; Passive Scan results for 1 channel (plus overlapping channels) Previous: 1 broadcast ProbeRequest on specified channel This Patch: --Fixed--: No ProbeRequests; Passive Scan results for 1 channel (plus overlapping channels) 3) Interface.Scan({'Type':'active'}) Request: Active scan with no SSIDs (all channels) Should be: 1 broadcast ProbeRequest on all channels Previous: No ProbeRequests; passive scan results for all channels This Patch: --Fixed--: 1 broadcast ProbeRequest on all channels 4) Interface.Scan({'Type':'active', 'Channel':(2412, 20)}) Request: Active scan with no SSIDs (1 channel) Should be: 1 broadcast ProbeRequest on specified channel Previous: No ProbeRequests; Passive scan results for specified channel (plus overlapping channels) This Patch: --Fixed--: 1 broadcast ProbeRequest on specified channel --- wpa_supplicant/dbus/dbus_new_handlers.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index e2b5e50dd..da39fa165 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -1260,14 +1260,16 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message, "passive scan"); goto out; } else if (params.freqs && params.freqs[0]) { - /* wildcard ssid */ - params.num_ssids++; wpa_supplicant_trigger_scan(wpa_s, ¶ms); } else { wpa_s->scan_req = 2; wpa_supplicant_req_scan(wpa_s, 0, 0); } } else if (!os_strcmp(type, "active")) { + if (!params.num_ssids) { + /* Add wildcard ssid */ + params.num_ssids++; + } wpa_supplicant_trigger_scan(wpa_s, ¶ms); } else { wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "