blob: bb78e644187f51958e41f48bf809fb506f6cc3ee [file] [log] [blame]
Wade Guthrie0d438532012-05-18 14:18:50 -07001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
mukesh agrawal7a4e4002011-09-06 11:26:05 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SHILL_IEEE80211_H
6#define SHILL_IEEE80211_H
7
8namespace shill {
9
10namespace IEEE_80211 {
Paul Stewartbdbd3c32013-04-17 09:47:21 -070011const uint8_t kElemIdCountry = 7;
Thieu Le1df7f4e2012-02-10 15:21:45 -080012const uint8_t kElemIdErp = 42;
13const uint8_t kElemIdHTCap = 45;
14const uint8_t kElemIdHTInfo = 61;
Paul Stewarta5e7d5f2013-01-09 18:06:15 -080015const uint8_t kElemIdRSN = 48;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070016const uint8_t kElemIdVendor = 221;
Thieu Le1df7f4e2012-02-10 15:21:45 -080017
mukesh agrawal7a4e4002011-09-06 11:26:05 -070018const unsigned int kMaxSSIDLen = 32;
19
20const unsigned int kWEP40AsciiLen = 5;
21const unsigned int kWEP40HexLen = 10;
22const unsigned int kWEP104AsciiLen = 13;
23const unsigned int kWEP104HexLen = 26;
mukesh agrawal8ede0522011-10-03 14:57:44 -070024
25const unsigned int kWPAAsciiMinLen = 8;
26const unsigned int kWPAAsciiMaxLen = 63;
27const unsigned int kWPAHexLen = 64;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070028
29const uint32_t kOUIVendorEpigram = 0x00904c;
30const uint32_t kOUIVendorMicrosoft = 0x0050f2;
31
Paul Stewarta5e7d5f2013-01-09 18:06:15 -080032const uint8_t kOUIMicrosoftWPA = 1;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070033const uint8_t kOUIMicrosoftWPS = 4;
34const uint16_t kWPSElementManufacturer = 0x1021;
35const uint16_t kWPSElementModelName = 0x1023;
36const uint16_t kWPSElementModelNumber = 0x1024;
37const uint16_t kWPSElementDeviceName = 0x1011;
Wade Guthrie0d438532012-05-18 14:18:50 -070038
Paul Stewarta5e7d5f2013-01-09 18:06:15 -080039const int kRSNIEVersionLen = 2;
40const int kRSNIESelectorLen = 4;
41const int kRSNIECipherCountOffset = kRSNIEVersionLen + kRSNIESelectorLen;
42const int kRSNIECipherCountLen = 2;
43const int kRSNIENumCiphers = 2;
44const int kRSNIECapabilitiesLen = 2;
45const uint16_t kRSNCapabilityPreAuth = 0x0001;
46const uint16_t kRSNCapabilityPairwise = 0x0002;
47const uint16_t kRSNCapabilityPTKSA = 0x000c;
48const uint16_t kRSNCapabilityGTKSA = 0x0030;
49const uint16_t kRSNCapabilityFrameProtectionRequired = 0x0040;
50const uint16_t kRSNCapabilityFrameProtectionCapable = 0x0080;
51const uint16_t kRSNCapabilityPeerKey = 0x0200;
52
Wade Guthrie0d438532012-05-18 14:18:50 -070053// This structure is incomplete. Fields will be added as necessary.
54//
55// NOTE: the uint16_t stuff is in little-endian format so conversions are
56// required.
57struct ieee80211_frame {
58 uint16_t frame_control;
59 uint16_t duration_usec;
60 uint8_t destination_mac[6];
61 uint8_t source_mac[6];
62 uint8_t address[6];
63 uint16_t sequence_control;
64 union {
65 struct {
66 uint16_t reserved_1;
67 uint16_t reserved_2;
68 uint16_t status_code;
69 } authentiate_message;
70 struct {
71 uint16_t reason_code;
72 } deauthentiate_message;
73 struct {
74 uint16_t reserved_1;
75 uint16_t status_code;
76 } associate_response;
77 } u;
mukesh agrawal7a4e4002011-09-06 11:26:05 -070078};
79
Wade Guthrie64b4c142012-08-20 15:21:01 -070080// Status/reason code returned by nl80211 messages: Authenticate,
81// Deauthenticate, Associate, and Reassociate.
Wade Guthried4977f22012-08-22 12:37:54 -070082enum WiFiReasonCode {
83 // 0 is reserved.
84 kReasonCodeUnspecified = 1,
85 kReasonCodePreviousAuthenticationInvalid = 2,
86 kReasonCodeSenderHasLeft = 3,
87 kReasonCodeInactivity = 4,
88 kReasonCodeTooManySTAs = 5,
89 kReasonCodeNonAuthenticated = 6,
90 kReasonCodeNonAssociated = 7,
91 kReasonCodeDisassociatedHasLeft = 8,
92 kReasonCodeReassociationNotAuthenticated = 9,
93 kReasonCodeUnacceptablePowerCapability = 10,
94 kReasonCodeUnacceptableSupportedChannelInfo = 11,
95 // 12 is reserved.
96 kReasonCodeInvalidInfoElement = 13,
97 kReasonCodeMICFailure = 14,
98 kReasonCode4WayTimeout = 15,
99 kReasonCodeGroupKeyHandshakeTimeout = 16,
100 kReasonCodeDifferenIE = 17,
101 kReasonCodeGroupCipherInvalid = 18,
102 kReasonCodePairwiseCipherInvalid = 19,
103 kReasonCodeAkmpInvalid = 20,
104 kReasonCodeUnsupportedRsnIeVersion = 21,
105 kReasonCodeInvalidRsnIeCaps = 22,
106 kReasonCode8021XAuth = 23,
107 kReasonCodeCipherSuiteRejected = 24,
108 // 25-31 are reserved.
109 kReasonCodeUnspecifiedQoS = 32,
110 kReasonCodeQoSBandwidth = 33,
111 kReasonCodeiPoorConditions = 34,
112 kReasonCodeOutsideTxop = 35,
113 kReasonCodeStaLeaving = 36,
114 kReasonCodeUnacceptableMechanism = 37,
115 kReasonCodeSetupRequired = 38,
116 kReasonCodeTimeout = 39,
117 kReasonCodeCipherSuiteNotSupported = 45,
118 kReasonCodeMax,
119 kReasonCodeInvalid = UINT16_MAX
Wade Guthrie64b4c142012-08-20 15:21:01 -0700120};
121
Wade Guthried4977f22012-08-22 12:37:54 -0700122enum WiFiStatusCode {
123 kStatusCodeSuccessful = 0,
124 kStatusCodeFailure = 1,
125 // 2-9 are reserved.
126 kStatusCodeAllCapabilitiesNotSupported = 10,
127 kStatusCodeCantConfirmAssociation = 11,
128 kStatusCodeAssociationDenied = 12,
129 kStatusCodeAuthenticationUnsupported = 13,
130 kStatusCodeOutOfSequence = 14,
131 kStatusCodeChallengeFailure = 15,
132 kStatusCodeFrameTimeout = 16,
133 kStatusCodeMaxSta = 17,
134 kStatusCodeDataRateUnsupported = 18,
135 kStatusCodeShortPreambleUnsupported = 19,
136 kStatusCodePbccUnsupported = 20,
137 kStatusCodeChannelAgilityUnsupported = 21,
138 kStatusCodeNeedSpectrumManagement = 22,
139 kStatusCodeUnacceptablePowerCapability = 23,
140 kStatusCodeUnacceptableSupportedChannelInfo = 24,
141 kStatusCodeShortTimeSlotRequired = 25,
142 kStatusCodeDssOfdmRequired = 26,
143 // 27-31 are reserved.
144 kStatusCodeQosFailure = 32,
145 kStatusCodeInsufficientBandwithForQsta = 33,
146 kStatusCodePoorConditions = 34,
147 kStatusCodeQosNotSupported = 35,
148 // 36 is reserved.
149 kStatusCodeDeclined = 37,
150 kStatusCodeInvalidParameterValues = 38,
151 kStatusCodeCannotBeHonored = 39,
152 kStatusCodeInvalidInfoElement = 40,
153 kStatusCodeGroupCipherInvalid = 41,
154 kStatusCodePairwiseCipherInvalid = 42,
155 kStatusCodeAkmpInvalid = 43,
156 kStatusCodeUnsupportedRsnIeVersion = 44,
157 kStatusCodeInvalidRsnIeCaps = 45,
158 kStatusCodeCipherSuiteRejected = 46,
159 kStatusCodeTsDelayNotMet = 47,
160 kStatusCodeDirectLinkIllegal = 48,
161 kStatusCodeStaNotInBss = 49,
162 kStatusCodeStaNotInQsta = 50,
163 kStatusCodeExcessiveListenInterval = 51,
164 kStatusCodeMax,
165 kStatusCodeInvalid = UINT16_MAX
166};
167
168} // namespace IEEE_80211
Wade Guthrie0d438532012-05-18 14:18:50 -0700169
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700170} // namespace shill
171
172#endif // SHILL_IEEE_80211_H