]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
hostapd: Add VHT PHY selector if VHT is required
authorJohannes Berg <johannes.berg@intel.com>
Sat, 24 Nov 2012 15:27:16 +0000 (17:27 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 24 Nov 2012 15:27:16 +0000 (17:27 +0200)
If VHT is required, add the VHT PHY selector to
the (extended) supported rates IE.

Signed-hostap: Johannes Berg <johannes.berg@intel.com>

src/ap/ieee802_11.c
src/common/ieee802_11_defs.h

index 075317652ba392742af9fe85b461f1be905d7aea..366cbb664331096c1a0ac0f66459003c54db08ad 100644 (file)
@@ -49,6 +49,8 @@ u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid)
        num = hapd->iface->num_rates;
        if (hapd->iconf->ieee80211n && hapd->iconf->require_ht)
                num++;
+       if (hapd->iconf->ieee80211ac && hapd->iconf->require_vht)
+               num++;
        if (num > 8) {
                /* rest of the rates are encoded in Extended supported
                 * rates element */
@@ -66,9 +68,15 @@ u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid)
                pos++;
        }
 
-       if (hapd->iconf->ieee80211n && hapd->iconf->require_ht &&
-           hapd->iface->num_rates < 8)
+       if (hapd->iconf->ieee80211n && hapd->iconf->require_ht && count < 8) {
+               count++;
                *pos++ = 0x80 | BSS_MEMBERSHIP_SELECTOR_HT_PHY;
+       }
+
+       if (hapd->iconf->ieee80211ac && hapd->iconf->require_vht && count < 8) {
+               count++;
+               *pos++ = 0x80 | BSS_MEMBERSHIP_SELECTOR_VHT_PHY;
+       }
 
        return pos;
 }
@@ -85,6 +93,8 @@ u8 * hostapd_eid_ext_supp_rates(struct hostapd_data *hapd, u8 *eid)
        num = hapd->iface->num_rates;
        if (hapd->iconf->ieee80211n && hapd->iconf->require_ht)
                num++;
+       if (hapd->iconf->ieee80211ac && hapd->iconf->require_vht)
+               num++;
        if (num <= 8)
                return eid;
        num -= 8;
@@ -103,9 +113,17 @@ u8 * hostapd_eid_ext_supp_rates(struct hostapd_data *hapd, u8 *eid)
                pos++;
        }
 
-       if (hapd->iconf->ieee80211n && hapd->iconf->require_ht &&
-           hapd->iface->num_rates >= 8)
-               *pos++ = 0x80 | BSS_MEMBERSHIP_SELECTOR_HT_PHY;
+       if (hapd->iconf->ieee80211n && hapd->iconf->require_ht) {
+               count++;
+               if (count > 8)
+                       *pos++ = 0x80 | BSS_MEMBERSHIP_SELECTOR_HT_PHY;
+       }
+
+       if (hapd->iconf->ieee80211ac && hapd->iconf->require_vht) {
+               count++;
+               if (count > 8)
+                       *pos++ = 0x80 | BSS_MEMBERSHIP_SELECTOR_VHT_PHY;
+       }
 
        return pos;
 }
index ee8578f7603098a931b8d8ef1a09134ceb665310..07c85807aa493ecd754a1563e77bff50abd841bf 100644 (file)
@@ -671,6 +671,7 @@ struct ieee80211_vht_operation {
 #define HT_INFO_STBC_PARAM_PCO_ACTIVE                  ((u16) BIT(10))
 #define HT_INFO_STBC_PARAM_PCO_PHASE                   ((u16) BIT(11))
 
+#define BSS_MEMBERSHIP_SELECTOR_VHT_PHY 126
 #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
 
 /* VHT Defines */