]>
Commit | Line | Data |
---|---|---|
6fc6879b JM |
1 | /* |
2 | * hostapd / Initialization and configuration | |
3 | * Host AP kernel driver | |
ddaa83eb | 4 | * Copyright (c) 2002-2008, Jouni Malinen <j@w1.fi> |
71b6ae14 | 5 | * Copyright (c) 2007-2008, Intel Corporation |
6fc6879b JM |
6 | * |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License version 2 as | |
9 | * published by the Free Software Foundation. | |
10 | * | |
11 | * Alternatively, this software may be distributed under the terms of BSD | |
12 | * license. | |
13 | * | |
14 | * See README and COPYING for more details. | |
15 | */ | |
16 | ||
17 | #ifndef HOSTAPD_H | |
18 | #define HOSTAPD_H | |
19 | ||
20 | #include "common.h" | |
8d06da09 | 21 | #include "hostapd_defs.h" |
6fc6879b | 22 | |
89111f3b | 23 | struct hapd_driver_ops; |
6fc6879b JM |
24 | struct wpa_ctrl_dst; |
25 | struct radius_server_data; | |
f620268f | 26 | struct upnp_wps_device_sm; |
6fc6879b JM |
27 | |
28 | #ifdef CONFIG_FULL_DYNAMIC_VLAN | |
29 | struct full_dynamic_vlan; | |
30 | #endif /* CONFIG_FULL_DYNAMIC_VLAN */ | |
31 | ||
32 | /** | |
33 | * struct hostapd_data - hostapd per-BSS data structure | |
34 | */ | |
35 | struct hostapd_data { | |
36 | struct hostapd_iface *iface; | |
37 | struct hostapd_config *iconf; | |
38 | struct hostapd_bss_config *conf; | |
39 | int interface_added; /* virtual interface added for this BSS */ | |
40 | ||
41 | u8 own_addr[ETH_ALEN]; | |
42 | ||
43 | int num_sta; /* number of entries in sta_list */ | |
44 | struct sta_info *sta_list; /* STA info list head */ | |
2991469c JM |
45 | #define STA_HASH_SIZE 256 |
46 | #define STA_HASH(sta) (sta[5]) | |
6fc6879b JM |
47 | struct sta_info *sta_hash[STA_HASH_SIZE]; |
48 | ||
2991469c JM |
49 | /* |
50 | * Bitfield for indicating which AIDs are allocated. Only AID values | |
51 | * 1-2007 are used and as such, the bit at index 0 corresponds to AID | |
52 | * 1. | |
6fc6879b | 53 | */ |
2991469c JM |
54 | #define AID_WORDS ((2008 + 31) / 32) |
55 | u32 sta_aid[AID_WORDS]; | |
6fc6879b | 56 | |
89111f3b | 57 | const struct hapd_driver_ops *driver; |
6fc6879b JM |
58 | void *drv_priv; |
59 | ||
60 | u8 *default_wep_key; | |
61 | u8 default_wep_key_idx; | |
62 | ||
63 | struct radius_client_data *radius; | |
64 | int radius_client_reconfigured; | |
65 | u32 acct_session_id_hi, acct_session_id_lo; | |
66 | ||
67 | struct iapp_data *iapp; | |
68 | ||
6fc6879b JM |
69 | struct hostapd_cached_radius_acl *acl_cache; |
70 | struct hostapd_acl_query_data *acl_queries; | |
71 | ||
72 | struct wpa_authenticator *wpa_auth; | |
73 | struct eapol_authenticator *eapol_auth; | |
74 | ||
75 | struct rsn_preauth_interface *preauth_iface; | |
76 | time_t michael_mic_failure; | |
77 | int michael_mic_failures; | |
78 | int tkip_countermeasures; | |
79 | ||
80 | int ctrl_sock; | |
81 | struct wpa_ctrl_dst *ctrl_dst; | |
82 | ||
83 | void *ssl_ctx; | |
84 | void *eap_sim_db_priv; | |
85 | struct radius_server_data *radius_srv; | |
86 | ||
87 | int parameter_set_count; | |
88 | ||
89 | #ifdef CONFIG_FULL_DYNAMIC_VLAN | |
90 | struct full_dynamic_vlan *full_dynamic_vlan; | |
91 | #endif /* CONFIG_FULL_DYNAMIC_VLAN */ | |
92 | ||
93 | struct l2_packet_data *l2; | |
ad08c363 JM |
94 | struct wps_context *wps; |
95 | ||
96 | #ifdef CONFIG_WPS | |
97 | u8 *wps_beacon_ie; | |
98 | size_t wps_beacon_ie_len; | |
99 | u8 *wps_probe_resp_ie; | |
100 | size_t wps_probe_resp_ie_len; | |
3b2cf800 | 101 | unsigned int ap_pin_failures; |
f620268f | 102 | struct upnp_wps_device_sm *wps_upnp; |
ad08c363 | 103 | #endif /* CONFIG_WPS */ |
6fc6879b JM |
104 | }; |
105 | ||
106 | ||
6fc6879b JM |
107 | /** |
108 | * struct hostapd_iface - hostapd per-interface data structure | |
109 | */ | |
110 | struct hostapd_iface { | |
111 | char *config_fname; | |
112 | struct hostapd_config *conf; | |
113 | ||
6fc6879b JM |
114 | size_t num_bss; |
115 | struct hostapd_data **bss; | |
116 | ||
117 | int num_ap; /* number of entries in ap_list */ | |
118 | struct ap_info *ap_list; /* AP info list head */ | |
119 | struct ap_info *ap_hash[STA_HASH_SIZE]; | |
120 | struct ap_info *ap_iter_list; | |
121 | ||
122 | struct hostapd_hw_modes *hw_features; | |
123 | int num_hw_features; | |
124 | struct hostapd_hw_modes *current_mode; | |
125 | /* Rates that are currently used (i.e., filtered copy of | |
126 | * current_mode->channels */ | |
127 | int num_rates; | |
128 | struct hostapd_rate_data *current_rates; | |
6fc6879b JM |
129 | |
130 | u16 hw_flags; | |
131 | ||
132 | /* Number of associated Non-ERP stations (i.e., stations using 802.11b | |
133 | * in 802.11g BSS) */ | |
134 | int num_sta_non_erp; | |
135 | ||
136 | /* Number of associated stations that do not support Short Slot Time */ | |
137 | int num_sta_no_short_slot_time; | |
138 | ||
139 | /* Number of associated stations that do not support Short Preamble */ | |
140 | int num_sta_no_short_preamble; | |
141 | ||
142 | int olbc; /* Overlapping Legacy BSS Condition */ | |
143 | ||
de9289c8 JM |
144 | /* Number of HT associated stations that do not support greenfield */ |
145 | int num_sta_ht_no_gf; | |
146 | ||
147 | /* Number of associated non-HT stations */ | |
148 | int num_sta_no_ht; | |
149 | ||
150 | /* Number of HT associated stations 20 MHz */ | |
151 | int num_sta_ht_20mhz; | |
152 | ||
153 | /* Overlapping BSS information */ | |
154 | int olbc_ht; | |
155 | ||
edd360e1 JM |
156 | #ifdef CONFIG_IEEE80211N |
157 | u16 ht_op_mode; | |
158 | #endif /* CONFIG_IEEE80211N */ | |
6fc6879b JM |
159 | }; |
160 | ||
ad08c363 | 161 | int hostapd_reload_config(struct hostapd_iface *iface); |
b6a7859d JM |
162 | struct hostapd_data * |
163 | hostapd_alloc_bss_data(struct hostapd_iface *hapd_iface, | |
164 | struct hostapd_config *conf, | |
165 | struct hostapd_bss_config *bss); | |
5c333467 JM |
166 | int hostapd_setup_interface(struct hostapd_iface *iface); |
167 | void hostapd_interface_deinit(struct hostapd_iface *iface); | |
168 | int handle_reload_iface(struct hostapd_iface *iface, void *ctx); | |
169 | int handle_dump_state_iface(struct hostapd_iface *iface, void *ctx); | |
170 | ||
b5b969e9 JM |
171 | int hostapd_for_each_interface(int (*cb)(struct hostapd_iface *iface, |
172 | void *ctx), void *ctx); | |
6fc6879b JM |
173 | |
174 | #endif /* HOSTAPD_H */ |