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 managment 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 IN 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
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
103 + WLAN_BEACON_OFF_BCN_INT
);
104 pFrame
->pwCapInfo
= (PWORD
)(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 IN 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
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
137 + WLAN_BEACON_OFF_BCN_INT
);
138 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
139 + WLAN_BEACON_OFF_CAPINFO
);
141 // Information elements
142 pItem
= (PWLAN_IE
)((PBYTE
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
)))
143 + WLAN_BEACON_OFF_SSID
);
144 while( ((PBYTE
)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
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
235 * Routine Description:
247 IN PWLAN_FR_IBSSATIM pFrame
250 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
251 pFrame
->len
= WLAN_HDR_ADDR3_LEN
;
259 * Routine Description:
270 IN PWLAN_FR_IBSSATIM pFrame
273 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
281 * Routine Description:
282 * Encode Disassociation
291 vMgrEncodeDisassociation(
292 IN PWLAN_FR_DISASSOC pFrame
295 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
299 pFrame
->pwReason
= (PWORD
)(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 IN PWLAN_FR_DISASSOC pFrame
323 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
326 pFrame
->pwReason
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
327 + WLAN_DISASSOC_OFF_REASON
);
334 * Routine Description:
335 * Encode Association Request
345 vMgrEncodeAssocRequest(
346 IN PWLAN_FR_ASSOCREQ pFrame
349 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
351 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
352 + WLAN_ASSOCREQ_OFF_CAP_INFO
);
353 pFrame
->pwListenInterval
= (PWORD
)(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 IN PWLAN_FR_ASSOCREQ pFrame
378 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
380 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
381 + WLAN_ASSOCREQ_OFF_CAP_INFO
);
382 pFrame
->pwListenInterval
= (PWORD
)(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 (((PBYTE
)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
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
428 * Routine Description: (AP)
429 * Encode Association Response
438 vMgrEncodeAssocResponse(
439 IN PWLAN_FR_ASSOCRESP pFrame
442 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
445 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
446 + WLAN_ASSOCRESP_OFF_CAP_INFO
);
447 pFrame
->pwStatus
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
448 + WLAN_ASSOCRESP_OFF_STATUS
);
449 pFrame
->pwAid
= (PWORD
)(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 IN PWLAN_FR_ASSOCRESP pFrame
476 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
479 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
480 + WLAN_ASSOCRESP_OFF_CAP_INFO
);
481 pFrame
->pwStatus
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
482 + WLAN_ASSOCRESP_OFF_STATUS
);
483 pFrame
->pwAid
= (PWORD
)(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
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
493 if ((((PBYTE
)pItem
) < (pFrame
->pBuf
+ pFrame
->len
)) && (pItem
->byElementID
== WLAN_EID_EXTSUPP_RATES
)) {
494 pFrame
->pExtSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
495 DBG_PRT(MSG_LEVEL_DEBUG
, KERN_INFO
"pFrame->pExtSuppRates=[%p].\n", pItem
);
498 pFrame
->pExtSuppRates
= NULL
;
506 * Routine Description:
507 * Encode Reassociation Request
516 vMgrEncodeReassocRequest(
517 IN PWLAN_FR_REASSOCREQ pFrame
520 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
523 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
524 + WLAN_REASSOCREQ_OFF_CAP_INFO
);
525 pFrame
->pwListenInterval
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
526 + WLAN_REASSOCREQ_OFF_LISTEN_INT
);
527 pFrame
->pAddrCurrAP
= (PIEEE_ADDR
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
528 + WLAN_REASSOCREQ_OFF_CURR_AP
);
529 pFrame
->len
= WLAN_HDR_ADDR3_LEN
+ WLAN_REASSOCREQ_OFF_CURR_AP
+ sizeof(*(pFrame
->pAddrCurrAP
));
537 * Routine Description: (AP)
538 * Decode Reassociation Request
548 vMgrDecodeReassocRequest(
549 IN PWLAN_FR_REASSOCREQ pFrame
553 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
556 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
557 + WLAN_REASSOCREQ_OFF_CAP_INFO
);
558 pFrame
->pwListenInterval
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
559 + WLAN_REASSOCREQ_OFF_LISTEN_INT
);
560 pFrame
->pAddrCurrAP
= (PIEEE_ADDR
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
561 + WLAN_REASSOCREQ_OFF_CURR_AP
);
563 // Information elements
564 pItem
= (PWLAN_IE
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
565 + WLAN_REASSOCREQ_OFF_SSID
);
567 while(((PBYTE
)pItem
) < (pFrame
->pBuf
+ pFrame
->len
)) {
569 switch (pItem
->byElementID
){
571 if (pFrame
->pSSID
== NULL
)
572 pFrame
->pSSID
= (PWLAN_IE_SSID
)pItem
;
574 case WLAN_EID_SUPP_RATES
:
575 if (pFrame
->pSuppRates
== NULL
)
576 pFrame
->pSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
580 if (pFrame
->pRSN
== NULL
) {
581 pFrame
->pRSN
= (PWLAN_IE_RSN
)pItem
;
584 case WLAN_EID_RSN_WPA
:
585 if (pFrame
->pRSNWPA
== NULL
) {
586 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT
)pItem
) == TRUE
)
587 pFrame
->pRSNWPA
= (PWLAN_IE_RSN_EXT
)pItem
;
591 case WLAN_EID_EXTSUPP_RATES
:
592 if (pFrame
->pExtSuppRates
== NULL
)
593 pFrame
->pExtSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
596 DBG_PRT(MSG_LEVEL_DEBUG
, KERN_INFO
"Unrecognized EID=%dd in reassocreq decode.\n",
600 pItem
= (PWLAN_IE
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
609 * Routine Description:
610 * Encode Probe Request
620 vMgrEncodeProbeRequest(
621 IN PWLAN_FR_PROBEREQ pFrame
624 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
625 pFrame
->len
= WLAN_HDR_ADDR3_LEN
;
631 * Routine Description:
632 * Decode Probe Request
641 vMgrDecodeProbeRequest(
642 IN PWLAN_FR_PROBEREQ pFrame
647 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
649 // Information elements
650 pItem
= (PWLAN_IE
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
)));
652 while( ((PBYTE
)pItem
) < (pFrame
->pBuf
+ pFrame
->len
) ) {
654 switch (pItem
->byElementID
) {
656 if (pFrame
->pSSID
== NULL
)
657 pFrame
->pSSID
= (PWLAN_IE_SSID
)pItem
;
660 case WLAN_EID_SUPP_RATES
:
661 if (pFrame
->pSuppRates
== NULL
)
662 pFrame
->pSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
665 case WLAN_EID_EXTSUPP_RATES
:
666 if (pFrame
->pExtSuppRates
== NULL
)
667 pFrame
->pExtSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
671 DBG_PRT(MSG_LEVEL_DEBUG
, KERN_INFO
"Bad EID=%dd in probereq\n", pItem
->byElementID
);
675 pItem
= (PWLAN_IE
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
683 * Routine Description:
684 * Encode Probe Response
694 vMgrEncodeProbeResponse(
695 IN PWLAN_FR_PROBERESP pFrame
698 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
701 pFrame
->pqwTimestamp
= (PQWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
702 + WLAN_PROBERESP_OFF_TS
);
703 pFrame
->pwBeaconInterval
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
704 + WLAN_PROBERESP_OFF_BCN_INT
);
705 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
706 + WLAN_PROBERESP_OFF_CAP_INFO
);
708 pFrame
->len
= WLAN_HDR_ADDR3_LEN
+ WLAN_PROBERESP_OFF_CAP_INFO
+
709 sizeof(*(pFrame
->pwCapInfo
));
718 * Routine Description:
719 * Decode Probe Response
728 vMgrDecodeProbeResponse(
729 IN PWLAN_FR_PROBERESP pFrame
735 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
738 pFrame
->pqwTimestamp
= (PQWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
739 + WLAN_PROBERESP_OFF_TS
);
740 pFrame
->pwBeaconInterval
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
741 + WLAN_PROBERESP_OFF_BCN_INT
);
742 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
743 + WLAN_PROBERESP_OFF_CAP_INFO
);
745 // Information elements
746 pItem
= (PWLAN_IE
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
747 + WLAN_PROBERESP_OFF_SSID
);
749 while( ((PBYTE
)pItem
) < (pFrame
->pBuf
+ pFrame
->len
) ) {
750 switch (pItem
->byElementID
) {
752 if (pFrame
->pSSID
== NULL
)
753 pFrame
->pSSID
= (PWLAN_IE_SSID
)pItem
;
755 case WLAN_EID_SUPP_RATES
:
756 if (pFrame
->pSuppRates
== NULL
)
757 pFrame
->pSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
759 case WLAN_EID_FH_PARMS
:
761 case WLAN_EID_DS_PARMS
:
762 if (pFrame
->pDSParms
== NULL
)
763 pFrame
->pDSParms
= (PWLAN_IE_DS_PARMS
)pItem
;
765 case WLAN_EID_CF_PARMS
:
766 if (pFrame
->pCFParms
== NULL
)
767 pFrame
->pCFParms
= (PWLAN_IE_CF_PARMS
)pItem
;
769 case WLAN_EID_IBSS_PARMS
:
770 if (pFrame
->pIBSSParms
== NULL
)
771 pFrame
->pIBSSParms
= (PWLAN_IE_IBSS_PARMS
)pItem
;
775 if (pFrame
->pRSN
== NULL
) {
776 pFrame
->pRSN
= (PWLAN_IE_RSN
)pItem
;
779 case WLAN_EID_RSN_WPA
:
780 if (pFrame
->pRSNWPA
== NULL
) {
781 if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT
)pItem
) == TRUE
)
782 pFrame
->pRSNWPA
= (PWLAN_IE_RSN_EXT
)pItem
;
786 if (pFrame
->pERP
== NULL
)
787 pFrame
->pERP
= (PWLAN_IE_ERP
)pItem
;
789 case WLAN_EID_EXTSUPP_RATES
:
790 if (pFrame
->pExtSuppRates
== NULL
)
791 pFrame
->pExtSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;
794 case WLAN_EID_COUNTRY
: //7
795 if (pFrame
->pIE_Country
== NULL
)
796 pFrame
->pIE_Country
= (PWLAN_IE_COUNTRY
)pItem
;
799 case WLAN_EID_PWR_CONSTRAINT
: //32
800 if (pFrame
->pIE_PowerConstraint
== NULL
)
801 pFrame
->pIE_PowerConstraint
= (PWLAN_IE_PW_CONST
)pItem
;
804 case WLAN_EID_CH_SWITCH
: //37
805 if (pFrame
->pIE_CHSW
== NULL
)
806 pFrame
->pIE_CHSW
= (PWLAN_IE_CH_SW
)pItem
;
809 case WLAN_EID_QUIET
: //40
810 if (pFrame
->pIE_Quiet
== NULL
)
811 pFrame
->pIE_Quiet
= (PWLAN_IE_QUIET
)pItem
;
814 case WLAN_EID_IBSS_DFS
:
815 if (pFrame
->pIE_IBSSDFS
== NULL
)
816 pFrame
->pIE_IBSSDFS
= (PWLAN_IE_IBSS_DFS
)pItem
;
820 DBG_PRT(MSG_LEVEL_DEBUG
, KERN_INFO
"Bad EID=%dd in proberesp\n", pItem
->byElementID
);
824 pItem
= (PWLAN_IE
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
832 * Routine Description:
833 * Encode Authentication frame
843 IN PWLAN_FR_AUTHEN pFrame
846 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
849 pFrame
->pwAuthAlgorithm
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
850 + WLAN_AUTHEN_OFF_AUTH_ALG
);
851 pFrame
->pwAuthSequence
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
852 + WLAN_AUTHEN_OFF_AUTH_SEQ
);
853 pFrame
->pwStatus
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
854 + WLAN_AUTHEN_OFF_STATUS
);
855 pFrame
->len
= WLAN_HDR_ADDR3_LEN
+ WLAN_AUTHEN_OFF_STATUS
+ sizeof(*(pFrame
->pwStatus
));
863 * Routine Description:
864 * Decode Authentication
874 IN PWLAN_FR_AUTHEN pFrame
879 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
882 pFrame
->pwAuthAlgorithm
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
883 + WLAN_AUTHEN_OFF_AUTH_ALG
);
884 pFrame
->pwAuthSequence
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
885 + WLAN_AUTHEN_OFF_AUTH_SEQ
);
886 pFrame
->pwStatus
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
887 + WLAN_AUTHEN_OFF_STATUS
);
889 // Information elements
890 pItem
= (PWLAN_IE
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
891 + WLAN_AUTHEN_OFF_CHALLENGE
);
893 if ((((PBYTE
)pItem
) < (pFrame
->pBuf
+ pFrame
->len
)) && (pItem
->byElementID
== WLAN_EID_CHALLENGE
)) {
894 pFrame
->pChallenge
= (PWLAN_IE_CHALLENGE
)pItem
;
903 * Routine Description:
904 * Encode Authentication
914 IN PWLAN_FR_DEAUTHEN pFrame
917 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
920 pFrame
->pwReason
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
921 + WLAN_DEAUTHEN_OFF_REASON
);
922 pFrame
->len
= WLAN_HDR_ADDR3_LEN
+ WLAN_DEAUTHEN_OFF_REASON
+ sizeof(*(pFrame
->pwReason
));
930 * Routine Description:
931 * Decode Deauthentication
941 IN PWLAN_FR_DEAUTHEN pFrame
944 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
947 pFrame
->pwReason
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
948 + WLAN_DEAUTHEN_OFF_REASON
);
956 * Routine Description: (AP)
957 * Encode Reassociation Response
966 vMgrEncodeReassocResponse(
967 IN PWLAN_FR_REASSOCRESP pFrame
970 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
973 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
974 + WLAN_REASSOCRESP_OFF_CAP_INFO
);
975 pFrame
->pwStatus
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
976 + WLAN_REASSOCRESP_OFF_STATUS
);
977 pFrame
->pwAid
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
978 + WLAN_REASSOCRESP_OFF_AID
);
980 pFrame
->len
= WLAN_HDR_ADDR3_LEN
+ WLAN_REASSOCRESP_OFF_AID
+ sizeof(*(pFrame
->pwAid
));
988 * Routine Description:
989 * Decode Reassociation Response
999 vMgrDecodeReassocResponse(
1000 IN PWLAN_FR_REASSOCRESP pFrame
1005 pFrame
->pHdr
= (PUWLAN_80211HDR
)pFrame
->pBuf
;
1008 pFrame
->pwCapInfo
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
1009 + WLAN_REASSOCRESP_OFF_CAP_INFO
);
1010 pFrame
->pwStatus
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
1011 + WLAN_REASSOCRESP_OFF_STATUS
);
1012 pFrame
->pwAid
= (PWORD
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
1013 + WLAN_REASSOCRESP_OFF_AID
);
1015 //Information elements
1016 pFrame
->pSuppRates
= (PWLAN_IE_SUPP_RATES
)(WLAN_HDR_A3_DATA_PTR(&(pFrame
->pHdr
->sA3
))
1017 + WLAN_REASSOCRESP_OFF_SUPP_RATES
);
1019 pItem
= (PWLAN_IE
)(pFrame
->pSuppRates
);
1020 pItem
= (PWLAN_IE
)(((PBYTE
)pItem
) + 2 + pItem
->len
);
1022 if ((((PBYTE
)pItem
) < (pFrame
->pBuf
+ pFrame
->len
)) && (pItem
->byElementID
== WLAN_EID_EXTSUPP_RATES
)) {
1023 pFrame
->pExtSuppRates
= (PWLAN_IE_SUPP_RATES
)pItem
;