summaryrefslogtreecommitdiff
path: root/sys/net80211/ieee80211.h
diff options
context:
space:
mode:
authorDamien Bergamini <damien@cvs.openbsd.org>2009-01-26 19:09:42 +0000
committerDamien Bergamini <damien@cvs.openbsd.org>2009-01-26 19:09:42 +0000
commitf5bde2a8b2c137a3c51797048f76f625179c249b (patch)
treee7ada894dc97c72e04d71f1fca20fee90e8dc80b /sys/net80211/ieee80211.h
parentba892d095172c6f93edba4a0a5af1c2f8754d770 (diff)
Add some initial HT bits (not enabled yet) based on 802.11n Draft 7.01:
- implement A-MPDU frames buffering and reordering - implement A-MSDU decapsulation - process/send ADDBA Request, ADDBA Response and DELBA action frames - process Block Ack Request control frames (including MTBAR) - implement PBAC support (Protected Block Ack) - add some incomplete HT Capabilities and HT Operation IEs parsing Add more Management Frame Protection bits based on 802.11w Draft 7.0: - implement SA Query procedure (both AP and STA) - cleanup BIP Fix some bugs: - fix check for WEP key length that otherwise caused a stack smash in ieee80211_wep_encrypt (pointed out by Xavier Santolaria on macppc) - properly stop EAPOL timeout: fixes a panic that occured in HostAP mode when turning the interface down while a 4-way handshake is in progress (pointed out by Doughertys) Did some code cleanup too. The HT bits are currently not compiled in (IEEE80211_NO_HT is defined) because they won't be ready until after the next release and I didn't want to grow the kernel or to inadvertently introduce new bugs. They are here such that other people can look at the code. Notice that I had to add an extra parameter to ic_send_mgmt() for action frames, that is why there are small changes in drivers defining their own ic_send_mgmt() handler. Sorry for the not very incremental diff but this has been sitting in my tree for too long now.
Diffstat (limited to 'sys/net80211/ieee80211.h')
-rw-r--r--sys/net80211/ieee80211.h136
1 files changed, 124 insertions, 12 deletions
diff --git a/sys/net80211/ieee80211.h b/sys/net80211/ieee80211.h
index 065cf011033..11d337f248d 100644
--- a/sys/net80211/ieee80211.h
+++ b/sys/net80211/ieee80211.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ieee80211.h,v 1.47 2008/09/27 15:00:08 damien Exp $ */
+/* $OpenBSD: ieee80211.h,v 1.48 2009/01/26 19:09:41 damien Exp $ */
/* $NetBSD: ieee80211.h,v 1.6 2004/04/30 23:51:53 dyoung Exp $ */
/*-
@@ -179,10 +179,10 @@ struct ieee80211_htframe_addr4 { /* 11n */
*/
#define IEEE80211_QOS_TXOP 0xff00
#define IEEE80211_QOS_AMSDU 0x0080 /* 11n */
-#define IEEE80211_QOS_ACK_POLICY_NORMAL 0
-#define IEEE80211_QOS_ACK_POLICY_NOACK 1
-#define IEEE80211_QOS_ACK_POLICY_NOEXPLACK 2
-#define IEEE80211_QOS_ACK_POLICY_BA 3
+#define IEEE80211_QOS_ACK_POLICY_NORMAL 0x0000
+#define IEEE80211_QOS_ACK_POLICY_NOACK 0x0020
+#define IEEE80211_QOS_ACK_POLICY_NOEXPLACK 0x0040
+#define IEEE80211_QOS_ACK_POLICY_BA 0x0060
#define IEEE80211_QOS_ACK_POLICY_MASK 0x0060
#define IEEE80211_QOS_ACK_POLICY_SHIFT 5
#define IEEE80211_QOS_EOSP 0x0010
@@ -325,11 +325,13 @@ enum {
IEEE80211_ELEMID_CHALLENGE = 16,
/* 17-31 reserved for challenge text extension */
IEEE80211_ELEMID_ERP = 42,
+ IEEE80211_ELEMID_HTCAPS = 45, /* 11n */
IEEE80211_ELEMID_QOS_CAP = 46,
IEEE80211_ELEMID_RSN = 48,
IEEE80211_ELEMID_XRATES = 50,
+ IEEE80211_ELEMID_TIE = 56, /* 11r */
+ IEEE80211_ELEMID_HTOP = 61, /* 11n */
IEEE80211_ELEMID_MMIE = 76, /* 11w */
- IEEE80211_ELEMID_ASSOC_CBT = 77, /* 11w */
IEEE80211_ELEMID_TPC = 150,
IEEE80211_ELEMID_CCKM = 156,
IEEE80211_ELEMID_VENDOR = 221 /* vendor private */
@@ -344,7 +346,7 @@ enum {
IEEE80211_CATEG_DLS = 2,
IEEE80211_CATEG_BA = 3,
IEEE80211_CATEG_HT = 7, /* 11n */
- IEEE80211_CATEG_SALT = 8 /* 11w */
+ IEEE80211_CATEG_SA_QUERY = 8 /* 11w */
};
/*
@@ -355,10 +357,10 @@ enum {
#define IEEE80211_ACTION_DELBA 2
/*
- * SALT Action field values (see Table 7.57l).
+ * SA Query Action field values (see Table 7-57l).
*/
-#define IEEE80211_ACTION_SALT_REQ 0
-#define IEEE80211_ACTION_SALT_RESP 1
+#define IEEE80211_ACTION_SA_QUERY_REQ 0
+#define IEEE80211_ACTION_SA_QUERY_RESP 1
/*
* HT Action field values (see Table 7-57m).
@@ -371,6 +373,15 @@ enum {
#define IEEE80211_RATE_MAXSIZE 15 /* max rates we'll handle */
/*
+ * BA/BAR Control field (see Figure 7-13).
+ */
+#define IEEE80211_BA_ACK_POLICY 0x0001
+#define IEEE80211_BA_MULTI_TID 0x0002
+#define IEEE80211_BA_COMPRESSED 0x0004
+#define IEEE80211_BA_TID_INFO_MASK 0xf000
+#define IEEE80211_BA_TID_INFO_SHIFT 12
+
+/*
* ERP information element (see 7.3.2.13).
*/
#define IEEE80211_ERP_NON_ERP_PRESENT 0x01
@@ -395,6 +406,100 @@ enum {
#define IEEE80211_RSNCAP_PEERKEYENA 0x0200
#define IEEE80211_RSNCAP_SPPAMSDUC 0x0400 /* 11n */
#define IEEE80211_RSNCAP_SPPAMSDUR 0x0800 /* 11n */
+#define IEEE80211_RSNCAP_PBAC 0x1000 /* 11n */
+
+/*
+ * HT Capabilities Info (see 7.3.2.57.2).
+ */
+#define IEEE80211_HTCAP_LDPC 0x00000001
+#define IEEE80211_HTCAP_CBW20_40 0x00000002
+#define IEEE80211_HTCAP_SMPS_MASK 0x0000000c
+#define IEEE80211_HTCAP_SMPS_SHIFT 2
+#define IEEE80211_HTCAP_SMPS_STA 0
+#define IEEE80211_HTCAP_SMPS_DYN 1
+#define IEEE80211_HTCAP_SMPS_DIS 3
+#define IEEE80211_HTCAP_GF 0x00000010
+#define IEEE80211_HTCAP_SGI20 0x00000020
+#define IEEE80211_HTCAP_SGI40 0x00000040
+#define IEEE80211_HTCAP_TXSTBC 0x00000080
+#define IEEE80211_HTCAP_RXSTBC_MASK 0x00000300
+#define IEEE80211_HTCAP_RXSTBC_SHIFT 8
+#define IEEE80211_HTCAP_DELAYEDBA 0x00000400
+#define IEEE80211_HTCAP_AMSDU7935 0x00000800
+#define IEEE80211_HTCAP_DSSSCCK40 0x00001000
+#define IEEE80211_HTCAP_PSMP 0x00002000
+#define IEEE80211_HTCAP_40INTOLERANT 0x00004000
+#define IEEE80211_HTCAP_LSIGTXOPPROT 0x00008000
+
+/*
+ * HT Extended Capabilities (see 7.3.2.57.5).
+ */
+#define IEEE80211_HTXCAP_PCO 0x0001
+#define IEEE80211_HTXCAP_PCOTT_MASK 0x0006
+#define IEEE80211_HTXCAP_PCOTT_SHIFT 1
+#define IEEE80211_HTXCAP_PCOTT_400 1
+#define IEEE80211_HTXCAP_PCOTT_1500 2
+#define IEEE80211_HTXCAP_PCOTT_5000 3
+/* Bits 3-7 are reserved. */
+#define IEEE80211_HTXCAP_MFB_MASK 0x0300
+#define IEEE80211_HTXCAP_MFB_SHIFT 8
+#define IEEE80211_HTXCAP_MFB_NONE 0
+#define IEEE80211_HTXCAP_MFB_UNSOL 2
+#define IEEE80211_HTXCAP_MFB_BOTH 3
+#define IEEE80211_HTXCAP_HTC 0x0400
+#define IEEE80211_HTXCAP_RDRESP 0x0800
+/* Bits 12-15 are reserved. */
+
+/*
+ * Transmit Beamforming (TxBF) Capabilities (see 7.3.2.57.6).
+ */
+#define IEEE80211_TXBFCAP_IMPLICIT_RX 0x00000001
+#define IEEE80211_TXBFCAP_RSSC 0x00000002
+#define IEEE80211_TXBFCAP_TSSC 0x00000004
+#define IEEE80211_TXBFCAP_RNDP 0x00000008
+#define IEEE80211_TXBFCAP_TNDP 0x00000010
+#define IEEE80211_TXBFCAP_IMPLICIT_TX 0x00000020
+#define IEEE80211_TXBFCAP_CALIB_MASK 0x000000c0
+#define IEEE80211_TXBFCAP_CALIB_SHIFT 6
+#define IEEE80211_TXBFCAP_TX_CSI 0x00000100
+
+/*
+ * Antenna Selection (ASEL) Capability (see 7.3.2.57.7).
+ */
+#define IEEE80211_ASELCAP_ASEL 0x01
+#define IEEE80211_ASELCAP_CSIFB 0x02
+/* Bit 7 is reserved. */
+
+/*
+ * HT Operation element (see 7.3.2.58).
+ */
+/* Byte 1. */
+#define IEEE80211_HTOP0_SCO_MASK 0x03
+#define IEEE80211_HTOP0_SCO_SHIFT 0
+#define IEEE80211_HTOP0_SCO_SCN 0
+#define IEEE80211_HTOP0_SCO_SCA 1
+#define IEEE80211_HTOP0_SCO_SCB 3
+#define IEEE80211_HTOP0_CHW 0x04
+#define IEEE80211_HTOP0_RIFS 0x08
+#define IEEE80211_HTOP0_SPSMP 0x10
+#define IEEE80211_HTOP0_SIG_MASK 0xe0
+#define IEEE80211_HTOP0_SIG_SHIFT 5
+/* Bytes 2-3. */
+#define IEEE80211_HTOP1_PROT_MASK 0x0003
+#define IEEE80211_HTOP1_PROT_SHIFT 0
+#define IEEE80211_HTOP1_NONGTSTA 0x0004
+/* Bit 3 is reserved. */
+#define IEEE80211_HTOP1_OBSS_NONHTSTA 0x0010
+/* Bits 5-15 are reserved. */
+/* Bytes 4-5. */
+/* Bits 0-5 are reserved. */
+#define IEEE80211_HTOP2_DUALBEACON 0x0040
+#define IEEE80211_HTOP2_DUALCTSPROT 0x0080
+#define IEEE80211_HTOP2_STBCBEACON 0x0100
+#define IEEE80211_HTOP2_LSIGTXOP 0x0200
+#define IEEE80211_HTOP2_PCOACTIVE 0x0400
+#define IEEE80211_HTOP2_PCOPHASE40 0x0800
+/* Bits 12-15 are reserved. */
/*
* EDCA Access Categories.
@@ -484,8 +589,9 @@ enum {
IEEE80211_REASON_RSN_IE_BAD_CAP = 22,
IEEE80211_REASON_CIPHER_REJ_POLICY = 24,
- IEEE80211_REASON_BAD_GROUP_MGMT_CIPHER = 25, /* 11w */
- IEEE80211_REASON_MFP_POLICY = 26 /* 11w */
+
+ IEEE80211_REASON_SETUP_REQUIRED = 38,
+ IEEE80211_REASON_TIMEOUT = 39
};
/*
@@ -511,6 +617,12 @@ enum {
IEEE80211_STATUS_SHORTSLOT_REQUIRED = 25,
IEEE80211_STATUS_DSSSOFDM_REQUIRED = 26,
+ IEEE80211_STATUS_TRY_AGAIN_LATER = 30,
+ IEEE80211_STATUS_MFP_POLICY = 31,
+
+ IEEE80211_STATUS_REFUSED = 37,
+ IEEE80211_STATUS_INVALID_PARAM = 38,
+
IEEE80211_STATUS_IE_INVALID = 40,
IEEE80211_STATUS_BAD_GROUP_CIPHER = 41,
IEEE80211_STATUS_BAD_PAIRWISE_CIPHER = 42,