1214501Srpaulo/* 2214501Srpaulo * hostapd - Driver operations 3214501Srpaulo * Copyright (c) 2009, Jouni Malinen <j@w1.fi> 4214501Srpaulo * 5252726Srpaulo * This software may be distributed under the terms of the BSD license. 6252726Srpaulo * See README for more details. 7214501Srpaulo */ 8214501Srpaulo 9214501Srpaulo#ifndef AP_DRV_OPS 10214501Srpaulo#define AP_DRV_OPS 11214501Srpaulo 12214501Srpauloenum wpa_driver_if_type; 13214501Srpaulostruct wpa_bss_params; 14214501Srpaulostruct wpa_driver_scan_params; 15252726Srpaulostruct ieee80211_ht_capabilities; 16214501Srpaulo 17252726Srpaulou32 hostapd_sta_flags_to_drv(u32 flags); 18252726Srpauloint hostapd_build_ap_extra_ies(struct hostapd_data *hapd, 19252726Srpaulo struct wpabuf **beacon, 20252726Srpaulo struct wpabuf **proberesp, 21252726Srpaulo struct wpabuf **assocresp); 22252726Srpaulovoid hostapd_free_ap_extra_ies(struct hostapd_data *hapd, struct wpabuf *beacon, 23252726Srpaulo struct wpabuf *proberesp, 24252726Srpaulo struct wpabuf *assocresp); 25252726Srpauloint hostapd_set_ap_wps_ie(struct hostapd_data *hapd); 26252726Srpauloint hostapd_set_authorized(struct hostapd_data *hapd, 27252726Srpaulo struct sta_info *sta, int authorized); 28252726Srpauloint hostapd_set_sta_flags(struct hostapd_data *hapd, struct sta_info *sta); 29252726Srpauloint hostapd_set_drv_ieee8021x(struct hostapd_data *hapd, const char *ifname, 30252726Srpaulo int enabled); 31252726Srpauloint hostapd_vlan_if_add(struct hostapd_data *hapd, const char *ifname); 32252726Srpauloint hostapd_vlan_if_remove(struct hostapd_data *hapd, const char *ifname); 33252726Srpauloint hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr, int aid, 34252726Srpaulo int val); 35252726Srpauloint hostapd_sta_add(struct hostapd_data *hapd, 36252726Srpaulo const u8 *addr, u16 aid, u16 capability, 37252726Srpaulo const u8 *supp_rates, size_t supp_rates_len, 38252726Srpaulo u16 listen_interval, 39252726Srpaulo const struct ieee80211_ht_capabilities *ht_capab, 40252726Srpaulo u32 flags, u8 qosinfo); 41214501Srpauloint hostapd_set_privacy(struct hostapd_data *hapd, int enabled); 42214501Srpauloint hostapd_set_generic_elem(struct hostapd_data *hapd, const u8 *elem, 43214501Srpaulo size_t elem_len); 44214501Srpauloint hostapd_get_ssid(struct hostapd_data *hapd, u8 *buf, size_t len); 45214501Srpauloint hostapd_set_ssid(struct hostapd_data *hapd, const u8 *buf, size_t len); 46214501Srpauloint hostapd_if_add(struct hostapd_data *hapd, enum wpa_driver_if_type type, 47214501Srpaulo const char *ifname, const u8 *addr, void *bss_ctx, 48252726Srpaulo void **drv_priv, char *force_ifname, u8 *if_addr, 49252726Srpaulo const char *bridge); 50214501Srpauloint hostapd_if_remove(struct hostapd_data *hapd, enum wpa_driver_if_type type, 51214501Srpaulo const char *ifname); 52214501Srpauloint hostapd_set_ieee8021x(struct hostapd_data *hapd, 53214501Srpaulo struct wpa_bss_params *params); 54214501Srpauloint hostapd_get_seqnum(const char *ifname, struct hostapd_data *hapd, 55214501Srpaulo const u8 *addr, int idx, u8 *seq); 56214501Srpauloint hostapd_flush(struct hostapd_data *hapd); 57214501Srpauloint hostapd_set_freq(struct hostapd_data *hapd, int mode, int freq, 58214501Srpaulo int channel, int ht_enabled, int sec_channel_offset); 59214501Srpauloint hostapd_set_rts(struct hostapd_data *hapd, int rts); 60214501Srpauloint hostapd_set_frag(struct hostapd_data *hapd, int frag); 61214501Srpauloint hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr, 62214501Srpaulo int total_flags, int flags_or, int flags_and); 63214501Srpauloint hostapd_set_country(struct hostapd_data *hapd, const char *country); 64214501Srpauloint hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs, 65214501Srpaulo int cw_min, int cw_max, int burst_time); 66214501Srpaulostruct hostapd_hw_modes * 67214501Srpaulohostapd_get_hw_feature_data(struct hostapd_data *hapd, u16 *num_modes, 68214501Srpaulo u16 *flags); 69214501Srpauloint hostapd_driver_commit(struct hostapd_data *hapd); 70214501Srpauloint hostapd_drv_none(struct hostapd_data *hapd); 71214501Srpauloint hostapd_driver_scan(struct hostapd_data *hapd, 72214501Srpaulo struct wpa_driver_scan_params *params); 73214501Srpaulostruct wpa_scan_results * hostapd_driver_get_scan_results( 74214501Srpaulo struct hostapd_data *hapd); 75252726Srpauloint hostapd_driver_set_noa(struct hostapd_data *hapd, u8 count, int start, 76252726Srpaulo int duration); 77252726Srpauloint hostapd_drv_set_key(const char *ifname, 78252726Srpaulo struct hostapd_data *hapd, 79252726Srpaulo enum wpa_alg alg, const u8 *addr, 80252726Srpaulo int key_idx, int set_tx, 81252726Srpaulo const u8 *seq, size_t seq_len, 82252726Srpaulo const u8 *key, size_t key_len); 83252726Srpauloint hostapd_drv_send_mlme(struct hostapd_data *hapd, 84252726Srpaulo const void *msg, size_t len, int noack); 85252726Srpauloint hostapd_drv_sta_deauth(struct hostapd_data *hapd, 86252726Srpaulo const u8 *addr, int reason); 87252726Srpauloint hostapd_drv_sta_disassoc(struct hostapd_data *hapd, 88252726Srpaulo const u8 *addr, int reason); 89252726Srpauloint hostapd_drv_send_action(struct hostapd_data *hapd, unsigned int freq, 90252726Srpaulo unsigned int wait, const u8 *dst, const u8 *data, 91252726Srpaulo size_t len); 92252726Srpauloint hostapd_add_sta_node(struct hostapd_data *hapd, const u8 *addr, 93252726Srpaulo u16 auth_alg); 94252726Srpauloint hostapd_sta_auth(struct hostapd_data *hapd, const u8 *addr, 95252726Srpaulo u16 seq, u16 status, const u8 *ie, size_t len); 96252726Srpauloint hostapd_sta_assoc(struct hostapd_data *hapd, const u8 *addr, 97252726Srpaulo int reassoc, u16 status, const u8 *ie, size_t len); 98252726Srpauloint hostapd_add_tspec(struct hostapd_data *hapd, const u8 *addr, 99252726Srpaulo u8 *tspec_ie, size_t tspec_ielen); 100214501Srpaulo 101252726Srpaulo 102252726Srpaulo#include "drivers/driver.h" 103252726Srpaulo 104252726Srpauloint hostapd_drv_wnm_oper(struct hostapd_data *hapd, 105252726Srpaulo enum wnm_oper oper, const u8 *peer, 106252726Srpaulo u8 *buf, u16 *buf_len); 107252726Srpaulo 108252726Srpaulostatic inline int hostapd_drv_set_countermeasures(struct hostapd_data *hapd, 109252726Srpaulo int enabled) 110252726Srpaulo{ 111252726Srpaulo if (hapd->driver == NULL || 112252726Srpaulo hapd->driver->hapd_set_countermeasures == NULL) 113252726Srpaulo return 0; 114252726Srpaulo return hapd->driver->hapd_set_countermeasures(hapd->drv_priv, enabled); 115252726Srpaulo} 116252726Srpaulo 117252726Srpaulostatic inline int hostapd_drv_set_sta_vlan(const char *ifname, 118252726Srpaulo struct hostapd_data *hapd, 119252726Srpaulo const u8 *addr, int vlan_id) 120252726Srpaulo{ 121252726Srpaulo if (hapd->driver == NULL || hapd->driver->set_sta_vlan == NULL) 122252726Srpaulo return 0; 123252726Srpaulo return hapd->driver->set_sta_vlan(hapd->drv_priv, addr, ifname, 124252726Srpaulo vlan_id); 125252726Srpaulo} 126252726Srpaulo 127252726Srpaulostatic inline int hostapd_drv_get_inact_sec(struct hostapd_data *hapd, 128252726Srpaulo const u8 *addr) 129252726Srpaulo{ 130252726Srpaulo if (hapd->driver == NULL || hapd->driver->get_inact_sec == NULL) 131252726Srpaulo return 0; 132252726Srpaulo return hapd->driver->get_inact_sec(hapd->drv_priv, addr); 133252726Srpaulo} 134252726Srpaulo 135252726Srpaulostatic inline int hostapd_drv_sta_remove(struct hostapd_data *hapd, 136252726Srpaulo const u8 *addr) 137252726Srpaulo{ 138252726Srpaulo if (hapd->driver == NULL || hapd->driver->sta_remove == NULL) 139252726Srpaulo return 0; 140252726Srpaulo return hapd->driver->sta_remove(hapd->drv_priv, addr); 141252726Srpaulo} 142252726Srpaulo 143252726Srpaulostatic inline int hostapd_drv_hapd_send_eapol(struct hostapd_data *hapd, 144252726Srpaulo const u8 *addr, const u8 *data, 145252726Srpaulo size_t data_len, int encrypt, 146252726Srpaulo u32 flags) 147252726Srpaulo{ 148252726Srpaulo if (hapd->driver == NULL || hapd->driver->hapd_send_eapol == NULL) 149252726Srpaulo return 0; 150252726Srpaulo return hapd->driver->hapd_send_eapol(hapd->drv_priv, addr, data, 151252726Srpaulo data_len, encrypt, 152252726Srpaulo hapd->own_addr, flags); 153252726Srpaulo} 154252726Srpaulo 155252726Srpaulostatic inline int hostapd_drv_read_sta_data( 156252726Srpaulo struct hostapd_data *hapd, struct hostap_sta_driver_data *data, 157252726Srpaulo const u8 *addr) 158252726Srpaulo{ 159252726Srpaulo if (hapd->driver == NULL || hapd->driver->read_sta_data == NULL) 160252726Srpaulo return -1; 161252726Srpaulo return hapd->driver->read_sta_data(hapd->drv_priv, data, addr); 162252726Srpaulo} 163252726Srpaulo 164252726Srpaulostatic inline int hostapd_drv_sta_clear_stats(struct hostapd_data *hapd, 165252726Srpaulo const u8 *addr) 166252726Srpaulo{ 167252726Srpaulo if (hapd->driver == NULL || hapd->driver->sta_clear_stats == NULL) 168252726Srpaulo return 0; 169252726Srpaulo return hapd->driver->sta_clear_stats(hapd->drv_priv, addr); 170252726Srpaulo} 171252726Srpaulo 172252726Srpaulostatic inline int hostapd_drv_set_ap(struct hostapd_data *hapd, 173252726Srpaulo struct wpa_driver_ap_params *params) 174252726Srpaulo{ 175252726Srpaulo if (hapd->driver == NULL || hapd->driver->set_ap == NULL) 176252726Srpaulo return 0; 177252726Srpaulo return hapd->driver->set_ap(hapd->drv_priv, params); 178252726Srpaulo} 179252726Srpaulo 180252726Srpaulostatic inline int hostapd_drv_set_radius_acl_auth(struct hostapd_data *hapd, 181252726Srpaulo const u8 *mac, int accepted, 182252726Srpaulo u32 session_timeout) 183252726Srpaulo{ 184252726Srpaulo if (hapd->driver == NULL || hapd->driver->set_radius_acl_auth == NULL) 185252726Srpaulo return 0; 186252726Srpaulo return hapd->driver->set_radius_acl_auth(hapd->drv_priv, mac, accepted, 187252726Srpaulo session_timeout); 188252726Srpaulo} 189252726Srpaulo 190252726Srpaulostatic inline int hostapd_drv_set_radius_acl_expire(struct hostapd_data *hapd, 191252726Srpaulo const u8 *mac) 192252726Srpaulo{ 193252726Srpaulo if (hapd->driver == NULL || 194252726Srpaulo hapd->driver->set_radius_acl_expire == NULL) 195252726Srpaulo return 0; 196252726Srpaulo return hapd->driver->set_radius_acl_expire(hapd->drv_priv, mac); 197252726Srpaulo} 198252726Srpaulo 199252726Srpaulostatic inline int hostapd_drv_set_authmode(struct hostapd_data *hapd, 200252726Srpaulo int auth_algs) 201252726Srpaulo{ 202252726Srpaulo if (hapd->driver == NULL || hapd->driver->set_authmode == NULL) 203252726Srpaulo return 0; 204252726Srpaulo return hapd->driver->set_authmode(hapd->drv_priv, auth_algs); 205252726Srpaulo} 206252726Srpaulo 207252726Srpaulostatic inline void hostapd_drv_poll_client(struct hostapd_data *hapd, 208252726Srpaulo const u8 *own_addr, const u8 *addr, 209252726Srpaulo int qos) 210252726Srpaulo{ 211252726Srpaulo if (hapd->driver == NULL || hapd->driver->poll_client == NULL) 212252726Srpaulo return; 213252726Srpaulo hapd->driver->poll_client(hapd->drv_priv, own_addr, addr, qos); 214252726Srpaulo} 215252726Srpaulo 216214501Srpaulo#endif /* AP_DRV_OPS */ 217