]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/mac80211/mlme.c
Merge branch 'linus' into oprofile
[linux-2.6-omap-h63xx.git] / net / mac80211 / mlme.c
index c049f336e58a3680b2923a741900bdc2b24fda73..49f86fa56bff396adfc99daf8c921be3517a8cfb 100644 (file)
@@ -650,20 +650,53 @@ static void ieee80211_sta_send_apinfo(struct ieee80211_sub_if_data *sdata,
 static void ieee80211_sta_send_associnfo(struct ieee80211_sub_if_data *sdata,
                                         struct ieee80211_if_sta *ifsta)
 {
+       char *buf;
+       size_t len;
+       int i;
        union iwreq_data wrqu;
 
+       if (!ifsta->assocreq_ies && !ifsta->assocresp_ies)
+               return;
+
+       buf = kmalloc(50 + 2 * (ifsta->assocreq_ies_len +
+                               ifsta->assocresp_ies_len), GFP_KERNEL);
+       if (!buf)
+               return;
+
+       len = sprintf(buf, "ASSOCINFO(");
        if (ifsta->assocreq_ies) {
-               memset(&wrqu, 0, sizeof(wrqu));
-               wrqu.data.length = ifsta->assocreq_ies_len;
-               wireless_send_event(sdata->dev, IWEVASSOCREQIE, &wrqu,
-                                   ifsta->assocreq_ies);
+               len += sprintf(buf + len, "ReqIEs=");
+               for (i = 0; i < ifsta->assocreq_ies_len; i++) {
+                       len += sprintf(buf + len, "%02x",
+                                      ifsta->assocreq_ies[i]);
+               }
        }
        if (ifsta->assocresp_ies) {
+               if (ifsta->assocreq_ies)
+                       len += sprintf(buf + len, " ");
+               len += sprintf(buf + len, "RespIEs=");
+               for (i = 0; i < ifsta->assocresp_ies_len; i++) {
+                       len += sprintf(buf + len, "%02x",
+                                      ifsta->assocresp_ies[i]);
+               }
+       }
+       len += sprintf(buf + len, ")");
+
+       if (len > IW_CUSTOM_MAX) {
+               len = sprintf(buf, "ASSOCRESPIE=");
+               for (i = 0; i < ifsta->assocresp_ies_len; i++) {
+                       len += sprintf(buf + len, "%02x",
+                                      ifsta->assocresp_ies[i]);
+               }
+       }
+
+       if (len <= IW_CUSTOM_MAX) {
                memset(&wrqu, 0, sizeof(wrqu));
-               wrqu.data.length = ifsta->assocresp_ies_len;
-               wireless_send_event(sdata->dev, IWEVASSOCRESPIE, &wrqu,
-                                   ifsta->assocresp_ies);
+               wrqu.data.length = len;
+               wireless_send_event(sdata->dev, IWEVCUSTOM, &wrqu, buf);
        }
+
+       kfree(buf);
 }
 
 
@@ -942,8 +975,8 @@ static void ieee80211_associated(struct ieee80211_sub_if_data *sdata,
                                disassoc = 1;
                        } else
                                ieee80211_send_probe_req(sdata, ifsta->bssid,
-                                                        local->scan_ssid,
-                                                        local->scan_ssid_len);
+                                                        ifsta->ssid,
+                                                        ifsta->ssid_len);
                        ifsta->flags ^= IEEE80211_STA_PROBEREQ_POLL;
                } else {
                        ifsta->flags &= ~IEEE80211_STA_PROBEREQ_POLL;
@@ -1316,14 +1349,14 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
                struct ieee80211_ht_bss_info bss_info;
                ieee80211_ht_cap_ie_to_ht_info(
                                (struct ieee80211_ht_cap *)
-                               elems.ht_cap_elem, &sta->ht_info);
+                               elems.ht_cap_elem, &sta->sta.ht_info);
                ieee80211_ht_addt_info_ie_to_ht_bss_info(
                                (struct ieee80211_ht_addt_info *)
                                elems.ht_info_elem, &bss_info);
-               ieee80211_handle_ht(local, 1, &sta->ht_info, &bss_info);
+               ieee80211_handle_ht(local, 1, &sta->sta.ht_info, &bss_info);
        }
 
-       rate_control_rate_init(sta, local);
+       rate_control_rate_init(sta);
 
        if (elems.wmm_param) {
                set_sta_flags(sta, WLAN_STA_WME);
@@ -1452,6 +1485,8 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
        ifsta->state = IEEE80211_STA_MLME_IBSS_JOINED;
        mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL);
 
+       ieee80211_led_assoc(local, true);
+
        memset(&wrqu, 0, sizeof(wrqu));
        memcpy(wrqu.ap_addr.sa_data, bss->bssid, ETH_ALEN);
        wireless_send_event(sdata->dev, SIOCGIWAP, &wrqu, NULL);
@@ -2342,7 +2377,7 @@ struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata,
        sta->sta.supp_rates[band] = supp_rates |
                        ieee80211_mandatory_rates(local, band);
 
-       rate_control_rate_init(sta, local);
+       rate_control_rate_init(sta);
 
        if (sta_info_insert(sta))
                return NULL;