mirror of https://github.com/brektrou/rtl8821CU
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			231 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
			
		
		
	
	
			231 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
/******************************************************************************
 | 
						|
 *
 | 
						|
 * Copyright(c) 2016 - 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 __INC_WAPI_H
 | 
						|
#define __INC_WAPI_H
 | 
						|
 | 
						|
 | 
						|
#define CONFIG_WAPI_SW_SMS4
 | 
						|
#define WAPI_DEBUG
 | 
						|
 | 
						|
#define SMS4_MIC_LEN                16
 | 
						|
#define WAPI_EXT_LEN                18
 | 
						|
#define MAX_WAPI_IE_LEN		    256
 | 
						|
#define sMacHdrLng				24		/* octets in data header, no WEP */
 | 
						|
 | 
						|
#ifdef WAPI_DEBUG
 | 
						|
 | 
						|
/* WAPI trace debug */
 | 
						|
extern u32 wapi_debug_component;
 | 
						|
 | 
						|
static inline void dump_buf(u8 *buf, u32 len)
 | 
						|
{
 | 
						|
	u32 i;
 | 
						|
	printk("-----------------Len %d----------------\n", len);
 | 
						|
	for (i = 0; i < len; i++)
 | 
						|
		printk("%2.2x-", *(buf + i));
 | 
						|
	printk("\n");
 | 
						|
}
 | 
						|
 | 
						|
