Commit 425f4b5f authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: add API to parse multi-link element

Add the necessary API to parse the multi-link element in
the future. For now, link only to the element when found
so we can use it in the client-side code later.

Later, we'll need to fill this in to deal with element
fragmentation, parse the STA profile, etc.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent af4f2aa3
...@@ -1658,6 +1658,7 @@ struct ieee802_11_elems { ...@@ -1658,6 +1658,7 @@ struct ieee802_11_elems {
const struct ieee80211_aid_response_ie *aid_resp; const struct ieee80211_aid_response_ie *aid_resp;
const struct ieee80211_eht_cap_elem *eht_cap; const struct ieee80211_eht_cap_elem *eht_cap;
const struct ieee80211_eht_operation *eht_operation; const struct ieee80211_eht_operation *eht_operation;
const struct ieee80211_multi_link_elem *multi_link;
/* length of them, respectively */ /* length of them, respectively */
u8 ext_capab_len; u8 ext_capab_len;
...@@ -2161,6 +2162,8 @@ static inline void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, ...@@ -2161,6 +2162,8 @@ static inline void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata,
* @bss: the BSS to parse this as, for multi-BSSID cases this can * @bss: the BSS to parse this as, for multi-BSSID cases this can
* represent a non-transmitting BSS in which case the data * represent a non-transmitting BSS in which case the data
* for that non-transmitting BSS is returned * for that non-transmitting BSS is returned
* @link_id: the link ID to parse elements for, if a STA profile
* is present in the multi-link element, or -1 to ignore
*/ */
struct ieee80211_elems_parse_params { struct ieee80211_elems_parse_params {
const u8 *start; const u8 *start;
...@@ -2169,6 +2172,7 @@ struct ieee80211_elems_parse_params { ...@@ -2169,6 +2172,7 @@ struct ieee80211_elems_parse_params {
u64 filter; u64 filter;
u32 crc; u32 crc;
struct cfg80211_bss *bss; struct cfg80211_bss *bss;
int link_id;
}; };
struct ieee802_11_elems * struct ieee802_11_elems *
...@@ -2186,6 +2190,7 @@ ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action, ...@@ -2186,6 +2190,7 @@ ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
.filter = filter, .filter = filter,
.crc = crc, .crc = crc,
.bss = bss, .bss = bss,
.link_id = -1,
}; };
return ieee802_11_parse_elems_full(&params); return ieee802_11_parse_elems_full(&params);
......
...@@ -1022,6 +1022,10 @@ static void ieee80211_parse_extension_element(u32 *crc, ...@@ -1022,6 +1022,10 @@ static void ieee80211_parse_extension_element(u32 *crc,
if (ieee80211_eht_oper_size_ok(data, len)) if (ieee80211_eht_oper_size_ok(data, len))
elems->eht_operation = data; elems->eht_operation = data;
break; break;
case WLAN_EID_EXT_EHT_MULTI_LINK:
if (ieee80211_mle_size_ok(data, len))
elems->multi_link = (void *)data;
break;
} }
} }
...@@ -1524,6 +1528,7 @@ ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params) ...@@ -1524,6 +1528,7 @@ ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
.start = nontransmitted_profile, .start = nontransmitted_profile,
.len = nontransmitted_profile_len, .len = nontransmitted_profile_len,
.action = params->action, .action = params->action,
.link_id = params->link_id,
}; };
_ieee802_11_parse_elems_full(&sub, elems, NULL); _ieee802_11_parse_elems_full(&sub, elems, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment