{nl,cfg,mac}80211: fix the coding style related to mesh parameters
[carl9170fw.git] / include / linux / ieee80211.h
index 589e8571fa32d7ecb3b7b22b088cb81ef3c5d2e8..82f88d8d49c95a87e700b32887c4ec3d618134f1 100644 (file)
 #define IEEE80211_QOS_CTL_ACK_POLICY_NOACK     0x0020
 #define IEEE80211_QOS_CTL_ACK_POLICY_NO_EXPL   0x0040
 #define IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK  0x0060
+#define IEEE80211_QOS_CTL_ACK_POLICY_MASK      0x0060
 /* A-MSDU 802.11n */
 #define IEEE80211_QOS_CTL_A_MSDU_PRESENT       0x0080
+/* Mesh Control 802.11s */
+#define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT  0x0100
 
 /* U-APSD queue for WMM IEs sent by AP */
 #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD      (1<<7)
@@ -554,6 +557,15 @@ static inline unsigned int ieee80211_hdrlen(__le16 fc)
         return hdrlen;
 }
 
+/**
+ * ieee80211_is_first_frag - check if IEEE80211_SCTL_FRAG is not set
+ * @seq_ctrl: frame sequence control bytes in little-endian byteorder
+ */
+static inline int ieee80211_is_first_frag(__le16 seq_ctrl)
+{
+       return (seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG)) == 0;
+}
+
 struct ieee80211s_hdr {
        u8 flags;
        u8 ttl;
@@ -641,10 +653,15 @@ struct ieee80211_rann_ie {
        u8 rann_hopcount;
        u8 rann_ttl;
        u8 rann_addr[6];
-       u32 rann_seq;
-       u32 rann_metric;
+       __le32 rann_seq;
+       __le32 rann_interval;
+       __le32 rann_metric;
 } __attribute__ ((packed));
 
+enum ieee80211_rann_flags {
+       RANN_FLAG_IS_GATE = 1 << 0,
+};
+
 #define WLAN_SA_QUERY_TR_ID_LEN 2
 
 struct ieee80211_mgmt {
@@ -765,11 +782,20 @@ struct ieee80211_mgmt {
                                        u8 action;
                                        u8 smps_control;
                                } __attribute__ ((packed)) ht_smps;
+                               struct {
+                                       u8 action_code;
+                                       u8 dialog_token;
+                                       __le16 capability;
+                                       u8 variable[0];
+                               } __packed tdls_discover_resp;
                        } u;
                } __attribute__ ((packed)) action;
        } u;
 } __attribute__ ((packed));
 
+/* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */
+#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
+
 /* mgmt header + 1 byte category code */
 #define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u)
 
@@ -783,6 +809,13 @@ struct ieee80211_mmie {
        u8 mic[8];
 } __attribute__ ((packed));
 
