summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2019-07-13 12:36:41 -0400
committerJohannes Berg <johannes.berg@intel.com>2019-07-26 07:32:07 -0400
commit2aa485e1148557215337731b2c79f5569edcbbab (patch)
tree290276bc843fcd0c5b8eaee743db111f42f617f0
parent60d7dfea00e14d87bdfd94cb7cca1f7592069fd4 (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.h8
-rw-r--r--net/mac80211/ieee80211_i.h1
-rw-r--r--net/mac80211/util.c7
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
888struct ieee80211_addba_ext_ie {
889 u8 data;
890} __packed;
891
884struct ieee80211_mgmt { 892struct 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;