mirror of
https://gitee.com/Vancouver2017/luban-lite.git
synced 2025-12-22 03:58:53 +00:00
184 lines
6.0 KiB
C
184 lines
6.0 KiB
C
|
|
/**
|
||
|
|
****************************************************************************************
|
||
|
|
*
|
||
|
|
* @file hostapd.h
|
||
|
|
*
|
||
|
|
* @brief external api or data structure of hostapd.
|
||
|
|
*
|
||
|
|
* Copyright (C) ASR
|
||
|
|
*
|
||
|
|
****************************************************************************************
|
||
|
|
*/
|
||
|
|
#ifndef HOSTAPD_H
|
||
|
|
#define HOSTAPD_H
|
||
|
|
|
||
|
|
#include "asr_types.h"
|
||
|
|
#include "uwifi_ops_adapter.h"
|
||
|
|
#include "mac.h"
|
||
|
|
#include "uwifi_interface.h"
|
||
|
|
#include "wifi_config.h"
|
||
|
|
#include "ipc_compat.h"
|
||
|
|
|
||
|
|
#ifdef CFG_SOFTAP_SUPPORT
|
||
|
|
|
||
|
|
#define MAC_HDR_LEN 24
|
||
|
|
|
||
|
|
#define WIFI_PSK_LEN 64
|
||
|
|
#define BASIC_RATESET_LEN 12
|
||
|
|
#define BASIC_EXT_RATESET_LEN 16
|
||
|
|
#define WIFI_AP_REKEY_TIME_DEFAULT 36000 //default rekey time:3600s
|
||
|
|
#define GetFrameSubType(pbuf) ((*(uint16_t *)(pbuf)) & (BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2)))
|
||
|
|
|
||
|
|
enum ssid_match_result
|
||
|
|
{
|
||
|
|
NO_SSID_MATCH,
|
||
|
|
EXACT_SSID_MATCH,
|
||
|
|
WILDCARD_SSID_MATCH
|
||
|
|
};
|
||
|
|
|
||
|
|
//edca cfg parameters
|
||
|
|
struct ap_edca_cfg_param
|
||
|
|
{
|
||
|
|
uint8_t acm;
|
||
|
|
uint8_t aifsn;
|
||
|
|
uint8_t cwmin;
|
||
|
|
uint8_t cwmax;
|
||
|
|
uint16_t txop;
|
||
|
|
};
|
||
|
|
|
||
|
|
//data structure to config ap mode
|
||
|
|
struct probe_req_elems {
|
||
|
|
uint8_t *ssid;
|
||
|
|
uint8_t *ssid_list;
|
||
|
|
uint8_t ssid_len;
|
||
|
|
uint8_t ssid_list_len;
|
||
|
|
};
|
||
|
|
|
||
|
|
//data structure to config ap mode
|
||
|
|
struct uwifi_ap_cfg_param {
|
||
|
|
uint32_t dtim_period;
|
||
|
|
uint16_t beacon_interval;
|
||
|
|
uint16_t capabality; //used in beacon & assoc_rsp capability information
|
||
|
|
|
||
|
|
uint8_t wmm_enabled;
|
||
|
|
uint8_t ht_enabled;
|
||
|
|
uint8_t he_enabled;
|
||
|
|
uint8_t encryption_protocol;
|
||
|
|
|
||
|
|
struct ieee80211_channel chan_basic;
|
||
|
|
enum nl80211_chan_width chan_width;
|
||
|
|
uint32_t chan_center_freq1;
|
||
|
|
uint32_t chan_center_freq2;
|
||
|
|
|
||
|
|
bool crypto_control_port;
|
||
|
|
bool crypto_control_port_no_encrypt;
|
||
|
|
uint16_t crypto_control_port_ethertype;
|
||
|
|
uint32_t crypto_cipher_group;
|
||
|
|
uint32_t crypto_cipher_pairwise;
|
||
|
|
|
||
|
|
uint8_t ssid[WIFI_SSID_LEN+1];
|
||
|
|
uint8_t ssid_len;
|
||
|
|
uint8_t psk[WIFI_PSK_LEN+1];
|
||
|
|
uint8_t psk_len;
|
||
|
|
|
||
|
|
//should be put into asr_hw
|
||
|
|
uint8_t supported_rates[SUPPORT_RATESET_LEN]; // Set of 16 data rates
|
||
|
|
uint8_t basic_rates[BASIC_RATESET_LEN];
|
||
|
|
uint8_t basic_rates_len;
|
||
|
|
uint8_t basic_rates_ext[BASIC_EXT_RATESET_LEN];
|
||
|
|
uint8_t basic_rates_ext_len;
|
||
|
|
|
||
|
|
//for dsss parameter set element
|
||
|
|
uint8_t dsss_config;
|
||
|
|
|
||
|
|
struct ap_edca_cfg_param edca_param[AC_MAX];
|
||
|
|
|
||
|
|
uint8_t ap_isolate;
|
||
|
|
enum nl80211_hidden_ssid hidden_ssid;
|
||
|
|
uint8_t re_enable;
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
//connect state for ap mode
|
||
|
|
enum connect_state_e //only for ap mode
|
||
|
|
{
|
||
|
|
CONNECT_IDLE = 0,
|
||
|
|
CONNECT_AUTH, //after received auth
|
||
|
|
CONNECT_ASSOC, //after received assoc_req
|
||
|
|
CONNECT_ASSOC_DONE, //after tx assoc_rsp acked
|
||
|
|
CONNECT_HANDSHAKE_DONE,
|
||
|
|
CONNECT_GET_IP_DONE,
|
||
|
|
};
|
||
|
|
|
||
|
|
//used to store connected peer sta infor for user
|
||
|
|
struct peer_sta_user_info
|
||
|
|
{
|
||
|
|
bool valid;
|
||
|
|
uint8_t status; //connect status
|
||
|
|
uint16_t aid; /* association ID */
|
||
|
|
uint8_t mac_addr[MAC_ADDR_LEN]; /* MAC address of the station */
|
||
|
|
uint32_t ip_addr;
|
||
|
|
//bool ps_active; //true when sta in ps mode
|
||
|
|
};
|
||
|
|
|
||
|
|
//used to store ap infor for user
|
||
|
|
struct ap_user_info
|
||
|
|
{
|
||
|
|
uint8_t bssid[MAC_ADDR_LEN];
|
||
|
|
uint8_t ssid[WIFI_SSID_LEN];
|
||
|
|
uint8_t ssid_len;
|
||
|
|
enum ieee80211_band band;
|
||
|
|
uint16_t center_freq;
|
||
|
|
enum nl80211_chan_width chan_width;
|
||
|
|
int8_t connect_peer_num;
|
||
|
|
struct peer_sta_user_info sta_table[AP_MAX_ASSOC_NUM];
|
||
|
|
};
|
||
|
|
|
||
|
|
struct ap_close_status
|
||
|
|
{
|
||
|
|
uint8_t is_waiting_cfm;
|
||
|
|
void *p_sta_start_info;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct sta_close_status
|
||
|
|
{
|
||
|
|
uint8_t is_waiting_close;
|
||
|
|
};
|
||
|
|
int uwifi_open_ap(struct asr_hw *asr_hw, struct softap_info_t *softap_info);
|
||
|
|
void uwifi_close_ap(struct asr_hw *asr_hw);
|
||
|
|
void uwifi_hostapd_handle_handshake_error(struct asr_vif *asr_vif, uint8_t *mac, uint16_t status);
|
||
|
|
void uwifi_hostapd_handle_handshake_done(uint8_t *mac);
|
||
|
|
void uwifi_hostapd_mgmt_tx_comp_status(struct asr_vif *asr_vif, const uint8_t *buf,
|
||
|
|
const uint32_t len, const bool ack);
|
||
|
|
void uwifi_hostapd_handle_rx_mgmt(struct asr_vif *asr_vif, uint8_t *pframe, uint32_t len);
|
||
|
|
struct uwifi_ap_cfg_param* uwifi_hostapd_get_softap_cfg_param_t(void);
|
||
|
|
void uwifi_hostapd_handle_assocrsp_tx_comp_msg(uint32_t is_success, uint32_t param);
|
||
|
|
void uwifi_hostapd_handle_deauth_tx_comp_msg(uint32_t is_success, uint32_t param);
|
||
|
|
void uwifi_hostapd_handle_deauth_msg(uint32_t idx);
|
||
|
|
|
||
|
|
void uwifi_hostapd_aging_deauth_peer_sta(uint8_t *mac_addr);
|
||
|
|
|
||
|
|
uint8_t* uwifi_hostapd_set_ie(uint8_t *pbuf, uint32_t index, uint32_t len, uint8_t *source);
|
||
|
|
uint8_t* uwifi_init_mgmtframe_header(struct ieee80211_hdr *frame, uint8_t *addr1,
|
||
|
|
uint8_t *addr2, uint8_t *addr3, uint16_t subtype);
|
||
|
|
uint8_t uwifi_hostapd_get_rateset_len(uint8_t *rateset);
|
||
|
|
uint8_t* uwifi_hostapd_set_wmm_info_element(uint8_t *pframe, struct uwifi_ap_cfg_param *cfg_param);
|
||
|
|
uint8_t* uwifi_hostapd_set_rsn_info_element(uint8_t *pframe);
|
||
|
|
uint8_t* uwifi_hostapd_set_ht_capa_info_element(uint8_t *pframe);
|
||
|
|
uint8_t* uwifi_hostapd_set_ht_opration_info_element(uint8_t *pframe);
|
||
|
|
uint8_t* uwifi_hostapd_set_he_capa_info_element(uint8_t *pframe);
|
||
|
|
uint8_t* uwifi_hostapd_set_he_operation_info_element(uint8_t *pframe);
|
||
|
|
|
||
|
|
|
||
|
|
void uwifi_hostapd_handle_auth_to(void *arg);
|
||
|
|
void uwifi_hostapd_handle_assoc_to(void *arg);
|
||
|
|
|
||
|
|
extern struct ap_user_info g_ap_user_info;
|
||
|
|
extern struct softap_info_t g_softap_info;
|
||
|
|
extern struct uwifi_ap_cfg_param g_ap_cfg_info;
|
||
|
|
#endif //#ifdef CFG_SOFTAP_SUPPORT
|
||
|
|
|
||
|
|
#endif //HOSTAPD
|
||
|
|
|