wpa_supplicant / hostapd  2.5
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ap_drv_ops.h
Go to the documentation of this file.
1 
5 #ifndef AP_DRV_OPS
6 #define AP_DRV_OPS
7 
9 struct wpa_bss_params;
13 struct hostapd_freq_params;
14 
15 u32 hostapd_sta_flags_to_drv(u32 flags);
16 int hostapd_build_ap_extra_ies(struct hostapd_data *hapd,
17  struct wpabuf **beacon,
18  struct wpabuf **proberesp,
19  struct wpabuf **assocresp);
20 void hostapd_free_ap_extra_ies(struct hostapd_data *hapd, struct wpabuf *beacon,
21  struct wpabuf *proberesp,
22  struct wpabuf *assocresp);
23 int hostapd_reset_ap_wps_ie(struct hostapd_data *hapd);
24 int hostapd_set_ap_wps_ie(struct hostapd_data *hapd);
25 int hostapd_set_authorized(struct hostapd_data *hapd,
26  struct sta_info *sta, int authorized);
27 int hostapd_set_sta_flags(struct hostapd_data *hapd, struct sta_info *sta);
28 int hostapd_set_drv_ieee8021x(struct hostapd_data *hapd, const char *ifname,
29  int enabled);
30 int hostapd_vlan_if_add(struct hostapd_data *hapd, const char *ifname);
31 int hostapd_vlan_if_remove(struct hostapd_data *hapd, const char *ifname);
32 int hostapd_set_wds_sta(struct hostapd_data *hapd, char *ifname_wds,
33  const u8 *addr, int aid, int val);
34 int hostapd_sta_add(struct hostapd_data *hapd,
35  const u8 *addr, u16 aid, u16 capability,
36  const u8 *supp_rates, size_t supp_rates_len,
37  u16 listen_interval,
38  const struct ieee80211_ht_capabilities *ht_capab,
39  const struct ieee80211_vht_capabilities *vht_capab,
40  u32 flags, u8 qosinfo, u8 vht_opmode);
41 int hostapd_set_privacy(struct hostapd_data *hapd, int enabled);
42 int hostapd_set_generic_elem(struct hostapd_data *hapd, const u8 *elem,
43  size_t elem_len);
44 int hostapd_get_ssid(struct hostapd_data *hapd, u8 *buf, size_t len);
45 int hostapd_set_ssid(struct hostapd_data *hapd, const u8 *buf, size_t len);
46 int hostapd_if_add(struct hostapd_data *hapd, enum wpa_driver_if_type type,
47  const char *ifname, const u8 *addr, void *bss_ctx,
48  void **drv_priv, char *force_ifname, u8 *if_addr,
49  const char *bridge, int use_existing);
50 int hostapd_if_remove(struct hostapd_data *hapd, enum wpa_driver_if_type type,
51  const char *ifname);
52 int hostapd_set_ieee8021x(struct hostapd_data *hapd,
53  struct wpa_bss_params *params);
54 int hostapd_get_seqnum(const char *ifname, struct hostapd_data *hapd,
55  const u8 *addr, int idx, u8 *seq);
56 int hostapd_flush(struct hostapd_data *hapd);
57 int hostapd_set_freq(struct hostapd_data *hapd, enum hostapd_hw_mode mode,
58  int freq, int channel, int ht_enabled, int vht_enabled,
59  int sec_channel_offset, int vht_oper_chwidth,
60  int center_segment0, int center_segment1);
61 int hostapd_set_rts(struct hostapd_data *hapd, int rts);
62 int hostapd_set_frag(struct hostapd_data *hapd, int frag);
63 int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr,
64  int total_flags, int flags_or, int flags_and);
65 int hostapd_set_country(struct hostapd_data *hapd, const char *country);
66 int hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs,
67  int cw_min, int cw_max, int burst_time);
68 struct hostapd_hw_modes *
69 hostapd_get_hw_feature_data(struct hostapd_data *hapd, u16 *num_modes,
70  u16 *flags);
71 int hostapd_driver_commit(struct hostapd_data *hapd);
72 int hostapd_drv_none(struct hostapd_data *hapd);
73 int hostapd_driver_scan(struct hostapd_data *hapd,
74  struct wpa_driver_scan_params *params);
75 struct wpa_scan_results * hostapd_driver_get_scan_results(
76  struct hostapd_data *hapd);
77 int hostapd_driver_set_noa(struct hostapd_data *hapd, u8 count, int start,
78  int duration);
79 int hostapd_drv_set_key(const char *ifname,
80  struct hostapd_data *hapd,
81  enum wpa_alg alg, const u8 *addr,
82  int key_idx, int set_tx,
83  const u8 *seq, size_t seq_len,
84  const u8 *key, size_t key_len);
85 int hostapd_drv_send_mlme(struct hostapd_data *hapd,
86  const void *msg, size_t len, int noack);
87 int hostapd_drv_sta_deauth(struct hostapd_data *hapd,
88  const u8 *addr, int reason);
89 int hostapd_drv_sta_disassoc(struct hostapd_data *hapd,
90  const u8 *addr, int reason);
91 int hostapd_drv_send_action(struct hostapd_data *hapd, unsigned int freq,
92  unsigned int wait, const u8 *dst, const u8 *data,
93  size_t len);
94 int hostapd_add_sta_node(struct hostapd_data *hapd, const u8 *addr,
95  u16 auth_alg);
96 int hostapd_sta_auth(struct hostapd_data *hapd, const u8 *addr,
97  u16 seq, u16 status, const u8 *ie, size_t len);
98 int hostapd_sta_assoc(struct hostapd_data *hapd, const u8 *addr,
99  int reassoc, u16 status, const u8 *ie, size_t len);
100 int hostapd_add_tspec(struct hostapd_data *hapd, const u8 *addr,
101  u8 *tspec_ie, size_t tspec_ielen);
102 int hostapd_start_dfs_cac(struct hostapd_iface *iface,
103  enum hostapd_hw_mode mode, int freq,
104  int channel, int ht_enabled, int vht_enabled,
105  int sec_channel_offset, int vht_oper_chwidth,
106  int center_segment0, int center_segment1);
107 int hostapd_drv_do_acs(struct hostapd_data *hapd);
108 
109 
110 #include "drivers/driver.h"
111 
112 int hostapd_drv_wnm_oper(struct hostapd_data *hapd,
113  enum wnm_oper oper, const u8 *peer,
114  u8 *buf, u16 *buf_len);
115 
116 int hostapd_drv_set_qos_map(struct hostapd_data *hapd, const u8 *qos_map_set,
117  u8 qos_map_set_len);
118 
119 static inline int hostapd_drv_set_countermeasures(struct hostapd_data *hapd,
120  int enabled)
121 {
122  if (hapd->driver == NULL ||
123  hapd->driver->hapd_set_countermeasures == NULL)
124  return 0;
125  return hapd->driver->hapd_set_countermeasures(hapd->drv_priv, enabled);
126 }
127 
128 static inline int hostapd_drv_set_sta_vlan(const char *ifname,
129  struct hostapd_data *hapd,
130  const u8 *addr, int vlan_id)
131 {
132  if (hapd->driver == NULL || hapd->driver->set_sta_vlan == NULL)
133  return 0;
134  return hapd->driver->set_sta_vlan(hapd->drv_priv, addr, ifname,
135  vlan_id);
136 }
137 
138 static inline int hostapd_drv_get_inact_sec(struct hostapd_data *hapd,
139  const u8 *addr)
140 {
141  if (hapd->driver == NULL || hapd->driver->get_inact_sec == NULL)
142  return 0;
143  return hapd->driver->get_inact_sec(hapd->drv_priv, addr);
144 }
145 
146 static inline int hostapd_drv_sta_remove(struct hostapd_data *hapd,
147  const u8 *addr)
148 {
149  if (hapd->driver == NULL || hapd->driver->sta_remove == NULL)
150  return 0;
151  return hapd->driver->sta_remove(hapd->drv_priv, addr);
152 }
153 
154 static inline int hostapd_drv_hapd_send_eapol(struct hostapd_data *hapd,
155  const u8 *addr, const u8 *data,
156  size_t data_len, int encrypt,
157  u32 flags)
158 {
159  if (hapd->driver == NULL || hapd->driver->hapd_send_eapol == NULL)
160  return 0;
161  return hapd->driver->hapd_send_eapol(hapd->drv_priv, addr, data,
162  data_len, encrypt,
163  hapd->own_addr, flags);
164 }
165 
166 static inline int hostapd_drv_read_sta_data(
167  struct hostapd_data *hapd, struct hostap_sta_driver_data *data,
168  const u8 *addr)
169 {
170  if (hapd->driver == NULL || hapd->driver->read_sta_data == NULL)
171  return -1;
172  return hapd->driver->read_sta_data(hapd->drv_priv, data, addr);
173 }
174 
175 static inline int hostapd_drv_sta_clear_stats(struct hostapd_data *hapd,
176  const u8 *addr)
177 {
178  if (hapd->driver == NULL || hapd->driver->sta_clear_stats == NULL)
179  return 0;
180  return hapd->driver->sta_clear_stats(hapd->drv_priv, addr);
181 }
182 
183 static inline int hostapd_drv_set_acl(struct hostapd_data *hapd,
184  struct hostapd_acl_params *params)
185 {
186  if (hapd->driver == NULL || hapd->driver->set_acl == NULL)
187  return 0;
188  return hapd->driver->set_acl(hapd->drv_priv, params);
189 }
190 
191 static inline int hostapd_drv_set_ap(struct hostapd_data *hapd,
192  struct wpa_driver_ap_params *params)
193 {
194  if (hapd->driver == NULL || hapd->driver->set_ap == NULL)
195  return 0;
196  return hapd->driver->set_ap(hapd->drv_priv, params);
197 }
198 
199 static inline int hostapd_drv_set_radius_acl_auth(struct hostapd_data *hapd,
200  const u8 *mac, int accepted,
201  u32 session_timeout)
202 {
203  if (hapd->driver == NULL || hapd->driver->set_radius_acl_auth == NULL)
204  return 0;
205  return hapd->driver->set_radius_acl_auth(hapd->drv_priv, mac, accepted,
206  session_timeout);
207 }
208 
209 static inline int hostapd_drv_set_radius_acl_expire(struct hostapd_data *hapd,
210  const u8 *mac)
211 {
212  if (hapd->driver == NULL ||
213  hapd->driver->set_radius_acl_expire == NULL)
214  return 0;
215  return hapd->driver->set_radius_acl_expire(hapd->drv_priv, mac);
216 }
217 
218 static inline int hostapd_drv_set_authmode(struct hostapd_data *hapd,
219  int auth_algs)
220 {
221  if (hapd->driver == NULL || hapd->driver->set_authmode == NULL)
222  return 0;
223  return hapd->driver->set_authmode(hapd->drv_priv, auth_algs);
224 }
225 
226 static inline void hostapd_drv_poll_client(struct hostapd_data *hapd,
227  const u8 *own_addr, const u8 *addr,
228  int qos)
229 {
230  if (hapd->driver == NULL || hapd->driver->poll_client == NULL)
231  return;
232  hapd->driver->poll_client(hapd->drv_priv, own_addr, addr, qos);
233 }
234 
235 static inline int hostapd_drv_get_survey(struct hostapd_data *hapd,
236  unsigned int freq)
237 {
238  if (hapd->driver == NULL)
239  return -1;
240  if (!hapd->driver->get_survey)
241  return -1;
242  return hapd->driver->get_survey(hapd->drv_priv, freq);
243 }
244 
245 static inline int hostapd_get_country(struct hostapd_data *hapd, char *alpha2)
246 {
247  if (hapd->driver == NULL || hapd->driver->get_country == NULL)
248  return -1;
249  return hapd->driver->get_country(hapd->drv_priv, alpha2);
250 }
251 
252 static inline const char * hostapd_drv_get_radio_name(struct hostapd_data *hapd)
253 {
254  if (hapd->driver == NULL || hapd->drv_priv == NULL ||
255  hapd->driver->get_radio_name == NULL)
256  return NULL;
257  return hapd->driver->get_radio_name(hapd->drv_priv);
258 }
259 
260 static inline int hostapd_drv_switch_channel(struct hostapd_data *hapd,
261  struct csa_settings *settings)
262 {
263  if (hapd->driver == NULL || hapd->driver->switch_channel == NULL)
264  return -ENOTSUP;
265 
266  return hapd->driver->switch_channel(hapd->drv_priv, settings);
267 }
268 
269 static inline int hostapd_drv_status(struct hostapd_data *hapd, char *buf,
270  size_t buflen)
271 {
272  if (hapd->driver == NULL || hapd->driver->status == NULL)
273  return -1;
274  return hapd->driver->status(hapd->drv_priv, buf, buflen);
275 }
276 
277 static inline int hostapd_drv_br_add_ip_neigh(struct hostapd_data *hapd,
278  int version, const u8 *ipaddr,
279  int prefixlen, const u8 *addr)
280 {
281  if (hapd->driver == NULL || hapd->drv_priv == NULL ||
282  hapd->driver->br_add_ip_neigh == NULL)
283  return -1;
284  return hapd->driver->br_add_ip_neigh(hapd->drv_priv, version, ipaddr,
285  prefixlen, addr);
286 }
287 
288 static inline int hostapd_drv_br_delete_ip_neigh(struct hostapd_data *hapd,
289  u8 version, const u8 *ipaddr)
290 {
291  if (hapd->driver == NULL || hapd->drv_priv == NULL ||
292  hapd->driver->br_delete_ip_neigh == NULL)
293  return -1;
294  return hapd->driver->br_delete_ip_neigh(hapd->drv_priv, version,
295  ipaddr);
296 }
297 
298 static inline int hostapd_drv_br_port_set_attr(struct hostapd_data *hapd,
299  enum drv_br_port_attr attr,
300  unsigned int val)
301 {
302  if (hapd->driver == NULL || hapd->drv_priv == NULL ||
303  hapd->driver->br_port_set_attr == NULL)
304  return -1;
305  return hapd->driver->br_port_set_attr(hapd->drv_priv, attr, val);
306 }
307 
308 static inline int hostapd_drv_br_set_net_param(struct hostapd_data *hapd,
309  enum drv_br_net_param param,
310  unsigned int val)
311 {
312  if (hapd->driver == NULL || hapd->drv_priv == NULL ||
313  hapd->driver->br_set_net_param == NULL)
314  return -1;
315  return hapd->driver->br_set_net_param(hapd->drv_priv, param, val);
316 }
317 
318 static inline int hostapd_drv_vendor_cmd(struct hostapd_data *hapd,
319  int vendor_id, int subcmd,
320  const u8 *data, size_t data_len,
321  struct wpabuf *buf)
322 {
323  if (hapd->driver == NULL || hapd->driver->vendor_cmd == NULL)
324  return -1;
325  return hapd->driver->vendor_cmd(hapd->drv_priv, vendor_id, subcmd, data,
326  data_len, buf);
327 }
328 
329 static inline int hostapd_drv_stop_ap(struct hostapd_data *hapd)
330 {
331  if (hapd->driver == NULL || hapd->driver->stop_ap == NULL)
332  return 0;
333  return hapd->driver->stop_ap(hapd->drv_priv);
334 }
335 
336 #endif /* AP_DRV_OPS */
int(* hapd_set_countermeasures)(void *priv, int enabled)
Enable/disable TKIP countermeasures (AP)
Definition: driver.h:2416
enum hostapd_hw_mode mode
Mode/band (HOSTAPD_MODE_IEEE80211A, ..)
Definition: driver.h:515
int(* br_set_net_param)(void *priv, enum drv_br_net_param param, unsigned int val)
Set a bridge network parameter.
Definition: driver.h:2955
int(* set_ap)(void *priv, struct wpa_driver_ap_params *params)
Set Beacon and Probe Response information for AP mode.
Definition: driver.h:2218
Settings for channel switch command.
Definition: driver.h:1661
Definition: sta_info.h:44
const char *(* get_radio_name)(void *priv)
Get physical radio name for the device.
Definition: driver.h:2864
int(* br_port_set_attr)(void *priv, enum drv_br_port_attr attr, unsigned int val)
Set a bridge port attribute.
Definition: driver.h:2946
int(* stop_ap)(void *priv)
Removes beacon from AP.
Definition: driver.h:3231
Definition: driver.h:1460
int sec_channel_offset
Secondary channel offset for HT40.
Definition: driver.h:543
int(* get_country)(void *priv, char *alpha2)
Get country.
Definition: driver.h:2125
hostapd per-interface data structure
Definition: hostapd.h:291
int(* vendor_cmd)(void *priv, unsigned int vendor_id, unsigned int subcmd, const u8 *data, size_t data_len, struct wpabuf *buf)
Execute vendor specific command.
Definition: driver.h:3018
void(* poll_client)(void *priv, const u8 *own_addr, const u8 *addr, int qos)
Probe (null data or such) the given station.
Definition: driver.h:3138
Driver interface definition.
Definition: driver.h:1418
Scan parameters Data for struct wpa_driver_ops::scan2().
Definition: driver.h:306
wpa_driver_if_type
Definition: driver.h:1466
Definition: wpabuf.h:16
Definition: ieee802_11_defs.h:634
int freq
Primary channel center frequency in MHz.
Definition: driver.h:521
int(* get_inact_sec)(void *priv, const u8 *addr)
Get station inactivity duration (AP only)
Definition: driver.h:2439
int(* status)(void *priv, char *buf, size_t buflen)
Get driver interface status information.
Definition: driver.h:3265
int(* sta_remove)(void *priv, const u8 *addr)
Remove a station entry (AP only)
Definition: driver.h:2382
Definition: ieee802_11_defs.h:668
int(* br_delete_ip_neigh)(void *priv, u8 version, const u8 *ipaddr)
Remove a neigh from the bridge ip neigh table.
Definition: driver.h:2938
int(* set_sta_vlan)(void *priv, const u8 *addr, const char *ifname, int vlan_id)
Bind a station into a specific interface (AP only)
Definition: driver.h:2546
int(* br_add_ip_neigh)(void *priv, u8 version, const u8 *ipaddr, int prefixlen, const u8 *addr)
Add a neigh to the bridge ip neigh table.
Definition: driver.h:2928
int vht_enabled
Whether VHT is enabled.
Definition: driver.h:549
Definition: driver.h:919
int(* set_acl)(void *priv, struct hostapd_acl_params *params)
Set ACL in AP mode.
Definition: driver.h:2228
Supported hardware mode information.
Definition: driver.h:132
hostapd_hw_mode
Hardware mode.
Definition: defs.h:302
int(* get_survey)(void *priv, unsigned int freq)
Retrieve survey data.
Definition: driver.h:3256
Definition: driver.h:1543
int channel
Channel number.
Definition: driver.h:527
int(* sta_clear_stats)(void *priv, const u8 *addr)
Clear station statistics (AP only)
Definition: driver.h:2447
int(* switch_channel)(void *priv, struct csa_settings *settings)
Announce channel switch and migrate the GO to the given frequency.
Definition: driver.h:3163
Scan results.
Definition: driver.h:277
int(* set_radius_acl_expire)(void *priv, const u8 *mac)
Notification of RADIUS ACL expiration.
Definition: driver.h:2591
Channel parameters.
Definition: driver.h:510
int(* set_radius_acl_auth)(void *priv, const u8 *mac, int accepted, u32 session_timeout)
Notification of RADIUS ACL change.
Definition: driver.h:2582
int ht_enabled
Whether HT is enabled.
Definition: driver.h:533
int(* set_authmode)(void *priv, int authmode)
Set authentication algorithm(s) for static WEP.
Definition: driver.h:2984
hostapd per-BSS data structure
Definition: hostapd.h:103
int(* hapd_send_eapol)(void *priv, const u8 *addr, const u8 *data, size_t data_len, int encrypt, const u8 *own_addr, u32 flags)
Send an EAPOL packet (AP only)
Definition: driver.h:2344
int(* read_sta_data)(void *priv, struct hostap_sta_driver_data *data, const u8 *addr)
Fetch station data.
Definition: driver.h:2329