]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211: Refactor adding association elements
authorIlan Peer <ilan.peer@intel.com>
Thu, 2 Jan 2025 14:19:56 +0000 (16:19 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 13 Jan 2025 14:34:08 +0000 (15:34 +0100)
Instead of always using 'sdata->u.mgd.assoc_data' have
the association data be passed as an argument.

This will later allow to use the same functionality
for adding links to the current association.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250102161730.191f58f2bba7.I6baa6e2989a39937234ff91d7db5ff1359a6bb30@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mlme.c

index 9086639830d681051bc170fba55990022d9fcdac..3447f29d61723ea1575e65157b9ffb33fec4becc 100644 (file)
@@ -1511,23 +1511,25 @@ static size_t ieee80211_add_before_he_elems(struct sk_buff *skb,
 #define PRESENT_ELEMS_MAX      8
 #define PRESENT_ELEM_EXT_OFFS  0x100
 
-static void ieee80211_assoc_add_ml_elem(struct ieee80211_sub_if_data *sdata,
-                                       struct sk_buff *skb, u16 capab,
-                                       const struct element *ext_capa,
-                                       const u16 *present_elems);
-
-static size_t ieee80211_assoc_link_elems(struct ieee80211_sub_if_data *sdata,
-                                        struct sk_buff *skb, u16 *capab,
-                                        const struct element *ext_capa,
-                                        const u8 *extra_elems,
-                                        size_t extra_elems_len,
-                                        unsigned int link_id,
-                                        struct ieee80211_link_data *link,
-                                        u16 *present_elems)
+static void
+ieee80211_assoc_add_ml_elem(struct ieee80211_sub_if_data *sdata,
+                           struct sk_buff *skb, u16 capab,
+                           const struct element *ext_capa,
+                           const u16 *present_elems,
+                           struct ieee80211_mgd_assoc_data *assoc_data);
+
+static size_t
+ieee80211_add_link_elems(struct ieee80211_sub_if_data *sdata,
+                        struct sk_buff *skb, u16 *capab,
+                        const struct element *ext_capa,
+                        const u8 *extra_elems,
+                        size_t extra_elems_len,
+                        unsigned int link_id,
+                        struct ieee80211_link_data *link,
+                        u16 *present_elems,
+                        struct ieee80211_mgd_assoc_data *assoc_data)
 {
        enum nl80211_iftype iftype = ieee80211_vif_type_p2p(&sdata->vif);
-       struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
-       struct ieee80211_mgd_assoc_data *assoc_data = ifmgd->assoc_data;
        struct cfg80211_bss *cbss = assoc_data->link[link_id].bss;
        struct ieee80211_channel *chan = cbss->channel;
        const struct ieee80211_sband_iftype_data *iftd;
@@ -1676,7 +1678,7 @@ static size_t ieee80211_assoc_link_elems(struct ieee80211_sub_if_data *sdata,
 
        if (link_id == assoc_data->assoc_link_id)
                ieee80211_assoc_add_ml_elem(sdata, skb, orig_capab, ext_capa,
-                                           present_elems);
+                                           present_elems, assoc_data);
 
        /* crash if somebody gets it wrong */
        present_elems = NULL;
@@ -1755,14 +1757,14 @@ static void ieee80211_add_non_inheritance_elem(struct sk_buff *skb,
                *len = skb->len - skb_len - 2;
 }
 
-static void ieee80211_assoc_add_ml_elem(struct ieee80211_sub_if_data *sdata,
-                                       struct sk_buff *skb, u16 capab,
-                                       const struct element *ext_capa,
-                                       const u16 *outer_present_elems)
+static void
+ieee80211_assoc_add_ml_elem(struct ieee80211_sub_if_data *sdata,
+                           struct sk_buff *skb, u16 capab,
+                           const struct element *ext_capa,
+                           const u16 *outer_present_elems,
+                           struct ieee80211_mgd_assoc_data *assoc_data)
 {
        struct ieee80211_local *local = sdata->local;
-       struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
-       struct ieee80211_mgd_assoc_data *assoc_data = ifmgd->assoc_data;
        struct ieee80211_multi_link_elem *ml_elem;
        struct ieee80211_mle_basic_common_info *common;
        const struct wiphy_iftype_ext_capab *ift_ext_capa;
@@ -1835,16 +1837,17 @@ static void ieee80211_assoc_add_ml_elem(struct ieee80211_sub_if_data *sdata,
                 * (if applicable) are skipped. So we only have
                 * the capability field (remember the position and fill
                 * later), followed by the elements added below by
-                * calling ieee80211_assoc_link_elems().
+                * calling ieee80211_add_link_elems().
                 */
                capab_pos = skb_put(skb, 2);
 
-               extra_used = ieee80211_assoc_link_elems(sdata, skb, &capab,
-                                                       ext_capa,
-                                                       extra_elems,
-                                                       extra_elems_len,
-                                                       link_id, NULL,
-                                                       link_present_elems);
+               extra_used = ieee80211_add_link_elems(sdata, skb, &capab,
+                                                     ext_capa,
+                                                     extra_elems,
+                                                     extra_elems_len,
+                                                     link_id, NULL,
+                                                     link_present_elems,
+                                                     assoc_data);
                if (extra_elems)
                        skb_put_data(skb, extra_elems + extra_used,
                                     extra_elems_len - extra_used);
@@ -2031,12 +2034,12 @@ static int ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
 
        /* add the elements for the assoc (main) link */
        link_capab = capab;
-       offset = ieee80211_assoc_link_elems(sdata, skb, &link_capab,
-                                           ext_capa,
-                                           assoc_data->ie,
-                                           assoc_data->ie_len,
-                                           assoc_data->assoc_link_id, link,
-                                           present_elems);
+       offset = ieee80211_add_link_elems(sdata, skb, &link_capab,
+                                         ext_capa,
+                                         assoc_data->ie,
+                                         assoc_data->ie_len,
+                                         assoc_data->assoc_link_id, link,
+                                         present_elems, assoc_data);
        put_unaligned_le16(link_capab, capab_pos);
 
        /* if present, add any custom non-vendor IEs */