2 * hostapd - Driver operations
3 * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * Alternatively, this software may be distributed under the terms of BSD
12 * See README and COPYING for more details.
18 enum wpa_driver_if_type
;
19 struct wpa_bss_params
;
20 struct wpa_driver_scan_params
;
21 struct ieee80211_ht_capabilities
;
23 u32
hostapd_sta_flags_to_drv(u32 flags
);
24 int hostapd_build_ap_extra_ies(struct hostapd_data
*hapd
,
25 struct wpabuf
**beacon
,
26 struct wpabuf
**proberesp
,
27 struct wpabuf
**assocresp
);
28 void hostapd_free_ap_extra_ies(struct hostapd_data
*hapd
, struct wpabuf
*beacon
,
29 struct wpabuf
*proberesp
,
30 struct wpabuf
*assocresp
);
31 int hostapd_set_ap_wps_ie(struct hostapd_data
*hapd
);
32 int hostapd_set_authorized(struct hostapd_data
*hapd
,
33 struct sta_info
*sta
, int authorized
);
34 int hostapd_set_sta_flags(struct hostapd_data
*hapd
, struct sta_info
*sta
);
35 int hostapd_set_drv_ieee8021x(struct hostapd_data
*hapd
, const char *ifname
,
37 int hostapd_vlan_if_add(struct hostapd_data
*hapd
, const char *ifname
);
38 int hostapd_vlan_if_remove(struct hostapd_data
*hapd
, const char *ifname
);
39 int hostapd_set_wds_sta(struct hostapd_data
*hapd
, const u8
*addr
, int aid
,
41 int hostapd_sta_add(struct hostapd_data
*hapd
,
42 const u8
*addr
, u16 aid
, u16 capability
,
43 const u8
*supp_rates
, size_t supp_rates_len
,
45 const struct ieee80211_ht_capabilities
*ht_capab
,
46 u32 flags
, u8 qosinfo
);
47 int hostapd_set_privacy(struct hostapd_data
*hapd
, int enabled
);
48 int hostapd_set_generic_elem(struct hostapd_data
*hapd
, const u8
*elem
,
50 int hostapd_get_ssid(struct hostapd_data
*hapd
, u8
*buf
, size_t len
);
51 int hostapd_set_ssid(struct hostapd_data
*hapd
, const u8
*buf
, size_t len
);
52 int hostapd_if_add(struct hostapd_data
*hapd
, enum wpa_driver_if_type type
,
53 const char *ifname
, const u8
*addr
, void *bss_ctx
,
54 void **drv_priv
, char *force_ifname
, u8
*if_addr
,
56 int hostapd_if_remove(struct hostapd_data
*hapd
, enum wpa_driver_if_type type
,
58 int hostapd_set_ieee8021x(struct hostapd_data
*hapd
,
59 struct wpa_bss_params
*params
);
60 int hostapd_get_seqnum(const char *ifname
, struct hostapd_data
*hapd
,
61 const u8
*addr
, int idx
, u8
*seq
);
62 int hostapd_flush(struct hostapd_data
*hapd
);
63 int hostapd_set_freq(struct hostapd_data
*hapd
, int mode
, int freq
,
64 int channel
, int ht_enabled
, int sec_channel_offset
);
65 int hostapd_set_rts(struct hostapd_data
*hapd
, int rts
);
66 int hostapd_set_frag(struct hostapd_data
*hapd
, int frag
);
67 int hostapd_sta_set_flags(struct hostapd_data
*hapd
, u8
*addr
,
68 int total_flags
, int flags_or
, int flags_and
);
69 int hostapd_set_country(struct hostapd_data
*hapd
, const char *country
);
70 int hostapd_set_tx_queue_params(struct hostapd_data
*hapd
, int queue
, int aifs
,
71 int cw_min
, int cw_max
, int burst_time
);
72 struct hostapd_hw_modes
*
73 hostapd_get_hw_feature_data(struct hostapd_data
*hapd
, u16
*num_modes
,
75 int hostapd_driver_commit(struct hostapd_data
*hapd
);
76 int hostapd_drv_none(struct hostapd_data
*hapd
);
77 int hostapd_driver_scan(struct hostapd_data
*hapd
,
78 struct wpa_driver_scan_params
*params
);
79 struct wpa_scan_results
* hostapd_driver_get_scan_results(
80 struct hostapd_data
*hapd
);
81 int hostapd_driver_set_noa(struct hostapd_data
*hapd
, u8 count
, int start
,
83 int hostapd_drv_set_key(const char *ifname
,
84 struct hostapd_data
*hapd
,
85 enum wpa_alg alg
, const u8
*addr
,
86 int key_idx
, int set_tx
,
87 const u8
*seq
, size_t seq_len
,
88 const u8
*key
, size_t key_len
);
89 int hostapd_drv_send_mlme(struct hostapd_data
*hapd
,
90 const void *msg
, size_t len
, int noack
);
91 int hostapd_drv_sta_deauth(struct hostapd_data
*hapd
,
92 const u8
*addr
, int reason
);
93 int hostapd_drv_sta_disassoc(struct hostapd_data
*hapd
,
94 const u8
*addr
, int reason
);
95 int hostapd_add_sta_node(struct hostapd_data
*hapd
, const u8
*addr
,
97 int hostapd_sta_auth(struct hostapd_data
*hapd
, const u8
*addr
,
98 u16 seq
, u16 status
, const u8
*ie
, size_t len
);
99 int hostapd_sta_assoc(struct hostapd_data
*hapd
, const u8
*addr
,
100 int reassoc
, u16 status
, const u8
*ie
, size_t len
);
101 int hostapd_add_tspec(struct hostapd_data
*hapd
, const u8
*addr
,
102 u8
*tspec_ie
, size_t tspec_ielen
);
105 #include "drivers/driver.h"
107 static inline int hostapd_drv_set_countermeasures(struct hostapd_data
*hapd
,
110 if (hapd
->driver
== NULL
||
111 hapd
->driver
->hapd_set_countermeasures
== NULL
)
113 return hapd
->driver
->hapd_set_countermeasures(hapd
->drv_priv
, enabled
);
116 static inline int hostapd_drv_set_sta_vlan(const char *ifname
,
117 struct hostapd_data
*hapd
,
118 const u8
*addr
, int vlan_id
)
120 if (hapd
->driver
== NULL
|| hapd
->driver
->set_sta_vlan
== NULL
)
122 return hapd
->driver
->set_sta_vlan(hapd
->drv_priv
, addr
, ifname
,
126 static inline int hostapd_drv_get_inact_sec(struct hostapd_data
*hapd
,
129 if (hapd
->driver
== NULL
|| hapd
->driver
->get_inact_sec
== NULL
)
131 return hapd
->driver
->get_inact_sec(hapd
->drv_priv
, addr
);
134 static inline int hostapd_drv_sta_remove(struct hostapd_data
*hapd
,
137 if (hapd
->driver
== NULL
|| hapd
->driver
->sta_remove
== NULL
)
139 return hapd
->driver
->sta_remove(hapd
->drv_priv
, addr
);
142 static inline int hostapd_drv_hapd_send_eapol(struct hostapd_data
*hapd
,
143 const u8
*addr
, const u8
*data
,
144 size_t data_len
, int encrypt
,
147 if (hapd
->driver
== NULL
|| hapd
->driver
->hapd_send_eapol
== NULL
)
149 return hapd
->driver
->hapd_send_eapol(hapd
->drv_priv
, addr
, data
,
151 hapd
->own_addr
, flags
);
154 static inline int hostapd_drv_read_sta_data(
155 struct hostapd_data
*hapd
, struct hostap_sta_driver_data
*data
,
158 if (hapd
->driver
== NULL
|| hapd
->driver
->read_sta_data
== NULL
)
160 return hapd
->driver
->read_sta_data(hapd
->drv_priv
, data
, addr
);
163 static inline int hostapd_drv_sta_clear_stats(struct hostapd_data
*hapd
,
166 if (hapd
->driver
== NULL
|| hapd
->driver
->sta_clear_stats
== NULL
)
168 return hapd
->driver
->sta_clear_stats(hapd
->drv_priv
, addr
);
171 static inline int hostapd_drv_set_ap(struct hostapd_data
*hapd
,
172 struct wpa_driver_ap_params
*params
)
174 if (hapd
->driver
== NULL
|| hapd
->driver
->set_ap
== NULL
)
176 return hapd
->driver
->set_ap(hapd
->drv_priv
, params
);
179 static inline int hostapd_drv_set_radius_acl_auth(struct hostapd_data
*hapd
,
180 const u8
*mac
, int accepted
,
183 if (hapd
->driver
== NULL
|| hapd
->driver
->set_radius_acl_auth
== NULL
)
185 return hapd
->driver
->set_radius_acl_auth(hapd
->drv_priv
, mac
, accepted
,
189 static inline int hostapd_drv_set_radius_acl_expire(struct hostapd_data
*hapd
,
192 if (hapd
->driver
== NULL
||
193 hapd
->driver
->set_radius_acl_expire
== NULL
)
195 return hapd
->driver
->set_radius_acl_expire(hapd
->drv_priv
, mac
);
198 static inline int hostapd_drv_set_authmode(struct hostapd_data
*hapd
,
201 if (hapd
->driver
== NULL
|| hapd
->driver
->set_authmode
== NULL
)
203 return hapd
->driver
->set_authmode(hapd
->drv_priv
, auth_algs
);
206 static inline void hostapd_drv_poll_client(struct hostapd_data
*hapd
,
207 const u8
*own_addr
, const u8
*addr
,
210 if (hapd
->driver
== NULL
|| hapd
->driver
->poll_client
== NULL
)
212 hapd
->driver
->poll_client(hapd
->drv_priv
, own_addr
, addr
, qos
);
215 #endif /* AP_DRV_OPS */