0001
0002 #ifndef EAP_PACKET_H
0003 #define EAP_PACKET_H
0004
0005 #include <linux/compiler.h>
0006 #include <linux/bitops.h>
0007 #include <uapi/linux/if_ether.h>
0008
0009 struct ether_hdr {
0010 unsigned char h_dest[ETH_ALEN];
0011 unsigned char h_source[ETH_ALEN];
0012 unsigned char h_dest_snap;
0013 unsigned char h_source_snap;
0014 unsigned char h_command;
0015 unsigned char h_vendor_id[3];
0016 __be16 h_proto;
0017
0018 } __packed;
0019
0020 #define ETHER_HDR_SIZE sizeof(struct ether_hdr)
0021
0022 struct ieee802_1x_hdr {
0023 unsigned char version;
0024 unsigned char type;
0025 unsigned short length;
0026
0027 } __packed;
0028
0029 enum {
0030 IEEE802_1X_TYPE_EAP_PACKET = 0,
0031 IEEE802_1X_TYPE_EAPOL_START = 1,
0032 IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,
0033 IEEE802_1X_TYPE_EAPOL_KEY = 3,
0034 IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4
0035 };
0036
0037 #define WPA_NONCE_LEN 32
0038 #define WPA_REPLAY_COUNTER_LEN 8
0039
0040 struct wpa_eapol_key {
0041 unsigned char type;
0042 __be16 key_info;
0043 unsigned short key_length;
0044 unsigned char replay_counter[WPA_REPLAY_COUNTER_LEN];
0045 unsigned char key_nonce[WPA_NONCE_LEN];
0046 unsigned char key_iv[16];
0047 unsigned char key_rsc[8];
0048 unsigned char key_id[8];
0049 unsigned char key_mic[16];
0050 unsigned short key_data_length;
0051
0052 } __packed;
0053
0054 #define WPA_KEY_INFO_TYPE_MASK GENMASK(2, 0)
0055 #define WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 BIT(0)
0056 #define WPA_KEY_INFO_TYPE_HMAC_SHA1_AES BIT(1)
0057 #define WPA_KEY_INFO_KEY_TYPE BIT(3)
0058
0059 #define WPA_KEY_INFO_KEY_INDEX_MASK GENMASK(5, 4)
0060 #define WPA_KEY_INFO_KEY_INDEX_SHIFT 4
0061 #define WPA_KEY_INFO_INSTALL BIT(6)
0062 #define WPA_KEY_INFO_TXRX BIT(6)
0063 #define WPA_KEY_INFO_ACK BIT(7)
0064 #define WPA_KEY_INFO_MIC BIT(8)
0065 #define WPA_KEY_INFO_SECURE BIT(9)
0066 #define WPA_KEY_INFO_ERROR BIT(10)
0067 #define WPA_KEY_INFO_REQUEST BIT(11)
0068 #define WPA_KEY_INFO_ENCR_KEY_DATA BIT(12)
0069
0070 #endif