mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 14:42:34 -04:00
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: 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>
This commit is contained in:
@@ -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 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_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 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 */
|
||||
|
||||
Reference in New Issue
Block a user