2 * Broadcom EAP dispatcher (EAPD) module include file
4 * Copyright (C) 2010, Broadcom Corporation
7 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
8 * the contents of this file may not be disclosed to third parties, copied
9 * or duplicated in any form, in whole or in part, without the prior
10 * written permission of Broadcom Corporation.
12 * $Id: eapd.h 241391 2011-02-18 03:35:48Z stakita $
19 #include <proto/ethernet.h>
22 #ifndef EAPD_WKSP_AUTO_CONFIG
23 #define EAPD_WKSP_AUTO_CONFIG 1
27 #define EAPD_ERROR_VAL 0x00000001
28 #define EAPD_INFO_VAL 0x00000002
30 extern uint eapd_msg_level
;
32 #define EAPDBANNER(fmt, arg...) do { \
33 printf(" EAPD>> %s(%d): "fmt, __FUNCTION__, __LINE__ , ##arg);} while (0)
35 #define EAPD_ERROR(fmt, arg...)
36 #define EAPD_INFO(fmt, arg...)
37 #define EAPD_PRINT(fmt, arg...) printf(fmt , ##arg)
39 #define EAPD_WKSP_FLAG_SHUTDOWN 0x1
40 #define EAPD_WKSP_FLAG_DUMP 0x2
42 #define EAPD_WKSP_RECV_DATA_MAX_LEN 4096
45 #define EAPD_WKSP_MIN_CMD_LINE_ARGS 16
46 #define EAPD_WKSP_MAX_CMD_LINE_ARGS 128
47 #define EAPD_WKSP_MAX_NO_BRIDGE 256
48 #define EAPD_WKSP_MAX_NO_BRCM 8
49 #define EAPD_WKSP_MAX_NO_IFNAMES 16
51 #define EAPD_WKSP_MAX_SUPPLICANTS 64
52 /* Supplicant cache */
53 #define EAPD_PAE_HASH(ea) \
54 ((((unsigned char *) ea)[3] ^ ((unsigned char *) ea)[4] ^ ((unsigned char *) ea)[5]) & \
55 (EAPD_WKSP_MAX_SUPPLICANTS - 1))
57 typedef struct eapd_sta
{
58 bool used
; /* flags use of item */
59 time_t last_use
; /* use timestamp */
60 struct eapd_sta
*next
;
61 struct ether_addr ea
; /* STA's ethernet address */
62 struct ether_addr bssid
; /* wl if hwaddr which sta comes in */
63 char ifname
[IFNAMSIZ
];
66 uint32 mode
; /* Authentication mode */
67 uint8 eapol_version
; /* eapol version */
70 typedef struct eapd_socket
{
71 char ifname
[IFNAMSIZ
];
72 int drvSocket
; /* raw socket to communicate with driver */
76 } eapd_brcm_socket_t
, eapd_preauth_socket_t
;
78 typedef struct eapd_cb
{
79 char ifname
[IFNAMSIZ
];
81 eapd_brcm_socket_t
*brcmSocket
;
82 eapd_preauth_socket_t preauthSocket
; /* only need by NAS */
86 typedef struct eapd_app
{
87 char ifnames
[IFNAMSIZ
* EAPD_WKSP_MAX_NO_IFNAMES
]; /* interface names */
88 int appSocket
; /* loopback socket to communicate with application */
89 uchar bitvec
[WL_EVENTING_MASK_LEN
]; /* for each application which need brcmevent */
90 eapd_cb_t
*cb
; /* for each interface which running application */
91 } eapd_app_t
, eapd_wps_t
, eapd_nas_t
, eapd_ses_t
, eapd_wai_t
, eapd_dcs_t
;
93 typedef struct eapd_wksp
{
94 uchar packet
[EAPD_WKSP_RECV_DATA_MAX_LEN
];
96 eapd_brcm_socket_t brcmSocket
[EAPD_WKSP_MAX_NO_BRCM
];
97 eapd_sta_t sta
[EAPD_WKSP_MAX_SUPPLICANTS
];
98 eapd_sta_t
*sta_hashed
[EAPD_WKSP_MAX_SUPPLICANTS
];
110 EAPD_SEARCH_ONLY
= 0,
112 } eapd_lookup_mode_t
;
115 EAPD_STA_MODE_UNKNOW
= 0,
117 EAPD_STA_MODE_WPS_ENR
,
120 EAPD_STA_MODE_NAS_PSK
,
139 /* EAPD interface application capability */
140 #define EAPD_CAP_SES 0x1
141 #define EAPD_CAP_NAS 0x2
142 #define EAPD_CAP_WPS 0x4
143 #define EAPD_CAP_WAI 0x8
144 #define EAPD_CAP_DCS 0x10
147 int wps_app_init(eapd_wksp_t
*nwksp
);
148 int wps_app_deinit(eapd_wksp_t
*nwksp
);
149 int wps_app_monitor_sendup(eapd_wksp_t
*nwksp
, uint8
*pData
, int Len
, char *from
);
150 #if EAPD_WKSP_AUTO_CONFIG
151 int wps_app_enabled(char *name
);
153 void wps_app_set_eventmask(eapd_app_t
*app
);
154 int wps_app_handle_event(eapd_wksp_t
*nwksp
, uint8
*pData
, int Len
, char *from
);
155 void wps_app_recv_handler(eapd_wksp_t
*nwksp
, char *wlifname
, eapd_cb_t
*from
,
156 uint8
*pData
, int *pLen
, struct ether_addr
*ap_ea
);
158 int ses_app_init(eapd_wksp_t
*nwksp
);
159 int ses_app_deinit(eapd_wksp_t
*nwksp
);
160 int ses_app_sendup(eapd_wksp_t
*nwksp
, uint8
*pData
, int pLen
, char *fromlan
);
161 #if EAPD_WKSP_AUTO_CONFIG
162 int ses_app_enabled(char *name
);
164 void ses_app_set_eventmask(eapd_app_t
*app
);
165 int ses_app_handle_event(eapd_wksp_t
*nwksp
, uint8
*pData
, int Len
, char *from
);
166 void ses_app_recv_handler(eapd_wksp_t
*nwksp
, char *wlifname
, eapd_cb_t
*from
,
167 uint8
*pData
, int *pLen
);
169 int nas_app_init(eapd_wksp_t
*nwksp
);
170 int nas_app_deinit(eapd_wksp_t
*nwksp
);
171 int nas_app_sendup(eapd_wksp_t
*nwksp
, uint8
*pData
, int pLen
, char *fromlan
);
172 #if EAPD_WKSP_AUTO_CONFIG
173 int nas_app_enabled(char *name
);
175 void nas_app_set_eventmask(eapd_app_t
*app
);
176 int nas_app_handle_event(eapd_wksp_t
*nwksp
, uint8
*pData
, int Len
, char *from
);
177 void nas_app_recv_handler(eapd_wksp_t
*nwksp
, char *wlifname
, eapd_cb_t
*from
,
178 uint8
*pData
, int *pLen
);
180 int wai_app_init(eapd_wksp_t
*nwksp
);
181 int wai_app_deinit(eapd_wksp_t
*nwksp
);
182 int wai_app_sendup(eapd_wksp_t
*nwksp
, uint8
*pData
, int pLen
, char *fromlan
);
183 #if EAPD_WKSP_AUTO_CONFIG
184 int wai_app_enabled(char *name
);
186 void wai_app_set_eventmask(eapd_app_t
*app
);
187 int wai_app_handle_event(eapd_wksp_t
*nwksp
, uint8
*pData
, int Len
, char *from
);
188 void wai_app_recv_handler(eapd_wksp_t
*nwksp
, eapd_cb_t
*from
, uint8
*pData
, int *pLen
);
191 int dcs_app_init(eapd_wksp_t
*nwksp
);
192 int dcs_app_deinit(eapd_wksp_t
*nwksp
);
193 int dcs_app_sendup(eapd_wksp_t
*nwksp
, uint8
*pData
, int pLen
, char *fromlan
);
194 #if EAPD_WKSP_AUTO_CONFIG
195 int dcs_app_enabled(char *name
);
197 void dcs_app_set_eventmask(eapd_app_t
*app
);
198 int dcs_app_handle_event(eapd_wksp_t
*nwksp
, uint8
*pData
, int Len
, char *from
);
199 void dcs_app_recv_handler(eapd_wksp_t
*nwksp
, eapd_cb_t
*from
,
200 uint8
*pData
, int *pLen
);
203 /* OS independent function */
204 void eapd_wksp_display_usage(void);
205 eapd_wksp_t
* eapd_wksp_alloc_workspace(void);
206 int eapd_wksp_auto_config(eapd_wksp_t
*nwksp
);
207 int eapd_wksp_parse_cmd(int argc
, char *argv
[], eapd_wksp_t
*nwksp
);
208 int eapd_wksp_init(eapd_wksp_t
*nwksp
);
209 void eapd_wksp_dispatch(eapd_wksp_t
*nwksp
);
210 int eapd_wksp_deinit(eapd_wksp_t
*nwksp
);
211 void eapd_wksp_free_workspace(eapd_wksp_t
* nwksp
);
212 int eapd_wksp_main_loop(eapd_wksp_t
*nwksp
);
213 void eapd_wksp_cleanup(eapd_wksp_t
*nwksp
);
214 void eapd_wksp_clear_inited(void);
215 int eapd_wksp_is_inited(void);
217 eapd_sta_t
* sta_lookup(eapd_wksp_t
*nwksp
, struct ether_addr
*sta_ea
, struct ether_addr
*bssid_ea
,
218 char *ifname
, eapd_lookup_mode_t mode
);
219 void sta_remove(eapd_wksp_t
*nwksp
, eapd_sta_t
*sta
);
221 eapd_brcm_socket_t
* eapd_add_brcm(eapd_wksp_t
*nwksp
, char *ifname
);
222 int eapd_del_brcm(eapd_wksp_t
*nwksp
, eapd_brcm_socket_t
*sock
);
223 eapd_brcm_socket_t
* eapd_find_brcm(eapd_wksp_t
*nwksp
, char *ifname
);
225 void eapd_brcm_recv_handler(eapd_wksp_t
*nwksp
, eapd_brcm_socket_t
*from
, uint8
*pData
, int *pLen
);
227 extern void eapd_preauth_recv_handler(eapd_wksp_t
*nwksp
, char *from
, uint8
*pData
, int *pLen
);
230 /* OS dependent function */
231 void eapd_eapol_canned_send(eapd_wksp_t
*nwksp
, struct eapd_socket
*Socket
, eapd_sta_t
*sta
,
232 unsigned char code
, unsigned char type
);
233 void eapd_message_send(eapd_wksp_t
*nwksp
, struct eapd_socket
*Socket
, uint8
*pData
, int pLen
);
234 int eapd_brcm_open(eapd_wksp_t
*nwksp
, eapd_brcm_socket_t
*sock
);
235 int eapd_brcm_close(int drvSocket
);
237 int eapd_preauth_open(eapd_wksp_t
*nwksp
, eapd_preauth_socket_t
*sock
);
238 int eapd_preauth_close(int drvSocket
);
240 int eapd_safe_get_conf(char *outval
, int outval_size
, char *name
);
242 #endif /* _EAPD_H_ */