Set ht_capab from based on driver capabilities when in P2P GO mode
authorArik Nemtsov <arik@wizery.com>
Tue, 29 Nov 2011 21:45:07 +0000 (23:45 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 29 Nov 2011 21:45:07 +0000 (23:45 +0200)
Set the HT capabilities of a P2P GO according to the wiphy supported
ones. Mask-in a white-list of HT capabilities that won't cause problems
for non-supporting stations.

Signed-hostap: Arik Nemtsov <arik@wizery.com>

wpa_supplicant/ap.c

index de7c277..2a86436 100644 (file)
@@ -80,9 +80,10 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s,
 
 #ifdef CONFIG_IEEE80211N
        /*
-        * Enable HT20 if the driver supports it, by setting conf->ieee80211n.
+        * Enable HT20 if the driver supports it, by setting conf->ieee80211n
+        * and a mask of allowed capabilities within conf->ht_capab.
         * Using default config settings for: conf->ht_op_mode_fixed,
-        * conf->ht_capab, conf->secondary_channel, conf->require_ht
+        * conf->secondary_channel, conf->require_ht
         */
        if (wpa_s->hw.modes) {
                struct hostapd_hw_modes *mode = NULL;
@@ -93,8 +94,21 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s,
                                break;
                        }
                }
-               if (mode && mode->ht_capab)
+               if (mode && mode->ht_capab) {
                        conf->ieee80211n = 1;
+
+                       /*
+                        * white-list capabilities that won't cause issues
+                        * to connecting stations, while leaving the current
+                        * capabilities intact (currently disabled SMPS).
+                        */
+                       conf->ht_capab |= mode->ht_capab &
+                               (HT_CAP_INFO_GREEN_FIELD |
+                                HT_CAP_INFO_SHORT_GI20MHZ |
+                                HT_CAP_INFO_SHORT_GI40MHZ |
+                                HT_CAP_INFO_RX_STBC_MASK |
+                                HT_CAP_INFO_MAX_AMSDU_SIZE);
+               }
        }
 #endif /* CONFIG_IEEE80211N */