437 lines
12 KiB
C
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 */
|