Commit 136a4e82 authored by Ilan Peer's avatar Ilan Peer Committed by Johannes Berg
Browse files

wifi: mac80211: Refactor adding association elements



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: default avatarIlan Peer <ilan.peer@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250102161730.191f58f2bba7.I6baa6e2989a39937234ff91d7db5ff1359a6bb30@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 65c1c041
Loading
Loading
Loading
Loading
+38 −35
Original line number Diff line number Diff line
@@ -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,
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);
			    const u16 *present_elems,
			    struct ieee80211_mgd_assoc_data *assoc_data);

static size_t ieee80211_assoc_link_elems(struct ieee80211_sub_if_data *sdata,
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)
			 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,
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)
			    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,
		extra_used = ieee80211_add_link_elems(sdata, skb, &capab,
						      ext_capa,
						      extra_elems,
						      extra_elems_len,
						      link_id, NULL,
							link_present_elems);
						      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,
	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);
					  present_elems, assoc_data);
	put_unaligned_le16(link_capab, capab_pos);

	/* if present, add any custom non-vendor IEs */