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 =
101 (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
103 pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
104 + WLAN_BEACON_OFF_BCN_INT);
105 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
106 + WLAN_BEACON_OFF_CAPINFO);
108 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_BEACON_OFF_SSID;
115 * Routine Description:
116 * Decode Beacon frame body offset
127 PWLAN_FR_BEACON pFrame
132 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
135 pFrame->pqwTimestamp =
136 (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
138 pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
139 + WLAN_BEACON_OFF_BCN_INT);
140 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
141 + WLAN_BEACON_OFF_CAPINFO);
143 /* Information elements */
144 pItem = (PWLAN_IE)((PBYTE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)))
145 + WLAN_BEACON_OFF_SSID);
146 while (((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) {
148 switch (pItem->byElementID) {
150 if (pFrame->pSSID == NULL)
151 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
153 case WLAN_EID_SUPP_RATES:
154 if (pFrame->pSuppRates == NULL)
155 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
157 case WLAN_EID_FH_PARMS:
158 /* pFrame->pFHParms = (PWLAN_IE_FH_PARMS)pItem; */
160 case WLAN_EID_DS_PARMS:
161 if (pFrame->pDSParms == NULL)
162 pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;
164 case WLAN_EID_CF_PARMS:
165 if (pFrame->pCFParms == NULL)
166 pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;
168 case WLAN_EID_IBSS_PARMS:
169 if (pFrame->pIBSSParms == NULL)
170 pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem;
173 if (pFrame->pTIM == NULL)
174 pFrame->pTIM = (PWLAN_IE_TIM)pItem;
178 if (pFrame->pRSN == NULL)
179 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
181 case WLAN_EID_RSN_WPA:
182 if (pFrame->pRSNWPA == NULL) {
183 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
184 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
189 if (pFrame->pERP == NULL)
190 pFrame->pERP = (PWLAN_IE_ERP)pItem;
192 case WLAN_EID_EXTSUPP_RATES:
193 if (pFrame->pExtSuppRates == NULL)
194 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
197 case WLAN_EID_COUNTRY: /* 7 */
198 if (pFrame->pIE_Country == NULL)
199 pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem;
202 case WLAN_EID_PWR_CONSTRAINT: /* 32 */
203 if (pFrame->pIE_PowerConstraint == NULL)
204 pFrame->pIE_PowerConstraint = (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, KERN_INFO "Unrecognized EID=%dd in beacon decode.\n", pItem->byElementID);
227 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
234 * Routine Description:
246 PWLAN_FR_IBSSATIM pFrame
249 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
250 pFrame->len = WLAN_HDR_ADDR3_LEN;
256 * Routine Description:
267 PWLAN_FR_IBSSATIM pFrame
270 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
276 * Routine Description:
277 * Encode Disassociation
286 vMgrEncodeDisassociation(
287 PWLAN_FR_DISASSOC pFrame
290 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
294 pFrame->pwReason = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
295 + WLAN_DISASSOC_OFF_REASON);
296 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DISASSOC_OFF_REASON + sizeof(*(pFrame->pwReason));
302 * Routine Description:
303 * Decode Disassociation
312 vMgrDecodeDisassociation(
313 PWLAN_FR_DISASSOC pFrame
316 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
319 pFrame->pwReason = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
320 + WLAN_DISASSOC_OFF_REASON);
325 * Routine Description:
326 * Encode Association Request
336 vMgrEncodeAssocRequest(
337 PWLAN_FR_ASSOCREQ pFrame
340 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
342 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
343 + WLAN_ASSOCREQ_OFF_CAP_INFO);
344 pFrame->pwListenInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
345 + WLAN_ASSOCREQ_OFF_LISTEN_INT);
346 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCREQ_OFF_LISTEN_INT + sizeof(*(pFrame->pwListenInterval));
352 * Routine Description: (AP)
353 * Decode Association Request
362 vMgrDecodeAssocRequest(
363 PWLAN_FR_ASSOCREQ pFrame
368 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
370 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
371 + WLAN_ASSOCREQ_OFF_CAP_INFO);
372 pFrame->pwListenInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
373 + WLAN_ASSOCREQ_OFF_LISTEN_INT);
375 /* Information elements */
376 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
377 + WLAN_ASSOCREQ_OFF_SSID);
379 while (((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) {
380 switch (pItem->byElementID) {
382 if (pFrame->pSSID == NULL)
383 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
385 case WLAN_EID_SUPP_RATES:
386 if (pFrame->pSuppRates == NULL)
387 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
391 if (pFrame->pRSN == NULL)
392 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
394 case WLAN_EID_RSN_WPA:
395 if (pFrame->pRSNWPA == NULL) {
396 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
397 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
400 case WLAN_EID_EXTSUPP_RATES:
401 if (pFrame->pExtSuppRates == NULL)
402 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
406 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in assocreq decode.\n",
410 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
416 * Routine Description: (AP)
417 * Encode Association Response
426 vMgrEncodeAssocResponse(
427 PWLAN_FR_ASSOCRESP pFrame
430 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
433 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
434 + WLAN_ASSOCRESP_OFF_CAP_INFO);
435 pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
436 + WLAN_ASSOCRESP_OFF_STATUS);
437 pFrame->pwAid = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
438 + WLAN_ASSOCRESP_OFF_AID);
439 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCRESP_OFF_AID
440 + sizeof(*(pFrame->pwAid));
446 * Routine Description:
447 * Decode Association Response
456 vMgrDecodeAssocResponse(
457 PWLAN_FR_ASSOCRESP pFrame
462 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
465 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
466 + WLAN_ASSOCRESP_OFF_CAP_INFO);
467 pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
468 + WLAN_ASSOCRESP_OFF_STATUS);
469 pFrame->pwAid = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
470 + WLAN_ASSOCRESP_OFF_AID);
472 /* Information elements */
473 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
474 + WLAN_ASSOCRESP_OFF_SUPP_RATES);
476 pItem = (PWLAN_IE)(pFrame->pSuppRates);
477 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
479 if ((((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) {
480 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
481 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pFrame->pExtSuppRates=[%p].\n", pItem);
483 pFrame->pExtSuppRates = NULL;
489 * Routine Description:
490 * Encode Reassociation Request
499 vMgrEncodeReassocRequest(
500 PWLAN_FR_REASSOCREQ pFrame
503 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
506 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
507 + WLAN_REASSOCREQ_OFF_CAP_INFO);
508 pFrame->pwListenInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
509 + WLAN_REASSOCREQ_OFF_LISTEN_INT);
510 pFrame->pAddrCurrAP = (PIEEE_ADDR)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
511 + WLAN_REASSOCREQ_OFF_CURR_AP);
512 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCREQ_OFF_CURR_AP + sizeof(*(pFrame->pAddrCurrAP));
518 * Routine Description: (AP)
519 * Decode Reassociation Request
529 vMgrDecodeReassocRequest(
530 PWLAN_FR_REASSOCREQ pFrame
534 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
537 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
538 + WLAN_REASSOCREQ_OFF_CAP_INFO);
539 pFrame->pwListenInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
540 + WLAN_REASSOCREQ_OFF_LISTEN_INT);
541 pFrame->pAddrCurrAP = (PIEEE_ADDR)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
542 + WLAN_REASSOCREQ_OFF_CURR_AP);
544 /* Information elements */
545 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
546 + WLAN_REASSOCREQ_OFF_SSID);
548 while (((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) {
550 switch (pItem->byElementID) {
552 if (pFrame->pSSID == NULL)
553 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
555 case WLAN_EID_SUPP_RATES:
556 if (pFrame->pSuppRates == NULL)
557 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
561 if (pFrame->pRSN == NULL)
562 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
564 case WLAN_EID_RSN_WPA:
565 if (pFrame->pRSNWPA == NULL)
566 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
567 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
570 case WLAN_EID_EXTSUPP_RATES:
571 if (pFrame->pExtSuppRates == NULL)
572 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
575 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in reassocreq decode.\n",
579 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
587 * Routine Description:
588 * Encode Probe Request
598 vMgrEncodeProbeRequest(
599 PWLAN_FR_PROBEREQ pFrame
602 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
603 pFrame->len = WLAN_HDR_ADDR3_LEN;
608 * Routine Description:
609 * Decode Probe Request
618 vMgrDecodeProbeRequest(
619 PWLAN_FR_PROBEREQ pFrame
624 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
626 /* Information elements */
627 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)));
629 while (((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) {
631 switch (pItem->byElementID) {
633 if (pFrame->pSSID == NULL)
634 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
637 case WLAN_EID_SUPP_RATES:
638 if (pFrame->pSuppRates == NULL)
639 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
642 case WLAN_EID_EXTSUPP_RATES:
643 if (pFrame->pExtSuppRates == NULL)
644 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
648 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Bad EID=%dd in probereq\n", pItem->byElementID);
652 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
659 * Routine Description:
660 * Encode Probe Response
670 vMgrEncodeProbeResponse(
671 PWLAN_FR_PROBERESP pFrame
674 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
677 pFrame->pqwTimestamp =
678 (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
679 WLAN_PROBERESP_OFF_TS);
680 pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
681 + WLAN_PROBERESP_OFF_BCN_INT);
682 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
683 + WLAN_PROBERESP_OFF_CAP_INFO);
685 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_PROBERESP_OFF_CAP_INFO +
686 sizeof(*(pFrame->pwCapInfo));
693 * Routine Description:
694 * Decode Probe Response
703 vMgrDecodeProbeResponse(
704 PWLAN_FR_PROBERESP pFrame
710 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
713 pFrame->pqwTimestamp =
714 (u64 *)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)) +
715 WLAN_PROBERESP_OFF_TS);
716 pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
717 + WLAN_PROBERESP_OFF_BCN_INT);
718 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
719 + WLAN_PROBERESP_OFF_CAP_INFO);
721 /* Information elements */
722 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
723 + WLAN_PROBERESP_OFF_SSID);
725 while (((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) {
726 switch (pItem->byElementID) {
728 if (pFrame->pSSID == NULL)
729 pFrame->pSSID = (PWLAN_IE_SSID)pItem;
731 case WLAN_EID_SUPP_RATES:
732 if (pFrame->pSuppRates == NULL)
733 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
735 case WLAN_EID_FH_PARMS:
737 case WLAN_EID_DS_PARMS:
738 if (pFrame->pDSParms == NULL)
739 pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;
741 case WLAN_EID_CF_PARMS:
742 if (pFrame->pCFParms == NULL)
743 pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;
745 case WLAN_EID_IBSS_PARMS:
746 if (pFrame->pIBSSParms == NULL)
747 pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem;
751 if (pFrame->pRSN == NULL)
752 pFrame->pRSN = (PWLAN_IE_RSN)pItem;
754 case WLAN_EID_RSN_WPA:
755 if (pFrame->pRSNWPA == NULL) {
756 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == true)
757 pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;
761 if (pFrame->pERP == NULL)
762 pFrame->pERP = (PWLAN_IE_ERP)pItem;
764 case WLAN_EID_EXTSUPP_RATES:
765 if (pFrame->pExtSuppRates == NULL)
766 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;
769 case WLAN_EID_COUNTRY: /* 7 */
770 if (pFrame->pIE_Country == NULL)
771 pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem;
774 case WLAN_EID_PWR_CONSTRAINT: /* 32 */
775 if (pFrame->pIE_PowerConstraint == NULL)
776 pFrame->pIE_PowerConstraint = (PWLAN_IE_PW_CONST)pItem;
779 case WLAN_EID_CH_SWITCH: /* 37 */
780 if (pFrame->pIE_CHSW == NULL)
781 pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem;
784 case WLAN_EID_QUIET: /* 40 */
785 if (pFrame->pIE_Quiet == NULL)
786 pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem;
789 case WLAN_EID_IBSS_DFS:
790 if (pFrame->pIE_IBSSDFS == NULL)
791 pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem;
795 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Bad EID=%dd in proberesp\n", pItem->byElementID);
799 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
806 * Routine Description:
807 * Encode Authentication frame
817 PWLAN_FR_AUTHEN pFrame
820 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
823 pFrame->pwAuthAlgorithm = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
824 + WLAN_AUTHEN_OFF_AUTH_ALG);
825 pFrame->pwAuthSequence = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
826 + WLAN_AUTHEN_OFF_AUTH_SEQ);
827 pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
828 + WLAN_AUTHEN_OFF_STATUS);
829 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_AUTHEN_OFF_STATUS + sizeof(*(pFrame->pwStatus));
835 * Routine Description:
836 * Decode Authentication
846 PWLAN_FR_AUTHEN pFrame
851 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
854 pFrame->pwAuthAlgorithm = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
855 + WLAN_AUTHEN_OFF_AUTH_ALG);
856 pFrame->pwAuthSequence = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
857 + WLAN_AUTHEN_OFF_AUTH_SEQ);
858 pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
859 + WLAN_AUTHEN_OFF_STATUS);
861 /* Information elements */
862 pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
863 + WLAN_AUTHEN_OFF_CHALLENGE);
865 if ((((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_CHALLENGE))
866 pFrame->pChallenge = (PWLAN_IE_CHALLENGE)pItem;
872 * Routine Description:
873 * Encode Authentication
883 PWLAN_FR_DEAUTHEN pFrame
886 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
889 pFrame->pwReason = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
890 + WLAN_DEAUTHEN_OFF_REASON);
891 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DEAUTHEN_OFF_REASON + sizeof(*(pFrame->pwReason));
897 * Routine Description:
898 * Decode Deauthentication
908 PWLAN_FR_DEAUTHEN pFrame
911 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
914 pFrame->pwReason = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
915 + WLAN_DEAUTHEN_OFF_REASON);
921 * Routine Description: (AP)
922 * Encode Reassociation Response
931 vMgrEncodeReassocResponse(
932 PWLAN_FR_REASSOCRESP pFrame
935 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
938 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
939 + WLAN_REASSOCRESP_OFF_CAP_INFO);
940 pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
941 + WLAN_REASSOCRESP_OFF_STATUS);
942 pFrame->pwAid = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
943 + WLAN_REASSOCRESP_OFF_AID);
945 pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_REASSOCRESP_OFF_AID + sizeof(*(pFrame->pwAid));
951 * Routine Description:
952 * Decode Reassociation Response
962 vMgrDecodeReassocResponse(
963 PWLAN_FR_REASSOCRESP pFrame
968 pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;
971 pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
972 + WLAN_REASSOCRESP_OFF_CAP_INFO);
973 pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
974 + WLAN_REASSOCRESP_OFF_STATUS);
975 pFrame->pwAid = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
976 + WLAN_REASSOCRESP_OFF_AID);
978 /* Information elements */
979 pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))
980 + WLAN_REASSOCRESP_OFF_SUPP_RATES);
982 pItem = (PWLAN_IE)(pFrame->pSuppRates);
983 pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);
985 if ((((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_EXTSUPP_RATES))
986 pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;