#define WAPI_TRACE(component, x, args...) \
 | 
						|
	do { if (wapi_debug_component & (component)) \
 | 
						|
			printk(KERN_DEBUG "WAPI" ":" x "" , \
 | 
						|
			       ##args);\
 | 
						|
	} while (0);
 | 
						|
 | 
						|
#define WAPI_DATA(component, x, buf, len) \
 | 
						|
	do { if (wapi_debug_component & (component)) { \
 | 
						|
			printk("%s:\n", x);\
 | 
						|
			dump_buf((buf), (len)); } \
 | 
						|
	} while (0);
 | 
						|
 | 
						|
#define RT_ASSERT_RET(_Exp)								\
 | 
						|
	if (!(_Exp)) {									\
 | 
						|
		printk("RTWLAN: ");					\
 | 
						|
		printk("Assertion failed! %s,%s, line=%d\n", \
 | 
						|
		       #_Exp, __FUNCTION__, __LINE__);          \
 | 
						|
		return;						\
 | 
						|
	}
 | 
						|
#define RT_ASSERT_RET_VALUE(_Exp, Ret)								\
 | 
						|
	if (!(_Exp)) {									\
 | 
						|
		printk("RTWLAN: ");					\
 | 
						|
		printk("Assertion failed! %s,%s, line=%d\n", \
 | 
						|
		       #_Exp, __FUNCTION__, __LINE__);          \
 | 
						|
		return Ret;						\
 | 
						|
	}
 | 
						|
 | 
						|
#else
 | 
						|
#define RT_ASSERT_RET(_Exp) do {} while (0)
 | 
						|
#define RT_ASSERT_RET_VALUE(_Exp, Ret) do {} while (0)
 | 
						|
#define WAPI_TRACE(component, x, args...) do {} while (0)
 | 
						|
#define WAPI_DATA(component, x, buf, len) do {} while (0)
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
enum WAPI_DEBUG {
 | 
						|
	WAPI_INIT				= 1,
 | 
						|
	WAPI_API				= 1 << 1,
 | 
						|
	WAPI_TX				= 1 << 2,
 | 
						|
	WAPI_RX				= 1 << 3,
 | 
						|
	WAPI_MLME				= 1 << 4,
 | 
						|
	WAPI_IOCTL				= 1 << 5,
 | 
						|
	WAPI_ERR			= 1 << 31
 | 
						|
};
 | 
						|
 | 
						|
#define			WAPI_MAX_BKID_NUM				4
 | 
						|
#define			WAPI_MAX_STAINFO_NUM			4
 | 
						|
#define			WAPI_CAM_ENTRY_NUM			14	/* 28/2 = 14 */
 | 
						|
 | 
						|
typedef struct  _RT_WAPI_BKID {
 | 
						|
	struct list_head	list;
 | 
						|
	u8				bkid[16];
 | 
						|
} RT_WAPI_BKID, *PRT_WAPI_BKID;
 | 
						|
 | 
						|
typedef struct  _RT_WAPI_KEY {
 | 
						|
	u8			dataKey[16];
 | 
						|
	u8			micKey[16];
 | 
						|
	u8			keyId;
 | 
						|
	bool			bSet;
 | 
						|
	bool             bTxEnable;
 | 
						|
} RT_WAPI_KEY, *PRT_WAPI_KEY;
 | 
						|
 | 
						|
typedef enum _RT_WAPI_PACKET_TYPE {
 | 
						|
	WAPI_NONE = 0,
 | 
						|
	WAPI_PREAUTHENTICATE = 1,
 | 
						|
	WAPI_STAKEY_REQUEST = 2,
 | 
						|
	WAPI_AUTHENTICATE_ACTIVE = 3,
 | 
						|
	WAPI_ACCESS_AUTHENTICATE_REQUEST = 4,
 | 
						|
	WAPI_ACCESS_AUTHENTICATE_RESPONSE = 5,
 | 
						|
	WAPI_CERTIFICATE_AUTHENTICATE_REQUEST = 6,
 | 
						|
	WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE = 7,
 | 
						|
	WAPI_USK_REQUEST = 8,
 | 
						|
	WAPI_USK_RESPONSE = 9,
 | 
						|
	WAPI_USK_CONFIRM = 10,
 | 
						|
	WAPI_MSK_NOTIFICATION = 11,
 | 
						|
	WAPI_MSK_RESPONSE = 12
 | 
						|
} RT_WAPI_PACKET_TYPE;
 | 
						|
 | 
						|
typedef struct	_RT_WAPI_STA_INFO {
 | 
						|
	struct list_head		list;
 | 
						|
	u8					PeerMacAddr[6];
 | 
						|
	RT_WAPI_KEY		      wapiUsk;
 | 
						|
	RT_WAPI_KEY		      wapiUskUpdate;
 | 
						|
	RT_WAPI_KEY		      wapiMsk;
 | 
						|
	RT_WAPI_KEY		      wapiMskUpdate;
 | 
						|
	u8					lastRxUnicastPN[16];
 | 
						|
	u8					lastTxUnicastPN[16];
 | 
						|
	u8					lastRxMulticastPN[16];
 | 
						|
	u8					lastRxUnicastPNBEQueue[16];
 | 
						|
	u8					lastRxUnicastPNBKQueue[16];
 | 
						|
	u8					lastRxUnicastPNVIQueue[16];
 | 
						|
	u8					lastRxUnicastPNVOQueue[16];
 | 
						|
	bool					bSetkeyOk;
 | 
						|
	bool					bAuthenticateInProgress;
 | 
						|
	bool					bAuthenticatorInUpdata;
 | 
						|
} RT_WAPI_STA_INFO, *PRT_WAPI_STA_INFO;
 | 
						|
 | 
						|
/* Added for HW wapi en/decryption */
 | 
						|
typedef struct _RT_WAPI_CAM_ENTRY {
 | 
						|
	/* RT_LIST_ENTRY		list; */
 | 
						|
	u8			IsUsed;
 | 
						|
	u8			entry_idx;/* for cam entry */
 | 
						|
	u8			keyidx;	/* 0 or 1,new or old key */
 | 
						|
	u8			PeerMacAddr[6];
 | 
						|
	u8			type;	/* should be 110,wapi */
 | 
						|
} RT_WAPI_CAM_ENTRY, *PRT_WAPI_CAM_ENTRY;
 | 
						|
 | 
						|
typedef struct _RT_WAPI_T {
 | 
						|
	/* BKID */
 | 
						|
	RT_WAPI_BKID		wapiBKID[WAPI_MAX_BKID_NUM];
 | 
						|
	struct list_head		wapiBKIDIdleList;
 | 
						|
	struct list_head		wapiBKIDStoreList;
 | 
						|
	/* Key for Tx Multicast/Broadcast */
 | 
						|
	RT_WAPI_KEY		      wapiTxMsk;
 | 
						|
 | 
						|
	/* sec related */
 | 
						|
	u8				lastTxMulticastPN[16];
 | 
						|
	/* STA list */
 | 
						|
	RT_WAPI_STA_INFO	wapiSta[WAPI_MAX_STAINFO_NUM];
 | 
						|
	struct list_head		wapiSTAIdleList;
 | 
						|
	struct list_head		wapiSTAUsedList;
 | 
						|
	/*  */
 | 
						|
	bool				bWapiEnable;
 | 
						|
 | 
						|
	/* store WAPI IE */
 | 
						|
	u8				wapiIE[256];
 | 
						|
	u8				wapiIELength;
 | 
						|
	bool				bWapiPSK;
 | 
						|
	/* last sequece number for wai packet */
 | 
						|
	u16				wapiSeqnumAndFragNum;
 | 
						|
	int extra_prefix_len;
 | 
						|
	int extra_postfix_len;
 | 
						|
 | 
						|
	RT_WAPI_CAM_ENTRY	wapiCamEntry[WAPI_CAM_ENTRY_NUM];
 | 
						|
} RT_WAPI_T, *PRT_WAPI_T;
 | 
						|
 | 
						|
typedef struct _WLAN_HEADER_WAPI_EXTENSION {
 | 
						|
	u8      KeyIdx;
 | 
						|
	u8      Reserved;
 | 
						|
	u8      PN[16];
 | 
						|
} WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;
 | 
						|
 | 
						|
u32 WapiComparePN(u8 *PN1, u8 *PN2);
 | 
						|
 | 
						|
 | 
						|
void rtw_wapi_init(_adapter *padapter);
 | 
						|
 | 
						|
void rtw_wapi_free(_adapter *padapter);
 | 
						|
 | 
						|
void rtw_wapi_disable_tx(_adapter *padapter);
 | 
						|
 | 
						|
u8 rtw_wapi_is_wai_packet(_adapter *padapter, u8 *pkt_data);
 | 
						|
 | 
						|
void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame);
 | 
						|
 | 
						|
u8 rtw_wapi_check_for_drop(_adapter *padapter, union recv_frame *precv_frame, u8 *ehdr_ops);
 | 
						|
 | 
						|
void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
 | 
						|
 | 
						|
void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
 | 
						|
 | 
						|
void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
 | 
						|
 | 
						|
void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
 | 
						|
 | 
						|
void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr);
 | 
						|
 | 
						|
void rtw_wapi_return_all_sta_info(_adapter *padapter);
 | 
						|
 | 
						|
void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr);
 | 
						|
 | 
						|
void rtw_wapi_clear_all_cam_entry(_adapter *padapter);
 | 
						|
 | 
						|
void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey);
 | 
						|
 | 
						|
int rtw_wapi_create_event_send(_adapter *padapter, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);
 | 
						|
 | 
						|
u32	rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe);
 | 
						|
 | 
						|
u32	rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe);
 | 
						|
 | 
						|
void rtw_wapi_get_iv(_adapter *padapter, u8 *pRA, u8 *IV);
 | 
						|
 | 
						|
u8 WapiIncreasePN(u8 *PN, u8 AddCount);
 | 
						|
 | 
						|
bool rtw_wapi_drop_for_key_absent(_adapter *padapter, u8 *pRA);
 | 
						|
 | 
						|
void rtw_wapi_set_set_encryption(_adapter *padapter, struct ieee_param *param);
 | 
						|
 | 
						|
#endif
 |