1b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt/*
2b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt * Fundamental types and constants relating to WPA
3b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt *
438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Copyright (C) 1999-2013, Broadcom Corporation
538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
66dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any
76dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * purpose with or without fee is hereby granted, provided that the above
86dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * copyright notice and this permission notice appear in all copies.
96dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt *
106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt *
1838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * $Id: wpa.h 384536 2013-02-12 04:13:09Z $
19b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt */
20b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
21b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#ifndef _proto_wpa_h_
22b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define _proto_wpa_h_
23b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
24b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#include <typedefs.h>
25b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#include <proto/ethernet.h>
26b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
27b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
2838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* This marks the start of a packed structure section. */
29b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#include <packed_section_start.h>
30b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
3138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Reason Codes */
3238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
3338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 13 through 23 taken from IEEE Std 802.11i-2004 */
3438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVALID_WPA_IE		13	/* Invalid info. element */
3538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_MIC_FAILURE		14	/* Michael failure */
3638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_4WH_TIMEOUT		15	/* 4-way handshake timeout */
3738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_GTK_UPDATE_TIMEOUT	16	/* Group key update timeout */
3838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_WPA_IE_MISMATCH	17	/* WPA IE in 4-way handshake differs from
3938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * (re-)assoc. request/probe response
4038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
4138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVALID_MC_CIPHER	18	/* Invalid multicast cipher */
4238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVALID_UC_CIPHER	19	/* Invalid unicast cipher */
4338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVALID_AKMP		20	/* Invalid authenticated key management protocol */
4438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_BAD_WPA_VERSION	21	/* Unsupported WPA version */
4538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVALID_WPA_CAP	22	/* Invalid WPA IE capabilities */
4638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_8021X_AUTH_FAIL	23	/* 802.1X authentication failure */
47b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
48b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA2_PMKID_LEN	16
49b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
5038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA IE fixed portion */
51b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct
52b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt{
5338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tag;	/* TAG */
5438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 length;	/* TAG length */
5538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 oui[3];	/* IE OUI */
5638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 oui_type;	/* OUI type */
57b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	BWL_PRE_PACKED_STRUCT struct {
58b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 low;
59b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 high;
6038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	} BWL_POST_PACKED_STRUCT version;	/* IE version */
61b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT wpa_ie_fixed_t;
62b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_IE_OUITYPE_LEN	4
63b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_IE_FIXED_LEN	8
64b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_IE_TAG_FIXED_LEN	6
65b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
66b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct {
6738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tag;	/* TAG */
6838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 length;	/* TAG length */
69b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	BWL_PRE_PACKED_STRUCT struct {
70b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 low;
71b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 high;
7238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	} BWL_POST_PACKED_STRUCT version;	/* IE version */
73b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT wpa_rsn_ie_fixed_t;
74b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_RSN_IE_FIXED_LEN	4
75b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_RSN_IE_TAG_FIXED_LEN	2
76b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef uint8 wpa_pmkid_t[WPA2_PMKID_LEN];
77b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
7838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA suite/multicast suite */
79b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct
80b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt{
81b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 oui[3];
82b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	uint8 type;
83b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT wpa_suite_t, wpa_suite_mcast_t;
84b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_SUITE_LEN	4
85b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
8638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA unicast suite list/key management suite list */
87b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct
88b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt{
89b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	BWL_PRE_PACKED_STRUCT struct {
90b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 low;
91b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 high;
92b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	} BWL_POST_PACKED_STRUCT count;
93b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	wpa_suite_t list[1];
94b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT wpa_suite_ucast_t, wpa_suite_auth_key_mgmt_t;
95b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_IE_SUITE_COUNT_LEN	2
96b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidttypedef BWL_PRE_PACKED_STRUCT struct
97b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt{
98b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	BWL_PRE_PACKED_STRUCT struct {
99b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 low;
100b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt		uint8 high;
101b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	} BWL_POST_PACKED_STRUCT count;
102b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt	wpa_pmkid_t list[1];
103b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt} BWL_POST_PACKED_STRUCT wpa_pmkid_list_t;
104b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
10538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA cipher suites */
10638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_NONE		0	/* None */
10738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_WEP_40	1	/* WEP (40-bit) */
10838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_TKIP		2	/* TKIP: default for WPA */
10938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_AES_OCB	3	/* AES (OCB) */
11038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_AES_CCM	4	/* AES (CCM) */
11138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_WEP_104	5	/* WEP (104-bit) */
11238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_BIP		6	/* WEP (104-bit) */
11338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CIPHER_TPK		7	/* Group addressed traffic not allowed */
114b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
115b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
116b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define IS_WPA_CIPHER(cipher)	((cipher) == WPA_CIPHER_NONE || \
117b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt				 (cipher) == WPA_CIPHER_WEP_40 || \
118b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt				 (cipher) == WPA_CIPHER_WEP_104 || \
119b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt				 (cipher) == WPA_CIPHER_TKIP || \
120b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt				 (cipher) == WPA_CIPHER_AES_OCB || \
121ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt				 (cipher) == WPA_CIPHER_AES_CCM || \
122ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt				 (cipher) == WPA_CIPHER_TPK)
123b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
124b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
12538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA TKIP countermeasures parameters */
12638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_TKIP_CM_DETECT	60	/* multiple MIC failure window (seconds) */
12738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_TKIP_CM_BLOCK	60	/* countermeasures active window (seconds) */
128b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
12938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* RSN IE defines */
13038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_CAP_LEN		2	/* Length of RSN capabilities field (2 octets) */
131b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
13238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* RSN Capabilities defined in 802.11i */
133b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_PREAUTH			0x0001
134b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_NOPAIRWISE		0x0002
135b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_PTK_REPLAY_CNTR_MASK	0x000C
136b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_PTK_REPLAY_CNTR_SHIFT	2
137b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_GTK_REPLAY_CNTR_MASK	0x0030
138b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_GTK_REPLAY_CNTR_SHIFT	4
139b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_1_REPLAY_CNTR		0
140b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_2_REPLAY_CNTRS		1
141b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_4_REPLAY_CNTRS		2
142b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define RSN_CAP_16_REPLAY_CNTRS		3
14338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_CAP_MFPR			0x0040
14438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_CAP_MFPC			0x0080
14538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_CAP_SPPC			0x0400
14638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_CAP_SPPR			0x0800
147b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
14838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA capabilities defined in 802.11i */
149b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_CAP_4_REPLAY_CNTRS		RSN_CAP_4_REPLAY_CNTRS
150b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_CAP_16_REPLAY_CNTRS		RSN_CAP_16_REPLAY_CNTRS
151b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_CAP_REPLAY_CNTR_SHIFT	RSN_CAP_PTK_REPLAY_CNTR_SHIFT
152b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define WPA_CAP_REPLAY_CNTR_MASK	RSN_CAP_PTK_REPLAY_CNTR_MASK
153b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
15438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA capabilities defined in 802.11zD9.0 */
15538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CAP_PEER_KEY_ENABLE		(0x1 << 1)	/* bit 9 */
156b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
15738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WPA Specific defines */
15838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_CAP_LEN	RSN_CAP_LEN	/* Length of RSN capabilities in RSN IE (2 octets) */
15938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_PMKID_CNT_LEN	2 	/* Length of RSN PMKID count (2 octests) */
160b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
161b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#define	WPA_CAP_WPA2_PREAUTH		RSN_CAP_PREAUTH
162b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
16338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA2_PMKID_COUNT_LEN	2
164b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
165b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
16638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* This marks the end of a packed structure section. */
167b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt#include <packed_section_end.h>
168b6825ab724b9d671db9f26faae035f2d5ade04b6Dmitry Shmidt
16938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* _proto_wpa_h_ */
170