git: fb47649ebc5a - main - net80211: update (parts of) frame types and subtypes and annotate
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 03 Sep 2022 21:21:11 UTC
The branch main has been updated by bz:
URL: https://cgit.FreeBSD.org/src/commit/?id=fb47649ebc5a667739e8bd834b993af3c8d1b89f
commit fb47649ebc5a667739e8bd834b993af3c8d1b89f
Author: Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2022-08-31 22:26:28 +0000
Commit: Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2022-09-03 21:18:40 +0000
net80211: update (parts of) frame types and subtypes and annotate
Update to the full list of frame type and subtype values based on
802.11-2020 with 11ax and 11ay extensions. This includes the 4th type
"Extension" (IEEE80211_FC0_TYPE_EXT).
While here annotate them with descriptions which should help matching
names (as at times things get confusing with LinuxKPI).
Also remove some 802.11-1997 values Reserved nowadays.
No functional changes.
Sponsored by: The FreeBSD Foundation
MFC after: 5 days
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D36410
---
sys/net80211/ieee80211.h | 117 ++++++++++++++++++++++++++++++-----------------
1 file changed, 74 insertions(+), 43 deletions(-)
diff --git a/sys/net80211/ieee80211.h b/sys/net80211/ieee80211.h
index 461bc43264f7..efd07389341a 100644
--- a/sys/net80211/ieee80211.h
+++ b/sys/net80211/ieee80211.h
@@ -117,52 +117,80 @@ struct ieee80211_qosframe_addr4 {
#define IEEE80211_FC0_VERSION_0 0x00
#define IEEE80211_FC0_TYPE_MASK 0x0c
#define IEEE80211_FC0_TYPE_SHIFT 2
-#define IEEE80211_FC0_TYPE_MGT 0x00
-#define IEEE80211_FC0_TYPE_CTL 0x04
-#define IEEE80211_FC0_TYPE_DATA 0x08
+#define IEEE80211_FC0_TYPE_MGT 0x00 /* Management */
+#define IEEE80211_FC0_TYPE_CTL 0x04 /* Control */
+#define IEEE80211_FC0_TYPE_DATA 0x08 /* Data */
+#define IEEE80211_FC0_TYPE_EXT 0x0c /* Extension */
#define IEEE80211_FC0_SUBTYPE_MASK 0xf0
#define IEEE80211_FC0_SUBTYPE_SHIFT 4
-/* for TYPE_MGT */
-#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00
-#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10
-#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20
-#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30
-#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40
-#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50
-#define IEEE80211_FC0_SUBTYPE_TIMING_ADV 0x60
-#define IEEE80211_FC0_SUBTYPE_BEACON 0x80
-#define IEEE80211_FC0_SUBTYPE_ATIM 0x90
-#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0
-#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0
-#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0
-#define IEEE80211_FC0_SUBTYPE_ACTION 0xd0
-#define IEEE80211_FC0_SUBTYPE_ACTION_NOACK 0xe0
-/* for TYPE_CTL */
-#define IEEE80211_FC0_SUBTYPE_TRIGGER 0x20
-#define IEEE80211_FC0_SUBTYPE_CONTROL_WRAP 0x70
-#define IEEE80211_FC0_SUBTYPE_BAR 0x80
-#define IEEE80211_FC0_SUBTYPE_BA 0x90
-#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0
-#define IEEE80211_FC0_SUBTYPE_RTS 0xb0
-#define IEEE80211_FC0_SUBTYPE_CTS 0xc0
-#define IEEE80211_FC0_SUBTYPE_ACK 0xd0
-#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0
-#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0
-/* for TYPE_DATA (bit combination) */
-#define IEEE80211_FC0_SUBTYPE_DATA 0x00
-#define IEEE80211_FC0_SUBTYPE_CF_ACK 0x10
-#define IEEE80211_FC0_SUBTYPE_CF_POLL 0x20
-#define IEEE80211_FC0_SUBTYPE_CF_ACPL 0x30
-#define IEEE80211_FC0_SUBTYPE_NODATA 0x40
-#define IEEE80211_FC0_SUBTYPE_CFACK 0x50
-#define IEEE80211_FC0_SUBTYPE_CFPOLL 0x60
-#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70
-#define IEEE80211_FC0_SUBTYPE_QOS_DATA 0x80
-#define IEEE80211_FC0_SUBTYPE_QOS_DATA_CFACK 0x90
-#define IEEE80211_FC0_SUBTYPE_QOS_DATA_CFPOLL 0xa0
-#define IEEE80211_FC0_SUBTYPE_QOS_DATA_CFACKPOLL 0xb0
-#define IEEE80211_FC0_SUBTYPE_QOS_NULL 0xc0
+/* 802.11-2020 Table 9-1-Valid type and subtype combinations */
+/* For type 00 Management (IEEE80211_FC0_TYPE_MGT) */
+#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00 /* Association Request */
+#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10 /* Association Response */
+#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20 /* Reassociation Request */
+#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30 /* Reassociation Response */
+#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40 /* Probe Request */
+#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50 /* Probe Response */
+#define IEEE80211_FC0_SUBTYPE_TIMING_ADV 0x60 /* Timing Advertisement */
+/* 0111 Reserved 0x70 */
+#define IEEE80211_FC0_SUBTYPE_BEACON 0x80 /* Beacon */
+#define IEEE80211_FC0_SUBTYPE_ATIM 0x90 /* ATIM */
+#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0 /* Disassociation */
+#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0 /* Authentication */
+#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0 /* Deauthentication */
+#define IEEE80211_FC0_SUBTYPE_ACTION 0xd0 /* Action */
+#define IEEE80211_FC0_SUBTYPE_ACTION_NOACK 0xe0 /* Action No Ack */
+/* 1111 Reserved 0xf0 */
+/* For type 01 Control (IEEE80211_FC0_TYPE_CTL) */
+/* 0000-0001 Reserved 0x00-0x10 */
+#define IEEE80211_FC0_SUBTYPE_TRIGGER 0x20 /* Trigger, 80211ax-2021 */
+#define IEEE80211_FC0_SUBTYPE_TACK 0x30 /* TACK */
+#define IEEE80211_FC0_SUBTYPE_BF_REPORT_POLL 0x40 /* Beamforming Report Poll */
+#define IEEE80211_FC0_SUBTYPE_VHT_HE_NDP 0x50 /* VHT/HE NDP Announcement, 80211ac/ax-2013/2021 */
+#define IEEE80211_FC0_SUBTYPE_CTL_EXT 0x60 /* Control Frame Extension */
+#define IEEE80211_FC0_SUBTYPE_CONTROL_WRAP 0x70 /* Control Wrapper */
+#define IEEE80211_FC0_SUBTYPE_BAR 0x80 /* Block Ack Request (BlockAckReq) */
+#define IEEE80211_FC0_SUBTYPE_BA 0x90 /* Block Ack (BlockAck) */
+#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0 /* PS-Poll */
+#define IEEE80211_FC0_SUBTYPE_RTS 0xb0 /* RTS */
+#define IEEE80211_FC0_SUBTYPE_CTS 0xc0 /* CTS */
+#define IEEE80211_FC0_SUBTYPE_ACK 0xd0 /* Ack */
+#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0 /* CF-End */
+#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0 /* 1111 Reserved - what was CF_END_ACK? */
+/* For type 10 Data (IEEE80211_FC0_TYPE_DATA) */
+#define IEEE80211_FC0_SUBTYPE_DATA 0x00 /* Data */
+/* 0001-0011 Reserved 0x10-0x30 */ /* Were: CF_ACK, CF_POLL, CF_ACPL */
+#define IEEE80211_FC0_SUBTYPE_NODATA 0x40 /* Null */
+/* 0101-0111 Reserved 0x50-0x70 */ /* Were: CFACK, CFPOLL, CF_ACK_CF_ACK */
+#define IEEE80211_FC0_SUBTYPE_QOS_DATA 0x80 /* QoS Data */
+#define IEEE80211_FC0_SUBTYPE_QOS_DATA_CFACK 0x90 /* QoS Data +CF-Ack */
+#define IEEE80211_FC0_SUBTYPE_QOS_DATA_CFPOLL 0xa0 /* QoS Data +CF-Poll */
+#define IEEE80211_FC0_SUBTYPE_QOS_DATA_CFACKPOLL 0xb0 /* QoS Data +CF-Ack +CF-Poll */
+#define IEEE80211_FC0_SUBTYPE_QOS_NULL 0xc0 /* QoS Null */
+/* 1101 Reserved 0xd0 */
+#define IEEE80211_FC0_SUBTYPE_QOS_CFPOLL 0xe0 /* QoS CF-Poll */
+#define IEEE80211_FC0_SUBTYPE_QOS_CFACKPOLL 0xf0 /* QoS CF-Ack +CF-Poll */
+/* For type 11 Extension (IEEE80211_FC0_TYPE_EXT) */
+#define IEEE80211_FC0_SUBTYPE_DMG_BEACON 0x00 /* DMG Beacon */
+#define IEEE80211_FC0_SUBTYPE_S1G_BEACON 0x10 /* S1G Beacon */
+/* 0010-1111 Reserved 0x20-0xff */
+
+/* 802.11-2020 Table 9-2-Control Frame Extension */
+/* Reusing B11..B8, part of FC1 */
+#define IEEE80211_CTL_EXT_SECTOR_ACK 0x00 /* Sector Ack, 80211ay-2021 */
+#define IEEE80211_CTL_EXT_BA_SCHED 0x01 /* Block Ack Schedule, 80211ay-2021 */
+#define IEEE80211_CTL_EXT_POLL 0x02 /* Poll */
+#define IEEE80211_CTL_EXT_SPR 0x03 /* SPR */
+#define IEEE80211_CTL_EXT_GRANT 0x04 /* Grant */
+#define IEEE80211_CTL_EXT_DMG_CTS 0x05 /* DMG CTS */
+#define IEEE80211_CTL_EXT_DMG_DTS 0x06 /* DMG DTS */
+#define IEEE80211_CTL_EXT_GRANT_ACK 0x07 /* Grant Ack */
+#define IEEE80211_CTL_EXT_SSW 0x08 /* SSW */
+#define IEEE80211_CTL_EXT_SSW_FBACK 0x09 /* SSW-Feedback */
+#define IEEE80211_CTL_EXT_SSW_ACK 0x0a /* SSW-Ack */
+#define IEEE80211_CTL_EXT_TDD_BF 0x0b /* TDD Beamforming, 80211ay-2021 */
+/* 1100-1111 Reserved 0xc-0xf */
#define IEEE80211_IS_MGMT(wh) \
(!! (((wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) \
@@ -173,6 +201,9 @@ struct ieee80211_qosframe_addr4 {
#define IEEE80211_IS_DATA(wh) \
(!! (((wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) \
== IEEE80211_FC0_TYPE_DATA))
+#define IEEE80211_IS_EXT(wh) \
+ (!! (((wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) \
+ == IEEE80211_FC0_TYPE_EXT))
#define IEEE80211_FC0_QOSDATA \
(IEEE80211_FC0_TYPE_DATA|IEEE80211_FC0_SUBTYPE_QOS_DATA|IEEE80211_FC0_VERSION_0)