K2.6 patches and update.
[tomato.git] / release / src-rt / wl / eapd / eapd.h
blob45ce802f67c3a7f8f7f3e4bb1a1dced570525fa4
1 /*
2 * Broadcom EAP dispatcher (EAPD) module include file
4 * Copyright (C) 2010, Broadcom Corporation
5 * All Rights Reserved.
6 *
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 $
15 #ifndef _EAPD_H_
16 #define _EAPD_H_
18 #include <typedefs.h>
19 #include <proto/ethernet.h>
20 #include <wlioctl.h>
22 #ifndef EAPD_WKSP_AUTO_CONFIG
23 #define EAPD_WKSP_AUTO_CONFIG 1
24 #endif
26 /* Message levels */
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];
64 ushort pae_state;
65 ushort pae_id;
66 uint32 mode; /* Authentication mode */
67 uint8 eapol_version; /* eapol version */
68 } eapd_sta_t;
70 typedef struct eapd_socket {
71 char ifname[IFNAMSIZ];
72 int drvSocket; /* raw socket to communicate with driver */
73 int ifindex;
74 int inuseCount;
75 int flag;
76 } eapd_brcm_socket_t, eapd_preauth_socket_t;
78 typedef struct eapd_cb {
79 char ifname[IFNAMSIZ];
80 int flags;
81 eapd_brcm_socket_t *brcmSocket;
82 eapd_preauth_socket_t preauthSocket; /* only need by NAS */
83 struct eapd_cb *next;
84 } eapd_cb_t;
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];
95 int brcmSocketCount;
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];
99 eapd_wps_t wps;
100 eapd_nas_t nas;
101 eapd_ses_t ses;
102 eapd_wai_t wai;
103 eapd_dcs_t dcs;
104 int flags;
105 fd_set fdset;
106 int fdmax;
107 } eapd_wksp_t;
109 typedef enum {
110 EAPD_SEARCH_ONLY = 0,
111 EAPD_SEARCH_ENTER
112 } eapd_lookup_mode_t;
114 typedef enum {
115 EAPD_STA_MODE_UNKNOW = 0,
116 EAPD_STA_MODE_WPS,
117 EAPD_STA_MODE_WPS_ENR,
118 EAPD_STA_MODE_SES,
119 EAPD_STA_MODE_NAS,
120 EAPD_STA_MODE_NAS_PSK,
121 EAPD_STA_MODE_WAI
122 } eapd_sta_mode_t;
124 typedef enum {
125 EAPD_APP_UNKNOW = 0,
126 EAPD_APP_WPS,
127 EAPD_APP_SES,
128 EAPD_APP_NAS,
129 EAPD_APP_WAI,
130 EAPD_APP_DCS
131 } eapd_app_mode_t;
133 /* PAE states */
134 typedef enum {
135 EAPD_INITIALIZE = 0,
136 EAPD_IDENTITY
137 } eapd_pae_state_t;
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
146 /* Apps */
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);
152 #endif
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);
163 #endif
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);
174 #endif
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);
185 #endif
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);
190 #ifdef BCM_DCS
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);
196 #endif
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);
201 #endif /* BCM_DCS */
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);
226 #ifdef BCMWPA2
227 extern void eapd_preauth_recv_handler(eapd_wksp_t *nwksp, char *from, uint8 *pData, int *pLen);
228 #endif
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);
236 #ifdef BCMWPA2
237 int eapd_preauth_open(eapd_wksp_t *nwksp, eapd_preauth_socket_t *sock);
238 int eapd_preauth_close(int drvSocket);
239 #endif
240 int eapd_safe_get_conf(char *outval, int outval_size, char *name);
242 #endif /* _EAPD_H_ */