diff options
author | John Crispin <john@phrozen.org> | 2019-07-13 12:36:41 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2019-07-26 07:32:07 -0400 |
commit | 2aa485e1148557215337731b2c79f5569edcbbab (patch) | |
tree | 290276bc843fcd0c5b8eaee743db111f42f617f0 | |
parent | 60d7dfea00e14d87bdfd94cb7cca1f7592069fd4 (diff) |
mac80211: add support for parsing ADDBA_EXT IEs
ADDBA_EXT IEs can be used to negotiate the BA fragmentation level.
Signed-off-by: John Crispin <john@phrozen.org>
Link: https://lore.kernel.org/r/20190713163642.18491-2-john@phrozen.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | include/linux/ieee80211.h | 8 | ||||
-rw-r--r-- | net/mac80211/ieee80211_i.h | 1 | ||||
-rw-r--r-- | net/mac80211/util.c | 7 |
3 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 8511fadc0935..f36144eda5d6 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -881,6 +881,14 @@ struct ieee80211_tpc_report_ie { | |||
881 | u8 link_margin; | 881 | u8 link_margin; |
882 | } __packed; | 882 | } __packed; |
883 | 883 | ||
884 | #define IEEE80211_ADDBA_EXT_FRAG_LEVEL_MASK GENMASK(2, 1) | ||
885 | #define IEEE80211_ADDBA_EXT_FRAG_LEVEL_SHIFT 1 | ||
886 | #define IEEE80211_ADDBA_EXT_NO_FRAG BIT(0) | ||
887 | |||
888 | struct ieee80211_addba_ext_ie { | ||
889 | u8 data; | ||
890 | } __packed; | ||
891 | |||
884 | struct ieee80211_mgmt { | 892 | struct ieee80211_mgmt { |
885 | __le16 frame_control; | 893 | __le16 frame_control; |
886 | __le16 duration; | 894 | __le16 duration; |
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 004e2e3adb88..c67da3575e74 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -1506,6 +1506,7 @@ struct ieee802_11_elems { | |||
1506 | u8 max_bssid_indicator; | 1506 | u8 max_bssid_indicator; |
1507 | u8 dtim_count; | 1507 | u8 dtim_count; |
1508 | u8 dtim_period; | 1508 | u8 dtim_period; |
1509 | const struct ieee80211_addba_ext_ie *addba_ext_ie; | ||
1509 | 1510 | ||
1510 | /* length of them, respectively */ | 1511 | /* length of them, respectively */ |
1511 | u8 ext_capab_len; | 1512 | u8 ext_capab_len; |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 1b224fa27367..3441558ef2d2 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -1200,6 +1200,13 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action, | |||
1200 | 1200 | ||
1201 | elems->cisco_dtpc_elem = pos; | 1201 | elems->cisco_dtpc_elem = pos; |
1202 | break; | 1202 | break; |
1203 | case WLAN_EID_ADDBA_EXT: | ||
1204 | if (elen != sizeof(struct ieee80211_addba_ext_ie)) { | ||
1205 | elem_parse_failed = true; | ||
1206 | break; | ||
1207 | } | ||
1208 | elems->addba_ext_ie = (void *)pos; | ||
1209 | break; | ||
1203 | case WLAN_EID_TIMEOUT_INTERVAL: | 1210 | case WLAN_EID_TIMEOUT_INTERVAL: |
1204 | if (elen >= sizeof(struct ieee80211_timeout_interval_ie)) | 1211 | if (elen >= sizeof(struct ieee80211_timeout_interval_ie)) |
1205 | elems->timeout_int = (void *)pos; | 1212 | elems->timeout_int = (void *)pos; |