Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / src / eap_common / eap_tlv_common.h
1 /*
2  * EAP-TLV definitions (draft-josefsson-pppext-eap-tls-eap-10.txt)
3  * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8
9 #ifndef EAP_TLV_COMMON_H
10 #define EAP_TLV_COMMON_H
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 /* EAP-TLV TLVs (draft-josefsson-ppext-eap-tls-eap-10.txt) */
17 #define EAP_TLV_RESULT_TLV 3 /* Acknowledged Result */
18 #define EAP_TLV_NAK_TLV 4
19 #define EAP_TLV_ERROR_CODE_TLV 5
20 #define EAP_TLV_CONNECTION_BINDING_TLV 6
21 #define EAP_TLV_VENDOR_SPECIFIC_TLV 7
22 #define EAP_TLV_URI_TLV 8
23 #define EAP_TLV_EAP_PAYLOAD_TLV 9
24 #define EAP_TLV_INTERMEDIATE_RESULT_TLV 10
25 #define EAP_TLV_PAC_TLV 11 /* RFC 5422, Section 4.2 */
26 #define EAP_TLV_CRYPTO_BINDING_TLV 12
27 #define EAP_TLV_CALLING_STATION_ID_TLV 13
28 #define EAP_TLV_CALLED_STATION_ID_TLV 14
29 #define EAP_TLV_NAS_PORT_TYPE_TLV 15
30 #define EAP_TLV_SERVER_IDENTIFIER_TLV 16
31 #define EAP_TLV_IDENTITY_TYPE_TLV 17
32 #define EAP_TLV_SERVER_TRUSTED_ROOT_TLV 18
33 #define EAP_TLV_REQUEST_ACTION_TLV 19
34 #define EAP_TLV_PKCS7_TLV 20
35
36 #define EAP_TLV_RESULT_SUCCESS 1
37 #define EAP_TLV_RESULT_FAILURE 2
38
39 #define EAP_TLV_TYPE_MANDATORY 0x8000
40 #define EAP_TLV_TYPE_MASK 0x3fff
41
42 #ifdef _MSC_VER
43 #pragma pack(push, 1)
44 #endif /* _MSC_VER */
45
46 struct eap_tlv_hdr {
47         be16 tlv_type;
48         be16 length;
49 } STRUCT_PACKED;
50
51 struct eap_tlv_nak_tlv {
52         be16 tlv_type;
53         be16 length;
54         be32 vendor_id;
55         be16 nak_type;
56 } STRUCT_PACKED;
57
58 struct eap_tlv_result_tlv {
59         be16 tlv_type;
60         be16 length;
61         be16 status;
62 } STRUCT_PACKED;
63
64 /* RFC 4851, Section 4.2.7 - Intermediate-Result TLV */
65 struct eap_tlv_intermediate_result_tlv {
66         be16 tlv_type;
67         be16 length;
68         be16 status;
69         /* Followed by optional TLVs */
70 } STRUCT_PACKED;
71
72 /* RFC 4851, Section 4.2.8 - Crypto-Binding TLV */
73 struct eap_tlv_crypto_binding_tlv {
74         be16 tlv_type;
75         be16 length;
76         u8 reserved;
77         u8 version;
78         u8 received_version;
79         u8 subtype;
80         u8 nonce[32];
81         u8 compound_mac[20];
82 } STRUCT_PACKED;
83
84 struct eap_tlv_pac_ack_tlv {
85         be16 tlv_type;
86         be16 length;
87         be16 pac_type;
88         be16 pac_len;
89         be16 result;
90 } STRUCT_PACKED;
91
92 /* RFC 4851, Section 4.2.9 - Request-Action TLV */
93 struct eap_tlv_request_action_tlv {
94         be16 tlv_type;
95         be16 length;
96         be16 action;
97 } STRUCT_PACKED;
98
99 /* RFC 5422, Section 4.2.6 - PAC-Type TLV */
100 struct eap_tlv_pac_type_tlv {
101         be16 tlv_type; /* PAC_TYPE_PAC_TYPE */
102         be16 length;
103         be16 pac_type;
104 } STRUCT_PACKED;
105
106 #ifdef _MSC_VER
107 #pragma pack(pop)
108 #endif /* _MSC_VER */
109
110 #define EAP_TLV_CRYPTO_BINDING_SUBTYPE_REQUEST 0
111 #define EAP_TLV_CRYPTO_BINDING_SUBTYPE_RESPONSE 1
112
113 #define EAP_TLV_ACTION_PROCESS_TLV 1
114 #define EAP_TLV_ACTION_NEGOTIATE_EAP 2
115
116 #ifdef __cplusplus
117 }
118 #endif
119
120 #endif /* EAP_TLV_COMMON_H */