1 #include "p2p_precomp.h"
4 #if CFG_SUPPORT_WFD_COMPOSE_IE
6 APPEND_VAR_ATTRI_ENTRY_T txProbeRspWFDAttributesTable[] = {
7 { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */
8 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */
9 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */
10 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_EXT_CAPABILITY), NULL, wfdFuncAppendAttriExtCapability } /* 7 */
11 ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */
14 APPEND_VAR_ATTRI_ENTRY_T txBeaconWFDAttributesTable[] = {
15 { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */
16 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */
17 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */
20 APPEND_VAR_ATTRI_ENTRY_T txAssocReqWFDAttributesTable[] = {
21 { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */
22 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */
23 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */
27 APPEND_VAR_ATTRI_ENTRY_T txAssocRspWFDAttributesTable[] = {
28 { (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_DEV_INFO) , NULL, wfdFuncAppendAttriDevInfo } /* 0 */
29 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_ASSOC_BSSID), NULL, wfdFuncAppendAttriAssocBssid } /* 1 */
30 ,{ (WFD_ATTRI_HDR_LEN + WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO), NULL, wfdFuncAppendAttriCoupledSinkInfo } /* 6 */
31 ,{ 0, wfdFuncCalculateAttriLenSessionInfo, wfdFuncAppendAttriSessionInfo } /* 9 */
41 p2pCalculate_IEForAssocReq (
43 IN P_ADAPTER_T prAdapter,
44 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
45 IN P_STA_RECORD_T prStaRec
48 P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL;
49 P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL;
50 UINT_32 u4RetValue = 0;
53 ASSERT_BREAK((eNetTypeIndex == NETWORK_TYPE_P2P_INDEX) && (prAdapter != NULL));
55 prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo;
57 prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo);
59 u4RetValue = prConnReqInfo->u4BufLength;
62 u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_HT_CAP);
64 // ADD WMM Information Element
65 u4RetValue += (ELEM_HDR_LEN + ELEM_MAX_LEN_WMM_INFO);
70 } /* p2pCalculate_IEForAssocReq */
74 /*----------------------------------------------------------------------------*/
76 * @brief This function is used to generate P2P IE for Beacon frame.
78 * @param[in] prMsduInfo Pointer to the composed MSDU_INFO_T.
82 /*----------------------------------------------------------------------------*/
84 p2pGenerate_IEForAssocReq (
85 IN P_ADAPTER_T prAdapter,
86 IN P_MSDU_INFO_T prMsduInfo
89 P_P2P_FSM_INFO_T prP2pFsmInfo = (P_P2P_FSM_INFO_T)NULL;
90 P_P2P_CONNECTION_REQ_INFO_T prConnReqInfo = (P_P2P_CONNECTION_REQ_INFO_T)NULL;
91 PUINT_8 pucIEBuf = (PUINT_8)NULL;
94 ASSERT_BREAK((prAdapter != NULL) && (prMsduInfo != NULL));
96 prP2pFsmInfo = prAdapter->rWifiVar.prP2pFsmInfo;
98 prConnReqInfo = &(prP2pFsmInfo->rConnReqInfo);
100 pucIEBuf = (PUINT_8)((UINT_32)prMsduInfo->prPacket + (UINT_32)prMsduInfo->u2FrameLength);
102 kalMemCopy(pucIEBuf, prConnReqInfo->aucIEBuf, prConnReqInfo->u4BufLength);
104 prMsduInfo->u2FrameLength += prConnReqInfo->u4BufLength;
106 rlmReqGenerateHtCapIE (prAdapter,prMsduInfo);
107 mqmGenerateWmmInfoIE (prAdapter,prMsduInfo);
114 } /* p2pGenerate_IEForAssocReq */
119 wfdFuncAppendAttriDevInfo (
120 IN P_ADAPTER_T prAdapter,
121 IN BOOLEAN fgIsAssocFrame,
122 IN PUINT_16 pu2Offset,
127 UINT_32 u4AttriLen = 0;
128 PUINT_8 pucBuffer = NULL;
129 P_WFD_DEVICE_INFORMATION_IE_T prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)NULL;
130 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
133 ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL));
135 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
137 ASSERT_BREAK((prWfdCfgSettings != NULL));
139 if ((prWfdCfgSettings->ucWfdEnable == 0) ||
140 ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0)) {
144 pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset));
146 ASSERT_BREAK(pucBuffer != NULL);
148 prWfdDevInfo = (P_WFD_DEVICE_INFORMATION_IE_T)pucBuffer;
150 prWfdDevInfo->ucElemID = WFD_ATTRI_ID_DEV_INFO;
152 WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevInfo, prWfdCfgSettings->u2WfdDevInfo);
154 WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2SessionMgmtCtrlPort, prWfdCfgSettings->u2WfdControlPort);
156 WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2WfdDevMaxSpeed, prWfdCfgSettings->u2WfdMaximumTp);
158 WLAN_SET_FIELD_BE16(&prWfdDevInfo->u2Length, WFD_ATTRI_MAX_LEN_DEV_INFO);
160 u4AttriLen = WFD_ATTRI_MAX_LEN_DEV_INFO + WFD_ATTRI_HDR_LEN;
164 (*pu2Offset) += (UINT_16)u4AttriLen;
168 /* wfdFuncAppendAttriDevInfo */
171 wfdFuncAppendAttriAssocBssid (
172 IN P_ADAPTER_T prAdapter,
173 IN BOOLEAN fgIsAssocFrame,
174 IN PUINT_16 pu2Offset,
179 UINT_32 u4AttriLen = 0;
180 PUINT_8 pucBuffer = NULL;
181 P_WFD_ASSOCIATED_BSSID_IE_T prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)NULL;
182 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
183 P_BSS_INFO_T prAisBssInfo = (P_BSS_INFO_T)NULL;
186 ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL));
188 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
190 ASSERT_BREAK((prWfdCfgSettings != NULL));
192 if (prWfdCfgSettings->ucWfdEnable == 0) {
197 prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]);
199 if ((!IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_AIS_INDEX)) ||
200 (prAisBssInfo->eConnectionState != PARAM_MEDIA_STATE_CONNECTED)) {
204 pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset));
206 ASSERT_BREAK(pucBuffer != NULL);
208 prWfdAssocBssid = (P_WFD_ASSOCIATED_BSSID_IE_T)pucBuffer;
210 prWfdAssocBssid->ucElemID = WFD_ATTRI_ID_ASSOC_BSSID;
212 WLAN_SET_FIELD_BE16(&prWfdAssocBssid->u2Length, WFD_ATTRI_MAX_LEN_ASSOC_BSSID);
214 COPY_MAC_ADDR(prWfdAssocBssid->aucAssocBssid, prAisBssInfo->aucBSSID);
216 u4AttriLen = WFD_ATTRI_MAX_LEN_ASSOC_BSSID + WFD_ATTRI_HDR_LEN;
220 (*pu2Offset) += (UINT_16)u4AttriLen;
224 /* wfdFuncAppendAttriAssocBssid */
227 wfdFuncAppendAttriCoupledSinkInfo (
228 IN P_ADAPTER_T prAdapter,
229 IN BOOLEAN fgIsAssocFrame,
230 IN PUINT_16 pu2Offset,
235 UINT_32 u4AttriLen = 0;
236 PUINT_8 pucBuffer = NULL;
237 P_WFD_COUPLE_SINK_INFORMATION_IE_T prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)NULL;
238 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
241 ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL));
243 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
245 ASSERT_BREAK((prWfdCfgSettings != NULL));
247 if ((prWfdCfgSettings->ucWfdEnable == 0) ||
248 ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_SINK_INFO_VALID) == 0)) {
252 pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset));
254 ASSERT_BREAK(pucBuffer != NULL);
256 prWfdCoupleSinkInfo = (P_WFD_COUPLE_SINK_INFORMATION_IE_T)pucBuffer;
258 prWfdCoupleSinkInfo->ucElemID = WFD_ATTRI_ID_COUPLED_SINK_INFO;
260 WLAN_SET_FIELD_BE16(&prWfdCoupleSinkInfo->u2Length, WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO);
262 COPY_MAC_ADDR(prWfdCoupleSinkInfo->aucCoupleSinkMac, prWfdCfgSettings->aucWfdCoupleSinkAddress);
264 prWfdCoupleSinkInfo->ucCoupleSinkStatusBp = prWfdCfgSettings->ucWfdCoupleSinkStatus;
266 u4AttriLen = WFD_ATTRI_MAX_LEN_COUPLED_SINK_INFO + WFD_ATTRI_HDR_LEN;
270 (*pu2Offset) += (UINT_16)u4AttriLen;
274 /* wfdFuncAppendAttriCoupledSinkInfo */
277 wfdFuncAppendAttriExtCapability (
278 IN P_ADAPTER_T prAdapter,
279 IN BOOLEAN fgIsAssocFrame,
280 IN PUINT_16 pu2Offset,
285 UINT_32 u4AttriLen = 0;
286 PUINT_8 pucBuffer = NULL;
287 P_WFD_EXTENDED_CAPABILITY_IE_T prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)NULL;
288 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
291 ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL));
293 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
295 ASSERT_BREAK((prWfdCfgSettings != NULL));
297 if ((prWfdCfgSettings->ucWfdEnable == 0) ||
298 ((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_EXT_CAPABILITY_VALID) == 0)) {
302 pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset));
304 ASSERT_BREAK(pucBuffer != NULL);
306 prWfdExtCapability = (P_WFD_EXTENDED_CAPABILITY_IE_T)pucBuffer;
308 prWfdExtCapability->ucElemID = WFD_ATTRI_ID_EXT_CAPABILITY;
310 WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2Length, WFD_ATTRI_MAX_LEN_EXT_CAPABILITY);
312 WLAN_SET_FIELD_BE16(&prWfdExtCapability->u2WfdExtCapabilityBp, prWfdCfgSettings->u2WfdExtendCap);
314 u4AttriLen = WFD_ATTRI_MAX_LEN_EXT_CAPABILITY + WFD_ATTRI_HDR_LEN;
318 (*pu2Offset) += (UINT_16)u4AttriLen;
322 /* wfdFuncAppendAttriExtCapability */
326 /*----------------------------------------------------------------------------*/
328 * @brief This function is used to calculate length of Channel List Attribute
330 * @param[in] prStaRec Pointer to the STA_RECORD_T
332 * @return The length of Attribute added
334 /*----------------------------------------------------------------------------*/
336 wfdFuncCalculateAttriLenSessionInfo (
337 IN P_ADAPTER_T prAdapter,
338 IN P_STA_RECORD_T prStaRec
341 UINT_16 u2AttriLen = 0;
342 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
345 ASSERT_BREAK((prAdapter != NULL) && (prStaRec != NULL));
347 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
349 if (prWfdCfgSettings->ucWfdEnable == 0) {
353 u2AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN;
358 return (UINT_32)u2AttriLen;
360 } /* wfdFuncCalculateAttriLenSessionInfo */
364 wfdFuncAppendAttriSessionInfo (
365 IN P_ADAPTER_T prAdapter,
366 IN BOOLEAN fgIsAssocFrame,
367 IN PUINT_16 pu2Offset,
372 UINT_32 u4AttriLen = 0;
373 PUINT_8 pucBuffer = NULL;
374 P_WFD_SESSION_INFORMATION_IE_T prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)NULL;
375 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
378 ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL) && (pu2Offset != NULL));
380 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
382 ASSERT_BREAK((prWfdCfgSettings != NULL));
384 if ((prWfdCfgSettings->ucWfdEnable == 0) || (prWfdCfgSettings->u2WfdSessionInformationIELen == 0)) {
388 pucBuffer = (PUINT_8)((UINT_32)pucBuf + (UINT_32)(*pu2Offset));
390 ASSERT_BREAK(pucBuffer != NULL);
392 prWfdSessionInfo = (P_WFD_SESSION_INFORMATION_IE_T)pucBuffer;
394 prWfdSessionInfo->ucElemID = WFD_ATTRI_ID_SESSION_INFO;
396 // TODO: Check endian issue?
397 kalMemCopy(prWfdSessionInfo->pucWfdDevInfoDesc, prWfdCfgSettings->aucWfdSessionInformationIE, prWfdCfgSettings->u2WfdSessionInformationIELen);
399 WLAN_SET_FIELD_16(&prWfdSessionInfo->u2Length, prWfdCfgSettings->u2WfdSessionInformationIELen);
401 u4AttriLen = prWfdCfgSettings->u2WfdSessionInformationIELen + WFD_ATTRI_HDR_LEN;
406 (*pu2Offset) += (UINT_16)u4AttriLen;
410 /* wfdFuncAppendAttriSessionInfo */
414 #if CFG_SUPPORT_WFD_COMPOSE_IE
416 wfdFuncGenerateWfd_IE (
417 IN P_ADAPTER_T prAdapter,
418 IN BOOLEAN fgIsAssocFrame,
419 IN PUINT_16 pu2Offset,
421 IN UINT_16 u2BufSize,
422 IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[],
423 IN UINT_32 u4AttriTableSize
428 PUINT_8 pucBuffer = (PUINT_8)NULL;
429 P_IE_WFD_T prIeWFD = (P_IE_WFD_T)NULL;
430 UINT_32 u4OverallAttriLen;
432 UINT_8 aucWfaOui[] = VENDOR_OUI_WFA_SPECIFIC;
433 UINT_8 aucTempBuffer[P2P_MAXIMUM_ATTRIBUTE_LEN];
438 ASSERT_BREAK((prAdapter != NULL) && (pucBuf != NULL));
440 pucBuffer = (PUINT_8)((UINT_32)pucBuf + (*pu2Offset));
442 ASSERT_BREAK(pucBuffer != NULL);
444 /* Check buffer length is still enough. */
445 ASSERT_BREAK((u2BufSize - (*pu2Offset)) >= WFD_IE_OUI_HDR);
447 prIeWFD = (P_IE_WFD_T)pucBuffer;
449 prIeWFD->ucId = ELEM_ID_WFD;
451 prIeWFD->aucOui[0] = aucWfaOui[0];
452 prIeWFD->aucOui[1] = aucWfaOui[1];
453 prIeWFD->aucOui[2] = aucWfaOui[2];
454 prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD;
456 (*pu2Offset) += WFD_IE_OUI_HDR;
458 /* Overall length of all Attributes */
459 u4OverallAttriLen = 0;
461 for (i = 0; i < u4AttriTableSize; i++) {
463 if (arAppendAttriTable[i].pfnAppendAttri) {
464 u4AttriLen = arAppendAttriTable[i].pfnAppendAttri(prAdapter, fgIsAssocFrame, pu2Offset, pucBuf, u2BufSize);
466 u4OverallAttriLen += u4AttriLen;
468 if (u4OverallAttriLen > P2P_MAXIMUM_ATTRIBUTE_LEN) {
469 u4OverallAttriLen -= P2P_MAXIMUM_ATTRIBUTE_LEN;
471 prIeWFD->ucLength = (VENDOR_OUI_TYPE_LEN + P2P_MAXIMUM_ATTRIBUTE_LEN);
473 pucBuffer = (PUINT_8)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN));
475 prIeWFD = (P_IE_WFD_T)((UINT_32)prIeWFD + (WFD_IE_OUI_HDR + P2P_MAXIMUM_ATTRIBUTE_LEN));
477 kalMemCopy(aucTempBuffer, pucBuffer, u4OverallAttriLen);
479 prIeWFD->ucId = ELEM_ID_WFD;
481 prIeWFD->aucOui[0] = aucWfaOui[0];
482 prIeWFD->aucOui[1] = aucWfaOui[1];
483 prIeWFD->aucOui[2] = aucWfaOui[2];
484 prIeWFD->ucOuiType = VENDOR_OUI_TYPE_WFD;
486 kalMemCopy(prIeWFD->aucWFDAttributes, aucTempBuffer, u4OverallAttriLen);
487 (*pu2Offset) += WFD_IE_OUI_HDR;
494 prIeWFD->ucLength = (UINT_8)(VENDOR_OUI_TYPE_LEN + u4OverallAttriLen);
500 } /* wfdFuncGenerateWfd_IE */
502 #endif /* CFG_SUPPORT_WFD_COMPOSE_IE */
508 wfdFuncCalculateWfdIELenForAssocRsp (
509 IN P_ADAPTER_T prAdapter,
510 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
511 IN P_STA_RECORD_T prStaRec
515 #if CFG_SUPPORT_WFD_COMPOSE_IE
516 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
518 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
521 !IS_STA_P2P_TYPE(prStaRec) ||
522 (prWfdCfgSettings->ucWfdEnable == 0)) {
526 return p2pFuncCalculateP2P_IELen(prAdapter,
529 txAssocRspWFDAttributesTable,
530 sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T));
535 } /* wfdFuncCalculateWfdIELenForAssocRsp */
540 wfdFuncGenerateWfdIEForAssocRsp (
541 IN P_ADAPTER_T prAdapter,
542 IN P_MSDU_INFO_T prMsduInfo
546 #if CFG_SUPPORT_WFD_COMPOSE_IE
547 P_WFD_CFG_SETTINGS_T prWfdCfgSettings = (P_WFD_CFG_SETTINGS_T)NULL;
548 P_STA_RECORD_T prStaRec;
551 ASSERT_BREAK((prMsduInfo != NULL) && (prAdapter != NULL));
553 prWfdCfgSettings = &(prAdapter->rWifiVar.prP2pFsmInfo->rWfdConfigureSettings);
554 prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex);
556 if (IS_STA_P2P_TYPE(prStaRec)) {
558 if (prWfdCfgSettings->ucWfdEnable == 0) {
561 if((prWfdCfgSettings->u4WfdFlag & WFD_FLAGS_DEV_INFO_VALID) == 0) {
565 wfdFuncGenerateWfd_IE(prAdapter,
567 &prMsduInfo->u2FrameLength,
568 prMsduInfo->prPacket,
570 txAssocRspWFDAttributesTable,
571 sizeof(txAssocRspWFDAttributesTable)/sizeof(APPEND_VAR_ATTRI_ENTRY_T));
580 } /* wfdFuncGenerateWfdIEForAssocRsp */