W801_SDK_dev_env/platform/inc/tls_wireless.h
2023-03-08 08:23:45 +01:00

437 lines
12 KiB
C

#ifndef TLS_WIRELESS_H
#define TLS_WIRELESS_H
#include "tls_common.h"
#include "wm_osal.h"
#include "list.h"
//#include "netif.h"
struct tls_wif;
struct wpa_supplicant;
/* Maximum size of the SSID */
#define IW_SSID_MAX_SIZE 32
#if 0
#define IEEE80211_MODE_INFRA 0
#define IEEE80211_MODE_IBSS 1
#define IEEE80211_MODE_AP 2
#endif
//#define IEEE80211_RATE_MODE_B BIT(0)
//#define IEEE80211_RATE_MODE_G BIT(1)
//#define IEEE80211_RATE_MODE_BG BIT(2)
//#define IEEE80211_RATE_MODE_N BIT(3)
//#define IEEE80211_RATE_MODE_BGN BIT(4)
enum ieee80211_wireless_mode {
IEEE80211_MODE_11B = 0,
IEEE80211_MODE_11G,
IEEE80211_MODE_11NG_HT20,
IEEE80211_MODE_11NG_HT40PLUS,
IEEE80211_MODE_11NG_HT40MINUS,
IEEE80211_MODE_MAX,
};
#define IW_AUTH_INDEX 0x0FFF
#define IW_AUTH_FLAGS 0xF000
#define IW_AUTH_WPA_VERSION 0
#define IW_AUTH_CIPHER_PAIRWISE 1
#define IW_AUTH_CIPHER_GROUP 2
#define IW_AUTH_KEY_MGMT 3
#define IW_AUTH_TKIP_COUNTERMEASURES 4
#define IW_AUTH_DROP_UNENCRYPTED 5
#define IW_AUTH_80211_AUTH_ALG 6
#define IW_AUTH_WPA_ENABLED 7
#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
#define IW_AUTH_ROAMING_CONTROL 9
#define IW_AUTH_PRIVACY_INVOKED 10
#define IW_AUTH_CIPHER_GROUP_MGMT 11
#define IW_AUTH_MFP 12
/* IW_AUTH_WPA_VERSION values (bit field) */
#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
#define IW_AUTH_WPA_VERSION_WPA 0x00000002
#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT
* values (bit field) */
#define IW_AUTH_CIPHER_NONE 0x00000001
#define IW_AUTH_CIPHER_WEP40 0x00000002
#define IW_AUTH_CIPHER_TKIP 0x00000004
#define IW_AUTH_CIPHER_CCMP 0x00000008
#define IW_AUTH_CIPHER_WEP104 0x00000010
#define IW_AUTH_CIPHER_AES_CMAC 0x00000020
/* IW_AUTH_KEY_MGMT values (bit field) */
#define IW_AUTH_KEY_MGMT_802_1X 1
#define IW_AUTH_KEY_MGMT_PSK 2
/* IW_AUTH_80211_AUTH_ALG values (bit field) */
#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001
#define IW_AUTH_ALG_SHARED_KEY 0x00000002
#define IW_AUTH_ALG_LEAP 0x00000004
#define IW_ENCODE_ALG_NONE 0
#define IW_ENCODE_ALG_WEP 1
#define IW_ENCODE_ALG_TKIP 2
#define IW_ENCODE_ALG_CCMP 3
#define IW_ENCODE_ALG_PMK 4
#define IW_ENCODE_ALG_AES_CMAC 5
#define IW_MAX_FREQUENCIES 32
#define IW_SCAN_TYPE_ACTIVE 0
#define IW_SCAN_TYPE_PASSIVE 1
struct iw_scan_req {
u8 scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */
u8 ssid_len;
u8 num_channels; /* num entries in channel_list;
* 0 = scan all allowed channels */
u8 bssid[ETH_ALEN]; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or
* individual address of a specific BSS */
u8 ssid[IW_SSID_MAX_SIZE];
u32 extra_ies_len;
u8 extra_ies[0];
//struct iw_freq channel_list[IW_MAX_FREQUENCIES];
};
#if 0
struct iw_bssid_ex {
u32 length;
u8 bssid[ETH_ALEN];
u16 freq;
u32 ssid_len;
u8 ssid[IW_SSID_MAX_SIZE];
u32 privacy;
int rssi;
u8 tsf[8];
u16 beacon_int;
u16 capabilities;
u32 ie_len;
u8 ies[0];
} __attribute__ ((packed));
struct iw_bss_info {
u8 bssid[ETH_ALEN];
u8 mode;
u8 channel;
u8 privacy;
u8 ssid_len;
u8 rssi;
u8 ssid[32];
};
struct iw_scan_results {
u32 count;
struct iw_bssid_ex bssid[1];
};
struct iw_scan_bss {
u32 count;
u32 length; /* bss info total length */
struct iw_bss_info bss[1];
};
#endif
/**
* struct beacon_parameters - beacon parameters
*
* Used to configure the beacon for an interface.
*
* @head: head portion of beacon (before TIM IE)
* or %NULL if not changed
* @tail: tail portion of beacon (after TIM IE)
* or %NULL if not changed
* @interval: beacon interval or zero if not changed
* @dtim_period: DTIM period or zero if not changed
* @head_len: length of @head
* @tail_len: length of @tail
*/
struct iw_beacon_parameters {
u8 *head, *tail;
int interval, dtim_period;
int head_len, tail_len;
};
struct iw_ssid_params {
u8 ssid[IW_SSID_MAX_SIZE];
u8 ssid_len;
u32 ie_len;
u8 *ie;
};
struct iw_key_params {
u8 key[32];
u8 tsc[32];
u32 key_len;
u32 tsc_len;
u16 cipher;
bool pairwise;
bool default_key;
u32 key_idx;
u8 addr[ETH_ALEN];
};
struct iw_sta_add_params {
const u8 *addr;
u16 aid;
u16 capability;
u16 listen_interval;
u8 mode;
const u8 *supp_rates;
u32 supp_rates_len;
u32 flags; /* bitmask of WPA_STA_* flags */
};
/**
* struct beacon_parameters - beacon parameters
*
* Used to configure the beacon for an interface.
*
* @head: head portion of beacon (before TIM IE)
* or %NULL if not changed
* @tail: tail portion of beacon (after TIM IE)
* or %NULL if not changed
* @interval: beacon interval or zero if not changed
* @dtim_period: DTIM period or zero if not changed
* @head_len: length of @head
* @tail_len: length of @tail
*/
struct beacon_parameters {
u8 *head, *tail;
int interval, dtim_period;
int head_len, tail_len;
};
struct wl_event_reload {
bool reload;
};
struct wl_event_join_ibss_info {
u8 bssid[ETH_ALEN];
u32 freq;
};
struct wl_event_mic_err {
u8 bssid[ETH_ALEN];
u8 addr[ETH_ALEN];
bool group_mic_err; /* TRUE: group, FALSE: pairwise */
};
struct wl_event_rx_eapol {
u8 *src_addr;
u8 *eapol_body;
u32 eapol_body_len;
#if TLS_CONFIG_AP
u8 mode;
#endif
};
struct wl_event_rx_mgmt {
u8 *mgmt;
u32 mgmt_len;
};
struct wl_event_rx_from_unknown {
u8 addr[ETH_ALEN];
};
struct wl_event_assoc_info {
/**
* reassoc - Flag to indicate association or reassociation
*/
int reassoc;
/**
* req_ies - (Re)Association Request IEs
*
* If the driver generates WPA/RSN IE, this event data must be
* returned for WPA handshake to have needed information. If
* wpa_supplicant-generated WPA/RSN IE is used, this
* information event is optional.
*
* This should start with the first IE (fixed fields before IEs
* are not included).
*/
const u8 *req_ies;
/**
* req_ies_len - Length of req_ies in bytes
*/
u32 req_ies_len;
/**
* resp_ies - (Re)Association Response IEs
*
* Optional association data from the driver. This data is not
* required WPA, but may be useful for some protocols and as
* such, should be reported if this is available to the driver
* interface.
*
* This should start with the first IE (fixed fields before IEs
* are not included).
*/
u8 *resp_ies;
/**
* resp_ies_len - Length of resp_ies in bytes
*/
u32 resp_ies_len;
/**
* addr - Station address (for AP mode)
*/
u8 *addr;
u8 *bssid;
/**
* freq - Frequency of the operational channel in MHz
*/
unsigned int freq;
};
struct tls_wl_event_ops {
int (*ibss_joined)(struct tls_wif *wif,
struct wl_event_join_ibss_info *info);
int (*assoc)(struct tls_wif *wif,
struct wl_event_assoc_info *info);
int (*disassoc)(struct tls_wif *wif);
int (*scan_completed)(struct tls_wif *wif);
int (*mic_err)(struct tls_wif *wif,
struct wl_event_mic_err *info);
int (*rx_eapol)(struct tls_wif *wif,
struct wl_event_rx_eapol *eapol);
int (*rx_mgmt)(struct tls_wif *wif,
struct wl_event_rx_mgmt *mgmt);
int (*mac_wdg)(struct tls_wif *wif);
int (*chip_wakeup)(struct tls_wif *wif);
#if TLS_CONFIG_AP_OPT_PS
int (*beacon_done)(struct tls_wif *wif);
int (*rx_ps)(struct tls_wif *wif,
struct wl_event_rx_mgmt *mgmt);
int (*rx_pspoll)(struct tls_wif *wif,
struct wl_event_rx_from_unknown *rx_pspoll);
int (*sta_active)(struct tls_wif *wif,
struct wl_event_rx_from_unknown *rx_pspoll);
#endif
int (*rx_from_unknown_sta)(struct tls_wif *wif,
struct wl_event_rx_from_unknown *rx_from_unknown);
int (*net_down)(struct tls_wif *wif);
int (*net_fail)(struct tls_wif *wif);
int (*net_up)(struct tls_wif *wif);
int (*update_stat)(struct tls_wif *wif, void *cur_bss);/* struct ieee80211_bss *cur_bss */
};
/* sk_buff allocated by wlan driver */
struct sk_buff {
struct dl_list list;
u8 *buf;
u32 buf_len;
u32 flags;
};
struct tls_wif {
//void *priv;
struct ieee80211_if_data *priv;
struct wpa_supplicant *wpa_s;
struct tls_wl_event_ops *ops;
#if TLS_CONFIG_SOFTAP_11N
struct hostapd_iface *apif;
#endif
//struct netif *ethif;
//bool net_up;
bool wlan_create;
int (*rx_data_cb)(const u8 *bssid, u8 *buf, u32 buf_len);
#if TLS_CONFIG_AP
bool wmm_set;
void *client_event_callback;
#if TLS_CONFIG_AP_OPT_FWD
int (*rx_ip_cb)(const u8 *bssid, u8 *buf, u32 buf_len);
#endif
#endif
#if 0
int (*send)(struct tls_wif *wif, struct sk_buff *skb);
int (*rx_data_cb)(struct tls_wif *wif, struct sk_buff *skb);
int (*tx_mgmt)(struct tls_wif *wif, struct sk_buff *skb);
int (*send_eapol)(struct tls_wif *wif, struct sk_buff *skb);
int (*send_beacon)(struct tls_wif *wif, struct sk_buff *skb);
#endif
};
void tls_wl_print_stats(struct tls_wif *wif);
int tls_wl_if_scan(struct tls_wif *wif,
struct iw_scan_req *scan_req, u16 size);
int tls_wl_if_scan_result2(struct tls_wif *wif,
u8 *ssid, u32 ssid_len, u8 *buf, u32 buf_size);
int tls_wl_if_scan_result(struct tls_wif *wif, u8 *buf, u32 buf_size);
void tls_wl_if_sta_flush(struct tls_wif *wif, u8 mode);
int tls_wl_if_sta_deauth(struct tls_wif *wif, u8 *own_addr,
const u8 *addr, int reason);
int tls_wl_if_sta_disassoc(struct tls_wif *wif, u8 *own_addr,
const u8 *addr, int reason);
#if TLS_CONFIG_AP
int tls_wl_if_set_tx_queue_params(struct tls_wif *wif, int queue,
int aifs, int cw_min, int cw_max, int burst_time);
void tls_wl_if_set_sta_flags(struct tls_wif *wif, u8 *addr, u32 flags);
int tls_wl_if_send_channel_switch(struct tls_wif *wif, u8 *ownaddr, u8 newch);
void tls_wl_if_switch_channel_width(struct tls_wif *wif, u8 *ownaddr);
void tls_wl_if_channel_info_updata(struct tls_wif *wif);
#if TLS_CONFIG_SOFTAP_11N
void tls_wl_if_get_ht_param(struct tls_wif *wif, u16 *cap, u8 *mcs, u8 *mpdu);
void tls_wl_if_set_sta_ht_param(struct tls_wif *wif, u8 *mac, u8 *ht);
#endif
#endif
int tls_wl_if_set_mode(struct tls_wif *wif, u16 mode);
int tls_wl_if_clear_mode(struct tls_wif *wif, u16 mode);
int tls_wl_if_set_bssid(struct tls_wif *wif, const u8 *addr, u32 mode);
int tls_wl_if_set_ssid(struct tls_wif *wif, struct iw_ssid_params *params);
int tls_wl_if_set_auth(struct tls_wif *wif, u16 flag, u32 value, u8 mode);
int tls_wl_if_set_ps_mode(struct tls_wif *wif, int powersave);
int tls_wl_if_set_freq(struct tls_wif *wif,
int freq);
int tls_wl_if_send_eapol(struct tls_wif *wif,
u8 *buf, u32 len, bool is_apsta);
int tls_wl_if_xmit(struct tls_wif *wif, void *buf, int len, bool is_apsta, bool not_delay);
int tls_wl_if_add_key(struct tls_wif *wif,
struct iw_key_params *params);
int tls_wl_if_remove_key(struct tls_wif *wif,
u32 cipher,
u32 key_idx,
bool pairwise,
u8 *addr);
int tls_wl_if_send_mlme(struct tls_wif *wif,
u8 *buf, u32 len);
int tls_wl_if_set_rate_mode(struct tls_wif *wif,
u32 rate_mode);
int tls_wl_if_set_beacon(struct tls_wif *wif,
struct iw_beacon_parameters *params);
int tls_wl_if_del_beacon(struct tls_wif *wif);
int tls_wl_if_sta_add(struct tls_wif *wif,
struct iw_sta_add_params *params);
int tls_wl_if_sta_remove(struct tls_wif *wif, u8 *addr);
int tls_wl_if_get_inact_sec(struct tls_wif *wif, const u8 *addr);
int tls_wl_if_get_scan_res(struct tls_wif *wif, u8 *buf, u32 buf_size);
int tls_wl_if_get_scan_res_format2(struct tls_wif *wif, u8 *buf, u32 buf_size);
int tls_wl_if_disconnect(struct tls_wif *wif);
int tls_wl_if_tx(struct tls_wif *wif,
u8 *buf, u32 buflen, bool last_packet, bool is_apsta, bool not_delay);
int tls_wl_if_set_max_rate(struct tls_wif *wif, u8 max_rate_idx);
int tls_wl_if_get_max_rate(struct tls_wif *wif, u8 *max_rate_idx);
#if TLS_CONFIG_IBSS
int tls_wl_if_set_adhoc(struct tls_wif *wif, int adhoc_automode);
#endif
int tls_wl_if_ps(int wake_up);
void tls_wl_if_set_errno(int eno);
int tls_wl_if_get_errno(void);
void tls_wl_if_perror(const char *info);
const char *tls_wl_if_get_errinfo(int eno);
#endif /* end of TLS_WIRELESS_H */