2 * eap.h Header file containing the interfaces for all EAP types.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * Copyright 2001 hereUare Communications, Inc. <raghud@hereuare.com>
26 #include "libradius.h"
30 #include <netinet/in.h>
35 #define PW_EAP_REQUEST 1
36 #define PW_EAP_RESPONSE 2
37 #define PW_EAP_SUCCESS 3
38 #define PW_EAP_FAILURE 4
39 #define PW_EAP_MAX_CODES 4
41 #define PW_EAP_IDENTITY 1
42 #define PW_EAP_NOTIFICATION 2
48 #define PW_EAP_MAX_TYPES 13
50 #define EAP_HEADER_LEN 4
53 * EAP-Type specific data.
55 typedef struct eaptype_t {
62 * Structure to hold EAP data.
64 * length = code + id + length + type + type.data
67 typedef struct eap_packet {
73 unsigned char *packet;
77 * EAP_DS contains all the received/sending information
78 * response = Received EAP packet
79 * request = Sending EAP packet
81 * Note: We are authentication server,
82 * we get ONLY EAP-Responses and
83 * we send EAP-Request/EAP-success/EAP-failure
85 typedef struct eap_ds {
91 * EAP_HANDLER is the interface for any EAP-Type.
92 * Each handler contains information for one specific EAP-Type.
93 * This way we don't need to change any interfaces in future.
94 * It is also a list of EAP-request handlers waiting for EAP-response
96 * id = Length + Request-ID + State + (NAS-IP-Address|NAS-Identifier)
97 * identity = Identity, as obtained, from EAP-Identity response.
98 * username = as obtained in Radius request, It might differ from identity.
99 * configured = List of configured values for this user.
100 * prev_eapds = Previous EAP request, for which eap_ds contains the response.
101 * eap_ds = Current EAP response.
102 * opaque = EAP-Type holds some data that corresponds to the current
103 * EAP-request/response
104 * free_opaque = To release memory held by opaque,
105 * when this handler is timedout & needs to be deleted.
106 * It is the responsibility of the specific EAP-TYPE
107 * to avoid any memory leaks in opaque
108 * Hence this pointer should be provided by the EAP-Type
109 * if opaque is not NULL
110 * timestamp = timestamp when this handler is created.
111 * status = finished/onhold/..
113 typedef struct _eap_handler {
116 VALUE_PAIR *username;
117 VALUE_PAIR *configured;
125 void (*free_opaque)(void **opaque);
130 struct _eap_handler *next;
134 * Interface to call EAP sub mdoules
136 typedef struct eap_type_t {
138 int (*attach)(CONF_SECTION *conf, void **type_arg);
139 int (*initiate)(void *type_arg, EAP_HANDLER *handler);
140 int (*authenticate)(void *type_arg, EAP_HANDLER *handler);
141 int (*detach)(void **type_arg);