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