wifi: mac80211: Extend AID element addition for TDLS frames
authorMukesh Sisodiya <mukesh.sisodiya@intel.com>
Fri, 16 Jun 2023 06:53:54 +0000 (09:53 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 19 Jun 2023 10:05:28 +0000 (12:05 +0200)
Extend AID element addition in TDLS setup request and response
frames to add it when HE or EHT capabilities are supported.

Signed-off-by: Mukesh Sisodiya <mukesh.sisodiya@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230616094948.483bf44ce684.Ia2387eb24c06fa41febc213923160bedafce2085@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tdls.c

index a90404d..a4af3b7 100644 (file)
@@ -499,17 +499,21 @@ ieee80211_tdls_add_setup_start_ies(struct ieee80211_link_data *link,
                offset = noffset;
        }
 
-       /* build the VHT-cap similarly to the HT-cap */
+       /* add AID if VHT, HE or EHT capabilities supported */
        memcpy(&vht_cap, &sband->vht_cap, sizeof(vht_cap));
+       he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
+       eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif);
+       if ((vht_cap.vht_supported || he_cap || eht_cap) &&
+           (action_code == WLAN_TDLS_SETUP_REQUEST ||
+            action_code == WLAN_TDLS_SETUP_RESPONSE))
+               ieee80211_tdls_add_aid(sdata, skb);
+
+       /* build the VHT-cap similarly to the HT-cap */
        if ((action_code == WLAN_TDLS_SETUP_REQUEST ||
             action_code == WLAN_PUB_ACTION_TDLS_DISCOVER_RES) &&
            vht_cap.vht_supported) {
                ieee80211_apply_vhtcap_overrides(sdata, &vht_cap);
 
-               /* the AID is present only when VHT is implemented */
-               if (action_code == WLAN_TDLS_SETUP_REQUEST)
-                       ieee80211_tdls_add_aid(sdata, skb);
-
                pos = skb_put(skb, sizeof(struct ieee80211_vht_cap) + 2);
                ieee80211_ie_build_vht_cap(pos, &vht_cap, vht_cap.cap);
        } else if (action_code == WLAN_TDLS_SETUP_RESPONSE &&
@@ -517,9 +521,6 @@ ieee80211_tdls_add_setup_start_ies(struct ieee80211_link_data *link,
                /* the peer caps are already intersected with our own */
                memcpy(&vht_cap, &sta->sta.deflink.vht_cap, sizeof(vht_cap));
 
-               /* the AID is present only when VHT is implemented */
-               ieee80211_tdls_add_aid(sdata, skb);
-
                pos = skb_put(skb, sizeof(struct ieee80211_vht_cap) + 2);
                ieee80211_ie_build_vht_cap(pos, &vht_cap, vht_cap.cap);
 
@@ -547,7 +548,6 @@ ieee80211_tdls_add_setup_start_ies(struct ieee80211_link_data *link,
        }
 
        /* build the HE-cap from sband */
-       he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
        if (he_cap &&
            (action_code == WLAN_TDLS_SETUP_REQUEST ||
             action_code == WLAN_TDLS_SETUP_RESPONSE ||
@@ -591,7 +591,6 @@ ieee80211_tdls_add_setup_start_ies(struct ieee80211_link_data *link,
        }
 
        /* build the EHT-cap from sband */
-       eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif);
        if (he_cap && eht_cap &&
            (action_code == WLAN_TDLS_SETUP_REQUEST ||
             action_code == WLAN_TDLS_SETUP_RESPONSE ||