1 /* 2 * hostapd - Driver operations 3 * Copyright (c) 2009, Jouni Malinen <j@w1.fi> 4 * 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. 8 * 9 * Alternatively, this software may be distributed under the terms of BSD 10 * license. 11 * 12 * See README and COPYING for more details. 13 */ 14 15 #ifndef AP_DRV_OPS 16 #define AP_DRV_OPS 17 18 enum wpa_driver_if_type; 19 struct wpa_bss_params; 20 struct wpa_driver_scan_params; 21 struct ieee80211_ht_capabilities; 22 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, 36 int enabled); 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, 40 int val); 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, 44 u16 listen_interval, 45 const struct ieee80211_ht_capabilities *ht_capab, 46 u32 flags); 47 int hostapd_set_privacy(struct hostapd_data *hapd, int enabled); 48 int hostapd_set_generic_elem(struct hostapd_data *hapd, const u8 *elem, 49 size_t elem_len); 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, 55 const char *bridge); 56 int hostapd_if_remove(struct hostapd_data *hapd, enum wpa_driver_if_type type, 57 const char *ifname); 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_rate_sets(struct hostapd_data *hapd, int *supp_rates, 70 int *basic_rates, int mode); 71 int hostapd_set_country(struct hostapd_data *hapd, const char *country); 72 int hostapd_set_tx_queue_params(struct hostapd_data *hapd, int queue, int aifs, 73 int cw_min, int cw_max, int burst_time); 74 struct hostapd_hw_modes * 75 hostapd_get_hw_feature_data(struct hostapd_data *hapd, u16 *num_modes, 76 u16 *flags); 77 int hostapd_driver_commit(struct hostapd_data *hapd); 78 int hostapd_drv_none(struct hostapd_data *hapd); 79 int hostapd_driver_scan(struct hostapd_data *hapd, 80 struct wpa_driver_scan_params *params); 81 struct wpa_scan_results * hostapd_driver_get_scan_results( 82 struct hostapd_data *hapd); 83 int hostapd_driver_set_noa(struct hostapd_data *hapd, u8 count, int start, 84 int duration); 85 int hostapd_drv_set_key(const char *ifname, 86 struct hostapd_data *hapd, 87 enum wpa_alg alg, const u8 *addr, 88 int key_idx, int set_tx, 89 const u8 *seq, size_t seq_len, 90 const u8 *key, size_t key_len); 91 int hostapd_drv_send_mlme(struct hostapd_data *hapd, 92 const void *msg, size_t len); 93 int hostapd_drv_sta_deauth(struct hostapd_data *hapd, 94 const u8 *addr, int reason); 95 int hostapd_drv_sta_disassoc(struct hostapd_data *hapd, 96 const u8 *addr, int reason); 97 int hostapd_add_sta_node(struct hostapd_data *hapd, const u8 *addr, 98 u16 auth_alg); 99 int hostapd_sta_auth(struct hostapd_data *hapd, const u8 *addr, 100 u16 seq, u16 status, const u8 *ie, size_t len); 101 int hostapd_sta_assoc(struct hostapd_data *hapd, const u8 *addr, 102 int reassoc, u16 status, const u8 *ie, size_t len); 103 int hostapd_add_tspec(struct hostapd_data *hapd, const u8 *addr, 104 u8 *tspec_ie, size_t tspec_ielen); 105 106 107 #include "drivers/driver.h" 108 109 static inline int hostapd_drv_set_countermeasures(struct hostapd_data *hapd, 110 int enabled) 111 { 112 if (hapd->driver == NULL || 113 hapd->driver->hapd_set_countermeasures == NULL) 114 return 0; 115 return hapd->driver->hapd_set_countermeasures(hapd->drv_priv, enabled); 116 } 117 118 static inline int hostapd_drv_set_sta_vlan(const char *ifname, 119 struct hostapd_data *hapd, 120 const u8 *addr, int vlan_id) 121 { 122 if (hapd->driver == NULL || hapd->driver->set_sta_vlan == NULL) 123 return 0; 124 return hapd->driver->set_sta_vlan(hapd->drv_priv, addr, ifname, 125 vlan_id); 126 } 127 128 static inline int hostapd_drv_get_inact_sec(struct hostapd_data *hapd, 129 const u8 *addr) 130 { 131 if (hapd->driver == NULL || hapd->driver->get_inact_sec == NULL) 132 return 0; 133 return hapd->driver->get_inact_sec(hapd->drv_priv, addr); 134 } 135 136 static inline int hostapd_drv_sta_remove(struct hostapd_data *hapd, 137 const u8 *addr) 138 { 139 if (hapd->driver == NULL || hapd->driver->sta_remove == NULL) 140 return 0; 141 return hapd->driver->sta_remove(hapd->drv_priv, addr); 142 } 143 144 static inline int hostapd_drv_hapd_send_eapol(struct hostapd_data *hapd, 145 const u8 *addr, const u8 *data, 146 size_t data_len, int encrypt, 147 u32 flags) 148 { 149 if (hapd->driver == NULL || hapd->driver->hapd_send_eapol == NULL) 150 return 0; 151 return hapd->driver->hapd_send_eapol(hapd->drv_priv, addr, data, 152 data_len, encrypt, 153 hapd->own_addr, flags); 154 } 155 156 static inline int hostapd_drv_read_sta_data( 157 struct hostapd_data *hapd, struct hostap_sta_driver_data *data, 158 const u8 *addr) 159 { 160 if (hapd->driver == NULL || hapd->driver->read_sta_data == NULL) 161 return -1; 162 return hapd->driver->read_sta_data(hapd->drv_priv, data, addr); 163 } 164 165 static inline int hostapd_drv_sta_clear_stats(struct hostapd_data *hapd, 166 const u8 *addr) 167 { 168 if (hapd->driver == NULL || hapd->driver->sta_clear_stats == NULL) 169 return 0; 170 return hapd->driver->sta_clear_stats(hapd->drv_priv, addr); 171 } 172 173 static inline int hostapd_drv_set_ap(struct hostapd_data *hapd, 174 struct wpa_driver_ap_params *params) 175 { 176 if (hapd->driver == NULL || hapd->driver->set_ap == NULL) 177 return 0; 178 return hapd->driver->set_ap(hapd->drv_priv, params); 179 } 180 181 static inline int hostapd_drv_set_radius_acl_auth(struct hostapd_data *hapd, 182 const u8 *mac, int accepted, 183 u32 session_timeout) 184 { 185 if (hapd->driver == NULL || hapd->driver->set_radius_acl_auth == NULL) 186 return 0; 187 return hapd->driver->set_radius_acl_auth(hapd->drv_priv, mac, accepted, 188 session_timeout); 189 } 190 191 static inline int hostapd_drv_set_radius_acl_expire(struct hostapd_data *hapd, 192 const u8 *mac) 193 { 194 if (hapd->driver == NULL || 195 hapd->driver->set_radius_acl_expire == NULL) 196 return 0; 197 return hapd->driver->set_radius_acl_expire(hapd->drv_priv, mac); 198 } 199 200 static inline int hostapd_drv_set_authmode(struct hostapd_data *hapd, 201 int auth_algs) 202 { 203 if (hapd->driver == NULL || hapd->driver->set_authmode == NULL) 204 return 0; 205 return hapd->driver->set_authmode(hapd->drv_priv, auth_algs); 206 } 207 208 static inline void hostapd_drv_poll_client(struct hostapd_data *hapd, 209 const u8 *own_addr, const u8 *addr, 210 int qos) 211 { 212 if (hapd->driver == NULL || hapd->driver->poll_client == NULL) 213 return; 214 hapd->driver->poll_client(hapd->drv_priv, own_addr, addr, qos); 215 } 216 217 #endif /* AP_DRV_OPS */ 218