Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 1 | /* |
| 2 | * hostapd / IEEE 802.11 Management |
| 3 | * Copyright (c) 2002-2009, Jouni Malinen <j@w1.fi> |
| 4 | * |
Dmitry Shmidt | c5ec7f5 | 2012-03-06 16:33:24 -0800 | [diff] [blame] | 5 | * This software may be distributed under the terms of the BSD license. |
| 6 | * See README for more details. |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 7 | */ |
| 8 | |
| 9 | #ifndef IEEE802_11_H |
| 10 | #define IEEE802_11_H |
| 11 | |
| 12 | struct hostapd_iface; |
| 13 | struct hostapd_data; |
| 14 | struct sta_info; |
| 15 | struct hostapd_frame_info; |
| 16 | struct ieee80211_ht_capabilities; |
Dmitry Shmidt | 9d9e602 | 2015-04-23 10:34:55 -0700 | [diff] [blame] | 17 | struct ieee80211_vht_capabilities; |
Dmitry Shmidt | 7832adb | 2014-04-29 10:53:02 -0700 | [diff] [blame] | 18 | struct ieee80211_mgmt; |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 19 | |
Dmitry Shmidt | fb79edc | 2014-01-10 10:45:54 -0800 | [diff] [blame] | 20 | int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len, |
| 21 | struct hostapd_frame_info *fi); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 22 | void ieee802_11_mgmt_cb(struct hostapd_data *hapd, const u8 *buf, size_t len, |
| 23 | u16 stype, int ok); |
Dmitry Shmidt | 7832adb | 2014-04-29 10:53:02 -0700 | [diff] [blame] | 24 | void hostapd_2040_coex_action(struct hostapd_data *hapd, |
| 25 | const struct ieee80211_mgmt *mgmt, size_t len); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 26 | #ifdef NEED_AP_MLME |
| 27 | int ieee802_11_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen); |
| 28 | int ieee802_11_get_mib_sta(struct hostapd_data *hapd, struct sta_info *sta, |
| 29 | char *buf, size_t buflen); |
| 30 | #else /* NEED_AP_MLME */ |
| 31 | static inline int ieee802_11_get_mib(struct hostapd_data *hapd, char *buf, |
| 32 | size_t buflen) |
| 33 | { |
| 34 | return 0; |
| 35 | } |
| 36 | |
| 37 | static inline int ieee802_11_get_mib_sta(struct hostapd_data *hapd, |
| 38 | struct sta_info *sta, |
| 39 | char *buf, size_t buflen) |
| 40 | { |
| 41 | return 0; |
| 42 | } |
| 43 | #endif /* NEED_AP_MLME */ |
Dmitry Shmidt | 9d9e602 | 2015-04-23 10:34:55 -0700 | [diff] [blame] | 44 | u16 hostapd_own_capab_info(struct hostapd_data *hapd); |
Dmitry Shmidt | 7832adb | 2014-04-29 10:53:02 -0700 | [diff] [blame] | 45 | void ap_ht2040_timeout(void *eloop_data, void *user_data); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 46 | u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | 051af73 | 2013-10-22 13:52:46 -0700 | [diff] [blame] | 47 | u8 * hostapd_eid_qos_map_set(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 48 | u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid); |
| 49 | u8 * hostapd_eid_ext_supp_rates(struct hostapd_data *hapd, u8 *eid); |
| 50 | u8 * hostapd_eid_ht_capabilities(struct hostapd_data *hapd, u8 *eid); |
| 51 | u8 * hostapd_eid_ht_operation(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | d80a401 | 2015-11-05 16:35:40 -0800 | [diff] [blame] | 52 | u8 * hostapd_eid_secondary_channel(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | 7d17530 | 2016-09-06 13:11:34 -0700 | [diff] [blame] | 53 | u8 * hostapd_eid_vht_capabilities(struct hostapd_data *hapd, u8 *eid, u32 nsts); |
Dmitry Shmidt | 0494959 | 2012-07-19 12:16:46 -0700 | [diff] [blame] | 54 | u8 * hostapd_eid_vht_operation(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | 2f74e36 | 2015-01-21 13:19:05 -0800 | [diff] [blame] | 55 | u8 * hostapd_eid_vendor_vht(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | d80a401 | 2015-11-05 16:35:40 -0800 | [diff] [blame] | 56 | u8 * hostapd_eid_wb_chsw_wrapper(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | d7ff03d | 2015-12-04 14:49:35 -0800 | [diff] [blame] | 57 | u8 * hostapd_eid_txpower_envelope(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | d80a401 | 2015-11-05 16:35:40 -0800 | [diff] [blame] | 58 | |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 59 | int hostapd_ht_operation_update(struct hostapd_iface *iface); |
| 60 | void ieee802_11_send_sa_query_req(struct hostapd_data *hapd, |
| 61 | const u8 *addr, const u8 *trans_id); |
| 62 | void hostapd_get_ht_capab(struct hostapd_data *hapd, |
| 63 | struct ieee80211_ht_capabilities *ht_cap, |
| 64 | struct ieee80211_ht_capabilities *neg_ht_cap); |
Dmitry Shmidt | a54fa5f | 2013-01-15 13:53:35 -0800 | [diff] [blame] | 65 | void hostapd_get_vht_capab(struct hostapd_data *hapd, |
| 66 | struct ieee80211_vht_capabilities *vht_cap, |
| 67 | struct ieee80211_vht_capabilities *neg_vht_cap); |
Dmitry Shmidt | d80a401 | 2015-11-05 16:35:40 -0800 | [diff] [blame] | 68 | int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 69 | u16 copy_sta_ht_capab(struct hostapd_data *hapd, struct sta_info *sta, |
Dmitry Shmidt | 9d9e602 | 2015-04-23 10:34:55 -0700 | [diff] [blame] | 70 | const u8 *ht_capab); |
Dmitry Shmidt | 2f74e36 | 2015-01-21 13:19:05 -0800 | [diff] [blame] | 71 | u16 copy_sta_vendor_vht(struct hostapd_data *hapd, struct sta_info *sta, |
| 72 | const u8 *ie, size_t len); |
| 73 | |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 74 | void update_ht_state(struct hostapd_data *hapd, struct sta_info *sta); |
Dmitry Shmidt | 7832adb | 2014-04-29 10:53:02 -0700 | [diff] [blame] | 75 | void ht40_intolerant_add(struct hostapd_iface *iface, struct sta_info *sta); |
| 76 | void ht40_intolerant_remove(struct hostapd_iface *iface, struct sta_info *sta); |
Dmitry Shmidt | 61d9df3 | 2012-08-29 16:22:06 -0700 | [diff] [blame] | 77 | u16 copy_sta_vht_capab(struct hostapd_data *hapd, struct sta_info *sta, |
Dmitry Shmidt | 9d9e602 | 2015-04-23 10:34:55 -0700 | [diff] [blame] | 78 | const u8 *vht_capab); |
Dmitry Shmidt | bd14a57 | 2014-02-18 10:33:49 -0800 | [diff] [blame] | 79 | u16 set_sta_vht_opmode(struct hostapd_data *hapd, struct sta_info *sta, |
| 80 | const u8 *vht_opmode); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 81 | void hostapd_tx_status(struct hostapd_data *hapd, const u8 *addr, |
| 82 | const u8 *buf, size_t len, int ack); |
Dmitry Shmidt | 1f69aa5 | 2012-01-24 16:10:04 -0800 | [diff] [blame] | 83 | void hostapd_eapol_tx_status(struct hostapd_data *hapd, const u8 *dst, |
| 84 | const u8 *data, size_t len, int ack); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 85 | void ieee802_11_rx_from_unknown(struct hostapd_data *hapd, const u8 *src, |
| 86 | int wds); |
Dmitry Shmidt | 1f69aa5 | 2012-01-24 16:10:04 -0800 | [diff] [blame] | 87 | u8 * hostapd_eid_assoc_comeback_time(struct hostapd_data *hapd, |
| 88 | struct sta_info *sta, u8 *eid); |
| 89 | void ieee802_11_sa_query_action(struct hostapd_data *hapd, |
| 90 | const u8 *sa, const u8 action_type, |
| 91 | const u8 *trans_id); |
| 92 | u8 * hostapd_eid_interworking(struct hostapd_data *hapd, u8 *eid); |
| 93 | u8 * hostapd_eid_adv_proto(struct hostapd_data *hapd, u8 *eid); |
| 94 | u8 * hostapd_eid_roaming_consortium(struct hostapd_data *hapd, u8 *eid); |
| 95 | u8 * hostapd_eid_time_adv(struct hostapd_data *hapd, u8 *eid); |
| 96 | u8 * hostapd_eid_time_zone(struct hostapd_data *hapd, u8 *eid); |
| 97 | int hostapd_update_time_adv(struct hostapd_data *hapd); |
| 98 | void hostapd_client_poll_ok(struct hostapd_data *hapd, const u8 *addr); |
Dmitry Shmidt | 0494959 | 2012-07-19 12:16:46 -0700 | [diff] [blame] | 99 | u8 * hostapd_eid_bss_max_idle_period(struct hostapd_data *hapd, u8 *eid); |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 100 | |
Dmitry Shmidt | ff787d5 | 2015-01-12 13:01:47 -0800 | [diff] [blame] | 101 | int auth_sae_init_committed(struct hostapd_data *hapd, struct sta_info *sta); |
| 102 | #ifdef CONFIG_SAE |
| 103 | void sae_clear_retransmit_timer(struct hostapd_data *hapd, |
| 104 | struct sta_info *sta); |
Dmitry Shmidt | e466304 | 2016-04-04 10:07:49 -0700 | [diff] [blame] | 105 | void sae_accept_sta(struct hostapd_data *hapd, struct sta_info *sta); |
Dmitry Shmidt | ff787d5 | 2015-01-12 13:01:47 -0800 | [diff] [blame] | 106 | #else /* CONFIG_SAE */ |
| 107 | static inline void sae_clear_retransmit_timer(struct hostapd_data *hapd, |
| 108 | struct sta_info *sta) |
| 109 | { |
| 110 | } |
| 111 | #endif /* CONFIG_SAE */ |
| 112 | |
Dmitry Shmidt | 57c2d39 | 2016-02-23 13:40:19 -0800 | [diff] [blame] | 113 | #ifdef CONFIG_MBO |
| 114 | |
| 115 | u8 * hostapd_eid_mbo(struct hostapd_data *hapd, u8 *eid, size_t len); |
| 116 | |
| 117 | u8 hostapd_mbo_ie_len(struct hostapd_data *hapd); |
| 118 | |
| 119 | #else /* CONFIG_MBO */ |
| 120 | |
| 121 | static inline u8 * hostapd_eid_mbo(struct hostapd_data *hapd, u8 *eid, |
| 122 | size_t len) |
| 123 | { |
| 124 | return eid; |
| 125 | } |
| 126 | |
| 127 | static inline u8 hostapd_mbo_ie_len(struct hostapd_data *hapd) |
| 128 | { |
| 129 | return 0; |
| 130 | } |
| 131 | |
| 132 | #endif /* CONFIG_MBO */ |
| 133 | |
Dmitry Shmidt | 9c17526 | 2016-03-03 10:20:07 -0800 | [diff] [blame] | 134 | void ap_copy_sta_supp_op_classes(struct sta_info *sta, |
| 135 | const u8 *supp_op_classes, |
| 136 | size_t supp_op_classes_len); |
| 137 | |
Dmitry Shmidt | 9839ecd | 2016-11-07 11:05:47 -0800 | [diff] [blame^] | 138 | u8 * hostapd_eid_fils_indic(struct hostapd_data *hapd, u8 *eid, int hessid); |
| 139 | void ieee802_11_finish_fils_auth(struct hostapd_data *hapd, |
| 140 | struct sta_info *sta, int success, |
| 141 | struct wpabuf *erp_resp, |
| 142 | const u8 *msk, size_t msk_len); |
| 143 | |
Dmitry Shmidt | 8d520ff | 2011-05-09 14:06:53 -0700 | [diff] [blame] | 144 | #endif /* IEEE802_11_H */ |