How do you perform both Broadcast and directed scan over channels at the same time?<div>For example, when looking for a network to join, including some hidden SSIDs.</div><div><br></div><div>-Dan<br><br><div class="gmail_quote">

On Wed, Oct 6, 2010 at 11:06 PM, Dan Williams <span dir="ltr">&lt;<a href="mailto:dcbw@redhat.com">dcbw@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">On Wed, 2010-10-06 at 15:46 -0700, Daniel Kurtz wrote:<br>
&gt; This patch changes wpa_supplicant policy for handling &#39;&#39; in SSIDs field of Interface.SSID DBus message.<br>
&gt; It treats &#39;&#39; (zero-length) SSID as a request for a broadcast scan, instead of ignoring it.<br>
<br>
</div>Does not sending any SSIDs somehow not work?  This seems like a pretty<br>
big kludge.  The behavior should be that if no SSID property is sent,<br>
then no specific scan is performed.  A zero-length SSID should actually<br>
be rejected with an error.<br>
<font color="#888888"><br>
Dan<br>
</font><div><div></div><div class="h5"><br>
&gt; This patch updates DBus API .Scan() logic per the test cases listed below:<br>
&gt;<br>
&gt; 1) Interface.Scan({&#39;Type&#39;:&#39;active&#39;, &#39;Channel&#39;:(2412, 20)})<br>
&gt;    Request:     Active scan with only &#39;&#39; SSID (1 channel)<br>
&gt;    Should be:   1 broadcast ProbeRequest on specified channel<br>
&gt;    Previous:    1 broadcast ProbeRequest on specified channel<br>
&gt;    This Patch:  1 broadcast ProbeRequest on specified channel<br>
&gt;<br>
&gt; 2) Interface.Scan({&#39;Type&#39;:&#39;active&#39;, &#39;Channel&#39;:(2412, 20), &#39;SSIDs&#39;:[&#39;&#39;]})<br>
&gt;    Request:     Active scan with only &#39;&#39; SSID (1 channel)<br>
&gt;    Should be:   1 broadcast ProbeRequest on specified channel<br>
&gt;    Previous:    No ProbeRequests; passive scan results for specified channel<br>
&gt;    This Patch:  FIXED: 1 broadcast ProbeRequest on specified channel<br>
&gt;<br>
&gt; 3) Interface.Scan({&#39;Type&#39;:&#39;active&#39;, &#39;Channel&#39;:(2412, 20), &#39;SSIDs&#39;:[&#39;MySSID&#39;]})<br>
&gt;    Request:     Active scan with only non-&#39;&#39; SSIDs (1 channel)<br>
&gt;    Should be:   1 directed ProbeRequest for each SSID on specified channel, no broadcast ProbeRequest<br>
&gt;    Previous:    1 directed ProbeRequest for each SSID on specified channel, no broadcast ProbeRequest<br>
&gt;    This Patch:  1 directed ProbeRequest for each SSID on specified channel, no broadcast ProbeRequest<br>
&gt;<br>
&gt; 4) Interface.Scan({&#39;Type&#39;:&#39;active&#39;, &#39;Channel&#39;:(2412, 20), &#39;SSIDs&#39;:[&#39;&#39;, &#39;MySSID&#39;]})<br>
&gt;    Request:     Active scan with SSIDs, including 1 &#39;&#39; SSID (1 channel)<br>
&gt;    Should be:   1 broadcast ProbeRequest, 1 directed ProbeRequest for each non-&#39;&#39; SSID on specified channel<br>
&gt;    Previous:    1 directed ProbeRequest for each non-&#39;&#39; SSID on specified channel<br>
&gt;    This Patch:  FIXED: 1 broadcast ProbeRequest, 1 directed ProbeRequest for each non-&#39;&#39; SSID on specified channel<br>
&gt; ---<br>
&gt;  wpa_supplicant/dbus/dbus_new_handlers.c |   30 +++++++++++++++++-------------<br>
&gt;  1 files changed, 17 insertions(+), 13 deletions(-)<br>
&gt;<br>
&gt; diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c<br>
&gt; index e2b5e50..36eb917 100644<br>
&gt; --- a/wpa_supplicant/dbus/dbus_new_handlers.c<br>
&gt; +++ b/wpa_supplicant/dbus/dbus_new_handlers.c<br>
&gt; @@ -987,21 +987,25 @@ static int wpas_dbus_get_scan_ssids(DBusMessage *message, DBusMessageIter *var,<br>
&gt;               dbus_message_iter_recurse(&amp;array_iter, &amp;sub_array_iter);<br>
&gt;<br>
&gt;               dbus_message_iter_get_fixed_array(&amp;sub_array_iter, &amp;val, &amp;len);<br>
&gt; -             if (len == 0) {<br>
&gt; -                     dbus_message_iter_next(&amp;array_iter);<br>
&gt; -                     continue;<br>
&gt; -             }<br>
&gt;<br>
&gt; -             ssid = os_malloc(len);<br>
&gt; -             if (ssid == NULL) {<br>
&gt; -                     wpa_printf(MSG_DEBUG, &quot;wpas_dbus_handler_scan[dbus]: &quot;<br>
&gt; -                                &quot;out of memory. Cannot allocate memory for &quot;<br>
&gt; -                                &quot;SSID&quot;);<br>
&gt; -                     *reply = dbus_message_new_error(<br>
&gt; -                             message, DBUS_ERROR_NO_MEMORY, NULL);<br>
&gt; -                     return -1;<br>
&gt; +             if (len != 0) {<br>
&gt; +                     ssid = os_malloc(len);<br>
&gt; +                     if (ssid == NULL) {<br>
&gt; +                             wpa_printf(MSG_DEBUG,<br>
&gt; +                                        &quot;wpas_dbus_handler_scan[dbus]: &quot;<br>
&gt; +                                        &quot;out of memory. Cannot allocate &quot;<br>
&gt; +                                        &quot;memory for SSID&quot;);<br>
&gt; +                             *reply = dbus_message_new_error(<br>
&gt; +                                             message, DBUS_ERROR_NO_MEMORY,<br>
&gt; +                                             NULL);<br>
&gt; +                             return -1;<br>
&gt; +                     }<br>
&gt; +                     os_memcpy(ssid, val, len);<br>
&gt; +             } else {<br>
&gt; +                     /* Allow zero-length SSIDs */<br>
&gt; +                     ssid = NULL;<br>
&gt;               }<br>
&gt; -             os_memcpy(ssid, val, len);<br>
&gt; +<br>
&gt;               ssids[ssids_num].ssid = ssid;<br>
&gt;               ssids[ssids_num].ssid_len = len;<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br></div>