Skip to content

Commit 24711d6

Browse files
ilanpeer2jmberg-intel
authored andcommitted
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 <[email protected]> Reviewed-by: Johannes Berg <[email protected]> Signed-off-by: Miri Korenblit <[email protected]> Link: https://patch.msgid.link/20250102161730.5afdf65cff46.I0ffa30b40fbad47bc5b608b5fd46047a8c44e904@changeid Signed-off-by: Johannes Berg <[email protected]>
1 parent 19aa842 commit 24711d6

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

net/mac80211/ieee80211_i.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1762,6 +1762,7 @@ struct ieee802_11_elems {
17621762
const struct ieee80211_eht_operation *eht_operation;
17631763
const struct ieee80211_multi_link_elem *ml_basic;
17641764
const struct ieee80211_multi_link_elem *ml_reconf;
1765+
const struct ieee80211_multi_link_elem *ml_epcs;
17651766
const struct ieee80211_bandwidth_indication *bandwidth_indication;
17661767
const struct ieee80211_ttlm_elem *ttlm[IEEE80211_TTLM_MAX_CNT];
17671768

@@ -1792,6 +1793,7 @@ struct ieee802_11_elems {
17921793
/* mult-link element can be de-fragmented and thus u8 is not sufficient */
17931794
size_t ml_basic_len;
17941795
size_t ml_reconf_len;
1796+
size_t ml_epcs_len;
17951797

17961798
u8 ttlm_num;
17971799

net/mac80211/parse.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ struct ieee80211_elems_parse {
4444
/* The reconfiguration Multi-Link element in the original elements */
4545
const struct element *ml_reconf_elem;
4646

47+
/* The EPCS Multi-Link element in the original elements */
48+
const struct element *ml_epcs_elem;
49+
4750
/*
4851
* scratch buffer that can be used for various element parsing related
4952
* tasks, e.g., element de-fragmentation etc.
@@ -159,6 +162,9 @@ ieee80211_parse_extension_element(u32 *crc,
159162
case IEEE80211_ML_CONTROL_TYPE_RECONF:
160163
elems_parse->ml_reconf_elem = elem;
161164
break;
165+
case IEEE80211_ML_CONTROL_TYPE_PRIO_ACCESS:
166+
elems_parse->ml_epcs_elem = elem;
167+
break;
162168
default:
163169
break;
164170
}
@@ -943,6 +949,27 @@ ieee80211_mle_defrag_reconf(struct ieee80211_elems_parse *elems_parse)
943949
elems_parse->scratch_pos += ml_len;
944950
}
945951

952+
static void
953+
ieee80211_mle_defrag_epcs(struct ieee80211_elems_parse *elems_parse)
954+
{
955+
struct ieee802_11_elems *elems = &elems_parse->elems;
956+
ssize_t ml_len;
957+
958+
ml_len = cfg80211_defragment_element(elems_parse->ml_epcs_elem,
959+
elems->ie_start,
960+
elems->total_len,
961+
elems_parse->scratch_pos,
962+
elems_parse->scratch +
963+
elems_parse->scratch_len -
964+
elems_parse->scratch_pos,
965+
WLAN_EID_FRAGMENT);
966+
if (ml_len < 0)
967+
return;
968+
elems->ml_epcs = (void *)elems_parse->scratch_pos;
969+
elems->ml_epcs_len = ml_len;
970+
elems_parse->scratch_pos += ml_len;
971+
}
972+
946973
struct ieee802_11_elems *
947974
ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
948975
{
@@ -1001,6 +1028,8 @@ ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
10011028

10021029
ieee80211_mle_defrag_reconf(elems_parse);
10031030

1031+
ieee80211_mle_defrag_epcs(elems_parse);
1032+
10041033
if (elems->tim && !elems->parse_error) {
10051034
const struct ieee80211_tim_ie *tim_ie = elems->tim;
10061035

0 commit comments

Comments
 (0)