rtw_wapi.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. #ifndef __INC_WAPI_H
  2. #define __INC_WAPI_H
  3. #define CONFIG_WAPI_SW_SMS4
  4. #define WAPI_DEBUG
  5. #define SMS4_MIC_LEN 16
  6. #define WAPI_EXT_LEN 18
  7. #define MAX_WAPI_IE_LEN 256
  8. #define sMacHdrLng 24 /* octets in data header, no WEP */
  9. #ifdef WAPI_DEBUG
  10. /* WAPI trace debug */
  11. extern u32 wapi_debug_component;
  12. static inline void dump_buf(u8 *buf, u32 len)
  13. {
  14. u32 i;
  15. printk("-----------------Len %d----------------\n", len);
  16. for (i = 0; i < len; i++)
  17. printk("%2.2x-", *(buf + i));
  18. printk("\n");
  19. }
  20. #define WAPI_TRACE(component, x, args...) \
  21. do { if (wapi_debug_component & (component)) \
  22. printk(KERN_DEBUG "WAPI" ":" x "" , \
  23. ##args);\
  24. } while (0);
  25. #define WAPI_DATA(component, x, buf, len) \
  26. do { if (wapi_debug_component & (component)) { \
  27. printk("%s:\n", x);\
  28. dump_buf((buf), (len)); } \
  29. } while (0);
  30. #define RT_ASSERT_RET(_Exp) \
  31. if (!(_Exp)) { \
  32. printk("RTWLAN: "); \
  33. printk("Assertion failed! %s,%s, line=%d\n", \
  34. #_Exp, __FUNCTION__, __LINE__); \
  35. return; \
  36. }
  37. #define RT_ASSERT_RET_VALUE(_Exp, Ret) \
  38. if (!(_Exp)) { \
  39. printk("RTWLAN: "); \
  40. printk("Assertion failed! %s,%s, line=%d\n", \
  41. #_Exp, __FUNCTION__, __LINE__); \
  42. return Ret; \
  43. }
  44. #else
  45. #define RT_ASSERT_RET(_Exp) do {} while (0)
  46. #define RT_ASSERT_RET_VALUE(_Exp, Ret) do {} while (0)
  47. #define WAPI_TRACE(component, x, args...) do {} while (0)
  48. #define WAPI_DATA(component, x, buf, len) do {} while (0)
  49. #endif
  50. enum WAPI_DEBUG {
  51. WAPI_INIT = 1,
  52. WAPI_API = 1 << 1,
  53. WAPI_TX = 1 << 2,
  54. WAPI_RX = 1 << 3,
  55. WAPI_MLME = 1 << 4,
  56. WAPI_IOCTL = 1 << 5,
  57. WAPI_ERR = 1 << 31
  58. };
  59. #define WAPI_MAX_BKID_NUM 4
  60. #define WAPI_MAX_STAINFO_NUM 4
  61. #define WAPI_CAM_ENTRY_NUM 14 /* 28/2 = 14 */
  62. typedef struct _RT_WAPI_BKID {
  63. struct list_head list;
  64. u8 bkid[16];
  65. } RT_WAPI_BKID, *PRT_WAPI_BKID;
  66. typedef struct _RT_WAPI_KEY {
  67. u8 dataKey[16];
  68. u8 micKey[16];
  69. u8 keyId;
  70. bool bSet;
  71. bool bTxEnable;
  72. } RT_WAPI_KEY, *PRT_WAPI_KEY;
  73. typedef enum _RT_WAPI_PACKET_TYPE {
  74. WAPI_NONE = 0,
  75. WAPI_PREAUTHENTICATE = 1,
  76. WAPI_STAKEY_REQUEST = 2,
  77. WAPI_AUTHENTICATE_ACTIVE = 3,
  78. WAPI_ACCESS_AUTHENTICATE_REQUEST = 4,
  79. WAPI_ACCESS_AUTHENTICATE_RESPONSE = 5,
  80. WAPI_CERTIFICATE_AUTHENTICATE_REQUEST = 6,
  81. WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE = 7,
  82. WAPI_USK_REQUEST = 8,
  83. WAPI_USK_RESPONSE = 9,
  84. WAPI_USK_CONFIRM = 10,
  85. WAPI_MSK_NOTIFICATION = 11,
  86. WAPI_MSK_RESPONSE = 12
  87. } RT_WAPI_PACKET_TYPE;
  88. typedef struct _RT_WAPI_STA_INFO {
  89. struct list_head list;
  90. u8 PeerMacAddr[6];
  91. RT_WAPI_KEY wapiUsk;
  92. RT_WAPI_KEY wapiUskUpdate;
  93. RT_WAPI_KEY wapiMsk;
  94. RT_WAPI_KEY wapiMskUpdate;
  95. u8 lastRxUnicastPN[16];
  96. u8 lastTxUnicastPN[16];
  97. u8 lastRxMulticastPN[16];
  98. u8 lastRxUnicastPNBEQueue[16];
  99. u8 lastRxUnicastPNBKQueue[16];
  100. u8 lastRxUnicastPNVIQueue[16];
  101. u8 lastRxUnicastPNVOQueue[16];
  102. bool bSetkeyOk;
  103. bool bAuthenticateInProgress;
  104. bool bAuthenticatorInUpdata;
  105. } RT_WAPI_STA_INFO, *PRT_WAPI_STA_INFO;
  106. /* Added for HW wapi en/decryption */
  107. typedef struct _RT_WAPI_CAM_ENTRY {
  108. /* RT_LIST_ENTRY list; */
  109. u8 IsUsed;
  110. u8 entry_idx;/* for cam entry */
  111. u8 keyidx; /* 0 or 1,new or old key */
  112. u8 PeerMacAddr[6];
  113. u8 type; /* should be 110,wapi */
  114. } RT_WAPI_CAM_ENTRY, *PRT_WAPI_CAM_ENTRY;
  115. typedef struct _RT_WAPI_T {
  116. /* BKID */
  117. RT_WAPI_BKID wapiBKID[WAPI_MAX_BKID_NUM];
  118. struct list_head wapiBKIDIdleList;
  119. struct list_head wapiBKIDStoreList;
  120. /* Key for Tx Multicast/Broadcast */
  121. RT_WAPI_KEY wapiTxMsk;
  122. /* sec related */
  123. u8 lastTxMulticastPN[16];
  124. /* STA list */
  125. RT_WAPI_STA_INFO wapiSta[WAPI_MAX_STAINFO_NUM];
  126. struct list_head wapiSTAIdleList;
  127. struct list_head wapiSTAUsedList;
  128. /* */
  129. bool bWapiEnable;
  130. /* store WAPI IE */
  131. u8 wapiIE[256];
  132. u8 wapiIELength;
  133. bool bWapiPSK;
  134. /* last sequece number for wai packet */
  135. u16 wapiSeqnumAndFragNum;
  136. int extra_prefix_len;
  137. int extra_postfix_len;
  138. RT_WAPI_CAM_ENTRY wapiCamEntry[WAPI_CAM_ENTRY_NUM];
  139. } RT_WAPI_T, *PRT_WAPI_T;
  140. typedef struct _WLAN_HEADER_WAPI_EXTENSION {
  141. u8 KeyIdx;
  142. u8 Reserved;
  143. u8 PN[16];
  144. } WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;
  145. u32 WapiComparePN(u8 *PN1, u8 *PN2);
  146. void rtw_wapi_init(_adapter *padapter);
  147. void rtw_wapi_free(_adapter *padapter);
  148. void rtw_wapi_disable_tx(_adapter *padapter);
  149. u8 rtw_wapi_is_wai_packet(_adapter *padapter, u8 *pkt_data);
  150. void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame);
  151. u8 rtw_wapi_check_for_drop(_adapter *padapter, union recv_frame *precv_frame);
  152. void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
  153. void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
  154. void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
  155. void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  156. void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr);
  157. void rtw_wapi_return_all_sta_info(_adapter *padapter);
  158. void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr);
  159. void rtw_wapi_clear_all_cam_entry(_adapter *padapter);
  160. void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey);
  161. int rtw_wapi_create_event_send(_adapter *padapter, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);
  162. u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe);
  163. u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe);
  164. void rtw_wapi_get_iv(_adapter *padapter, u8 *pRA, u8 *IV);
  165. u8 WapiIncreasePN(u8 *PN, u8 AddCount);
  166. bool rtw_wapi_drop_for_key_absent(_adapter *padapter, u8 *pRA);
  167. #endif