ap_drv_ops.h revision 051af73b8f8014eff33330aead0f36944b3403e6
1/* 2 * hostapd - Driver operations 3 * Copyright (c) 2009, Jouni Malinen <j@w1.fi> 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 */ 8 9#ifndef AP_DRV_OPS 10#define AP_DRV_OPS 11 12enum wpa_driver_if_type; 13struct wpa_bss_params; 14struct wpa_driver_scan_params; 15struct ieee80211_ht_capabilities; 16struct ieee80211_vht_capabilities; 17 18u32 hostapd_sta_flags_to_drv(u32 flags); 19int hostapd_build_ap_extra_ies(struct hostapd_data *hapd, 20 struct wpabuf **beacon, 21 struct wpabuf **proberesp, 22 struct wpabuf **assocresp); 23void hostapd_free_ap_extra_ies(struct hostapd_data *hapd, struct wpabuf *beacon, 24 struct wpabuf *proberesp, 25 struct wpabuf *assocresp); 26int hostapd_set_ap_wps_ie(struct hostapd_data *hapd); 27int hostapd_set_authorized(struct hostapd_data *hapd, 28 struct sta_info *sta, int authorized); 29int hostapd_set_sta_flags(struct hostapd_data *hapd, struct sta_info *sta); 30int hostapd_set_drv_ieee8021x(struct hostapd_data *hapd, const char *ifname, 31 int enabled); 32int hostapd_vlan_if_add(struct hostapd_data *hapd, const char *ifname); 33int hostapd_vlan_if_remove(struct hostapd_data *hapd, const char *ifname); 34int hostapd_set_wds_sta(struct hostapd_data *hapd, char *ifname_wds, 35 const u8 *addr, int aid, int val); 36int hostapd_sta_add(struct hostapd_data *hapd, 37 const u8 *addr, u16 aid, u16 capability, 38 const u8 *supp_rates, size_t supp_rates_len, 39 u16 listen_interval, 40 const struct ieee80211_ht_capabilities *ht_capab, 41 const struct ieee80211_vht_capabilities *vht_capab, 42 u32 flags, u8 qosinfo); 43int hostapd_set_privacy(struct hostapd_data *hapd, int enabled); 44int hostapd_set_generic_elem(struct hostapd_data *hapd, const u8 *elem, 45 size_t elem_len); 46int hostapd_get_ssid(struct hostapd_data *hapd, u8 *buf, size_t len); 47int hostapd_set_ssid(struct hostapd_data *hapd, const u8 *buf, size_t len); 48int hostapd_if_add(struct hostapd_data *hapd, enum wpa_driver_if_type type, 49 const char *ifname, const u8 *addr, void *bss_ctx, 50 void **drv_priv, char *force_ifname, u8 *if_addr, 51 const char *bridge); 52int hostapd_if_remove(struct hostapd_data *hapd, enum wpa_driver_if_type type, 53 const char *ifname); 54int hostapd_set_ieee8021x(struct hostapd_data *hapd, 55 struct wpa_bss_params *params); 56int hostapd_get_seqnum(const char *ifname, struct hostapd_data *hapd, 57 const u8 *addr, int idx, u8 *seq); 58int hostapd_flush(struct hostapd_data *hapd); 59int hostapd_set_freq(struct hostapd_data *hapd, int mode, int freq, 60 int channel, int ht_enabled, int vht_enabled, 61 int sec_channel_offset, int vht_oper_chwidth, 62 int center_segment0, int center_segment1); 63int hostapd_set_rts(struct hostapd_data *hapd, int rts); 64int hostapd_set_frag(struct hostapd_data *hapd, int frag); 65int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr, 66 int total_flags, int flags_or, int flags_and); 67int hostapd_set_country(struct hostapd_data *hapd, const char *country); 68int hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs, 69 int cw_min, int cw_max, int burst_time); 70struct hostapd_hw_modes * 71hostapd_get_hw_feature_data(struct hostapd_data *hapd, u16 *num_modes, 72 u16 *flags); 73int hostapd_driver_commit(struct hostapd_data *hapd); 74int hostapd_drv_none(struct hostapd_data *hapd); 75int hostapd_driver_scan(struct hostapd_data *hapd, 76 struct wpa_driver_scan_params *params); 77struct wpa_scan_results * hostapd_driver_get_scan_results( 78 struct hostapd_data *hapd); 79int hostapd_driver_set_noa(struct hostapd_data *hapd, u8 count, int start, 80 int duration); 81int hostapd_drv_set_key(const char *ifname, 82 struct hostapd_data *hapd, 83 enum wpa_alg alg, const u8 *addr, 84 int key_idx, int set_tx, 85 const u8 *seq, size_t seq_len, 86 const u8 *key, size_t key_len); 87int hostapd_drv_send_mlme(struct hostapd_data *hapd, 88 const void *msg, size_t len, int noack); 89int hostapd_drv_sta_deauth(struct hostapd_data *hapd, 90 const u8 *addr, int reason); 91int hostapd_drv_sta_disassoc(struct hostapd_data *hapd, 92 const u8 *addr, int reason); 93int hostapd_drv_send_action(struct hostapd_data *hapd, unsigned int freq, 94 unsigned int wait, const u8 *dst, const u8 *data, 95 size_t len); 96int hostapd_add_sta_node(struct hostapd_data *hapd, const u8 *addr, 97 u16 auth_alg); 98int hostapd_sta_auth(struct hostapd_data *hapd, const u8 *addr, 99 u16 seq, u16 status, const u8 *ie, size_t len); 100int hostapd_sta_assoc(struct hostapd_data *hapd, const u8 *addr, 101 int reassoc, u16 status, const u8 *ie, size_t len); 102int hostapd_add_tspec(struct hostapd_data *hapd, const u8 *addr, 103 u8 *tspec_ie, size_t tspec_ielen); 104int hostapd_start_dfs_cac(struct hostapd_data *hapd, int mode, int freq, 105 int channel, int ht_enabled, int vht_enabled, 106 int sec_channel_offset, int vht_oper_chwidth, 107 int center_segment0, int center_segment1); 108 109 110#include "drivers/driver.h" 111 112int hostapd_drv_wnm_oper(struct hostapd_data *hapd, 113 enum wnm_oper oper, const u8 *peer, 114 u8 *buf, u16 *buf_len); 115 116int hostapd_drv_set_qos_map(struct hostapd_data *hapd, const u8 *qos_map_set, 117 u8 qos_map_set_len); 118 119static 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 128static 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 138static 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 146static 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 154static 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 166static 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 175static 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 183static 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 191static 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 199static 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 209static 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 218static 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 226static 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 235static 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#endif /* AP_DRV_OPS */ 246