mac80211: Drop MESH_PLINK category and use new ANA-approved MESH_ACTION
[carl9170fw.git] / include / linux / ieee80211.h
index c0cde48df6589eeea0c65219e1e849c2c5447963..2be159d248d0e374c49f31074840678e6bea87ee 100644 (file)
 
 /* U-APSD queue for WMM IEs sent by AP */
 #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD      (1<<7)
+#define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f
 
 /* U-APSD queues for WMM IEs sent by STA */
 #define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO     (1<<0)
@@ -526,13 +527,28 @@ static inline int ieee80211_is_qos_nullfunc(__le16 fc)
               cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC);
 }
 
+static inline unsigned int ieee80211_hdrlen(__le16 fc)
+{
+       unsigned int hdrlen = 24;
+
+       if (ieee80211_has_a4(fc))
+               hdrlen = 30;
+
+       if (ieee80211_is_data_qos(fc)) {
+               hdrlen += IEEE80211_QOS_CTL_LEN;
+               if (ieee80211_has_order(fc))
+                       hdrlen += IEEE80211_HT_CTL_LEN;
+       }
+
+        return hdrlen;
+}
+
 struct ieee80211s_hdr {
        u8 flags;
        u8 ttl;
        __le32 seqnum;
        u8 eaddr1[6];
        u8 eaddr2[6];
-       u8 eaddr3[6];
 } __attribute__ ((packed));
 
 /* Mesh flags */
@@ -799,7 +815,7 @@ struct ieee80211_bar {
        __u8 ta[6];
        __le16 control;
        __le16 start_seq_num;
-} __attribute__((packed));
+} __attribute__((packed)) __aligned(4);
 
 /* 802.11 BA(R) control masks */
 #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL     0x0000
