2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 * Purpose: Handles the 802.11 management support functions
28 * vMgrEncodeBeacon - Encode the Beacon frame
29 * vMgrDecodeBeacon - Decode the Beacon frame
30 * vMgrEncodeIBSSATIM - Encode the IBSS ATIM frame
31 * vMgrDecodeIBSSATIM - Decode the IBSS ATIM frame
32 * vMgrEncodeDisassociation - Encode the Disassociation frame
33 * vMgrDecodeDisassociation - Decode the Disassociation frame
34 * vMgrEncodeAssocRequest - Encode the Association request frame
35 * vMgrDecodeAssocRequest - Decode the Association request frame
36 * vMgrEncodeAssocResponse - Encode the Association response frame
37 * vMgrDecodeAssocResponse - Decode the Association response frame
38 * vMgrEncodeReAssocRequest - Encode the ReAssociation request frame
39 * vMgrDecodeReAssocRequest - Decode the ReAssociation request frame
40 * vMgrEncodeProbeRequest - Encode the Probe request frame
41 * vMgrDecodeProbeRequest - Decode the Probe request frame
42 * vMgrEncodeProbeResponse - Encode the Probe response frame
43 * vMgrDecodeProbeResponse - Decode the Probe response frame
44 * vMgrEncodeAuthen - Encode the Authentication frame
45 * vMgrDecodeAuthen - Decode the Authentication frame
46 * vMgrEncodeDeauthen - Encode the DeAuthentication frame
47 * vMgrDecodeDeauthen - Decode the DeAuthentication frame
48 * vMgrEncodeReassocResponse - Encode the Reassociation response frame
49 * vMgrDecodeReassocResponse - Decode the Reassociation response frame
62 /*--------------------- Static Definitions -------------------------*/
64 /*--------------------- Static Classes ----------------------------*/
66 /*--------------------- Static Variables --------------------------*/
68 static int msglevel = MSG_LEVEL_INFO;
69 /* static int msglevel =MSG_LEVEL_DEBUG; */
70 /*--------------------- Static Functions --------------------------*/
72 /*--------------------- Export Variables --------------------------*/
74 /*--------------------- Export Functions --------------------------*/
78 * Routine Description:
79 * Encode Beacon frame body offset
88 PWLAN_FR_BEACON pFrame
91 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
94 pFrame->pqwTimestamp = (PQWORD)
95 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
97 pFrame->pwBeaconInterval = (unsigned short *)
98 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
99 WLAN_BEACON_OFF_BCN_INT);
100 pFrame->pwCapInfo = (unsigned short *)
101 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
102 WLAN_BEACON_OFF_CAPINFO);
104 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_BEACON_OFF_SSID;
111 * Routine Description:
112 * Decode Beacon frame body offset
122 PWLAN_FR_BEACON pFrame
127 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
130 pFrame->pqwTimestamp = (PQWORD)
131 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
133 pFrame->pwBeaconInterval = (unsigned short *)
134 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
135 WLAN_BEACON_OFF_BCN_INT);
136 pFrame->pwCapInfo = (unsigned short *)
137 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
138 WLAN_BEACON_OFF_CAPINFO);
140 /* Information elements */
141 pItem = (PWLAN_IE)((unsigned char *)
142 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))) +
143 WLAN_BEACON_OFF_SSID);
144 while (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
145 switch (pItem->byElementID) {
147 if (pFrame->pSSID == NULL)
148 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
150 case WLAN_EID_SUPP_RATES:
151 if (pFrame->pSuppRates == NULL)
152 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
154 case WLAN_EID_FH_PARMS:
155 /* pFrame->pFHParms = (PWLAN_IE_FH_PARMS)pItem; */
157 case WLAN_EID_DS_PARMS:
158 if (pFrame->pDSParms == NULL)
159 pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;
161 case WLAN_EID_CF_PARMS:
162 if (pFrame->pCFParms == NULL)
163 pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;
165 case WLAN_EID_IBSS_PARMS:
166 if (pFrame->pIBSSParms == NULL)
167 pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem;
170 if (pFrame->pTIM == NULL)
171 pFrame->pTIM = (PWLAN_IE_TIM)pItem;
175 if (pFrame->pRSN == NULL)
176 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
178 case WLAN_EID_RSN_WPA:
179 if (pFrame->pRSNWPA == NULL) {
180 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
182 (PWLAN_IE_RSN_EXT)pItem;
187 if (pFrame->pERP == NULL)
188 pFrame->pERP = (PWLAN_IE_ERP)pItem;
190 case WLAN_EID_EXTSUPP_RATES:
191 if (pFrame->pExtSuppRates == NULL)
192 pFrame->pExtSuppRates =
193 (PWLAN_IE_SUPP_RATES)pItem;
196 case WLAN_EID_COUNTRY: /* 7 */
197 if (pFrame->pIE_Country == NULL)
198 pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem;
201 case WLAN_EID_PWR_CONSTRAINT: /* 32 */
202 if (pFrame->pIE_PowerConstraint == NULL)
203 pFrame->pIE_PowerConstraint =
204 (PWLAN_IE_PW_CONST)pItem;
207 case WLAN_EID_CH_SWITCH: /* 37 */
208 if (pFrame->pIE_CHSW == NULL)
209 pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem;
212 case WLAN_EID_QUIET: /* 40 */
213 if (pFrame->pIE_Quiet == NULL)
214 pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem;
217 case WLAN_EID_IBSS_DFS:
218 if (pFrame->pIE_IBSSDFS == NULL)
219 pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem;
223 DBG_PRT(MSG_LEVEL_DEBUG,
224 KERN_INFO "Unrecognized EID=%dd in beacon decode.\n",
229 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
237 * Routine Description:
248 PWLAN_FR_IBSSATIM pFrame
251 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
252 pFrame->len = WLAN_HDR_ADDR3_LEN;
259 * Routine Description:
270 PWLAN_FR_IBSSATIM pFrame
273 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
280 * Routine Description:
281 * Encode Disassociation
290 vMgrEncodeDisassociation(
291 PWLAN_FR_DISASSOC pFrame
294 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
297 pFrame->pwReason = (unsigned short *)
298 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
299 WLAN_DISASSOC_OFF_REASON);
300 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DISASSOC_OFF_REASON +
301 sizeof(*(pFrame->pwReason));
308 * Routine Description:
309 * Decode Disassociation
318 vMgrDecodeDisassociation(
319 PWLAN_FR_DISASSOC pFrame
322 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
325 pFrame->pwReason = (unsigned short *)
326 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
327 WLAN_DISASSOC_OFF_REASON);
334 * Routine Description:
335 * Encode Association Request
344 vMgrEncodeAssocRequest(
345 PWLAN_FR_ASSOCREQ pFrame
348 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
350 pFrame->pwCapInfo = (unsigned short *)
351 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
352 WLAN_ASSOCREQ_OFF_CAP_INFO);
353 pFrame->pwListenInterval = (unsigned short *)
354 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
355 WLAN_ASSOCREQ_OFF_LISTEN_INT);
356 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCREQ_OFF_LISTEN_INT +
357 sizeof(*(pFrame->pwListenInterval));
363 * Routine Description: (AP)
364 * Decode Association Request
373 vMgrDecodeAssocRequest(
374 PWLAN_FR_ASSOCREQ pFrame
379 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
381 pFrame->pwCapInfo = (unsigned short *)
382 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
383 WLAN_ASSOCREQ_OFF_CAP_INFO);
384 pFrame->pwListenInterval = (unsigned short *)
385 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
386 WLAN_ASSOCREQ_OFF_LISTEN_INT);
388 /* Information elements */
389 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
390 + WLAN_ASSOCREQ_OFF_SSID);
392 while (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
393 switch (pItem->byElementID) {
395 if (pFrame->pSSID == NULL)
396 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
398 case WLAN_EID_SUPP_RATES:
399 if (pFrame->pSuppRates == NULL)
401 (PWLAN_IE_SUPP_RATES)pItem;
405 if (pFrame->pRSN == NULL)
406 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
408 case WLAN_EID_RSN_WPA:
409 if (pFrame->pRSNWPA == NULL) {
410 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
412 (PWLAN_IE_RSN_EXT)pItem;
415 case WLAN_EID_EXTSUPP_RATES:
416 if (pFrame->pExtSuppRates == NULL)
417 pFrame->pExtSuppRates =
418 (PWLAN_IE_SUPP_RATES)pItem;
422 DBG_PRT(MSG_LEVEL_DEBUG,
423 KERN_INFO "Unrecognized EID=%dd in assocreq decode.\n",
427 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
434 * Routine Description: (AP)
435 * Encode Association Response
444 vMgrEncodeAssocResponse(
445 PWLAN_FR_ASSOCRESP pFrame
448 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
451 pFrame->pwCapInfo = (unsigned short *)
452 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
453 WLAN_ASSOCRESP_OFF_CAP_INFO);
454 pFrame->pwStatus = (unsigned short *)
455 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
456 WLAN_ASSOCRESP_OFF_STATUS);
457 pFrame->pwAid = (unsigned short *)
458 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
459 WLAN_ASSOCRESP_OFF_AID);
460 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCRESP_OFF_AID +
461 sizeof(*(pFrame->pwAid));
468 * Routine Description:
469 * Decode Association Response
478 vMgrDecodeAssocResponse(
479 PWLAN_FR_ASSOCRESP pFrame
484 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
487 pFrame->pwCapInfo = (unsigned short *)
488 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
489 WLAN_ASSOCRESP_OFF_CAP_INFO);
490 pFrame->pwStatus = (unsigned short *)
491 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
492 WLAN_ASSOCRESP_OFF_STATUS);
493 pFrame->pwAid = (unsigned short *)
494 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
495 WLAN_ASSOCRESP_OFF_AID);
497 /* Information elements */
498 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)
499 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
500 WLAN_ASSOCRESP_OFF_SUPP_RATES);
502 pItem = (PWLAN_IE)(pFrame->pSuppRates);
503 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
505 if ((((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) &&
506 (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) {
507 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
508 DBG_PRT(MSG_LEVEL_DEBUG,
509 KERN_INFO "pFrame->pExtSuppRates=[%p].\n",
512 pFrame->pExtSuppRates = NULL;
519 * Routine Description:
520 * Encode Reassociation Request
529 vMgrEncodeReassocRequest(
530 PWLAN_FR_REASSOCREQ pFrame
533 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
536 pFrame->pwCapInfo = (unsigned short *)
537 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
538 WLAN_REASSOCREQ_OFF_CAP_INFO);
539 pFrame->pwListenInterval = (unsigned short *)
540 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
541 WLAN_REASSOCREQ_OFF_LISTEN_INT);
542 pFrame->pAddrCurrAP = (PIEEE_ADDR)
543 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
544 WLAN_REASSOCREQ_OFF_CURR_AP);
545 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCREQ_OFF_CURR_AP +
546 sizeof(*(pFrame->pAddrCurrAP));
553 * Routine Description: (AP)
554 * Decode Reassociation Request
563 vMgrDecodeReassocRequest(
564 PWLAN_FR_REASSOCREQ pFrame
568 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
571 pFrame->pwCapInfo = (unsigned short *)
572 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
573 WLAN_REASSOCREQ_OFF_CAP_INFO);
574 pFrame->pwListenInterval = (unsigned short *)
575 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
576 WLAN_REASSOCREQ_OFF_LISTEN_INT);
577 pFrame->pAddrCurrAP = (PIEEE_ADDR)
578 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
579 WLAN_REASSOCREQ_OFF_CURR_AP);
581 /* Information elements */
582 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
583 + WLAN_REASSOCREQ_OFF_SSID);
585 while (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
586 switch (pItem->byElementID) {
588 if (pFrame->pSSID == NULL)
589 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
591 case WLAN_EID_SUPP_RATES:
592 if (pFrame->pSuppRates == NULL)
594 (PWLAN_IE_SUPP_RATES)pItem;
598 if (pFrame->pRSN == NULL)
599 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
601 case WLAN_EID_RSN_WPA:
602 if (pFrame->pRSNWPA == NULL) {
603 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
605 (PWLAN_IE_RSN_EXT)pItem;
609 case WLAN_EID_EXTSUPP_RATES:
610 if (pFrame->pExtSuppRates == NULL)
611 pFrame->pExtSuppRates =
612 (PWLAN_IE_SUPP_RATES)pItem;
615 DBG_PRT(MSG_LEVEL_DEBUG,
616 KERN_INFO "Unrecognized EID=%dd in reassocreq decode.\n",
620 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
627 * Routine Description:
628 * Encode Probe Request
637 vMgrEncodeProbeRequest(
638 PWLAN_FR_PROBEREQ pFrame
641 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
642 pFrame->len = WLAN_HDR_ADDR3_LEN;
648 * Routine Description:
649 * Decode Probe Request
658 vMgrDecodeProbeRequest(
659 PWLAN_FR_PROBEREQ pFrame
664 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
666 /* Information elements */
667 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)));
669 while (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
670 switch (pItem->byElementID) {
672 if (pFrame->pSSID == NULL)
673 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
676 case WLAN_EID_SUPP_RATES:
677 if (pFrame->pSuppRates == NULL)
679 (PWLAN_IE_SUPP_RATES)pItem;
682 case WLAN_EID_EXTSUPP_RATES:
683 if (pFrame->pExtSuppRates == NULL)
684 pFrame->pExtSuppRates =
685 (PWLAN_IE_SUPP_RATES)pItem;
689 DBG_PRT(MSG_LEVEL_DEBUG,
690 KERN_INFO "Bad EID=%dd in probereq\n",
695 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
702 * Routine Description:
703 * Encode Probe Response
712 vMgrEncodeProbeResponse(
713 PWLAN_FR_PROBERESP pFrame
716 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
719 pFrame->pqwTimestamp = (PQWORD)
720 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
721 WLAN_PROBERESP_OFF_TS);
722 pFrame->pwBeaconInterval = (unsigned short *)
723 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
724 WLAN_PROBERESP_OFF_BCN_INT);
725 pFrame->pwCapInfo = (unsigned short *)
726 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
727 WLAN_PROBERESP_OFF_CAP_INFO);
729 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_PROBERESP_OFF_CAP_INFO +
730 sizeof(*(pFrame->pwCapInfo));
737 * Routine Description:
738 * Decode Probe Response
747 vMgrDecodeProbeResponse(
748 PWLAN_FR_PROBERESP pFrame
753 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
756 pFrame->pqwTimestamp = (PQWORD)
757 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
758 WLAN_PROBERESP_OFF_TS);
759 pFrame->pwBeaconInterval = (unsigned short *)
760 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
761 WLAN_PROBERESP_OFF_BCN_INT);
762 pFrame->pwCapInfo = (unsigned short *)
763 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
764 WLAN_PROBERESP_OFF_CAP_INFO);
766 /* Information elements */
767 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
768 + WLAN_PROBERESP_OFF_SSID);
770 while (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
771 switch (pItem->byElementID) {
773 if (pFrame->pSSID == NULL)
774 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
776 case WLAN_EID_SUPP_RATES:
777 if (pFrame->pSuppRates == NULL)
779 (PWLAN_IE_SUPP_RATES)pItem;
781 case WLAN_EID_FH_PARMS:
783 case WLAN_EID_DS_PARMS:
784 if (pFrame->pDSParms == NULL)
785 pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;
787 case WLAN_EID_CF_PARMS:
788 if (pFrame->pCFParms == NULL)
789 pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;
791 case WLAN_EID_IBSS_PARMS:
792 if (pFrame->pIBSSParms == NULL)
794 (PWLAN_IE_IBSS_PARMS)pItem;
798 if (pFrame->pRSN == NULL)
799 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
801 case WLAN_EID_RSN_WPA:
802 if (pFrame->pRSNWPA == NULL) {
803 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
805 (PWLAN_IE_RSN_EXT)pItem;
809 if (pFrame->pERP == NULL)
810 pFrame->pERP = (PWLAN_IE_ERP)pItem;
812 case WLAN_EID_EXTSUPP_RATES:
813 if (pFrame->pExtSuppRates == NULL)
814 pFrame->pExtSuppRates =
815 (PWLAN_IE_SUPP_RATES)pItem;
818 case WLAN_EID_COUNTRY: /* 7 */
819 if (pFrame->pIE_Country == NULL)
820 pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem;
823 case WLAN_EID_PWR_CONSTRAINT: /* 32 */
824 if (pFrame->pIE_PowerConstraint == NULL)
825 pFrame->pIE_PowerConstraint =
826 (PWLAN_IE_PW_CONST)pItem;
829 case WLAN_EID_CH_SWITCH: /* 37 */
830 if (pFrame->pIE_CHSW == NULL)
831 pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem;
834 case WLAN_EID_QUIET: /* 40 */
835 if (pFrame->pIE_Quiet == NULL)
836 pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem;
839 case WLAN_EID_IBSS_DFS:
840 if (pFrame->pIE_IBSSDFS == NULL)
841 pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem;
845 DBG_PRT(MSG_LEVEL_DEBUG,
846 KERN_INFO "Bad EID=%dd in proberesp\n",
851 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
858 * Routine Description:
859 * Encode Authentication frame
869 PWLAN_FR_AUTHEN pFrame
872 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
875 pFrame->pwAuthAlgorithm = (unsigned short *)
876 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
877 WLAN_AUTHEN_OFF_AUTH_ALG);
878 pFrame->pwAuthSequence = (unsigned short *)
879 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
880 WLAN_AUTHEN_OFF_AUTH_SEQ);
881 pFrame->pwStatus = (unsigned short *)
882 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
883 WLAN_AUTHEN_OFF_STATUS);
884 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_AUTHEN_OFF_STATUS +
885 sizeof(*(pFrame->pwStatus));
892 * Routine Description:
893 * Decode Authentication
903 PWLAN_FR_AUTHEN pFrame
908 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
911 pFrame->pwAuthAlgorithm = (unsigned short *)
912 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
913 WLAN_AUTHEN_OFF_AUTH_ALG);
914 pFrame->pwAuthSequence = (unsigned short *)
915 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
916 WLAN_AUTHEN_OFF_AUTH_SEQ);
917 pFrame->pwStatus = (unsigned short *)
918 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
919 WLAN_AUTHEN_OFF_STATUS);
921 /* Information elements */
922 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
923 + WLAN_AUTHEN_OFF_CHALLENGE);
925 if (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len) &&
926 pItem->byElementID == WLAN_EID_CHALLENGE)
927 pFrame->pChallenge = (PWLAN_IE_CHALLENGE)pItem;
934 * Routine Description:
935 * Encode Authentication
945 PWLAN_FR_DEAUTHEN pFrame
948 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
951 pFrame->pwReason = (unsigned short *)
952 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
953 WLAN_DEAUTHEN_OFF_REASON);
954 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DEAUTHEN_OFF_REASON +
955 sizeof(*(pFrame->pwReason));
962 * Routine Description:
963 * Decode Deauthentication
973 PWLAN_FR_DEAUTHEN pFrame
976 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
979 pFrame->pwReason = (unsigned short *)
980 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
981 WLAN_DEAUTHEN_OFF_REASON);
988 * Routine Description: (AP)
989 * Encode Reassociation Response
998 vMgrEncodeReassocResponse(
999 PWLAN_FR_REASSOCRESP pFrame
1002 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
1005 pFrame->pwCapInfo = (unsigned short *)
1006 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1007 WLAN_REASSOCRESP_OFF_CAP_INFO);
1008 pFrame->pwStatus = (unsigned short *)
1009 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1010 WLAN_REASSOCRESP_OFF_STATUS);
1011 pFrame->pwAid = (unsigned short *)
1012 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1013 WLAN_REASSOCRESP_OFF_AID);
1015 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCRESP_OFF_AID +
1016 sizeof(*(pFrame->pwAid));
1023 * Routine Description:
1024 * Decode Reassociation Response
1033 vMgrDecodeReassocResponse(
1034 PWLAN_FR_REASSOCRESP pFrame
1039 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
1042 pFrame->pwCapInfo = (unsigned short *)
1043 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1044 WLAN_REASSOCRESP_OFF_CAP_INFO);
1045 pFrame->pwStatus = (unsigned short *)
1046 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1047 WLAN_REASSOCRESP_OFF_STATUS);
1048 pFrame->pwAid = (unsigned short *)
1049 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1050 WLAN_REASSOCRESP_OFF_AID);
1052 /* Information elements */
1053 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)
1054 (WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
1055 WLAN_REASSOCRESP_OFF_SUPP_RATES);
1057 pItem = (PWLAN_IE)(pFrame->pSuppRates);
1058 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
1060 if ((((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) &&
1061 (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) {
1062 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;