OSDN Git Service

Hackishly port szym's ad-hoc patch to work with my Xoom. gingerbread-x86
authorKelvie Wong <kelvie@ieee.org>
Wed, 13 Apr 2011 05:06:11 +0000 (22:06 -0700)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Fri, 5 Aug 2011 11:06:16 +0000 (19:06 +0800)
Taken from [1], I got rid of all of the #ifdefs to keep it clean; the (*)
prefix hack that he uses bugs up the UI a bit; you will see three entries
for your ad-hoc wireless point (and none of them will say remembered), but
at least it works until Google decides to add ad-hoc support.

[1]http://szym.net/android/adhoc-wpa-supp.html

Change-Id: I3f1845fa4a83b38348f0f07c63712962e26db1b6
Signed-off-by: Kelvie Wong <kelvie@ieee.org>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/events.c

index 101b867..04f12ef 100644 (file)
@@ -341,9 +341,14 @@ static int wpa_supplicant_ctrl_iface_status(struct wpa_supplicant *wpa_s,
                                        ssid_len = _res;
                                _ssid = ssid_buf;
                        }
-                       ret = os_snprintf(pos, end - pos, "ssid=%s\nid=%d\n",
-                                         wpa_ssid_txt(_ssid, ssid_len),
+                       if (ssid->mode == IEEE80211_MODE_IBSS)
+                               ret = os_snprintf(pos, end - pos, "ssid=%s%s\nid=%d\n",
+                                         "(*)", wpa_ssid_txt(_ssid, ssid_len),
                                          ssid->id);
+                       else
+                               ret = os_snprintf(pos, end - pos, "ssid=%s\nid=%d\n",
+                                                       wpa_ssid_txt(_ssid, ssid_len),
+                                                       ssid->id);
                        if (ret < 0 || ret >= end - pos)
                                return pos - buf;
                        pos += ret;
@@ -777,12 +782,7 @@ static int wpa_supplicant_ctrl_iface_scan_result(
                        return -1;
                pos += ret;
        }
-       if (res->caps & IEEE80211_CAP_IBSS) {
-               ret = os_snprintf(pos, end - pos, "[IBSS]");
-               if (ret < 0 || ret >= end - pos)
-                       return -1;
-               pos += ret;
-       }
+
     /* Just to make the fields line up nicely when printed */
        if (!ie && !ie2) {
                ret = os_snprintf(pos, end - pos, "\t");
@@ -791,8 +791,13 @@ static int wpa_supplicant_ctrl_iface_scan_result(
                pos += ret;
        }
        ie = wpa_scan_get_ie(res, WLAN_EID_SSID);
-       ret = os_snprintf(pos, end - pos, "\t%s",
-                         ie ? wpa_ssid_txt(ie + 2, ie[1]) : "");
+
+       if (res->caps & IEEE80211_CAP_IBSS)
+               ret = os_snprintf(pos, end - pos, "\t%s%s", "(*)",
+                          wpa_ssid_txt(ie + 2, ie[1]));
+       else
+            ret = os_snprintf(pos, end - pos, "\t%s",
+                              ie ? wpa_ssid_txt(ie + 2, ie[1]) : "");
        if (ret < 0 || ret >= end - pos)
                return -1;
        pos += ret;
@@ -1084,6 +1089,18 @@ static int wpa_supplicant_ctrl_iface_set_network(
                           "id=%d", id);
                return -1;
        }
+       if (os_strcmp(name, "ssid") == 0) {
+               // check prefix
+               if ((value[0] == '"') && (os_strncmp(value+1, "(*)", 3) == 0)) {
+                       if (wpa_config_set(ssid, "mode", "1", 0) < 0) {
+                               wpa_printf(MSG_DEBUG, "CTRL_IFACE: failed to set IBSS on '%s'",
+                                         value);
+                               return -1;
+                       }
+                       value += 3;
+                       value[0] = '"';
+               }
+       }
 
        if (wpa_config_set(ssid, name, value, 0) < 0) {
                wpa_printf(MSG_DEBUG, "CTRL_IFACE: Failed to set network "
index 77dca18..225e351 100644 (file)
@@ -578,7 +578,8 @@ wpa_supplicant_select_bss_non_wpa(struct wpa_supplicant *wpa_s,
                                continue;
                        }
 
-                       if (bss->caps & IEEE80211_CAP_IBSS) {
+                       if (bss->caps & IEEE80211_CAP_IBSS
+                               && ssid->mode != IEEE80211_MODE_IBSS) {
                                wpa_printf(MSG_DEBUG, "   skip - "
                                           "IBSS (adhoc) network");
                                continue;