wifi: mac80211: remove support for AddBA with fragmentation
authorJohannes Berg <johannes.berg@intel.com>
Fri, 30 Sep 2022 11:24:11 +0000 (13:24 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 7 Oct 2022 13:24:31 +0000 (15:24 +0200)
HE added support for dynamic fragmentation inside aggregation
sessions, but no existing driver ever advertises it. Thus,
remove the code for now, it cannot work as-is in MLO. For it
to properly work in MLO, we'd need to validate that the frag
level is identical across all the link bands/iftypes, which
is a good amount of complex code that's just not worth it as
long as no driver has support for it.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/agg-rx.c

index bd41022..c6fa532 100644 (file)
@@ -183,34 +183,15 @@ static void ieee80211_add_addbaext(struct ieee80211_sub_if_data *sdata,
                                   const struct ieee80211_addba_ext_ie *req,
                                   u16 buf_size)
 {
-       struct ieee80211_supported_band *sband;
        struct ieee80211_addba_ext_ie *resp;
-       const struct ieee80211_sta_he_cap *he_cap;
-       u8 frag_level, cap_frag_level;
        u8 *pos;
 
-       sband = ieee80211_get_sband(sdata);
-       if (!sband)
-               return;
-       he_cap = ieee80211_get_he_iftype_cap(sband,
-                                            ieee80211_vif_type_p2p(&sdata->vif));
-       if (!he_cap)
-               return;
-
        pos = skb_put_zero(skb, 2 + sizeof(struct ieee80211_addba_ext_ie));
        *pos++ = WLAN_EID_ADDBA_EXT;
        *pos++ = sizeof(struct ieee80211_addba_ext_ie);
        resp = (struct ieee80211_addba_ext_ie *)pos;
        resp->data = req->data & IEEE80211_ADDBA_EXT_NO_FRAG;
 
-       frag_level = u32_get_bits(req->data,
-                                 IEEE80211_ADDBA_EXT_FRAG_LEVEL_MASK);
-       cap_frag_level = u32_get_bits(he_cap->he_cap_elem.mac_cap_info[0],
-                                     IEEE80211_HE_MAC_CAP0_DYNAMIC_FRAG_MASK);
-       if (frag_level > cap_frag_level)
-               frag_level = cap_frag_level;
-       resp->data |= u8_encode_bits(frag_level,
-                                    IEEE80211_ADDBA_EXT_FRAG_LEVEL_MASK);
        resp->data |= u8_encode_bits(buf_size >> IEEE80211_ADDBA_EXT_BUF_SIZE_SHIFT,
                                     IEEE80211_ADDBA_EXT_BUF_SIZE_MASK);
 }