5 #define CONFIG_WAPI_SW_SMS4
\r
8 #define SMS4_MIC_LEN 16
\r
9 #define WAPI_EXT_LEN 18
\r
10 #define MAX_WAPI_IE_LEN 256
\r
11 #define sMacHdrLng 24 // octets in data header, no WEP
\r
15 /* WAPI trace debug */
\r
16 extern u32 wapi_debug_component;
\r
18 static inline void dump_buf(u8 *buf, u32 len)
\r
21 printk("-----------------Len %d----------------\n", len);
\r
22 for(i=0; i<len; i++)
\r
23 printk("%2.2x-", *(buf+i));
\r
27 #define WAPI_TRACE(component, x, args...) \
\r
28 do { if(wapi_debug_component & (component)) \
\r
29 printk(KERN_DEBUG "WAPI" ":" x "" , \
\r
33 #define WAPI_DATA(component, x, buf, len) \
\r
34 do { if(wapi_debug_component & (component)){ \
\r
35 printk("%s:\n", x);\
\r
36 dump_buf((buf), (len));}\
\r
39 #define RT_ASSERT_RET(_Exp) \
\r
42 printk("RTWLAN: "); \
\r
43 printk( "Assertion failed! %s,%s,line=%d\n", \
\r
44 #_Exp,__FUNCTION__,__LINE__); \
\r
47 #define RT_ASSERT_RET_VALUE(_Exp,Ret) \
\r
50 printk("RTWLAN: "); \
\r
51 printk( "Assertion failed! %s,%s,line=%d\n", \
\r
52 #_Exp,__FUNCTION__,__LINE__); \
\r
57 #define RT_ASSERT_RET(_Exp) do {} while(0)
\r
58 #define RT_ASSERT_RET_VALUE(_Exp,Ret) do {} while(0)
\r
59 #define WAPI_TRACE(component, x, args...) do {} while(0)
\r
60 #define WAPI_DATA(component, x, buf, len) do {} while(0)
\r
74 #define WAPI_MAX_BKID_NUM 4
\r
75 #define WAPI_MAX_STAINFO_NUM 4
\r
76 #define WAPI_CAM_ENTRY_NUM 14 // 28/2=14
\r
78 typedef struct _RT_WAPI_BKID
\r
80 struct list_head list;
\r
82 }RT_WAPI_BKID,*PRT_WAPI_BKID;
\r
84 typedef struct _RT_WAPI_KEY
\r
91 }RT_WAPI_KEY,*PRT_WAPI_KEY;
\r
93 typedef enum _RT_WAPI_PACKET_TYPE
\r
96 WAPI_PREAUTHENTICATE=1,
\r
97 WAPI_STAKEY_REQUEST=2,
\r
98 WAPI_AUTHENTICATE_ACTIVE=3,
\r
99 WAPI_ACCESS_AUTHENTICATE_REQUEST=4,
\r
100 WAPI_ACCESS_AUTHENTICATE_RESPONSE=5,
\r
101 WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6,
\r
102 WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7,
\r
103 WAPI_USK_REQUEST=8,
\r
104 WAPI_USK_RESPONSE=9,
\r
105 WAPI_USK_CONFIRM=10,
\r
106 WAPI_MSK_NOTIFICATION=11,
\r
107 WAPI_MSK_RESPONSE=12
\r
108 }RT_WAPI_PACKET_TYPE;
\r
110 typedef struct _RT_WAPI_STA_INFO
\r
112 struct list_head list;
\r
114 RT_WAPI_KEY wapiUsk;
\r
115 RT_WAPI_KEY wapiUskUpdate;
\r
116 RT_WAPI_KEY wapiMsk;
\r
117 RT_WAPI_KEY wapiMskUpdate;
\r
118 u8 lastRxUnicastPN[16];
\r
119 u8 lastTxUnicastPN[16];
\r
120 u8 lastRxMulticastPN[16];
\r
121 u8 lastRxUnicastPNBEQueue[16];
\r
122 u8 lastRxUnicastPNBKQueue[16];
\r
123 u8 lastRxUnicastPNVIQueue[16];
\r
124 u8 lastRxUnicastPNVOQueue[16];
\r
126 bool bAuthenticateInProgress;
\r
127 bool bAuthenticatorInUpdata;
\r
128 }RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO;
\r
130 //Added for HW wapi en/decryption
\r
131 typedef struct _RT_WAPI_CAM_ENTRY{
\r
132 //RT_LIST_ENTRY list;
\r
134 u8 entry_idx;//for cam entry
\r
135 u8 keyidx; // 0 or 1,new or old key
\r
137 u8 type; //should be 110,wapi
\r
138 }RT_WAPI_CAM_ENTRY,*PRT_WAPI_CAM_ENTRY;
\r
140 typedef struct _RT_WAPI_T
\r
143 RT_WAPI_BKID wapiBKID[WAPI_MAX_BKID_NUM];
\r
144 struct list_head wapiBKIDIdleList;
\r
145 struct list_head wapiBKIDStoreList;
\r
146 //Key for Tx Multicast/Broadcast
\r
147 RT_WAPI_KEY wapiTxMsk;
\r
150 u8 lastTxMulticastPN[16];
\r
152 RT_WAPI_STA_INFO wapiSta[WAPI_MAX_STAINFO_NUM];
\r
153 struct list_head wapiSTAIdleList;
\r
154 struct list_head wapiSTAUsedList;
\r
162 //last sequece number for wai packet
\r
163 u16 wapiSeqnumAndFragNum;
\r
164 int extra_prefix_len;
\r
165 int extra_postfix_len;
\r
167 RT_WAPI_CAM_ENTRY wapiCamEntry[WAPI_CAM_ENTRY_NUM];
\r
168 }RT_WAPI_T,*PRT_WAPI_T;
\r
170 typedef struct _WLAN_HEADER_WAPI_EXTENSION
\r
175 } WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;
\r
177 u32 WapiComparePN(u8 *PN1, u8 *PN2);
\r
180 void rtw_wapi_init(_adapter *padapter);
\r
182 void rtw_wapi_free(_adapter *padapter);
\r
184 void rtw_wapi_disable_tx(_adapter *padapter);
\r
186 u8 rtw_wapi_is_wai_packet(_adapter* padapter,u8 *pkt_data);
\r
188 void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame);
\r
190 u8 rtw_wapi_check_for_drop(_adapter *padapter, union recv_frame *precv_frame);
\r
192 void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
\r
194 void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
\r
196 void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
\r
198 void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
\r
200 void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr);
\r
202 void rtw_wapi_return_all_sta_info(_adapter *padapter);
\r
204 void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr);
\r
206 void rtw_wapi_clear_all_cam_entry(_adapter *padapter);
\r
208 void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey);
\r
210 int rtw_wapi_create_event_send(_adapter *padapter, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);
\r
212 u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe);
\r
214 u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe);
\r
216 void rtw_wapi_get_iv(_adapter *padapter, u8*pRA, u8*IV);
\r
218 u8 WapiIncreasePN(u8 *PN, u8 AddCount);
\r
220 bool rtw_wapi_drop_for_key_absent(_adapter *padapter,u8 *pRA);
\r