wifi: mac80211: update TIM for S1G specification changes
authorKieran Frewen <kieran.frewen@morsemicro.com>
Sun, 6 Nov 2022 22:16:02 +0000 (11:16 +1300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 1 Dec 2022 14:09:10 +0000 (15:09 +0100)
Updates to the TIM information element to match changes made in the
IEEE Std 802.11ah-2020.

Signed-off-by: Kieran Frewen <kieran.frewen@morsemicro.com>
Co-developed-by: Gilad Itzkovitch <gilad.itzkovitch@morsemicro.com>
Signed-off-by: Gilad Itzkovitch <gilad.itzkovitch@morsemicro.com>
Link: https://lore.kernel.org/r/20221106221602.25714-1-gilad.itzkovitch@morsemicro.com
[use skb_put_data/skb_put_u8]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tx.c

index 3ed5ca4a2baee407438912cb6e3aacfc42e05186..774e62860c4596486150a005844ebb4605a7234e 100644 (file)
@@ -4774,9 +4774,9 @@ static void __ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata,
                        ps->dtim_count--;
        }
 
-       tim = pos = skb_put(skb, 6);
+       tim = pos = skb_put(skb, 5);
        *pos++ = WLAN_EID_TIM;
-       *pos++ = 4;
+       *pos++ = 3;
        *pos++ = ps->dtim_count;
        *pos++ = link_conf->dtim_period;
 
@@ -4807,13 +4807,17 @@ static void __ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata,
                /* Bitmap control */
                *pos++ = n1 | aid0;
                /* Part Virt Bitmap */
-               skb_put(skb, n2 - n1);
-               memcpy(pos, ps->tim + n1, n2 - n1 + 1);
+               skb_put_data(skb, ps->tim + n1, n2 - n1 + 1);
 
                tim[1] = n2 - n1 + 4;
        } else {
                *pos++ = aid0; /* Bitmap control */
-               *pos++ = 0; /* Part Virt Bitmap */
+
+               if (ieee80211_get_link_sband(link)->band != NL80211_BAND_S1GHZ) {
+                       tim[1] = 4;
+                       /* Part Virt Bitmap */
+                       skb_put_u8(skb, 0);
+               }
        }
 }