wifi: mac80211: Support parsing EPCS ML element
[ Upstream commit 24711d60f8492a30622e419cee643d59264ea939 ] Add support for parsing an ML element of type EPCS priority access, which can optionally be included in EHT protected action frames used to configure EPCS. 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.5afdf65cff46.I0ffa30b40fbad47bc5b608b5fd46047a8c44e904@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com> Stable-dep-of: 99ca2c28e6b6 ("wifi: mac80211: fix MLE non-inheritance parsing") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9dedafd86e
commit
8ae5106e5d
@@ -1751,6 +1751,7 @@ struct ieee802_11_elems {
|
||||
const struct ieee80211_eht_operation *eht_operation;
|
||||
const struct ieee80211_multi_link_elem *ml_basic;
|
||||
const struct ieee80211_multi_link_elem *ml_reconf;
|
||||
const struct ieee80211_multi_link_elem *ml_epcs;
|
||||
const struct ieee80211_bandwidth_indication *bandwidth_indication;
|
||||
const struct ieee80211_ttlm_elem *ttlm[IEEE80211_TTLM_MAX_CNT];
|
||||
|
||||
@@ -1781,6 +1782,7 @@ struct ieee802_11_elems {
|
||||
/* mult-link element can be de-fragmented and thus u8 is not sufficient */
|
||||
size_t ml_basic_len;
|
||||
size_t ml_reconf_len;
|
||||
size_t ml_epcs_len;
|
||||
|
||||
u8 ttlm_num;
|
||||
|
||||
|
||||
@@ -44,6 +44,9 @@ struct ieee80211_elems_parse {
|
||||
/* The reconfiguration Multi-Link element in the original elements */
|
||||
const struct element *ml_reconf_elem;
|
||||
|
||||
/* The EPCS Multi-Link element in the original elements */
|
||||
const struct element *ml_epcs_elem;
|
||||
|
||||
/*
|
||||
* scratch buffer that can be used for various element parsing related
|
||||
* tasks, e.g., element de-fragmentation etc.
|
||||
@@ -159,6 +162,9 @@ ieee80211_parse_extension_element(u32 *crc,
|
||||
case IEEE80211_ML_CONTROL_TYPE_RECONF:
|
||||
elems_parse->ml_reconf_elem = elem;
|
||||
break;
|
||||
case IEEE80211_ML_CONTROL_TYPE_PRIO_ACCESS:
|
||||
elems_parse->ml_epcs_elem = elem;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -943,6 +949,27 @@ ieee80211_mle_defrag_reconf(struct ieee80211_elems_parse *elems_parse)
|
||||
elems_parse->scratch_pos += ml_len;
|
||||
}
|
||||
|
||||
static void
|
||||
ieee80211_mle_defrag_epcs(struct ieee80211_elems_parse *elems_parse)
|
||||
{
|
||||
struct ieee802_11_elems *elems = &elems_parse->elems;
|
||||
ssize_t ml_len;
|
||||
|
||||
ml_len = cfg80211_defragment_element(elems_parse->ml_epcs_elem,
|
||||
elems->ie_start,
|
||||
elems->total_len,
|
||||
elems_parse->scratch_pos,
|
||||
elems_parse->scratch +
|
||||
elems_parse->scratch_len -
|
||||
elems_parse->scratch_pos,
|
||||
WLAN_EID_FRAGMENT);
|
||||
if (ml_len < 0)
|
||||
return;
|
||||
elems->ml_epcs = (void *)elems_parse->scratch_pos;
|
||||
elems->ml_epcs_len = ml_len;
|
||||
elems_parse->scratch_pos += ml_len;
|
||||
}
|
||||
|
||||
struct ieee802_11_elems *
|
||||
ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
|
||||
{
|
||||
@@ -1001,6 +1028,8 @@ ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
|
||||
|
||||
ieee80211_mle_defrag_reconf(elems_parse);
|
||||
|
||||
ieee80211_mle_defrag_epcs(elems_parse);
|
||||
|
||||
if (elems->tim && !elems->parse_error) {
|
||||
const struct ieee80211_tim_ie *tim_ie = elems->tim;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user