mirror of
https://github.com/morrownr/8821cu-20210916.git
synced 2024-12-22 22:36:49 +00:00
184 lines
5.0 KiB
C
184 lines
5.0 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef __RTW_FT_H_
|
|
#define __RTW_FT_H_
|
|
|
|
enum rtw_ieee80211_ft_actioncode {
|
|
RTW_WLAN_ACTION_FT_RESV,
|
|
RTW_WLAN_ACTION_FT_REQ,
|
|
RTW_WLAN_ACTION_FT_RSP,
|
|
RTW_WLAN_ACTION_FT_CONF,
|
|
RTW_WLAN_ACTION_FT_ACK,
|
|
RTW_WLAN_ACTION_FT_MAX,
|
|
};
|
|
|
|
enum _rtw_ft_sta_status {
|
|
RTW_FT_UNASSOCIATED_STA = 0,
|
|
RTW_FT_AUTHENTICATING_STA,
|
|
RTW_FT_AUTHENTICATED_STA,
|
|
RTW_FT_ASSOCIATING_STA,
|
|
RTW_FT_ASSOCIATED_STA,
|
|
RTW_FT_REQUESTING_STA,
|
|
RTW_FT_REQUESTED_STA,
|
|
RTW_FT_CONFIRMED_STA,
|
|
RTW_FT_UNSPECIFIED_STA
|
|
};
|
|
|
|
#define RTW_FT_ACTION_REQ_LMT 4
|
|
|
|
#define RTW_FT_MAX_IE_SZ 256
|
|
|
|
#define rtw_ft_chk_status(a, s) \
|
|
((a)->mlmepriv.ft_roam.ft_status == (s))
|
|
|
|
#define rtw_ft_roam_status(a, s) \
|
|
((rtw_to_roam(a) > 0) && rtw_ft_chk_status(a, s))
|
|
|
|
#define rtw_ft_authed_sta(a) \
|
|
((rtw_ft_chk_status(a, RTW_FT_AUTHENTICATED_STA)) || \
|
|
(rtw_ft_chk_status(a, RTW_FT_ASSOCIATING_STA)) || \
|
|
(rtw_ft_chk_status(a, RTW_FT_ASSOCIATED_STA)))
|
|
|
|
#define rtw_ft_set_status(a, s) \
|
|
do { \
|
|
((a)->mlmepriv.ft_roam.ft_status = (s)); \
|
|
} while (0)
|
|
|
|
#define rtw_ft_lock_set_status(a, s, irq) \
|
|
do { \
|
|
_enter_critical_bh(&(a)->mlmepriv.lock, ((_irqL *)(irq))); \
|
|
((a)->mlmepriv.ft_roam.ft_status = (s)); \
|
|
_exit_critical_bh(&(a)->mlmepriv.lock, ((_irqL *)(irq))); \
|
|
} while (0)
|
|
|
|
#define rtw_ft_reset_status(a) \
|
|
do { \
|
|
((a)->mlmepriv.ft_roam.ft_status = RTW_FT_UNASSOCIATED_STA); \
|
|
} while (0)
|
|
|
|
enum rtw_ft_capability {
|
|
RTW_FT_EN = BIT0,
|
|
RTW_FT_OTD_EN = BIT1,
|
|
RTW_FT_PEER_EN = BIT2,
|
|
RTW_FT_PEER_OTD_EN = BIT3,
|
|
RTW_FT_BTM_ROAM = BIT4,
|
|
RTW_FT_TEST_RSSI_ROAM = BIT7,
|
|
};
|
|
|
|
#define rtw_ft_chk_flags(a, f) \
|
|
((a)->mlmepriv.ft_roam.ft_flags & (f))
|
|
|
|
#define rtw_ft_set_flags(a, f) \
|
|
do { \
|
|
((a)->mlmepriv.ft_roam.ft_flags |= (f)); \
|
|
} while (0)
|
|
|
|
#define rtw_ft_clr_flags(a, f) \
|
|
do { \
|
|
((a)->mlmepriv.ft_roam.ft_flags &= ~(f)); \
|
|
} while (0)
|
|
|
|
#define rtw_ft_roam(a) \
|
|
((rtw_to_roam(a) > 0) && rtw_ft_chk_flags(a, RTW_FT_PEER_EN))
|
|
|
|
#define rtw_ft_valid_akm(a, t) \
|
|
((rtw_ft_chk_flags(a, RTW_FT_EN)) && \
|
|
(((t) == 3) || ((t) == 4)))
|
|
|
|
#define rtw_ft_roam_expired(a, r) \
|
|
((rtw_chk_roam_flags(a, RTW_ROAM_ON_EXPIRED)) \
|
|
&& (r == WLAN_REASON_ACTIVE_ROAM))
|
|
|
|
#define rtw_ft_otd_roam_en(a) \
|
|
((rtw_ft_chk_flags(a, RTW_FT_OTD_EN)) \
|
|
&& ((a)->mlmepriv.ft_roam.ft_roam_on_expired == _FALSE) \
|
|
&& ((a)->mlmepriv.ft_roam.ft_cap & 0x01))
|
|
|
|
#define rtw_ft_otd_roam(a) \
|
|
rtw_ft_chk_flags(a, RTW_FT_PEER_OTD_EN)
|
|
|
|
#define rtw_ft_valid_otd_candidate(a, p) \
|
|
((rtw_ft_chk_flags(a, RTW_FT_OTD_EN)) \
|
|
&& ((rtw_ft_chk_flags(a, RTW_FT_PEER_OTD_EN) \
|
|
&& ((*((p)+4) & 0x01) == 0)) \
|
|
|| ((rtw_ft_chk_flags(a, RTW_FT_PEER_OTD_EN) == 0) \
|
|
&& (*((p)+4) & 0x01))))
|
|
|
|
struct ft_roam_info {
|
|
u16 mdid;
|
|
u8 ft_cap;
|
|
/*b0: FT over DS, b1: Resource Req Protocol Cap, b2~b7: Reserved*/
|
|
u8 updated_ft_ies[RTW_FT_MAX_IE_SZ];
|
|
u16 updated_ft_ies_len;
|
|
u8 ft_action[RTW_FT_MAX_IE_SZ];
|
|
u16 ft_action_len;
|
|
struct cfg80211_ft_event_params ft_event;
|
|
u8 ft_roam_on_expired;
|
|
u8 ft_flags;
|
|
u32 ft_status;
|
|
u32 ft_req_retry_cnt;
|
|
bool ft_updated_bcn;
|
|
};
|
|
|
|
void rtw_ft_info_init(struct ft_roam_info *pft);
|
|
|
|
int rtw_ft_proc_flags_get(struct seq_file *m, void *v);
|
|
|
|
ssize_t rtw_ft_proc_flags_set(struct file *file, const char __user *buffer,
|
|
size_t count, loff_t *pos, void *data);
|
|
|
|
u8 rtw_ft_chk_roaming_candidate(
|
|
_adapter *padapter, struct wlan_network *competitor);
|
|
|
|
void rtw_ft_update_stainfo(_adapter *padapter, WLAN_BSSID_EX *pnetwork);
|
|
|
|
void rtw_ft_reassoc_event_callback(_adapter *padapter, u8 *pbuf);
|
|
|
|
void rtw_ft_validate_akm_type(_adapter *padapter,
|
|
struct wlan_network *pnetwork);
|
|
|
|
void rtw_ft_update_bcn(_adapter *padapter, union recv_frame *precv_frame);
|
|
|
|
void rtw_ft_start_clnt_join(_adapter *padapter);
|
|
|
|
u8 rtw_ft_update_rsnie(
|
|
_adapter *padapter, u8 bwrite,
|
|
struct pkt_attrib *pattrib, u8 **pframe);
|
|
|
|
void rtw_ft_build_auth_req_ies(_adapter *padapter,
|
|
struct pkt_attrib *pattrib, u8 **pframe);
|
|
|
|
void rtw_ft_build_assoc_req_ies(_adapter *padapter,
|
|
u8 is_reassoc, struct pkt_attrib *pattrib, u8 **pframe);
|
|
|
|
u8 rtw_ft_update_auth_rsp_ies(_adapter *padapter, u8 *pframe, u32 len);
|
|
|
|
void rtw_ft_start_roam(_adapter *padapter, u8 *pTargetAddr);
|
|
|
|
void rtw_ft_issue_action_req(_adapter *padapter, u8 *pTargetAddr);
|
|
|
|
void rtw_ft_report_evt(_adapter *padapter);
|
|
|
|
void rtw_ft_report_reassoc_evt(_adapter *padapter, u8 *pMacAddr);
|
|
|
|
void rtw_ft_link_timer_hdl(void *ctx);
|
|
|
|
void rtw_ft_roam_timer_hdl(void *ctx);
|
|
|
|
void rtw_ft_roam_status_reset(_adapter *padapter);
|
|
|
|
#endif /* __RTW_FT_H_ */
|