16d49e1aeSJan Lentfer /* 26d49e1aeSJan Lentfer * EAP-TLV definitions (draft-josefsson-pppext-eap-tls-eap-10.txt) 36d49e1aeSJan Lentfer * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi> 46d49e1aeSJan Lentfer * 5*3ff40c12SJohn Marino * This software may be distributed under the terms of the BSD license. 6*3ff40c12SJohn Marino * See README for more details. 76d49e1aeSJan Lentfer */ 86d49e1aeSJan Lentfer 96d49e1aeSJan Lentfer #ifndef EAP_TLV_COMMON_H 106d49e1aeSJan Lentfer #define EAP_TLV_COMMON_H 116d49e1aeSJan Lentfer 126d49e1aeSJan Lentfer /* EAP-TLV TLVs (draft-josefsson-ppext-eap-tls-eap-10.txt) */ 136d49e1aeSJan Lentfer #define EAP_TLV_RESULT_TLV 3 /* Acknowledged Result */ 146d49e1aeSJan Lentfer #define EAP_TLV_NAK_TLV 4 156d49e1aeSJan Lentfer #define EAP_TLV_ERROR_CODE_TLV 5 166d49e1aeSJan Lentfer #define EAP_TLV_CONNECTION_BINDING_TLV 6 176d49e1aeSJan Lentfer #define EAP_TLV_VENDOR_SPECIFIC_TLV 7 186d49e1aeSJan Lentfer #define EAP_TLV_URI_TLV 8 196d49e1aeSJan Lentfer #define EAP_TLV_EAP_PAYLOAD_TLV 9 206d49e1aeSJan Lentfer #define EAP_TLV_INTERMEDIATE_RESULT_TLV 10 216d49e1aeSJan Lentfer #define EAP_TLV_PAC_TLV 11 /* RFC 5422, Section 4.2 */ 226d49e1aeSJan Lentfer #define EAP_TLV_CRYPTO_BINDING_TLV 12 236d49e1aeSJan Lentfer #define EAP_TLV_CALLING_STATION_ID_TLV 13 246d49e1aeSJan Lentfer #define EAP_TLV_CALLED_STATION_ID_TLV 14 256d49e1aeSJan Lentfer #define EAP_TLV_NAS_PORT_TYPE_TLV 15 266d49e1aeSJan Lentfer #define EAP_TLV_SERVER_IDENTIFIER_TLV 16 276d49e1aeSJan Lentfer #define EAP_TLV_IDENTITY_TYPE_TLV 17 286d49e1aeSJan Lentfer #define EAP_TLV_SERVER_TRUSTED_ROOT_TLV 18 296d49e1aeSJan Lentfer #define EAP_TLV_REQUEST_ACTION_TLV 19 306d49e1aeSJan Lentfer #define EAP_TLV_PKCS7_TLV 20 316d49e1aeSJan Lentfer 326d49e1aeSJan Lentfer #define EAP_TLV_RESULT_SUCCESS 1 336d49e1aeSJan Lentfer #define EAP_TLV_RESULT_FAILURE 2 346d49e1aeSJan Lentfer 356d49e1aeSJan Lentfer #define EAP_TLV_TYPE_MANDATORY 0x8000 366d49e1aeSJan Lentfer #define EAP_TLV_TYPE_MASK 0x3fff 376d49e1aeSJan Lentfer 386d49e1aeSJan Lentfer #ifdef _MSC_VER 396d49e1aeSJan Lentfer #pragma pack(push, 1) 406d49e1aeSJan Lentfer #endif /* _MSC_VER */ 416d49e1aeSJan Lentfer 426d49e1aeSJan Lentfer struct eap_tlv_hdr { 436d49e1aeSJan Lentfer be16 tlv_type; 446d49e1aeSJan Lentfer be16 length; 456d49e1aeSJan Lentfer } STRUCT_PACKED; 466d49e1aeSJan Lentfer 476d49e1aeSJan Lentfer struct eap_tlv_nak_tlv { 486d49e1aeSJan Lentfer be16 tlv_type; 496d49e1aeSJan Lentfer be16 length; 506d49e1aeSJan Lentfer be32 vendor_id; 516d49e1aeSJan Lentfer be16 nak_type; 526d49e1aeSJan Lentfer } STRUCT_PACKED; 536d49e1aeSJan Lentfer 546d49e1aeSJan Lentfer struct eap_tlv_result_tlv { 556d49e1aeSJan Lentfer be16 tlv_type; 566d49e1aeSJan Lentfer be16 length; 576d49e1aeSJan Lentfer be16 status; 586d49e1aeSJan Lentfer } STRUCT_PACKED; 596d49e1aeSJan Lentfer 606d49e1aeSJan Lentfer /* RFC 4851, Section 4.2.7 - Intermediate-Result TLV */ 616d49e1aeSJan Lentfer struct eap_tlv_intermediate_result_tlv { 626d49e1aeSJan Lentfer be16 tlv_type; 636d49e1aeSJan Lentfer be16 length; 646d49e1aeSJan Lentfer be16 status; 656d49e1aeSJan Lentfer /* Followed by optional TLVs */ 666d49e1aeSJan Lentfer } STRUCT_PACKED; 676d49e1aeSJan Lentfer 686d49e1aeSJan Lentfer /* RFC 4851, Section 4.2.8 - Crypto-Binding TLV */ 696d49e1aeSJan Lentfer struct eap_tlv_crypto_binding_tlv { 706d49e1aeSJan Lentfer be16 tlv_type; 716d49e1aeSJan Lentfer be16 length; 726d49e1aeSJan Lentfer u8 reserved; 736d49e1aeSJan Lentfer u8 version; 746d49e1aeSJan Lentfer u8 received_version; 756d49e1aeSJan Lentfer u8 subtype; 766d49e1aeSJan Lentfer u8 nonce[32]; 776d49e1aeSJan Lentfer u8 compound_mac[20]; 786d49e1aeSJan Lentfer } STRUCT_PACKED; 796d49e1aeSJan Lentfer 806d49e1aeSJan Lentfer struct eap_tlv_pac_ack_tlv { 816d49e1aeSJan Lentfer be16 tlv_type; 826d49e1aeSJan Lentfer be16 length; 836d49e1aeSJan Lentfer be16 pac_type; 846d49e1aeSJan Lentfer be16 pac_len; 856d49e1aeSJan Lentfer be16 result; 866d49e1aeSJan Lentfer } STRUCT_PACKED; 876d49e1aeSJan Lentfer 886d49e1aeSJan Lentfer /* RFC 4851, Section 4.2.9 - Request-Action TLV */ 896d49e1aeSJan Lentfer struct eap_tlv_request_action_tlv { 906d49e1aeSJan Lentfer be16 tlv_type; 916d49e1aeSJan Lentfer be16 length; 926d49e1aeSJan Lentfer be16 action; 936d49e1aeSJan Lentfer } STRUCT_PACKED; 946d49e1aeSJan Lentfer 956d49e1aeSJan Lentfer /* RFC 5422, Section 4.2.6 - PAC-Type TLV */ 966d49e1aeSJan Lentfer struct eap_tlv_pac_type_tlv { 976d49e1aeSJan Lentfer be16 tlv_type; /* PAC_TYPE_PAC_TYPE */ 986d49e1aeSJan Lentfer be16 length; 996d49e1aeSJan Lentfer be16 pac_type; 1006d49e1aeSJan Lentfer } STRUCT_PACKED; 1016d49e1aeSJan Lentfer 1026d49e1aeSJan Lentfer #ifdef _MSC_VER 1036d49e1aeSJan Lentfer #pragma pack(pop) 1046d49e1aeSJan Lentfer #endif /* _MSC_VER */ 1056d49e1aeSJan Lentfer 1066d49e1aeSJan Lentfer #define EAP_TLV_CRYPTO_BINDING_SUBTYPE_REQUEST 0 1076d49e1aeSJan Lentfer #define EAP_TLV_CRYPTO_BINDING_SUBTYPE_RESPONSE 1 1086d49e1aeSJan Lentfer 1096d49e1aeSJan Lentfer #define EAP_TLV_ACTION_PROCESS_TLV 1 1106d49e1aeSJan Lentfer #define EAP_TLV_ACTION_NEGOTIATE_EAP 2 1116d49e1aeSJan Lentfer 1126d49e1aeSJan Lentfer #endif /* EAP_TLV_COMMON_H */ 113