/mt76x2e/src/include/wnm.h

https://gitlab.com/Red54/mtk-sources · C Header · 231 lines · 165 code · 44 blank · 22 comment · 0 complexity · 6feb8c09a062aca5ebcef71380d01388 MD5 · raw file

  1. /*
  2. ***************************************************************************
  3. * Ralink Tech Inc.
  4. * 4F, No. 2 Technology 5th Rd.
  5. * Science-based Industrial Park
  6. * Hsin-chu, Taiwan, R.O.C.
  7. *
  8. * (c) Copyright 2002-2006, Ralink Technology, Inc.
  9. *
  10. * All rights reserved. Ralink's source code is an unpublished work and the
  11. * use of a copyright notice does not imply otherwise. This source code
  12. * contains confidential trade secret material of Ralink Tech. Any attemp
  13. * or participation in deciphering, decoding, reverse engineering or in any
  14. * way altering the source code is stricitly prohibited, unless the prior
  15. * written consent of Ralink Technology, Inc. is obtained.
  16. ***************************************************************************/
  17. /****************************************************************************
  18. Abstract:
  19. ***************************************************************************/
  20. #ifndef __WNM_H__
  21. #define __WNM_H__
  22. #include "ipv6.h"
  23. #define BTM_MACHINE_BASE 0
  24. #define WaitPeerBTMRspTimeoutVale 1024
  25. /* BTM states */
  26. enum BTM_STATE {
  27. WAIT_BTM_QUERY,
  28. WAIT_PEER_BTM_QUERY,
  29. WAIT_BTM_REQ,
  30. WAIT_BTM_RSP,
  31. WAIT_PEER_BTM_REQ,
  32. WAIT_PEER_BTM_RSP,
  33. BTM_UNKNOWN,
  34. MAX_BTM_STATE,
  35. };
  36. /* BTM events */
  37. enum BTM_EVENT {
  38. BTM_QUERY,
  39. PEER_BTM_QUERY,
  40. BTM_REQ,
  41. BTM_RSP,
  42. PEER_BTM_REQ,
  43. PEER_BTM_RSP,
  44. MAX_BTM_MSG,
  45. };
  46. #define BTM_FUNC_SIZE (MAX_BTM_STATE * MAX_BTM_MSG)
  47. enum IPV6_TYPE{
  48. IPV6_LINK_LOCAL,
  49. IPV6_GLOBAL,
  50. };
  51. typedef struct GNU_PACKED _BTM_EVENT_DATA {
  52. UCHAR ControlIndex;
  53. UCHAR PeerMACAddr[MAC_ADDR_LEN];
  54. UINT16 EventType;
  55. union {
  56. #ifdef CONFIG_AP_SUPPORT
  57. struct {
  58. UCHAR DialogToken;
  59. UINT16 BTMReqLen;
  60. UCHAR BTMReq[0];
  61. } GNU_PACKED BTM_REQ_DATA;
  62. struct {
  63. UCHAR DialogToken;
  64. UINT16 BTMQueryLen;
  65. UCHAR BTMQuery[0];
  66. } GNU_PACKED PEER_BTM_QUERY_DATA;
  67. struct {
  68. UCHAR DialogToken;
  69. UINT16 BTMRspLen;
  70. UCHAR BTMRsp[0];
  71. } GNU_PACKED PEER_BTM_RSP_DATA;
  72. #endif /* CONFIG_AP_SUPPORT */
  73. }u;
  74. } BTM_EVENT_DATA, *PBTM_EVENT_DATA;
  75. typedef struct _BTM_PEER_ENTRY {
  76. DL_LIST List;
  77. enum BTM_STATE CurrentState;
  78. UCHAR ControlIndex;
  79. UCHAR PeerMACAddr[MAC_ADDR_LEN];
  80. UCHAR DialogToken;
  81. void *Priv;
  82. #ifdef CONFIG_AP_SUPPORT
  83. RALINK_TIMER_STRUCT WaitPeerBTMRspTimer;
  84. #endif /* CONFIG_AP_SUPPORT */
  85. } BTM_PEER_ENTRY, *PBTM_PEER_ENTRY;
  86. typedef struct _PROXY_ARP_IPV4_ENTRY {
  87. DL_LIST List;
  88. UCHAR TargetMACAddr[MAC_ADDR_LEN];
  89. UCHAR TargetIPAddr[4];
  90. } PROXY_ARP_IPV4_ENTRY, *PPROXY_ARP_IPV4_ENTRY;
  91. typedef struct _PROXY_ARP_IPV4_UNIT {
  92. UCHAR TargetMACAddr[MAC_ADDR_LEN];
  93. UCHAR TargetIPAddr[4];
  94. } PROXY_ARP_IPV4_UNIT, *PPROXY_ARP_IPV4_UNIT;
  95. typedef struct _PROXY_ARP_IPV6_ENTRY {
  96. DL_LIST List;
  97. UCHAR TargetMACAddr[MAC_ADDR_LEN];
  98. UCHAR TargetIPType;
  99. UCHAR TargetIPAddr[16];
  100. } PROXY_ARP_IPV6_ENTRY, *PPROXY_ARP_IPV6_ENTRY;
  101. typedef struct _PROXY_ARP_IPV6_UNIT {
  102. UCHAR TargetMACAddr[MAC_ADDR_LEN];
  103. UCHAR TargetIPType;
  104. UCHAR TargetIPAddr[16];
  105. } PROXY_ARP_IPV6_UNIT, *PPROXY_ARP_IPV6_UNIT;
  106. typedef struct _WNM_CTRL {
  107. UINT32 TimeadvertisementIELen;
  108. UINT32 TimezoneIELen;
  109. PUCHAR TimeadvertisementIE;
  110. PUCHAR TimezoneIE;
  111. RTMP_OS_SEM BTMPeerListLock;
  112. BOOLEAN ProxyARPEnable;
  113. RTMP_OS_SEM ProxyARPListLock;
  114. RTMP_OS_SEM ProxyARPIPv6ListLock;
  115. DL_LIST IPv4ProxyARPList;
  116. DL_LIST IPv6ProxyARPList;
  117. DL_LIST BTMPeerList;
  118. } WNM_CTRL, *PWNM_CTRL;
  119. enum IPTYPE {
  120. IPV4,
  121. IPV6
  122. };
  123. BOOLEAN IsGratuitousARP(IN PUCHAR pData);
  124. BOOLEAN IsUnsolicitedNeighborAdver(PRTMP_ADAPTER pAd,
  125. PUCHAR pData);
  126. BOOLEAN IsIPv4ProxyARPCandidate(IN PRTMP_ADAPTER pAd,
  127. IN PUCHAR pData);
  128. BOOLEAN IsIPv6ProxyARPCandidate(IN PRTMP_ADAPTER pAd,
  129. IN PUCHAR pData);
  130. BOOLEAN IsIPv6RouterSolicitation(IN PRTMP_ADAPTER pAd,
  131. IN PUCHAR pData);
  132. BOOLEAN IsIPv6RouterAdvertisement(IN PRTMP_ADAPTER pAd,
  133. IN PUCHAR pData);
  134. BOOLEAN IsTDLSPacket(IN PRTMP_ADAPTER pAd,
  135. IN PUCHAR pData);
  136. struct _MULTISSID_STRUCT;
  137. BOOLEAN IPv4ProxyARP(IN PRTMP_ADAPTER pAd,
  138. IN struct _MULTISSID_STRUCT *pMbss,
  139. IN PUCHAR pData,
  140. IN BOOLEAN FromDS);
  141. BOOLEAN IsIpv6DuplicateAddrDetect(PRTMP_ADAPTER pAd,
  142. PUCHAR pData);
  143. BOOLEAN IPv6ProxyARP(IN PRTMP_ADAPTER pAd,
  144. IN struct _MULTISSID_STRUCT *pMbss,
  145. IN PUCHAR pData,
  146. IN BOOLEAN FromDS);
  147. UINT32 AddIPv4ProxyARPEntry(IN PRTMP_ADAPTER pAd,
  148. IN struct _MULTISSID_STRUCT *pMbss,
  149. IN PUCHAR pTargetMACAddr,
  150. IN PUCHAR pTargetIPAddr);
  151. UINT32 AddIPv6ProxyARPEntry(IN PRTMP_ADAPTER pAd,
  152. IN struct _MULTISSID_STRUCT *pMbss,
  153. IN PUCHAR pTargetMACAddr,
  154. IN PUCHAR pTargetIPAddr);
  155. UINT32 IPv4ProxyARPTableLen(IN PRTMP_ADAPTER pAd,
  156. IN struct _MULTISSID_STRUCT *pMbss);
  157. UINT32 IPv6ProxyARPTableLen(IN PRTMP_ADAPTER pAd,
  158. IN struct _MULTISSID_STRUCT *pMbss);
  159. BOOLEAN GetIPv4ProxyARPTable(IN PRTMP_ADAPTER pAd,
  160. IN struct _MULTISSID_STRUCT *pMbss,
  161. OUT PUCHAR *ProxyARPTable);
  162. BOOLEAN GetIPv6ProxyARPTable(IN PRTMP_ADAPTER pAd,
  163. IN struct _MULTISSID_STRUCT *pMbss,
  164. OUT PUCHAR *ProxyARPTable);
  165. VOID RemoveIPv4ProxyARPEntry(IN PRTMP_ADAPTER pAd,
  166. IN struct _MULTISSID_STRUCT *pMbss,
  167. PUCHAR pTargetMACAddr);
  168. VOID RemoveIPv6ProxyARPEntry(IN PRTMP_ADAPTER pAd,
  169. IN struct _MULTISSID_STRUCT *pMbss,
  170. PUCHAR pTargetMACAddr);
  171. VOID WNMCtrlInit(IN PRTMP_ADAPTER pAd);
  172. VOID WNMCtrlExit(IN PRTMP_ADAPTER pAd);
  173. VOID Clear_All_PROXY_TABLE(IN PRTMP_ADAPTER pAd);
  174. #ifdef CONFIG_AP_SUPPORT
  175. VOID WNMIPv4ProxyARPCheck(
  176. IN PRTMP_ADAPTER pAd,
  177. PNDIS_PACKET pPacket,
  178. USHORT srcPort,
  179. USHORT dstPort,
  180. PUCHAR pSrcBuf);
  181. VOID WNMIPv6ProxyARPCheck(
  182. IN PRTMP_ADAPTER pAd,
  183. PNDIS_PACKET pPacket,
  184. PUCHAR pSrcBuf);
  185. #endif /* CONFIG_AP_SUPPORT */
  186. #endif /* __WNM_H__ */