Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
staging
vt6656
80211mgr.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3
* All rights reserved.
4
*
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.
9
*
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.
14
*
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.
18
*
19
* File: 80211mgr.c
20
*
21
* Purpose: Handles the 802.11 management support functions
22
*
23
* Author: Lyndon Chen
24
*
25
* Date: May 8, 2002
26
*
27
* 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
50
*
51
* Revision History:
52
*
53
*/
54
55
#include "
tmacro.h
"
56
#include "
tether.h
"
57
#include "
80211mgr.h
"
58
#include "
80211hdr.h
"
59
#include "
device.h
"
60
#include "
wpa.h
"
61
62
/*--------------------- Static Definitions -------------------------*/
63
64
65
66
/*--------------------- Static Classes ----------------------------*/
67
68
/*--------------------- Static Variables --------------------------*/
69
70
static
int
msglevel =
MSG_LEVEL_INFO
;
71
/*static int msglevel =MSG_LEVEL_DEBUG;*/
72
/*--------------------- Static Functions --------------------------*/
73
74
75
76
/*--------------------- Export Variables --------------------------*/
77
78
79
/*--------------------- Export Functions --------------------------*/
80
81
82
/*+
83
*
84
* Routine Description:
85
* Encode Beacon frame body offset
86
*
87
* Return Value:
88
* None.
89
*
90
-*/
91
92
void
93
vMgrEncodeBeacon
(
94
PWLAN_FR_BEACON
pFrame
95
)
96
{
97
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
98
99
/* Fixed Fields */
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
);
106
107
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_BEACON_OFF_SSID
;
108
109
return
;
110
}
111
112
/*+
113
*
114
* Routine Description:
115
* Decode Beacon frame body offset
116
*
117
*
118
* Return Value:
119
* None.
120
*
121
-*/
122
123
124
void
125
vMgrDecodeBeacon
(
126
PWLAN_FR_BEACON
pFrame
127
)
128
{
129
PWLAN_IE
pItem;
130
131
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
132
133
/* Fixed Fields */
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
);
140
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
)) {
145
146
switch
(pItem->byElementID) {
147
case
WLAN_EID_SSID
:
148
if
(pFrame->
pSSID
==
NULL
)
149
pFrame->
pSSID
= (
PWLAN_IE_SSID
)pItem;
150
break
;
151
case
WLAN_EID_SUPP_RATES
:
152
if
(pFrame->
pSuppRates
==
NULL
)
153
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
154
break
;
155
case
WLAN_EID_FH_PARMS
:
156
/* pFrame->pFHParms = (PWLAN_IE_FH_PARMS)pItem; */
157
break
;
158
case
WLAN_EID_DS_PARMS
:
159
if
(pFrame->
pDSParms
==
NULL
)
160
pFrame->
pDSParms
= (
PWLAN_IE_DS_PARMS
)pItem;
161
break
;
162
case
WLAN_EID_CF_PARMS
:
163
if
(pFrame->
pCFParms
==
NULL
)
164
pFrame->
pCFParms
= (
PWLAN_IE_CF_PARMS
)pItem;
165
break
;
166
case
WLAN_EID_IBSS_PARMS
:
167
if
(pFrame->
pIBSSParms
==
NULL
)
168
pFrame->
pIBSSParms
= (
PWLAN_IE_IBSS_PARMS
)pItem;
169
break
;
170
case
WLAN_EID_TIM
:
171
if
(pFrame->
pTIM
==
NULL
)
172
pFrame->
pTIM
= (
PWLAN_IE_TIM
)pItem;
173
break
;
174
175
case
WLAN_EID_RSN
:
176
if
(pFrame->
pRSN
==
NULL
)
177
pFrame->
pRSN
= (
PWLAN_IE_RSN
)pItem;
178
break
;
179
case
WLAN_EID_RSN_WPA
:
180
if
(pFrame->
pRSNWPA
==
NULL
) {
181
if
(
WPAb_Is_RSN
((
PWLAN_IE_RSN_EXT
)pItem) ==
TRUE
)
182
pFrame->
pRSNWPA
= (
PWLAN_IE_RSN_EXT
)pItem;
183
}
184
break
;
185
186
case
WLAN_EID_ERP
:
187
if
(pFrame->
pERP
==
NULL
)
188
pFrame->
pERP
= (
PWLAN_IE_ERP
)pItem;
189
break
;
190
case
WLAN_EID_EXTSUPP_RATES
:
191
if
(pFrame->
pExtSuppRates
==
NULL
)
192
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
193
break
;
194
195
case
WLAN_EID_COUNTRY
:
/* 7 */
196
if
(pFrame->
pIE_Country
==
NULL
)
197
pFrame->
pIE_Country
= (
PWLAN_IE_COUNTRY
)pItem;
198
break
;
199
200
case
WLAN_EID_PWR_CONSTRAINT
:
/* 32 */
201
if
(pFrame->
pIE_PowerConstraint
==
NULL
)
202
pFrame->
pIE_PowerConstraint
= (
PWLAN_IE_PW_CONST
)pItem;
203
break
;
204
205
case
WLAN_EID_CH_SWITCH
:
/* 37 */
206
if
(pFrame->
pIE_CHSW
==
NULL
)
207
pFrame->
pIE_CHSW
= (
PWLAN_IE_CH_SW
)pItem;
208
break
;
209
210
case
WLAN_EID_QUIET
:
/* 40 */
211
if
(pFrame->
pIE_Quiet
==
NULL
)
212
pFrame->
pIE_Quiet
= (
PWLAN_IE_QUIET
)pItem;
213
break
;
214
215
case
WLAN_EID_IBSS_DFS
:
216
if
(pFrame->
pIE_IBSSDFS
==
NULL
)
217
pFrame->
pIE_IBSSDFS
= (
PWLAN_IE_IBSS_DFS
)pItem;
218
break
;
219
220
default
:
221
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Unrecognized EID=%dd in beacon decode.\n"
, pItem->byElementID);
222
break
;
223
224
}
225
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
226
}
227
}
228
229
230
/*+
231
*
232
* Routine Description:
233
* Encode IBSS ATIM
234
*
235
*
236
* Return Value:
237
* None.
238
*
239
-*/
240
241
242
void
243
vMgrEncodeIBSSATIM
(
244
PWLAN_FR_IBSSATIM
pFrame
245
)
246
{
247
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
248
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
;
249
}
250
251
252
/*+
253
*
254
* Routine Description:
255
* Decode IBSS ATIM
256
*
257
*
258
* Return Value:
259
* None.
260
*
261
-*/
262
263
void
264
vMgrDecodeIBSSATIM
(
265
PWLAN_FR_IBSSATIM
pFrame
266
)
267
{
268
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
269
}
270
271
272
/*+
273
*
274
* Routine Description:
275
* Encode Disassociation
276
*
277
*
278
* Return Value:
279
* None.
280
*
281
-*/
282
283
void
284
vMgrEncodeDisassociation
(
285
PWLAN_FR_DISASSOC
pFrame
286
)
287
{
288
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
289
290
291
/* Fixed Fields */
292
pFrame->
pwReason
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
293
+
WLAN_DISASSOC_OFF_REASON
);
294
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_DISASSOC_OFF_REASON
+
sizeof
(*(pFrame->
pwReason
));
295
}
296
297
298
/*+
299
*
300
* Routine Description:
301
* Decode Disassociation
302
*
303
*
304
* Return Value:
305
* None.
306
*
307
-*/
308
309
void
310
vMgrDecodeDisassociation
(
311
PWLAN_FR_DISASSOC
pFrame
312
)
313
{
314
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
315
316
/* Fixed Fields */
317
pFrame->
pwReason
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
318
+
WLAN_DISASSOC_OFF_REASON
);
319
}
320
321
/*+
322
*
323
* Routine Description:
324
* Encode Association Request
325
*
326
*
327
* Return Value:
328
* None.
329
*
330
-*/
331
332
333
void
334
vMgrEncodeAssocRequest
(
335
PWLAN_FR_ASSOCREQ
pFrame
336
)
337
{
338
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
339
/* Fixed Fields */
340
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
341
+
WLAN_ASSOCREQ_OFF_CAP_INFO
);
342
pFrame->
pwListenInterval
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
343
+
WLAN_ASSOCREQ_OFF_LISTEN_INT
);
344
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_ASSOCREQ_OFF_LISTEN_INT
+
sizeof
(*(pFrame->
pwListenInterval
));
345
}
346
347
348
/*+
349
*
350
* Routine Description: (AP)
351
* Decode Association Request
352
*
353
*
354
* Return Value:
355
* None.
356
*
357
-*/
358
359
void
360
vMgrDecodeAssocRequest
(
361
PWLAN_FR_ASSOCREQ
pFrame
362
)
363
{
364
PWLAN_IE
pItem;
365
366
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
367
/* Fixed Fields */
368
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
369
+
WLAN_ASSOCREQ_OFF_CAP_INFO
);
370
pFrame->
pwListenInterval
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
371
+
WLAN_ASSOCREQ_OFF_LISTEN_INT
);
372
373
/* Information elements */
374
pItem = (
PWLAN_IE
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
375
+
WLAN_ASSOCREQ_OFF_SSID
);
376
377
while
(((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) {
378
switch
(pItem->byElementID) {
379
case
WLAN_EID_SSID
:
380
if
(pFrame->
pSSID
==
NULL
)
381
pFrame->
pSSID
= (
PWLAN_IE_SSID
)pItem;
382
break
;
383
case
WLAN_EID_SUPP_RATES
:
384
if
(pFrame->
pSuppRates
==
NULL
)
385
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
386
break
;
387
388
case
WLAN_EID_RSN
:
389
if
(pFrame->
pRSN
==
NULL
)
390
pFrame->
pRSN
= (
PWLAN_IE_RSN
)pItem;
391
break
;
392
case
WLAN_EID_RSN_WPA
:
393
if
(pFrame->
pRSNWPA
==
NULL
) {
394
if
(
WPAb_Is_RSN
((
PWLAN_IE_RSN_EXT
)pItem) ==
TRUE
)
395
pFrame->
pRSNWPA
= (
PWLAN_IE_RSN_EXT
)pItem;
396
}
397
break
;
398
case
WLAN_EID_EXTSUPP_RATES
:
399
if
(pFrame->
pExtSuppRates
==
NULL
)
400
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
401
break
;
402
403
default
:
404
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Unrecognized EID=%dd in assocreq decode.\n"
,
405
pItem->byElementID);
406
break
;
407
}
408
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
409
}
410
}
411
412
/*+
413
*
414
* Routine Description: (AP)
415
* Encode Association Response
416
*
417
*
418
* Return Value:
419
* None.
420
*
421
-*/
422
423
void
424
vMgrEncodeAssocResponse
(
425
PWLAN_FR_ASSOCRESP
pFrame
426
)
427
{
428
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
429
430
/* Fixed Fields */
431
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
432
+
WLAN_ASSOCRESP_OFF_CAP_INFO
);
433
pFrame->
pwStatus
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
434
+
WLAN_ASSOCRESP_OFF_STATUS
);
435
pFrame->
pwAid
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
436
+
WLAN_ASSOCRESP_OFF_AID
);
437
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_ASSOCRESP_OFF_AID
438
+
sizeof
(*(pFrame->
pwAid
));
439
}
440
441
442
/*+
443
*
444
* Routine Description:
445
* Decode Association Response
446
*
447
*
448
* Return Value:
449
* None.
450
*
451
-*/
452
453
void
454
vMgrDecodeAssocResponse
(
455
PWLAN_FR_ASSOCRESP
pFrame
456
)
457
{
458
PWLAN_IE
pItem;
459
460
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
461
462
/* Fixed Fields */
463
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
464
+
WLAN_ASSOCRESP_OFF_CAP_INFO
);
465
pFrame->
pwStatus
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
466
+
WLAN_ASSOCRESP_OFF_STATUS
);
467
pFrame->
pwAid
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
468
+
WLAN_ASSOCRESP_OFF_AID
);
469
470
/* Information elements */
471
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
472
+
WLAN_ASSOCRESP_OFF_SUPP_RATES
);
473
474
pItem = (
PWLAN_IE
)(pFrame->
pSuppRates
);
475
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
476
477
if
((((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) && (pItem->byElementID ==
WLAN_EID_EXTSUPP_RATES
)) {
478
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
479
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"pFrame->pExtSuppRates=[%p].\n"
, pItem);
480
}
else
481
pFrame->
pExtSuppRates
=
NULL
;
482
}
483
484
485
/*+
486
*
487
* Routine Description:
488
* Encode Reassociation Request
489
*
490
*
491
* Return Value:
492
* None.
493
*
494
-*/
495
496
void
497
vMgrEncodeReassocRequest
(
498
PWLAN_FR_REASSOCREQ
pFrame
499
)
500
{
501
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
502
503
/* Fixed Fields */
504
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
505
+
WLAN_REASSOCREQ_OFF_CAP_INFO
);
506
pFrame->
pwListenInterval
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
507
+
WLAN_REASSOCREQ_OFF_LISTEN_INT
);
508
pFrame->
pAddrCurrAP
= (
PIEEE_ADDR
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
509
+
WLAN_REASSOCREQ_OFF_CURR_AP
);
510
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_REASSOCREQ_OFF_CURR_AP
+
sizeof
(*(pFrame->
pAddrCurrAP
));
511
}
512
513
514
/*+
515
*
516
* Routine Description: (AP)
517
* Decode Reassociation Request
518
*
519
*
520
* Return Value:
521
* None.
522
*
523
-*/
524
525
526
void
527
vMgrDecodeReassocRequest
(
528
PWLAN_FR_REASSOCREQ
pFrame
529
)
530
{
531
PWLAN_IE
pItem;
532
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
533
534
/* Fixed Fields */
535
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
536
+
WLAN_REASSOCREQ_OFF_CAP_INFO
);
537
pFrame->
pwListenInterval
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
538
+
WLAN_REASSOCREQ_OFF_LISTEN_INT
);
539
pFrame->
pAddrCurrAP
= (
PIEEE_ADDR
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
540
+
WLAN_REASSOCREQ_OFF_CURR_AP
);
541
542
/* Information elements */
543
pItem = (
PWLAN_IE
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
544
+
WLAN_REASSOCREQ_OFF_SSID
);
545
546
while
(((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) {
547
548
switch
(pItem->byElementID) {
549
case
WLAN_EID_SSID
:
550
if
(pFrame->
pSSID
==
NULL
)
551
pFrame->
pSSID
= (
PWLAN_IE_SSID
)pItem;
552
break
;
553
case
WLAN_EID_SUPP_RATES
:
554
if
(pFrame->
pSuppRates
==
NULL
)
555
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
556
break
;
557
558
case
WLAN_EID_RSN
:
559
if
(pFrame->
pRSN
==
NULL
)
560
pFrame->
pRSN
= (
PWLAN_IE_RSN
)pItem;
561
break
;
562
case
WLAN_EID_RSN_WPA
:
563
if
(pFrame->
pRSNWPA
==
NULL
)
564
if
(
WPAb_Is_RSN
((
PWLAN_IE_RSN_EXT
)pItem) ==
TRUE
)
565
pFrame->
pRSNWPA
= (
PWLAN_IE_RSN_EXT
)pItem;
566
break
;
567
568
case
WLAN_EID_EXTSUPP_RATES
:
569
if
(pFrame->
pExtSuppRates
==
NULL
)
570
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
571
break
;
572
default
:
573
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Unrecognized EID=%dd in reassocreq decode.\n"
,
574
pItem->byElementID);
575
break
;
576
}
577
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
578
}
579
}
580
581
582
583
/*+
584
*
585
* Routine Description:
586
* Encode Probe Request
587
*
588
*
589
* Return Value:
590
* None.
591
*
592
-*/
593
594
595
void
596
vMgrEncodeProbeRequest
(
597
PWLAN_FR_PROBEREQ
pFrame
598
)
599
{
600
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
601
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
;
602
}
603
604
/*+
605
*
606
* Routine Description:
607
* Decode Probe Request
608
*
609
*
610
* Return Value:
611
* None.
612
*
613
-*/
614
615
void
616
vMgrDecodeProbeRequest
(
617
PWLAN_FR_PROBEREQ
pFrame
618
)
619
{
620
PWLAN_IE
pItem;
621
622
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
623
624
/* Information elements */
625
pItem = (
PWLAN_IE
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
)));
626
627
while
(((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) {
628
629
switch
(pItem->byElementID) {
630
case
WLAN_EID_SSID
:
631
if
(pFrame->
pSSID
==
NULL
)
632
pFrame->
pSSID
= (
PWLAN_IE_SSID
)pItem;
633
break
;
634
635
case
WLAN_EID_SUPP_RATES
:
636
if
(pFrame->
pSuppRates
==
NULL
)
637
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
638
break
;
639
640
case
WLAN_EID_EXTSUPP_RATES
:
641
if
(pFrame->
pExtSuppRates
==
NULL
)
642
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
643
break
;
644
645
default
:
646
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Bad EID=%dd in probereq\n"
, pItem->byElementID);
647
break
;
648
}
649
650
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
651
}
652
}
653
654
655
/*+
656
*
657
* Routine Description:
658
* Encode Probe Response
659
*
660
*
661
* Return Value:
662
* None.
663
*
664
-*/
665
666
667
void
668
vMgrEncodeProbeResponse
(
669
PWLAN_FR_PROBERESP
pFrame
670
)
671
{
672
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
673
674
/* Fixed Fields */
675
pFrame->
pqwTimestamp
= (
PQWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
676
+
WLAN_PROBERESP_OFF_TS
);
677
pFrame->
pwBeaconInterval
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
678
+
WLAN_PROBERESP_OFF_BCN_INT
);
679
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
680
+
WLAN_PROBERESP_OFF_CAP_INFO
);
681
682
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_PROBERESP_OFF_CAP_INFO
+
683
sizeof
(*(pFrame->
pwCapInfo
));
684
}
685
686
687
688
/*+
689
*
690
* Routine Description:
691
* Decode Probe Response
692
*
693
*
694
* Return Value:
695
* None.
696
*
697
-*/
698
699
void
700
vMgrDecodeProbeResponse
(
701
PWLAN_FR_PROBERESP
pFrame
702
)
703
{
704
PWLAN_IE
pItem;
705
706
707
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
708
709
/* Fixed Fields */
710
pFrame->
pqwTimestamp
= (
PQWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
711
+
WLAN_PROBERESP_OFF_TS
);
712
pFrame->
pwBeaconInterval
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
713
+
WLAN_PROBERESP_OFF_BCN_INT
);
714
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
715
+
WLAN_PROBERESP_OFF_CAP_INFO
);
716
717
/* Information elements */
718
pItem = (
PWLAN_IE
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
719
+
WLAN_PROBERESP_OFF_SSID
);
720
721
while
(((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) {
722
switch
(pItem->byElementID) {
723
case
WLAN_EID_SSID
:
724
if
(pFrame->
pSSID
==
NULL
)
725
pFrame->
pSSID
= (
PWLAN_IE_SSID
)pItem;
726
break
;
727
case
WLAN_EID_SUPP_RATES
:
728
if
(pFrame->
pSuppRates
==
NULL
)
729
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
730
break
;
731
case
WLAN_EID_FH_PARMS
:
732
break
;
733
case
WLAN_EID_DS_PARMS
:
734
if
(pFrame->
pDSParms
==
NULL
)
735
pFrame->
pDSParms
= (
PWLAN_IE_DS_PARMS
)pItem;
736
break
;
737
case
WLAN_EID_CF_PARMS
:
738
if
(pFrame->
pCFParms
==
NULL
)
739
pFrame->
pCFParms
= (
PWLAN_IE_CF_PARMS
)pItem;
740
break
;
741
case
WLAN_EID_IBSS_PARMS
:
742
if
(pFrame->
pIBSSParms
==
NULL
)
743
pFrame->
pIBSSParms
= (
PWLAN_IE_IBSS_PARMS
)pItem;
744
break
;
745
746
case
WLAN_EID_RSN
:
747
if
(pFrame->
pRSN
==
NULL
)
748
pFrame->
pRSN
= (
PWLAN_IE_RSN
)pItem;
749
break
;
750
case
WLAN_EID_RSN_WPA
:
751
if
(pFrame->
pRSNWPA
==
NULL
) {
752
if
(
WPAb_Is_RSN
((
PWLAN_IE_RSN_EXT
)pItem) ==
TRUE
)
753
pFrame->
pRSNWPA
= (
PWLAN_IE_RSN_EXT
)pItem;
754
}
755
break
;
756
case
WLAN_EID_ERP
:
757
if
(pFrame->
pERP
==
NULL
)
758
pFrame->
pERP
= (
PWLAN_IE_ERP
)pItem;
759
break
;
760
case
WLAN_EID_EXTSUPP_RATES
:
761
if
(pFrame->
pExtSuppRates
==
NULL
)
762
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
763
break
;
764
765
case
WLAN_EID_COUNTRY
:
/* 7 */
766
if
(pFrame->
pIE_Country
==
NULL
)
767
pFrame->
pIE_Country
= (
PWLAN_IE_COUNTRY
)pItem;
768
break
;
769
770
case
WLAN_EID_PWR_CONSTRAINT
:
/* 32 */
771
if
(pFrame->
pIE_PowerConstraint
==
NULL
)
772
pFrame->
pIE_PowerConstraint
= (
PWLAN_IE_PW_CONST
)pItem;
773
break
;
774
775
case
WLAN_EID_CH_SWITCH
:
/* 37 */
776
if
(pFrame->
pIE_CHSW
==
NULL
)
777
pFrame->
pIE_CHSW
= (
PWLAN_IE_CH_SW
)pItem;
778
break
;
779
780
case
WLAN_EID_QUIET
:
/* 40 */
781
if
(pFrame->
pIE_Quiet
==
NULL
)
782
pFrame->
pIE_Quiet
= (
PWLAN_IE_QUIET
)pItem;
783
break
;
784
785
case
WLAN_EID_IBSS_DFS
:
786
if
(pFrame->
pIE_IBSSDFS
==
NULL
)
787
pFrame->
pIE_IBSSDFS
= (
PWLAN_IE_IBSS_DFS
)pItem;
788
break
;
789
790
default
:
791
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Bad EID=%dd in proberesp\n"
, pItem->byElementID);
792
break
;
793
}
794
795
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
796
}
797
}
798
799
800
/*+
801
*
802
* Routine Description:
803
* Encode Authentication frame
804
*
805
*
806
* Return Value:
807
* None.
808
*
809
-*/
810
811
void
812
vMgrEncodeAuthen
(
813
PWLAN_FR_AUTHEN
pFrame
814
)
815
{
816
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
817
818
/* Fixed Fields */
819
pFrame->
pwAuthAlgorithm
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
820
+
WLAN_AUTHEN_OFF_AUTH_ALG
);
821
pFrame->
pwAuthSequence
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
822
+
WLAN_AUTHEN_OFF_AUTH_SEQ
);
823
pFrame->
pwStatus
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
824
+
WLAN_AUTHEN_OFF_STATUS
);
825
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_AUTHEN_OFF_STATUS
+
sizeof
(*(pFrame->
pwStatus
));
826
}
827
828
829
/*+
830
*
831
* Routine Description:
832
* Decode Authentication
833
*
834
*
835
* Return Value:
836
* None.
837
*
838
-*/
839
840
void
841
vMgrDecodeAuthen
(
842
PWLAN_FR_AUTHEN
pFrame
843
)
844
{
845
PWLAN_IE
pItem;
846
847
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
848
849
/* Fixed Fields */
850
pFrame->
pwAuthAlgorithm
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
851
+
WLAN_AUTHEN_OFF_AUTH_ALG
);
852
pFrame->
pwAuthSequence
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
853
+
WLAN_AUTHEN_OFF_AUTH_SEQ
);
854
pFrame->
pwStatus
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
855
+
WLAN_AUTHEN_OFF_STATUS
);
856
857
/* Information elements */
858
pItem = (
PWLAN_IE
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
859
+
WLAN_AUTHEN_OFF_CHALLENGE
);
860
861
if
((((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) && (pItem->byElementID ==
WLAN_EID_CHALLENGE
))
862
pFrame->
pChallenge
= (
PWLAN_IE_CHALLENGE
)pItem;
863
}
864
865
866
/*+
867
*
868
* Routine Description:
869
* Encode Authentication
870
*
871
*
872
* Return Value:
873
* None.
874
*
875
-*/
876
877
void
878
vMgrEncodeDeauthen
(
879
PWLAN_FR_DEAUTHEN
pFrame
880
)
881
{
882
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
883
884
/* Fixed Fields */
885
pFrame->
pwReason
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
886
+
WLAN_DEAUTHEN_OFF_REASON
);
887
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_DEAUTHEN_OFF_REASON
+
sizeof
(*(pFrame->
pwReason
));
888
}
889
890
891
/*+
892
*
893
* Routine Description:
894
* Decode Deauthentication
895
*
896
*
897
* Return Value:
898
* None.
899
*
900
-*/
901
902
void
903
vMgrDecodeDeauthen
(
904
PWLAN_FR_DEAUTHEN
pFrame
905
)
906
{
907
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
908
909
/* Fixed Fields */
910
pFrame->
pwReason
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
911
+
WLAN_DEAUTHEN_OFF_REASON
);
912
}
913
914
915
/*+
916
*
917
* Routine Description: (AP)
918
* Encode Reassociation Response
919
*
920
*
921
* Return Value:
922
* None.
923
*
924
-*/
925
926
void
927
vMgrEncodeReassocResponse
(
928
PWLAN_FR_REASSOCRESP
pFrame
929
)
930
{
931
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
932
933
/* Fixed Fields */
934
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
935
+
WLAN_REASSOCRESP_OFF_CAP_INFO
);
936
pFrame->
pwStatus
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
937
+
WLAN_REASSOCRESP_OFF_STATUS
);
938
pFrame->
pwAid
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
939
+
WLAN_REASSOCRESP_OFF_AID
);
940
941
pFrame->
len
=
WLAN_HDR_ADDR3_LEN
+
WLAN_REASSOCRESP_OFF_AID
+
sizeof
(*(pFrame->
pwAid
));
942
}
943
944
945
/*+
946
*
947
* Routine Description:
948
* Decode Reassociation Response
949
*
950
*
951
* Return Value:
952
* None.
953
*
954
-*/
955
956
957
void
958
vMgrDecodeReassocResponse
(
959
PWLAN_FR_REASSOCRESP
pFrame
960
)
961
{
962
PWLAN_IE
pItem;
963
964
pFrame->
pHdr
= (
PUWLAN_80211HDR
)pFrame->
pBuf
;
965
966
/* Fixed Fields */
967
pFrame->
pwCapInfo
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
968
+
WLAN_REASSOCRESP_OFF_CAP_INFO
);
969
pFrame->
pwStatus
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
970
+
WLAN_REASSOCRESP_OFF_STATUS
);
971
pFrame->
pwAid
= (
PWORD
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
972
+
WLAN_REASSOCRESP_OFF_AID
);
973
974
/* Information elements */
975
pFrame->
pSuppRates
= (
PWLAN_IE_SUPP_RATES
)(
WLAN_HDR_A3_DATA_PTR
(&(pFrame->
pHdr
->
sA3
))
976
+
WLAN_REASSOCRESP_OFF_SUPP_RATES
);
977
978
pItem = (
PWLAN_IE
)(pFrame->
pSuppRates
);
979
pItem = (
PWLAN_IE
)(((
PBYTE
)pItem) + 2 + pItem->len);
980
981
if
((((
PBYTE
)pItem) < (pFrame->
pBuf
+ pFrame->
len
)) && (pItem->byElementID ==
WLAN_EID_EXTSUPP_RATES
))
982
pFrame->
pExtSuppRates
= (
PWLAN_IE_SUPP_RATES
)pItem;
983
}
Generated on Thu Jan 10 2013 14:32:19 for Linux Kernel by
1.8.2