Merge branch 'for-linus' of git://neil.brown.name/md
[pandora-kernel.git] / drivers / staging / winbond / mac_structures.h
1 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 // MAC_Structures.h
3 //
4 // This file contains the definitions and data structures used by SW-MAC.
5 //
6 // Revision Histoy
7 //=================
8 // 0.1      2002        UN00
9 // 0.2      20021004    PD43 CCLiu6
10 //          20021018    PD43 CCLiu6
11 //                      Add enum_TxRate type
12 //                      Modify enum_STAState type
13 // 0.3      20021023    PE23 CYLiu update MAC session struct
14 //          20021108
15 //          20021122    PD43 Austin
16 //                      Deleted some unused.
17 //          20021129    PD43 Austin
18 //                      20030617        increase the 802.11g definition
19 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
20
21 #ifndef _MAC_Structures_H_
22 #define _MAC_Structures_H_
23
24 #include <linux/skbuff.h>
25
26 /*=========================================================
27 // Some miscellaneous definitions
28 //-----*/
29 #define MAX_CHANNELS                        30
30 #define MAC_ADDR_LENGTH                     6
31 #define MAX_WEP_KEY_SIZE                    16  /* 128 bits */
32 #define MAX_802_11_FRAGMENT_NUMBER              10 /* By spec */
33
34 /* ========================================================
35 // 802.11 Frame define
36 //----- */
37 #define MASK_PROTOCOL_VERSION_TYPE      0x0F
38 #define MASK_FRAGMENT_NUMBER            0x000F
39 #define SEQUENCE_NUMBER_SHIFT           4
40 #define DIFFER_11_TO_3                          18
41 #define DOT_11_MAC_HEADER_SIZE          24
42 #define DOT_11_SNAP_SIZE                        6
43 #define DOT_11_DURATION_OFFSET          2
44 /* Sequence control offset */
45 #define DOT_11_SEQUENCE_OFFSET          22
46 /* The start offset of 802.11 Frame// */
47 #define DOT_11_TYPE_OFFSET                      30
48 #define DOT_11_DATA_OFFSET          24
49 #define DOT_11_DA_OFFSET                        4
50 #define DOT_3_TYPE_ARP                          0x80F3
51 #define DOT_3_TYPE_IPX                          0x8137
52 #define DOT_3_TYPE_OFFSET                       12
53
54
55 #define ETHERNET_HEADER_SIZE                    14
56 #define MAX_ETHERNET_PACKET_SIZE                1514
57
58
59 /* -----  management : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) */
60 #define MAC_SUBTYPE_MNGMNT_ASSOC_REQUEST    0x00
61 #define MAC_SUBTYPE_MNGMNT_ASSOC_RESPONSE   0x10
62 #define MAC_SUBTYPE_MNGMNT_REASSOC_REQUEST  0x20
63 #define MAC_SUBTYPE_MNGMNT_REASSOC_RESPONSE 0x30
64 #define MAC_SUBTYPE_MNGMNT_PROBE_REQUEST    0x40
65 #define MAC_SUBTYPE_MNGMNT_PROBE_RESPONSE   0x50
66 #define MAC_SUBTYPE_MNGMNT_BEACON           0x80
67 #define MAC_SUBTYPE_MNGMNT_ATIM             0x90
68 #define MAC_SUBTYPE_MNGMNT_DISASSOCIATION   0xA0
69 #define MAC_SUBTYPE_MNGMNT_AUTHENTICATION   0xB0
70 #define MAC_SUBTYPE_MNGMNT_DEAUTHENTICATION 0xC0
71
72 /* -----  control : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) */
73 #define MAC_SUBTYPE_CONTROL_PSPOLL          0xA4
74 #define MAC_SUBTYPE_CONTROL_RTS             0xB4
75 #define MAC_SUBTYPE_CONTROL_CTS             0xC4
76 #define MAC_SUBTYPE_CONTROL_ACK             0xD4
77 #define MAC_SUBTYPE_CONTROL_CFEND           0xE4
78 #define MAC_SUBTYPE_CONTROL_CFEND_CFACK     0xF4
79
80 /* -----  data : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) */
81 #define MAC_SUBTYPE_DATA                    0x08
82 #define MAC_SUBTYPE_DATA_CFACK              0x18
83 #define MAC_SUBTYPE_DATA_CFPOLL             0x28
84 #define MAC_SUBTYPE_DATA_CFACK_CFPOLL       0x38
85 #define MAC_SUBTYPE_DATA_NULL               0x48
86 #define MAC_SUBTYPE_DATA_CFACK_NULL         0x58
87 #define MAC_SUBTYPE_DATA_CFPOLL_NULL        0x68
88 #define MAC_SUBTYPE_DATA_CFACK_CFPOLL_NULL  0x78
89
90 /* -----  Frame Type of Bits (2, 3) */
91 #define MAC_TYPE_MANAGEMENT                 0x00
92 #define MAC_TYPE_CONTROL                    0x04
93 #define MAC_TYPE_DATA                       0x08
94
95 /* ----- definitions for Management Frame Element ID (1 BYTE) */
96 #define ELEMENT_ID_SSID                     0
97 #define ELEMENT_ID_SUPPORTED_RATES          1
98 #define ELEMENT_ID_FH_PARAMETER_SET         2
99 #define ELEMENT_ID_DS_PARAMETER_SET         3
100 #define ELEMENT_ID_CF_PARAMETER_SET         4
101 #define ELEMENT_ID_TIM                      5
102 #define ELEMENT_ID_IBSS_PARAMETER_SET       6
103 /* 7~15 reserverd */
104 #define ELEMENT_ID_CHALLENGE_TEXT           16
105 /* 17~31 reserved for challenge text extension */
106 /* 32~255 reserved */
107 /*--  11G  -- */
108 #define ELEMENT_ID_ERP_INFORMATION                      42
109 #define ELEMENT_ID_EXTENDED_SUPPORTED_RATES 50
110
111 /* --  WPA  -- */
112
113 #define ELEMENT_ID_RSN_WPA                                      221
114 #ifdef _WPA2_
115 #define ELEMENT_ID_RSN_WPA2                                 48
116 #endif /* endif WPA2 */
117
118 #define WLAN_MAX_PAIRWISE_CIPHER_SUITE_COUNT    ((u16) 6)
119 #define WLAN_MAX_AUTH_KEY_MGT_SUITE_LIST_COUNT  ((u16) 2)
120
121 /* ===================================================================
122 *  Reason Code (Table 18): indicate the reason of DisAssoc, DeAuthen
123 *  length of ReasonCode is 2 Octs.
124 * =================================================================== */
125 #define REASON_REASERED             0
126 #define REASON_UNSPECIDIED          1
127 #define REASON_PREAUTH_INVALID      2
128 #define DEAUTH_REASON_LEFT_BSS      3
129 #define DISASS_REASON_AP_INACTIVE   4
130 #define DISASS_REASON_AP_BUSY       5
131 #define REASON_CLASS2_FRAME_FROM_NONAUTH_STA    6
132 #define REASON_CLASS3_FRAME_FROM_NONASSO_STA    7
133 #define DISASS_REASON_LEFT_BSS      8
134 #define REASON_NOT_AUTH_YET         9
135 /* 802.11i define */
136 #define REASON_INVALID_IE                                               13
137 #define REASON_MIC_ERROR                                                14
138 #define REASON_4WAY_HANDSHAKE_TIMEOUT                   15
139 #define REASON_GROUPKEY_UPDATE_TIMEOUT                  16
140 #define REASON_IE_DIFF_4WAY_ASSOC                               17
141 #define REASON_INVALID_MULTICAST_CIPHER                 18
142 #define REASON_INVALID_UNICAST_CIPHER                   19
143 #define REASON_INVALID_AKMP                                             20
144 #define REASON_UNSUPPORTED_RSNIE_VERSION                21
145 #define REASON_INVALID_RSNIE_CAPABILITY                 22
146 #define REASON_802_1X_AUTH_FAIL                                 23
147 #define REASON_CIPHER_REJECT_PER_SEC_POLICY             14
148
149 /*
150 //===========================================================
151 // enum_MMPDUResultCode --
152 //   Status code (2 Octs) in the MMPDU's frame body. Table.19
153 //
154 //===========================================================
155 enum enum_MMPDUResultCode
156 {
157 //    SUCCESS   = 0,      // Redefined
158     UNSPECIFIED_FAILURE                         = 1,
159
160     // 2 - 9 Reserved
161
162     NOT_SUPPROT_CAPABILITIES                    = 10,
163
164     //REASSOCIATION_DENIED
165     //
166     REASSOC_DENIED_UNABLE_CFM_ASSOC_EXIST       = 11,
167
168     //ASSOCIATION_DENIED_NOT_IN_STANDARD
169     //
170     ASSOC_DENIED_REASON_NOT_IN_STANDARD         = 12,
171     PEER_NOT_SUPPORT_AUTH_ALGORITHM             = 13,
172     AUTH_SEQNUM_OUT_OF_EXPECT                   = 14,
173     AUTH_REJECT_REASON_CHALLENGE_FAIL           = 15,
174     AUTH_REJECT_REASON_WAIT_TIMEOUT             = 16,
175     ASSOC_DENIED_REASON_AP_BUSY                 = 17,
176     ASSOC_DENIED_REASON_NOT_SUPPORT_BASIC_RATE  = 18
177 } WB_MMPDURESULTCODE, *PWB_MMPDURESULTCODE;
178 */
179
180 #define RATE_BITMAP_1M                          1
181 #define RATE_BITMAP_2M                          2
182 #define RATE_BITMAP_5dot5M                      5
183 #define RATE_BITMAP_6M                          6
184 #define RATE_BITMAP_9M                          9
185 #define RATE_BITMAP_11M                         11
186 #define RATE_BITMAP_12M                         12
187 #define RATE_BITMAP_18M                         18
188 #define RATE_BITMAP_22M                         22
189 #define RATE_BITMAP_24M                         24
190 #define RATE_BITMAP_33M                         17
191 #define RATE_BITMAP_36M                         19
192 #define RATE_BITMAP_48M                         25
193 #define RATE_BITMAP_54M                         28
194
195 #define RATE_AUTO                                       0
196 #define RATE_1M                                         2
197 #define RATE_2M                                         4
198 #define RATE_5dot5M                                     11
199 #define RATE_6M                                         12
200 #define RATE_9M                                         18
201 #define RATE_11M                                        22
202 #define RATE_12M                                        24
203 #define RATE_18M                                        36
204 #define RATE_22M                                        44
205 #define RATE_24M                                        48
206 #define RATE_33M                                        66
207 #define RATE_36M                                        72
208 #define RATE_48M                                        96
209 #define RATE_54M                                        108
210 #define RATE_MAX                                        255
211
212 /* CAPABILITY */
213 #define CAPABILITY_ESS_BIT                              0x0001
214 #define CAPABILITY_IBSS_BIT                             0x0002
215 #define CAPABILITY_CF_POLL_BIT                  0x0004
216 #define CAPABILITY_CF_POLL_REQ_BIT              0x0008
217 #define CAPABILITY_PRIVACY_BIT                  0x0010
218 #define CAPABILITY_SHORT_PREAMBLE_BIT   0x0020
219 #define CAPABILITY_PBCC_BIT                             0x0040
220 #define CAPABILITY_CHAN_AGILITY_BIT             0x0080
221 #define CAPABILITY_SHORT_SLOT_TIME_BIT  0x0400
222 #define CAPABILITY_DSSS_OFDM_BIT                0x2000
223
224
225 struct Capability_Information_Element {
226   union {
227         u16 __attribute__ ((packed)) wValue;
228     #ifdef _BIG_ENDIAN_  /* 20060926 add by anson's endian */
229     struct _Capability {
230         /* --  11G  -- */
231         u8      Reserved3:2;
232         u8      DSSS_OFDM:1;
233         u8      Reserved2:2;
234         u8      Short_Slot_Time:1;
235         u8    Reserved1:2;
236         u8    Channel_Agility:1;
237         u8    PBCC:1;
238         u8    ShortPreamble:1;
239         u8    CF_Privacy:1;
240         u8    CF_Poll_Request:1;
241         u8    CF_Pollable:1;
242         u8    IBSS:1;
243         u8    ESS:1;
244     } __attribute__ ((packed)) Capability;
245     #else
246     struct _Capability {
247         u8    ESS:1;
248         u8    IBSS:1;
249         u8    CF_Pollable:1;
250         u8    CF_Poll_Request:1;
251         u8    CF_Privacy:1;
252         u8    ShortPreamble:1;
253         u8    PBCC:1;
254         u8    Channel_Agility:1;
255         u8    Reserved1:2;
256                 /* --  11G  -- */
257                 u8      Short_Slot_Time:1;
258                 u8      Reserved2:2;
259                 u8      DSSS_OFDM:1;
260                 u8      Reserved3:2;
261     } __attribute__ ((packed)) Capability;
262     #endif
263   } __attribute__ ((packed)) ;
264 } __attribute__ ((packed));
265
266 struct FH_Parameter_Set_Element {
267     u8    Element_ID;
268     u8    Length;
269     u8    Dwell_Time[2];
270     u8    Hop_Set;
271     u8    Hop_Pattern;
272     u8    Hop_Index;
273 };
274
275 struct DS_Parameter_Set_Element {
276     u8    Element_ID;
277     u8    Length;
278     u8    Current_Channel;
279 };
280
281 struct Supported_Rates_Element {
282     u8    Element_ID;
283     u8    Length;
284     u8    SupportedRates[8];
285 } __attribute__ ((packed));
286
287 struct SSID_Element {
288     u8    Element_ID;
289     u8    Length;
290     u8    SSID[32];
291 } __attribute__ ((packed)) ;
292
293 struct CF_Parameter_Set_Element {
294     u8    Element_ID;
295     u8    Length;
296     u8    CFP_Count;
297     u8    CFP_Period;
298     u8    CFP_MaxDuration[2];     /* in Time Units */
299     u8    CFP_DurRemaining[2];    /* in time units */
300 };
301
302 struct TIM_Element {
303     u8    Element_ID;
304     u8    Length;
305     u8    DTIM_Count;
306     u8    DTIM_Period;
307     u8    Bitmap_Control;
308     u8    Partial_Virtual_Bitmap[251];
309 };
310
311 struct IBSS_Parameter_Set_Element {
312     u8    Element_ID;
313     u8    Length;
314     u8    ATIM_Window[2];
315 };
316
317 struct Challenge_Text_Element {
318     u8    Element_ID;
319     u8    Length;
320     u8    Challenge_Text[253];
321 };
322
323 struct PHY_Parameter_Set_Element {
324 /*  int     aSlotTime; */
325 /*  int     aSifsTime; */
326     s32     aCCATime;
327     s32     aRxTxTurnaroundTime;
328     s32     aTxPLCPDelay;
329     s32     RxPLCPDelay;
330     s32     aRxTxSwitchTime;
331     s32     aTxRampOntime;
332     s32     aTxRampOffTime;
333     s32     aTxRFDelay;
334     s32     aRxRFDelay;
335     s32     aAirPropagationTime;
336     s32     aMACProcessingDelay;
337     s32     aPreambleLength;
338     s32     aPLCPHeaderLength;
339     s32     aMPDUDurationFactor;
340     s32     aMPDUMaxLength;
341 /*  int     aCWmin; */
342 /*  int     aCWmax; */
343 };
344
345 /* --  11G  -- */
346 struct ERP_Information_Element {
347     u8  Element_ID;
348     u8  Length;
349     #ifdef _BIG_ENDIAN_ /* 20060926 add by anson's endian */
350         u8      Reserved:5;   /* 20060926 add by anson */
351         u8      Barker_Preamble_Mode:1;
352         u8      Use_Protection:1;
353        u8       NonERP_Present:1;
354     #else
355         u8      NonERP_Present:1;
356         u8      Use_Protection:1;
357         u8      Barker_Preamble_Mode:1;
358         u8      Reserved:5;
359     #endif
360 };
361
362 struct Extended_Supported_Rates_Element {
363     u8  Element_ID;
364     u8  Length;
365     u8  ExtendedSupportedRates[255];
366 } __attribute__ ((packed));
367
368 /* WPA(802.11i draft 3.0) */
369 #define VERSION_WPA                             1
370 #ifdef _WPA2_
371 #define VERSION_WPA2            1
372 #endif /* end def  _WPA2_ */
373 /* WPA2.0 OUI=00:50:F2, the MSB is reserved for suite type */
374 #define OUI_WPA                                 0x00F25000
375 #ifdef _WPA2_
376 /* for wpa2 change to 0x00ACOF04 by Ws 26/04/04 */
377 #define OUI_WPA2                                0x00AC0F00
378 #endif /* end def _WPA2_ */
379
380 #define OUI_WPA_ADDITIONAL              0x01
381 #define WLAN_MIN_RSN_WPA_LENGTH                 6 /* added by ws 09/10/04 */
382 #ifdef _WPA2_
383 #define WLAN_MIN_RSN_WPA2_LENGTH                2 /* Fix to 2 09/14/05 */
384 #endif /* end def _WPA2_ */
385
386 #define oui_wpa                  (u32)(OUI_WPA|OUI_WPA_ADDITIONAL)
387
388 #define WPA_OUI_BIG    ((u32) 0x01F25000)/* added by ws 09/23/04 */
389 #define WPA_OUI_LITTLE  ((u32) 0x01F25001)/* added by ws 09/23/04 */
390 /* 20061108 For WPS. It's little endian. Big endian is 0x0050F204 */
391 #define WPA_WPS_OUI                             cpu_to_le32(0x04F25000)
392
393 /* -----WPA2----- */
394 #ifdef _WPA2_
395 #define WPA2_OUI_BIG    ((u32)0x01AC0F00)
396 #define WPA2_OUI_LITTLE ((u32)0x01AC0F01)
397 #endif /* end def _WPA2_ */
398
399 /* Authentication suite */
400 #define OUI_AUTH_WPA_NONE           0x00 /* for WPA_NONE */
401 #define OUI_AUTH_8021X                          0x01
402 #define OUI_AUTH_PSK                            0x02
403 /* Cipher suite */
404 #define OUI_CIPHER_GROUP_KEY        0x00  /* added by ws 05/21/04 */
405 #define OUI_CIPHER_WEP_40                       0x01
406 #define OUI_CIPHER_TKIP                         0x02
407 #define OUI_CIPHER_CCMP                         0x04
408 #define OUI_CIPHER_WEP_104                      0x05
409
410 struct suite_selector{
411         union{
412                 u8      Value[4];
413                 struct _SUIT_ {
414                         u8      OUI[3];
415                         u8      Type;
416                 } SuitSelector;
417         };
418 };
419
420 /* --  WPA  -- */
421 struct  RSN_Information_Element{
422         u8                                      Element_ID;
423         u8                                      Length;
424  /* WPA version 2.0 additional field, and should be 00:50:F2:01 */
425         struct suite_selector   OuiWPAAdditional;
426         u16                                     Version;
427         struct suite_selector           GroupKeySuite;
428         u16                                     PairwiseKeySuiteCount;
429         struct suite_selector           PairwiseKeySuite[1];
430 } __attribute__ ((packed));
431 struct RSN_Auth_Sub_Information_Element {
432         u16                             AuthKeyMngtSuiteCount;
433         struct suite_selector   AuthKeyMngtSuite[1];
434 } __attribute__ ((packed));
435
436 /* --  WPA2  -- */
437 struct RSN_Capability_Element {
438   union {
439         u16     __attribute__ ((packed))        wValue;
440     #ifdef _BIG_ENDIAN_  /* 20060927 add by anson's endian */
441     struct _RSN_Capability {
442         u16   __attribute__ ((packed))  Reserved2:8; /* 20051201 */
443         u16   __attribute__ ((packed))  Reserved1:2;
444         u16   __attribute__ ((packed))  GTK_Replay_Counter:2;
445         u16   __attribute__ ((packed))  PTK_Replay_Counter:2;
446         u16   __attribute__ ((packed))  No_Pairwise:1;
447         u16   __attribute__ ((packed))  Pre_Auth:1;
448     } __attribute__ ((packed))  RSN_Capability;
449     #else
450     struct _RSN_Capability {
451         u16   __attribute__ ((packed))  Pre_Auth:1;
452         u16   __attribute__ ((packed))  No_Pairwise:1;
453         u16   __attribute__ ((packed))  PTK_Replay_Counter:2;
454         u16   __attribute__ ((packed))  GTK_Replay_Counter:2;
455         u16   __attribute__ ((packed))  Reserved1:2;
456         u16   __attribute__ ((packed))  Reserved2:8; /* 20051201 */
457     } __attribute__ ((packed))  RSN_Capability;
458     #endif
459
460   } __attribute__ ((packed)) ;
461 } __attribute__ ((packed)) ;
462
463 #ifdef _WPA2_
464 struct pmkid {
465   u8 pValue[16];
466 };
467
468 struct  WPA2_RSN_Information_Element {
469         u8                                      Element_ID;
470         u8                                      Length;
471         u16                                     Version;
472         struct suite_selector           GroupKeySuite;
473         u16                                     PairwiseKeySuiteCount;
474         struct suite_selector           PairwiseKeySuite[1];
475
476 } __attribute__ ((packed));
477
478 struct WPA2_RSN_Auth_Sub_Information_Element {
479         u16                             AuthKeyMngtSuiteCount;
480         struct suite_selector   AuthKeyMngtSuite[1];
481 } __attribute__ ((packed));
482
483
484 struct PMKID_Information_Element {
485         u16                             PMKID_Count;
486         struct pmkid pmkid[16];
487 } __attribute__ ((packed));
488
489 #endif /* enddef _WPA2_ */
490 /*============================================================
491 // MAC Frame structure (different type) and subfield structure
492 //============================================================*/
493 struct MAC_frame_control {
494 /* a combination of the [Protocol Version, Control Type, Control Subtype]*/
495     u8    mac_frame_info;
496 /* 20060927 add by anson's endian */
497     #ifdef _BIG_ENDIAN_
498     u8    order:1;
499     u8    WEP:1;
500     u8    more_data:1;
501     u8    pwr_mgt:1;
502     u8    retry:1;
503     u8    more_frag:1;
504     u8    from_ds:1;
505     u8    to_ds:1;
506     #else
507     u8    to_ds:1;
508     u8    from_ds:1;
509     u8    more_frag:1;
510     u8    retry:1;
511     u8    pwr_mgt:1;
512     u8    more_data:1;
513     u8    WEP:1;
514     u8    order:1;
515     #endif
516 } __attribute__ ((packed));
517
518 struct Management_Frame {
519 /* 2B, ToDS,FromDS,MoreFrag,MoreData,Order=0 */
520     struct MAC_frame_control frame_control;
521     u16         duration;
522     u8          DA[MAC_ADDR_LENGTH];                    /* Addr1 */
523     u8          SA[MAC_ADDR_LENGTH];                    /* Addr2 */
524     u8          BSSID[MAC_ADDR_LENGTH];                 /* Addr3 */
525     u16         Sequence_Control;
526     /* Management Frame Body <= 325 bytes */
527     /* FCS 4 bytes */
528 } __attribute__ ((packed));
529
530 /* SW-MAC don't Tx/Rx Control-Frame, HW-MAC do it. */
531 struct Control_Frame {
532 /* ToDS,FromDS,MoreFrag,Retry,MoreData,WEP,Order=0 */
533     struct MAC_frame_control frame_control;
534     u16         duration;
535     u8          RA[MAC_ADDR_LENGTH];
536     u8          TA[MAC_ADDR_LENGTH];
537     u16         FCS;
538 } __attribute__ ((packed));
539
540 struct Data_Frame {
541     struct MAC_frame_control frame_control;
542     u16         duration;
543     u8          Addr1[MAC_ADDR_LENGTH];
544     u8          Addr2[MAC_ADDR_LENGTH];
545     u8          Addr3[MAC_ADDR_LENGTH];
546     u16         Sequence_Control;
547     u8          Addr4[MAC_ADDR_LENGTH]; /* only exist when ToDS=FromDS=1 */
548     /* Data Frame Body <= 2312 */
549     /* FCS */
550 } __attribute__ ((packed));
551
552 struct Disassociation_Frame_Body {
553     u16    reasonCode;
554 } __attribute__ ((packed));
555
556 struct Association_Request_Frame_Body {
557     u16    capability_information;
558     u16    listenInterval;
559     u8     Current_AP_Address[MAC_ADDR_LENGTH];/* for reassociation only */
560     /*  SSID (2+32 bytes) */
561     /*  Supported_Rates (2+8 bytes) */
562 } __attribute__ ((packed));
563
564 struct Association_Response_Frame_Body {
565     u16    capability_information;
566     u16    statusCode;
567     u16    Association_ID;
568     struct Supported_Rates_Element supportedRates;
569 } __attribute__ ((packed));
570
571 /*struct Reassociation_Request_Frame_Body
572 {
573     u16    capability_information;
574     u16    listenInterval;
575     u8     Current_AP_Address[MAC_ADDR_LENGTH];
576     // SSID (2+32 bytes)
577     // Supported_Rates (2+8 bytes)
578 };*/
579 /* eliminated by WS 07/22/04 comboined with associateion request frame. */
580
581 struct Reassociation_Response_Frame_Body {
582     u16    capability_information;
583     u16    statusCode;
584     u16    Association_ID;
585     struct Supported_Rates_Element supportedRates;
586 } __attribute__ ((packed));
587
588 struct Deauthentication_Frame_Body {
589     u16    reasonCode;
590 } __attribute__ ((packed));
591
592
593 struct Probe_Response_Frame_Body {
594     u16    Timestamp;
595     u16    Beacon_Interval;
596     u16    Capability_Information;
597     /* SSID
598     // Supported_Rates
599     // PHY parameter Set (DS Parameters)
600     // CF parameter Set
601     // IBSS parameter Set */
602 } __attribute__ ((packed));
603
604 struct Authentication_Frame_Body {
605     u16    algorithmNumber;
606     u16    sequenceNumber;
607     u16    statusCode;
608         /* NB: don't include ChallengeText in this structure
609         // struct Challenge_Text_Element sChallengeTextElement;
610         // wkchen added */
611 } __attribute__ ((packed));
612
613
614 #endif /* _MAC_Structure_H_ */
615
616