139beb93cSSam Leffler /*
239beb93cSSam Leffler  * EAP-TLV definitions (draft-josefsson-pppext-eap-tls-eap-10.txt)
339beb93cSSam Leffler  * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi>
439beb93cSSam Leffler  *
5*f05cddf9SRui Paulo  * This software may be distributed under the terms of the BSD license.
6*f05cddf9SRui Paulo  * See README for more details.
739beb93cSSam Leffler  */
839beb93cSSam Leffler 
939beb93cSSam Leffler #ifndef EAP_TLV_COMMON_H
1039beb93cSSam Leffler #define EAP_TLV_COMMON_H
1139beb93cSSam Leffler 
1239beb93cSSam Leffler /* EAP-TLV TLVs (draft-josefsson-ppext-eap-tls-eap-10.txt) */
1339beb93cSSam Leffler #define EAP_TLV_RESULT_TLV 3 /* Acknowledged Result */
1439beb93cSSam Leffler #define EAP_TLV_NAK_TLV 4
1539beb93cSSam Leffler #define EAP_TLV_ERROR_CODE_TLV 5
1639beb93cSSam Leffler #define EAP_TLV_CONNECTION_BINDING_TLV 6
1739beb93cSSam Leffler #define EAP_TLV_VENDOR_SPECIFIC_TLV 7
1839beb93cSSam Leffler #define EAP_TLV_URI_TLV 8
1939beb93cSSam Leffler #define EAP_TLV_EAP_PAYLOAD_TLV 9
2039beb93cSSam Leffler #define EAP_TLV_INTERMEDIATE_RESULT_TLV 10
213157ba21SRui Paulo #define EAP_TLV_PAC_TLV 11 /* RFC 5422, Section 4.2 */
2239beb93cSSam Leffler #define EAP_TLV_CRYPTO_BINDING_TLV 12
2339beb93cSSam Leffler #define EAP_TLV_CALLING_STATION_ID_TLV 13
2439beb93cSSam Leffler #define EAP_TLV_CALLED_STATION_ID_TLV 14
2539beb93cSSam Leffler #define EAP_TLV_NAS_PORT_TYPE_TLV 15
2639beb93cSSam Leffler #define EAP_TLV_SERVER_IDENTIFIER_TLV 16
2739beb93cSSam Leffler #define EAP_TLV_IDENTITY_TYPE_TLV 17
2839beb93cSSam Leffler #define EAP_TLV_SERVER_TRUSTED_ROOT_TLV 18
2939beb93cSSam Leffler #define EAP_TLV_REQUEST_ACTION_TLV 19
3039beb93cSSam Leffler #define EAP_TLV_PKCS7_TLV 20
3139beb93cSSam Leffler 
3239beb93cSSam Leffler #define EAP_TLV_RESULT_SUCCESS 1
3339beb93cSSam Leffler #define EAP_TLV_RESULT_FAILURE 2
3439beb93cSSam Leffler 
3539beb93cSSam Leffler #define EAP_TLV_TYPE_MANDATORY 0x8000
3639beb93cSSam Leffler #define EAP_TLV_TYPE_MASK 0x3fff
3739beb93cSSam Leffler 
3839beb93cSSam Leffler #ifdef _MSC_VER
3939beb93cSSam Leffler #pragma pack(push, 1)
4039beb93cSSam Leffler #endif /* _MSC_VER */
4139beb93cSSam Leffler 
4239beb93cSSam Leffler struct eap_tlv_hdr {
4339beb93cSSam Leffler 	be16 tlv_type;
4439beb93cSSam Leffler 	be16 length;
4539beb93cSSam Leffler } STRUCT_PACKED;
4639beb93cSSam Leffler 
4739beb93cSSam Leffler struct eap_tlv_nak_tlv {
4839beb93cSSam Leffler 	be16 tlv_type;
4939beb93cSSam Leffler 	be16 length;
5039beb93cSSam Leffler 	be32 vendor_id;
5139beb93cSSam Leffler 	be16 nak_type;
5239beb93cSSam Leffler } STRUCT_PACKED;
5339beb93cSSam Leffler 
5439beb93cSSam Leffler struct eap_tlv_result_tlv {
5539beb93cSSam Leffler 	be16 tlv_type;
5639beb93cSSam Leffler 	be16 length;
5739beb93cSSam Leffler 	be16 status;
5839beb93cSSam Leffler } STRUCT_PACKED;
5939beb93cSSam Leffler 
6039beb93cSSam Leffler /* RFC 4851, Section 4.2.7 - Intermediate-Result TLV */
6139beb93cSSam Leffler struct eap_tlv_intermediate_result_tlv {
6239beb93cSSam Leffler 	be16 tlv_type;
6339beb93cSSam Leffler 	be16 length;
6439beb93cSSam Leffler 	be16 status;
6539beb93cSSam Leffler 	/* Followed by optional TLVs */
6639beb93cSSam Leffler } STRUCT_PACKED;
6739beb93cSSam Leffler 
6839beb93cSSam Leffler /* RFC 4851, Section 4.2.8 - Crypto-Binding TLV */
6939beb93cSSam Leffler struct eap_tlv_crypto_binding_tlv {
7039beb93cSSam Leffler 	be16 tlv_type;
7139beb93cSSam Leffler 	be16 length;
7239beb93cSSam Leffler 	u8 reserved;
7339beb93cSSam Leffler 	u8 version;
7439beb93cSSam Leffler 	u8 received_version;
7539beb93cSSam Leffler 	u8 subtype;
7639beb93cSSam Leffler 	u8 nonce[32];
7739beb93cSSam Leffler 	u8 compound_mac[20];
7839beb93cSSam Leffler } STRUCT_PACKED;
7939beb93cSSam Leffler 
8039beb93cSSam Leffler struct eap_tlv_pac_ack_tlv {
8139beb93cSSam Leffler 	be16 tlv_type;
8239beb93cSSam Leffler 	be16 length;
8339beb93cSSam Leffler 	be16 pac_type;
8439beb93cSSam Leffler 	be16 pac_len;
8539beb93cSSam Leffler 	be16 result;
8639beb93cSSam Leffler } STRUCT_PACKED;
8739beb93cSSam Leffler 
8839beb93cSSam Leffler /* RFC 4851, Section 4.2.9 - Request-Action TLV */
8939beb93cSSam Leffler struct eap_tlv_request_action_tlv {
9039beb93cSSam Leffler 	be16 tlv_type;
9139beb93cSSam Leffler 	be16 length;
9239beb93cSSam Leffler 	be16 action;
9339beb93cSSam Leffler } STRUCT_PACKED;
9439beb93cSSam Leffler 
953157ba21SRui Paulo /* RFC 5422, Section 4.2.6 - PAC-Type TLV */
9639beb93cSSam Leffler struct eap_tlv_pac_type_tlv {
9739beb93cSSam Leffler 	be16 tlv_type; /* PAC_TYPE_PAC_TYPE */
9839beb93cSSam Leffler 	be16 length;
9939beb93cSSam Leffler 	be16 pac_type;
10039beb93cSSam Leffler } STRUCT_PACKED;
10139beb93cSSam Leffler 
10239beb93cSSam Leffler #ifdef _MSC_VER
10339beb93cSSam Leffler #pragma pack(pop)
10439beb93cSSam Leffler #endif /* _MSC_VER */
10539beb93cSSam Leffler 
10639beb93cSSam Leffler #define EAP_TLV_CRYPTO_BINDING_SUBTYPE_REQUEST 0
10739beb93cSSam Leffler #define EAP_TLV_CRYPTO_BINDING_SUBTYPE_RESPONSE 1
10839beb93cSSam Leffler 
10939beb93cSSam Leffler #define EAP_TLV_ACTION_PROCESS_TLV 1
11039beb93cSSam Leffler #define EAP_TLV_ACTION_NEGOTIATE_EAP 2
11139beb93cSSam Leffler 
11239beb93cSSam Leffler #endif /* EAP_TLV_COMMON_H */
113