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 -------------------------*/
66 /*--------------------- Static Classes ----------------------------*/
68 /*--------------------- Static Variables --------------------------*/
70 static int msglevel =MSG_LEVEL_INFO;
71 //static int msglevel =MSG_LEVEL_DEBUG;
72 /*--------------------- Static Functions --------------------------*/
76 /*--------------------- Export Variables --------------------------*/
79 /*--------------------- Export Functions --------------------------*/
84 * Routine Description:
85 * Encode Beacon frame body offset
94 PWLAN_FR_BEACON pFrame
97 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
100 pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
101 + WLAN_BEACON_OFF_TS);
102 pFrame->pwBeaconInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
103 + WLAN_BEACON_OFF_BCN_INT);
104 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
105 + WLAN_BEACON_OFF_CAPINFO);
107 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_BEACON_OFF_SSID;
114 * Routine Description:
115 * Decode Beacon frame body offset
126 PWLAN_FR_BEACON pFrame
131 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
134 pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
135 + WLAN_BEACON_OFF_TS);
136 pFrame->pwBeaconInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
137 + WLAN_BEACON_OFF_BCN_INT);
138 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
139 + WLAN_BEACON_OFF_CAPINFO);
141 // Information elements
142 pItem = (PWLAN_IE)((unsigned char *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)))
143 + WLAN_BEACON_OFF_SSID);
144 while( ((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len) ){
146 switch (pItem->byElementID) {
148 if (pFrame->pSSID == NULL)
149 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
151 case WLAN_EID_SUPP_RATES:
152 if (pFrame->pSuppRates == NULL)
153 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
155 case WLAN_EID_FH_PARMS:
156 //pFrame->pFHParms = (PWLAN_IE_FH_PARMS)pItem;
158 case WLAN_EID_DS_PARMS:
159 if (pFrame->pDSParms == NULL)
160 pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;
162 case WLAN_EID_CF_PARMS:
163 if (pFrame->pCFParms == NULL)
164 pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;
166 case WLAN_EID_IBSS_PARMS:
167 if (pFrame->pIBSSParms == NULL)
168 pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem;
171 if (pFrame->pTIM == NULL)
172 pFrame->pTIM = (PWLAN_IE_TIM)pItem;
176 if (pFrame->pRSN == NULL) {
177 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
180 case WLAN_EID_RSN_WPA:
181 if (pFrame->pRSNWPA == NULL) {
182 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
183 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
188 if (pFrame->pERP == NULL)
189 pFrame->pERP = (PWLAN_IE_ERP)pItem;
191 case WLAN_EID_EXTSUPP_RATES:
192 if (pFrame->pExtSuppRates == NULL)
193 pFrame->pExtSuppRates = (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 = (PWLAN_IE_PW_CONST)pItem;
206 case WLAN_EID_CH_SWITCH: //37
207 if (pFrame->pIE_CHSW == NULL)
208 pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem;
211 case WLAN_EID_QUIET: //40
212 if (pFrame->pIE_Quiet == NULL)
213 pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem;
216 case WLAN_EID_IBSS_DFS:
217 if (pFrame->pIE_IBSSDFS == NULL)
218 pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem;
222 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in beacon decode.\n", pItem->byElementID);
226 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
235 * Routine Description:
247 PWLAN_FR_IBSSATIM pFrame
250 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
251 pFrame->len = WLAN_HDR_ADDR3_LEN;
259 * Routine Description:
270 PWLAN_FR_IBSSATIM pFrame
273 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
281 * Routine Description:
282 * Encode Disassociation
291 vMgrEncodeDisassociation(
292 PWLAN_FR_DISASSOC pFrame
295 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
299 pFrame->pwReason = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
300 + WLAN_DISASSOC_OFF_REASON);
301 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DISASSOC_OFF_REASON + sizeof(*(pFrame->pwReason));
309 * Routine Description:
310 * Decode Disassociation
319 vMgrDecodeDisassociation(
320 PWLAN_FR_DISASSOC pFrame
323 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
326 pFrame->pwReason = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
327 + WLAN_DISASSOC_OFF_REASON);
334 * Routine Description:
335 * Encode Association Request
345 vMgrEncodeAssocRequest(
346 PWLAN_FR_ASSOCREQ pFrame
349 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
351 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
352 + WLAN_ASSOCREQ_OFF_CAP_INFO);
353 pFrame->pwListenInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
354 + WLAN_ASSOCREQ_OFF_LISTEN_INT);
355 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCREQ_OFF_LISTEN_INT + sizeof(*(pFrame->pwListenInterval));
362 * Routine Description: (AP)
363 * Decode Association Request
372 vMgrDecodeAssocRequest(
373 PWLAN_FR_ASSOCREQ pFrame
378 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
380 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
381 + WLAN_ASSOCREQ_OFF_CAP_INFO);
382 pFrame->pwListenInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
383 + WLAN_ASSOCREQ_OFF_LISTEN_INT);
385 // Information elements
386 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
387 + WLAN_ASSOCREQ_OFF_SSID);
389 while (((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
390 switch (pItem->byElementID){
392 if (pFrame->pSSID == NULL)
393 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
395 case WLAN_EID_SUPP_RATES:
396 if (pFrame->pSuppRates == NULL)
397 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
401 if (pFrame->pRSN == NULL) {
402 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
405 case WLAN_EID_RSN_WPA:
406 if (pFrame->pRSNWPA == NULL) {
407 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
408 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
411 case WLAN_EID_EXTSUPP_RATES:
412 if (pFrame->pExtSuppRates == NULL)
413 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
417 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in assocreq decode.\n",
421 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
428 * Routine Description: (AP)
429 * Encode Association Response
438 vMgrEncodeAssocResponse(
439 PWLAN_FR_ASSOCRESP pFrame
442 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
445 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
446 + WLAN_ASSOCRESP_OFF_CAP_INFO);
447 pFrame->pwStatus = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
448 + WLAN_ASSOCRESP_OFF_STATUS);
449 pFrame->pwAid = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
450 + WLAN_ASSOCRESP_OFF_AID);
451 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCRESP_OFF_AID
452 + sizeof(*(pFrame->pwAid));
460 * Routine Description:
461 * Decode Association Response
470 vMgrDecodeAssocResponse(
471 PWLAN_FR_ASSOCRESP pFrame
476 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
479 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
480 + WLAN_ASSOCRESP_OFF_CAP_INFO);
481 pFrame->pwStatus = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
482 + WLAN_ASSOCRESP_OFF_STATUS);
483 pFrame->pwAid = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
484 + WLAN_ASSOCRESP_OFF_AID);
486 // Information elements
487 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
488 + WLAN_ASSOCRESP_OFF_SUPP_RATES);
490 pItem = (PWLAN_IE)(pFrame->pSuppRates);
491 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
493 if ((((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) &&
494 (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) {
495 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
496 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pFrame->pExtSuppRates=[%p].\n", pItem);
499 pFrame->pExtSuppRates = NULL;
507 * Routine Description:
508 * Encode Reassociation Request
517 vMgrEncodeReassocRequest(
518 PWLAN_FR_REASSOCREQ pFrame
521 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
524 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
525 + WLAN_REASSOCREQ_OFF_CAP_INFO);
526 pFrame->pwListenInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
527 + WLAN_REASSOCREQ_OFF_LISTEN_INT);
528 pFrame->pAddrCurrAP = (PIEEE_ADDR)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
529 + WLAN_REASSOCREQ_OFF_CURR_AP);
530 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCREQ_OFF_CURR_AP + sizeof(*(pFrame->pAddrCurrAP));
538 * Routine Description: (AP)
539 * Decode Reassociation Request
549 vMgrDecodeReassocRequest(
550 PWLAN_FR_REASSOCREQ pFrame
554 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
557 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
558 + WLAN_REASSOCREQ_OFF_CAP_INFO);
559 pFrame->pwListenInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
560 + WLAN_REASSOCREQ_OFF_LISTEN_INT);
561 pFrame->pAddrCurrAP = (PIEEE_ADDR)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
562 + WLAN_REASSOCREQ_OFF_CURR_AP);
564 // Information elements
565 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
566 + WLAN_REASSOCREQ_OFF_SSID);
568 while(((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) {
570 switch (pItem->byElementID){
572 if (pFrame->pSSID == NULL)
573 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
575 case WLAN_EID_SUPP_RATES:
576 if (pFrame->pSuppRates == NULL)
577 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
581 if (pFrame->pRSN == NULL) {
582 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
585 case WLAN_EID_RSN_WPA:
586 if (pFrame->pRSNWPA == NULL) {
587 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
588 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
592 case WLAN_EID_EXTSUPP_RATES:
593 if (pFrame->pExtSuppRates == NULL)
594 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
597 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in reassocreq decode.\n",
601 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
610 * Routine Description:
611 * Encode Probe Request
621 vMgrEncodeProbeRequest(
622 PWLAN_FR_PROBEREQ pFrame
625 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
626 pFrame->len = WLAN_HDR_ADDR3_LEN;
632 * Routine Description:
633 * Decode Probe Request
642 vMgrDecodeProbeRequest(
643 PWLAN_FR_PROBEREQ pFrame
648 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
650 // Information elements
651 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)));
653 while( ((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len) ) {
655 switch (pItem->byElementID) {
657 if (pFrame->pSSID == NULL)
658 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
661 case WLAN_EID_SUPP_RATES:
662 if (pFrame->pSuppRates == NULL)
663 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
666 case WLAN_EID_EXTSUPP_RATES:
667 if (pFrame->pExtSuppRates == NULL)
668 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
672 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Bad EID=%dd in probereq\n", pItem->byElementID);
676 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
684 * Routine Description:
685 * Encode Probe Response
695 vMgrEncodeProbeResponse(
696 PWLAN_FR_PROBERESP pFrame
699 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
702 pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
703 + WLAN_PROBERESP_OFF_TS);
704 pFrame->pwBeaconInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
705 + WLAN_PROBERESP_OFF_BCN_INT);
706 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
707 + WLAN_PROBERESP_OFF_CAP_INFO);
709 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_PROBERESP_OFF_CAP_INFO +
710 sizeof(*(pFrame->pwCapInfo));
719 * Routine Description:
720 * Decode Probe Response
729 vMgrDecodeProbeResponse(
730 PWLAN_FR_PROBERESP pFrame
736 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
739 pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
740 + WLAN_PROBERESP_OFF_TS);
741 pFrame->pwBeaconInterval = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
742 + WLAN_PROBERESP_OFF_BCN_INT);
743 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
744 + WLAN_PROBERESP_OFF_CAP_INFO);
746 // Information elements
747 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
748 + WLAN_PROBERESP_OFF_SSID);
750 while( ((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len) ) {
751 switch (pItem->byElementID) {
753 if (pFrame->pSSID == NULL)
754 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
756 case WLAN_EID_SUPP_RATES:
757 if (pFrame->pSuppRates == NULL)
758 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
760 case WLAN_EID_FH_PARMS:
762 case WLAN_EID_DS_PARMS:
763 if (pFrame->pDSParms == NULL)
764 pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;
766 case WLAN_EID_CF_PARMS:
767 if (pFrame->pCFParms == NULL)
768 pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;
770 case WLAN_EID_IBSS_PARMS:
771 if (pFrame->pIBSSParms == NULL)
772 pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem;
776 if (pFrame->pRSN == NULL) {
777 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
780 case WLAN_EID_RSN_WPA:
781 if (pFrame->pRSNWPA == NULL) {
782 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
783 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
787 if (pFrame->pERP == NULL)
788 pFrame->pERP = (PWLAN_IE_ERP)pItem;
790 case WLAN_EID_EXTSUPP_RATES:
791 if (pFrame->pExtSuppRates == NULL)
792 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
795 case WLAN_EID_COUNTRY: //7
796 if (pFrame->pIE_Country == NULL)
797 pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem;
800 case WLAN_EID_PWR_CONSTRAINT: //32
801 if (pFrame->pIE_PowerConstraint == NULL)
802 pFrame->pIE_PowerConstraint = (PWLAN_IE_PW_CONST)pItem;
805 case WLAN_EID_CH_SWITCH: //37
806 if (pFrame->pIE_CHSW == NULL)
807 pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem;
810 case WLAN_EID_QUIET: //40
811 if (pFrame->pIE_Quiet == NULL)
812 pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem;
815 case WLAN_EID_IBSS_DFS:
816 if (pFrame->pIE_IBSSDFS == NULL)
817 pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem;
821 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Bad EID=%dd in proberesp\n", pItem->byElementID);
825 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
833 * Routine Description:
834 * Encode Authentication frame
844 PWLAN_FR_AUTHEN pFrame
847 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
850 pFrame->pwAuthAlgorithm = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
851 + WLAN_AUTHEN_OFF_AUTH_ALG);
852 pFrame->pwAuthSequence = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
853 + WLAN_AUTHEN_OFF_AUTH_SEQ);
854 pFrame->pwStatus = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
855 + WLAN_AUTHEN_OFF_STATUS);
856 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_AUTHEN_OFF_STATUS + sizeof(*(pFrame->pwStatus));
864 * Routine Description:
865 * Decode Authentication
875 PWLAN_FR_AUTHEN pFrame
880 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
883 pFrame->pwAuthAlgorithm = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
884 + WLAN_AUTHEN_OFF_AUTH_ALG);
885 pFrame->pwAuthSequence = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
886 + WLAN_AUTHEN_OFF_AUTH_SEQ);
887 pFrame->pwStatus = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
888 + WLAN_AUTHEN_OFF_STATUS);
890 // Information elements
891 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
892 + WLAN_AUTHEN_OFF_CHALLENGE);
894 if ((((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_CHALLENGE)) {
895 pFrame->pChallenge = (PWLAN_IE_CHALLENGE)pItem;
904 * Routine Description:
905 * Encode Authentication
915 PWLAN_FR_DEAUTHEN pFrame
918 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
921 pFrame->pwReason = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
922 + WLAN_DEAUTHEN_OFF_REASON);
923 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DEAUTHEN_OFF_REASON + sizeof(*(pFrame->pwReason));
931 * Routine Description:
932 * Decode Deauthentication
942 PWLAN_FR_DEAUTHEN pFrame
945 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
948 pFrame->pwReason = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
949 + WLAN_DEAUTHEN_OFF_REASON);
957 * Routine Description: (AP)
958 * Encode Reassociation Response
967 vMgrEncodeReassocResponse(
968 PWLAN_FR_REASSOCRESP pFrame
971 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
974 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
975 + WLAN_REASSOCRESP_OFF_CAP_INFO);
976 pFrame->pwStatus = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
977 + WLAN_REASSOCRESP_OFF_STATUS);
978 pFrame->pwAid = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
979 + WLAN_REASSOCRESP_OFF_AID);
981 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCRESP_OFF_AID + sizeof(*(pFrame->pwAid));
989 * Routine Description:
990 * Decode Reassociation Response
1000 vMgrDecodeReassocResponse(
1001 PWLAN_FR_REASSOCRESP pFrame
1006 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
1009 pFrame->pwCapInfo = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
1010 + WLAN_REASSOCRESP_OFF_CAP_INFO);
1011 pFrame->pwStatus = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
1012 + WLAN_REASSOCRESP_OFF_STATUS);
1013 pFrame->pwAid = (unsigned short *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
1014 + WLAN_REASSOCRESP_OFF_AID);
1016 //Information elements
1017 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
1018 + WLAN_REASSOCRESP_OFF_SUPP_RATES);
1020 pItem = (PWLAN_IE)(pFrame->pSuppRates);
1021 pItem = (PWLAN_IE)(((unsigned char *)pItem) + 2 + pItem->len);
1023 if ((((unsigned char *)pItem) < (pFrame->pBuf + pFrame->len)) &&
1024 (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) {
1025 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;