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
;