mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
wifi: mac80211: Support parsing EPCS ML element
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>
This commit is contained in:
parent
19aa842dcb
commit
24711d60f8
|
@ -1762,6 +1762,7 @@ struct ieee802_11_elems {
|
||||||
const struct ieee80211_eht_operation *eht_operation;
|
const struct ieee80211_eht_operation *eht_operation;
|
||||||
const struct ieee80211_multi_link_elem *ml_basic;
|
const struct ieee80211_multi_link_elem *ml_basic;
|
||||||
const struct ieee80211_multi_link_elem *ml_reconf;
|
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_bandwidth_indication *bandwidth_indication;
|
||||||
const struct ieee80211_ttlm_elem *ttlm[IEEE80211_TTLM_MAX_CNT];
|
const struct ieee80211_ttlm_elem *ttlm[IEEE80211_TTLM_MAX_CNT];
|
||||||
|
|
||||||
|
@ -1792,6 +1793,7 @@ struct ieee802_11_elems {
|
||||||
/* mult-link element can be de-fragmented and thus u8 is not sufficient */
|
/* mult-link element can be de-fragmented and thus u8 is not sufficient */
|
||||||
size_t ml_basic_len;
|
size_t ml_basic_len;
|
||||||
size_t ml_reconf_len;
|
size_t ml_reconf_len;
|
||||||
|
size_t ml_epcs_len;
|
||||||
|
|
||||||
u8 ttlm_num;
|
u8 ttlm_num;
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,9 @@ struct ieee80211_elems_parse {
|
||||||
/* The reconfiguration Multi-Link element in the original elements */
|
/* The reconfiguration Multi-Link element in the original elements */
|
||||||
const struct element *ml_reconf_elem;
|
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
|
* scratch buffer that can be used for various element parsing related
|
||||||
* tasks, e.g., element de-fragmentation etc.
|
* tasks, e.g., element de-fragmentation etc.
|
||||||
|
@ -159,6 +162,9 @@ ieee80211_parse_extension_element(u32 *crc,
|
||||||
case IEEE80211_ML_CONTROL_TYPE_RECONF:
|
case IEEE80211_ML_CONTROL_TYPE_RECONF:
|
||||||
elems_parse->ml_reconf_elem = elem;
|
elems_parse->ml_reconf_elem = elem;
|
||||||
break;
|
break;
|
||||||
|
case IEEE80211_ML_CONTROL_TYPE_PRIO_ACCESS:
|
||||||
|
elems_parse->ml_epcs_elem = elem;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -943,6 +949,27 @@ ieee80211_mle_defrag_reconf(struct ieee80211_elems_parse *elems_parse)
|
||||||
elems_parse->scratch_pos += ml_len;
|
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 *
|
struct ieee802_11_elems *
|
||||||
ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
|
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_reconf(elems_parse);
|
||||||
|
|
||||||
|
ieee80211_mle_defrag_epcs(elems_parse);
|
||||||
|
|
||||||
if (elems->tim && !elems->parse_error) {
|
if (elems->tim && !elems->parse_error) {
|
||||||
const struct ieee80211_tim_ie *tim_ie = elems->tim;
|
const struct ieee80211_tim_ie *tim_ie = elems->tim;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user