@@ -898,6 +914,15 @@ struct ieee80211_ht_cap {
 #define IEEE80211_HT_CAP_40MHZ_INTOLERANT      0x4000
 #define IEEE80211_HT_CAP_LSIG_TXOP_PROT                0x8000
 
+/* 802.11n HT extended capabilities masks (for extended_ht_cap_info) */
+#define IEEE80211_HT_EXT_CAP_PCO               0x0001
+#define IEEE80211_HT_EXT_CAP_PCO_TIME          0x0006
+#define                IEEE80211_HT_EXT_CAP_PCO_TIME_SHIFT     1
+#define IEEE80211_HT_EXT_CAP_MCS_FB            0x0300
+#define                IEEE80211_HT_EXT_CAP_MCS_FB_SHIFT       8
+#define IEEE80211_HT_EXT_CAP_HTC_SUP           0x0400
+#define IEEE80211_HT_EXT_CAP_RD_RESPONDER      0x0800
+
 /* 802.11n HT capability AMPDU settings (for ampdu_params_info) */
 #define IEEE80211_HT_AMPDU_PARM_FACTOR         0x03
 #define IEEE80211_HT_AMPDU_PARM_DENSITY                0x1C
@@ -973,7 +998,7 @@ struct ieee80211_ht_info {
 /* block-ack parameters */
 #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
 #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C
-#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0
+#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0
 #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000
 #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
 
@@ -1000,6 +1025,7 @@ struct ieee80211_ht_info {
 #define WLAN_AUTH_OPEN 0
 #define WLAN_AUTH_SHARED_KEY 1
 #define WLAN_AUTH_FT 2
+#define WLAN_AUTH_SAE 3
 #define WLAN_AUTH_LEAP 128
 
 #define WLAN_AUTH_CHALLENGE_LEN 128
@@ -1086,6 +1112,10 @@ enum ieee80211_statuscode {
        WLAN_STATUS_NO_DIRECT_LINK = 48,
        WLAN_STATUS_STA_NOT_PRESENT = 49,
        WLAN_STATUS_STA_NOT_QSTA = 50,
+       /* 802.11s */
+       WLAN_STATUS_ANTI_CLOG_REQUIRED = 76,
+       WLAN_STATUS_FCG_NOT_SUPP = 78,
+       WLAN_STATUS_STA_NO_TBTT = 78,
 };
 
 
@@ -1126,6 +1156,22 @@ enum ieee80211_reasoncode {
        WLAN_REASON_QSTA_REQUIRE_SETUP = 38,
        WLAN_REASON_QSTA_TIMEOUT = 39,
        WLAN_REASON_QSTA_CIPHER_NOT_SUPP = 45,
+       /* 802.11s */
+       WLAN_REASON_MESH_PEER_CANCELED = 52,
+       WLAN_REASON_MESH_MAX_PEERS = 53,
+       WLAN_REASON_MESH_CONFIG = 54,
+       WLAN_REASON_MESH_CLOSE = 55,
+       WLAN_REASON_MESH_MAX_RETRIES = 56,
+       WLAN_REASON_MESH_CONFIRM_TIMEOUT = 57,
+       WLAN_REASON_MESH_INVALID_GTK = 58,
+       WLAN_REASON_MESH_INCONSISTENT_PARAM = 59,
+       WLAN_REASON_MESH_INVALID_SECURITY = 60,
+       WLAN_REASON_MESH_PATH_ERROR = 61,
+       WLAN_REASON_MESH_PATH_NOFORWARD = 62,
+       WLAN_REASON_MESH_PATH_DEST_UNREACHABLE = 63,
+       WLAN_REASON_MAC_EXISTS_IN_MBSS = 64,
+       WLAN_REASON_MESH_CHAN_REGULATORY = 65,
+       WLAN_REASON_MESH_CHAN = 66,
 };
 
 
@@ -1153,20 +1199,33 @@ enum ieee80211_eid {
        WLAN_EID_TS_DELAY = 43,
        WLAN_EID_TCLAS_PROCESSING = 44,
        WLAN_EID_QOS_CAPA = 46,
-       /* 802.11s
-        *
-        * All mesh EID numbers are pending IEEE 802.11 ANA approval.
-        * The numbers have been incremented from those suggested in
-        * 802.11s/D2.0 so that MESH_CONFIG does not conflict with
-        * EXT_SUPP_RATES.
+       /* 802.11s */
+       WLAN_EID_MESH_CONFIG = 113,
+       WLAN_EID_MESH_ID = 114,
+       WLAN_EID_LINK_METRIC_REPORT = 115,
+       WLAN_EID_CONGESTION_NOTIFICATION = 116,
+       /* Note that the Peer Link IE has been replaced with the similar
+        * Peer Management IE.  We will keep the former definition until mesh
+        * code is changed to comply with latest 802.11s drafts.
         */
-       WLAN_EID_MESH_CONFIG = 51,
-       WLAN_EID_MESH_ID = 52,
-       WLAN_EID_PEER_LINK = 55,
-       WLAN_EID_PREQ = 68,
-       WLAN_EID_PREP = 69,
-       WLAN_EID_PERR = 70,
-       WLAN_EID_RANN = 49,     /* compatible with FreeBSD */
+       WLAN_EID_PEER_LINK = 55,  /* no longer in 802.11s drafts */
+       WLAN_EID_PEER_MGMT = 117,
+       WLAN_EID_CHAN_SWITCH_PARAM = 118,
+       WLAN_EID_MESH_AWAKE_WINDOW = 119,
+       WLAN_EID_BEACON_TIMING = 120,
+       WLAN_EID_MCCAOP_SETUP_REQ = 121,
+       WLAN_EID_MCCAOP_SETUP_RESP = 122,
+       WLAN_EID_MCCAOP_ADVERT = 123,
+       WLAN_EID_MCCAOP_TEARDOWN = 124,
+       WLAN_EID_GANN = 125,
+       WLAN_EID_RANN = 126,
+       WLAN_EID_PREQ = 130,
+       WLAN_EID_PREP = 131,
+       WLAN_EID_PERR = 132,
+       WLAN_EID_PXU = 137,
+       WLAN_EID_PXUC = 138,
+       WLAN_EID_AUTH_MESH_PEER_EXCH = 139,
+       WLAN_EID_MIC = 140,
 
        WLAN_EID_PWR_CONSTRAINT = 32,
        WLAN_EID_PWR_CAPABILITY = 33,
@@ -1203,6 +1262,9 @@ enum ieee80211_eid {
        WLAN_EID_BSS_AC_ACCESS_DELAY = 68,
        WLAN_EID_RRM_ENABLED_CAPABILITIES = 70,
        WLAN_EID_MULTIPLE_BSSID = 71,
+       WLAN_EID_BSS_COEX_2040 = 72,
+       WLAN_EID_OVERLAP_BSS_SCAN_PARAM = 74,
+       WLAN_EID_EXT_CAPABILITY = 127,
 
        WLAN_EID_MOBILITY_DOMAIN = 54,
        WLAN_EID_FAST_BSS_TRANSITION = 55,
@@ -1225,9 +1287,13 @@ enum ieee80211_category {
        WLAN_CATEGORY_HT = 7,
        WLAN_CATEGORY_SA_QUERY = 8,
        WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
+       WLAN_CATEGORY_MESH_ACTION = 13,
+       WLAN_CATEGORY_MULTIHOP_ACTION = 14,
+       WLAN_CATEGORY_SELF_PROTECTED = 15,
        WLAN_CATEGORY_WMM = 17,
-       WLAN_CATEGORY_MESH_PLINK = 30,          /* Pending ANA approval */
-       WLAN_CATEGORY_MESH_PATH_SEL = 32,       /* Pending ANA approval */
+       /* TODO: remove MESH_PATH_SEL after mesh is updated
+        * to current 802.11s draft  */
+       WLAN_CATEGORY_MESH_PATH_SEL = 32,
        WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
        WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
 };
@@ -1262,6 +1328,31 @@ enum ieee80211_key_len {
        WLAN_KEY_LEN_AES_CMAC = 16,
 };
 
+/**
+ * enum - mesh path selection protocol identifier
+ *
+ * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol
+ * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will
+ * be specified in a vendor specific information element
+ */
+enum {
+       IEEE80211_PATH_PROTOCOL_HWMP = 0,
+       IEEE80211_PATH_PROTOCOL_VENDOR = 255,
+};
+
+/**
+ * enum - mesh path selection metric identifier
+ *
+ * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric
+ * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be
+ * specified in a vendor specific information element
+ */
+enum {
+       IEEE80211_PATH_METRIC_AIRTIME = 0,
+       IEEE80211_PATH_METRIC_VENDOR = 255,
+};
+
+
 /*
  * IEEE 802.11-2007 7.3.2.9 Country information element
  *
@@ -1272,6 +1363,9 @@ enum ieee80211_key_len {
 /* Although the spec says 8 I'm seeing 6 in practice */
 #define IEEE80211_COUNTRY_IE_MIN_LEN   6
 
+/* The Country String field of the element shall be 3 octets in length */
+#define IEEE80211_COUNTRY_STRING_LEN   3
+
 /*
  * For regulatory extension stuff see IEEE 802.11-2007
  * Annex I (page 1141) and Annex J (page 1147). Also
@@ -1365,6 +1459,8 @@ enum ieee80211_sa_query_action {
 /* AKM suite selectors */
 #define WLAN_AKM_SUITE_8021X           0x000FAC01
 #define WLAN_AKM_SUITE_PSK             0x000FAC02
+#define WLAN_AKM_SUITE_SAE                     0x000FAC08
+#define WLAN_AKM_SUITE_FT_OVER_SAE     0x000FAC09
 
 #define WLAN_MAX_KEY_LEN               32