+struct ieee80211_vendor_ie {
+       u8 element_id;
+       u8 len;
+       u8 oui[3];
+       u8 oui_type;
+} __packed;
+
 /* Control frames */
 struct ieee80211_rts {
        __le16 frame_control;
@@ -804,6 +837,52 @@ struct ieee80211_pspoll {
        u8 ta[6];
 } __attribute__ ((packed));
 
+/* TDLS */
+
+/* Link-id information element */
+struct ieee80211_tdls_lnkie {
+       u8 ie_type; /* Link Identifier IE */
+       u8 ie_len;
+       u8 bssid[6];
+       u8 init_sta[6];
+       u8 resp_sta[6];
+} __packed;
+
+struct ieee80211_tdls_data {
+       u8 da[6];
+       u8 sa[6];
+       __be16 ether_type;
+       u8 payload_type;
+       u8 category;
+       u8 action_code;
+       union {
+               struct {
+                       u8 dialog_token;
+                       __le16 capability;
+                       u8 variable[0];
+               } __packed setup_req;
+               struct {
+                       __le16 status_code;
+                       u8 dialog_token;
+                       __le16 capability;
+                       u8 variable[0];
+               } __packed setup_resp;
+               struct {
+                       __le16 status_code;
+                       u8 dialog_token;
+                       u8 variable[0];
+               } __packed setup_cfm;
+               struct {
+                       __le16 reason_code;
+                       u8 variable[0];
+               } __packed teardown;
+               struct {
+                       u8 dialog_token;
+                       u8 variable[0];
+               } __packed discover_req;
+       } u;
+} __packed;
+
 /**
  * struct ieee80211_bar - HT Block Ack Request
  *
@@ -958,13 +1037,13 @@ enum ieee80211_min_mpdu_spacing {
 };
 
 /**
- * struct ieee80211_ht_info - HT information
+ * struct ieee80211_ht_operation - HT operation IE
  *
- * This structure is the "HT information element" as
- * described in 802.11n D5.0 7.3.2.58
+ * This structure is the "HT operation element" as
+ * described in 802.11n-2009 7.3.2.57
  */
-struct ieee80211_ht_info {
-       u8 control_chan;
+struct ieee80211_ht_operation {
+       u8 primary_chan;
        u8 ht_param;
        __le16 operation_mode;
        __le16 stbc_param;
@@ -978,8 +1057,6 @@ struct ieee80211_ht_info {
 #define                IEEE80211_HT_PARAM_CHA_SEC_BELOW        0x03
 #define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY              0x04
 #define IEEE80211_HT_PARAM_RIFS_MODE                   0x08
-#define IEEE80211_HT_PARAM_SPSMP_SUPPORT               0x10
-#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN          0xE0
 
 /* for operation_mode */
 #define IEEE80211_HT_OP_MODE_PROTECTION                        0x0003
@@ -1212,6 +1289,8 @@ enum ieee80211_eid {
        WLAN_EID_TS_DELAY = 43,
        WLAN_EID_TCLAS_PROCESSING = 44,
        WLAN_EID_QOS_CAPA = 46,
+       /* 802.11z */
+       WLAN_EID_LINK_ID = 101,
        /* 802.11s */
        WLAN_EID_MESH_CONFIG = 113,
        WLAN_EID_MESH_ID = 114,
@@ -1250,7 +1329,7 @@ enum ieee80211_eid {
        WLAN_EID_EXT_SUPP_RATES = 50,
 
        WLAN_EID_HT_CAPABILITY = 45,
-       WLAN_EID_HT_INFORMATION = 61,
+       WLAN_EID_HT_OPERATION = 61,
 
        WLAN_EID_RSN = 48,
        WLAN_EID_MMIE = 76,
@@ -1295,13 +1374,11 @@ enum ieee80211_category {
        WLAN_CATEGORY_HT = 7,
        WLAN_CATEGORY_SA_QUERY = 8,
        WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
+       WLAN_CATEGORY_TDLS = 12,
        WLAN_CATEGORY_MESH_ACTION = 13,
        WLAN_CATEGORY_MULTIHOP_ACTION = 14,
        WLAN_CATEGORY_SELF_PROTECTED = 15,
        WLAN_CATEGORY_WMM = 17,
-       /* 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,
 };
@@ -1361,15 +1438,57 @@ enum ieee80211_key_len {
        WLAN_KEY_LEN_AES_CMAC = 16,
 };
 
+/* Public action codes */
+enum ieee80211_pub_actioncode {
+       WLAN_PUB_ACTION_TDLS_DISCOVER_RES = 14,
+};
+
+/* TDLS action codes */
+enum ieee80211_tdls_actioncode {
+       WLAN_TDLS_SETUP_REQUEST = 0,
+       WLAN_TDLS_SETUP_RESPONSE = 1,
+       WLAN_TDLS_SETUP_CONFIRM = 2,
+       WLAN_TDLS_TEARDOWN = 3,
+       WLAN_TDLS_PEER_TRAFFIC_INDICATION = 4,
+       WLAN_TDLS_CHANNEL_SWITCH_REQUEST = 5,
+       WLAN_TDLS_CHANNEL_SWITCH_RESPONSE = 6,
+       WLAN_TDLS_PEER_PSM_REQUEST = 7,
+       WLAN_TDLS_PEER_PSM_RESPONSE = 8,
+       WLAN_TDLS_PEER_TRAFFIC_RESPONSE = 9,
+       WLAN_TDLS_DISCOVERY_REQUEST = 10,
+};
+
+/*
+ * TDLS capabililites to be enabled in the 5th byte of the
+ * @WLAN_EID_EXT_CAPABILITY information element
+ */
+#define WLAN_EXT_CAPA5_TDLS_ENABLED    BIT(5)
+#define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6)
+
+/* TDLS specific payload type in the LLC/SNAP header */
+#define WLAN_TDLS_SNAP_RFTYPE  0x2
+
+/**
+ * enum - mesh synchronization method identifier
+ *
+ * @IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET: the default synchronization method
+ * @IEEE80211_SYNC_METHOD_VENDOR: a vendor specific synchronization method
+ *     that will be specified in a vendor specific information element
+ */
+enum {
+       IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1,
+       IEEE80211_SYNC_METHOD_VENDOR = 255,
+};
+
 /**
  * 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
+ *     be specified in a vendor specific information element
  */
 enum {
-       IEEE80211_PATH_PROTOCOL_HWMP = 0,
+       IEEE80211_PATH_PROTOCOL_HWMP = 1,
        IEEE80211_PATH_PROTOCOL_VENDOR = 255,
 };
 
@@ -1378,10 +1497,10 @@ enum {
  *
  * @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
+ *     specified in a vendor specific information element
  */
 enum {
-       IEEE80211_PATH_METRIC_AIRTIME = 0,
+       IEEE80211_PATH_METRIC_AIRTIME = 1,
        IEEE80211_PATH_METRIC_VENDOR = 255,
 };
 
@@ -1486,6 +1605,8 @@ enum ieee80211_sa_query_action {
 #define WLAN_CIPHER_SUITE_WEP104       0x000FAC05
 #define WLAN_CIPHER_SUITE_AES_CMAC     0x000FAC06
 
+#define WLAN_CIPHER_SUITE_SMS4         0x00147201
+
 /* AKM suite selectors */
 #define WLAN_AKM_SUITE_8021X           0x000FAC01
 #define WLAN_AKM_SUITE_PSK             0x000FAC02
@@ -1496,6 +1617,9 @@ enum ieee80211_sa_query_action {
 
 #define WLAN_PMKID_LEN                 16
 
+#define WLAN_OUI_WFA                   0x506f9a
+#define WLAN_OUI_TYPE_WFA_P2P          9
+
 /*
  * WMM/802.11e Tspec Element
  */
@@ -1619,6 +1743,23 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
        return false;
 }
 
+/**
+ * ieee80211_is_public_action - check if frame is a public action frame
+ * @hdr: the frame
+ * @len: length of the frame
+ */
+static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,
+                                             size_t len)
+{
+       struct ieee80211_mgmt *mgmt = (void *)hdr;
+
+       if (len < IEEE80211_MIN_ACTION_SIZE)
+               return false;
+       if (!ieee80211_is_action(hdr->frame_control))
+               return false;
+       return mgmt->u.action.category == WLAN_CATEGORY_PUBLIC;
+}
+
 /**
  * ieee80211_fhss_chan_to_freq - get channel frequency
  * @channel: the FHSS channel