cfg80211: Add KEK/nonces for FILS association frames
[carl9170fw.git] / include / linux / ieee80211.h
index 4550eb7a3fd470943c090b27fd3a94d57a60b524..35bb2e3a4dc7c9d8bdf9d124f35b6ffea26f5919 100644 (file)
@@ -1594,6 +1594,9 @@ struct ieee80211_vht_operation {
 #define WLAN_AUTH_SHARED_KEY 1
 #define WLAN_AUTH_FT 2
 #define WLAN_AUTH_SAE 3
+#define WLAN_AUTH_FILS_SK 4
+#define WLAN_AUTH_FILS_SK_PFS 5
+#define WLAN_AUTH_FILS_PK 6
 #define WLAN_AUTH_LEAP 128
 
 #define WLAN_AUTH_CHALLENGE_LEN 128
@@ -1978,6 +1981,26 @@ enum ieee80211_eid {
 
        WLAN_EID_VENDOR_SPECIFIC = 221,
        WLAN_EID_QOS_PARAMETER = 222,
+       WLAN_EID_CAG_NUMBER = 237,
+       WLAN_EID_AP_CSN = 239,
+       WLAN_EID_FILS_INDICATION = 240,
+       WLAN_EID_DILS = 241,
+       WLAN_EID_FRAGMENT = 242,
+       WLAN_EID_EXTENSION = 255
+};
+
+/* Element ID Extensions for Element ID 255 */
+enum ieee80211_eid_ext {
+       WLAN_EID_EXT_ASSOC_DELAY_INFO = 1,
+       WLAN_EID_EXT_FILS_REQ_PARAMS = 2,
+       WLAN_EID_EXT_FILS_KEY_CONFIRM = 3,
+       WLAN_EID_EXT_FILS_SESSION = 4,
+       WLAN_EID_EXT_FILS_HLP_CONTAINER = 5,
+       WLAN_EID_EXT_FILS_IP_ADDR_ASSIGN = 6,
+       WLAN_EID_EXT_KEY_DELIVERY = 7,
+       WLAN_EID_EXT_FILS_WRAPPED_DATA = 8,
+       WLAN_EID_EXT_FILS_PUBLIC_KEY = 12,
+       WLAN_EID_EXT_FILS_NONCE = 13,
 };
 
 /* Action category code */
@@ -2091,6 +2114,9 @@ enum ieee80211_key_len {
 #define IEEE80211_GCMP_MIC_LEN         16
 #define IEEE80211_GCMP_PN_LEN          6
 
+#define FILS_NONCE_LEN                 16
+#define FILS_MAX_KEK_LEN               64
+
 /* Public action codes */
 enum ieee80211_pub_actioncode {
        WLAN_PUB_ACTION_EXT_CHANSW_ANN = 4,
@@ -2491,12 +2517,17 @@ static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,
        return mgmt->u.action.category == WLAN_CATEGORY_PUBLIC;
 }
 
+static inline bool is_multicast_ether_addr(const u8 *a)
+{
+        return 0x01 & a[0];
+}
+
 /**
  * _ieee80211_is_group_privacy_action - check if frame is a group addressed
  * privacy action frame
  * @hdr: the frame
  */
-static inline bool _ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr)
+static inline bool ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr)
 {
        struct ieee80211_mgmt *mgmt = (void *)hdr;
 
@@ -2508,18 +2539,6 @@ static inline bool _ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr)
               mgmt->u.action.category == WLAN_CATEGORY_MULTIHOP_ACTION;
 }
 
-/**
- * ieee80211_is_group_privacy_action - check if frame is a group addressed
- * privacy action frame
- * @skb: the skb containing the frame, length will be checked
- */
-static inline bool ieee80211_is_group_privacy_action(struct sk_buff *skb)
-{
-       if (skb->len < IEEE80211_MIN_ACTION_SIZE)
-               return false;
-       return _ieee80211_is_group_privacy_action((void *)skb->data);
-}
-
 /**
  * ieee80211_tu_to_usec - convert time units (TU) to microseconds
  * @tu: the TUs