blob: bb5c68e8dd4e6b9054114d983f254bdc27c1f96c [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
Ben Chanc45688b2014-07-02 23:50:45 -07005#ifndef SHILL_IEEE80211_H_
6#define SHILL_IEEE80211_H_
mukesh agrawal7a4e4002011-09-06 11:26:05 -07007
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 {
Wade Guthriec2728962013-07-10 09:32:16 -070083 kReasonCodeReserved0 = 0, // 0 is reserved.
Wade Guthried4977f22012-08-22 12:37:54 -070084 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,
Wade Guthriec2728962013-07-10 09:32:16 -070095 kReasonCodeReserved12 = 12, // 12 is reserved.
Wade Guthried4977f22012-08-22 12:37:54 -070096 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,
Wade Guthriec2728962013-07-10 09:32:16 -0700108 kReasonCodeReservedBegin25 = 25, // 25-31 are reserved.
109 kReasonCodeReservedEnd31 = 31,
Wade Guthried4977f22012-08-22 12:37:54 -0700110 kReasonCodeUnspecifiedQoS = 32,
111 kReasonCodeQoSBandwidth = 33,
112 kReasonCodeiPoorConditions = 34,
113 kReasonCodeOutsideTxop = 35,
114 kReasonCodeStaLeaving = 36,
115 kReasonCodeUnacceptableMechanism = 37,
116 kReasonCodeSetupRequired = 38,
117 kReasonCodeTimeout = 39,
Wade Guthriec2728962013-07-10 09:32:16 -0700118 kReasonCodeReservedBegin40 = 40, // 40-44 are reserved.
119 kReasonCodeReservedEnd44 = 44,
Wade Guthried4977f22012-08-22 12:37:54 -0700120 kReasonCodeCipherSuiteNotSupported = 45,
121 kReasonCodeMax,
122 kReasonCodeInvalid = UINT16_MAX
Wade Guthrie64b4c142012-08-20 15:21:01 -0700123};
124
Wade Guthried4977f22012-08-22 12:37:54 -0700125enum WiFiStatusCode {
126 kStatusCodeSuccessful = 0,
127 kStatusCodeFailure = 1,
128 // 2-9 are reserved.
129 kStatusCodeAllCapabilitiesNotSupported = 10,
130 kStatusCodeCantConfirmAssociation = 11,
131 kStatusCodeAssociationDenied = 12,
132 kStatusCodeAuthenticationUnsupported = 13,
133 kStatusCodeOutOfSequence = 14,
134 kStatusCodeChallengeFailure = 15,
135 kStatusCodeFrameTimeout = 16,
136 kStatusCodeMaxSta = 17,
137 kStatusCodeDataRateUnsupported = 18,
138 kStatusCodeShortPreambleUnsupported = 19,
139 kStatusCodePbccUnsupported = 20,
140 kStatusCodeChannelAgilityUnsupported = 21,
141 kStatusCodeNeedSpectrumManagement = 22,
142 kStatusCodeUnacceptablePowerCapability = 23,
143 kStatusCodeUnacceptableSupportedChannelInfo = 24,
144 kStatusCodeShortTimeSlotRequired = 25,
145 kStatusCodeDssOfdmRequired = 26,
146 // 27-31 are reserved.
147 kStatusCodeQosFailure = 32,
148 kStatusCodeInsufficientBandwithForQsta = 33,
149 kStatusCodePoorConditions = 34,
150 kStatusCodeQosNotSupported = 35,
151 // 36 is reserved.
152 kStatusCodeDeclined = 37,
153 kStatusCodeInvalidParameterValues = 38,
154 kStatusCodeCannotBeHonored = 39,
155 kStatusCodeInvalidInfoElement = 40,
156 kStatusCodeGroupCipherInvalid = 41,
157 kStatusCodePairwiseCipherInvalid = 42,
158 kStatusCodeAkmpInvalid = 43,
159 kStatusCodeUnsupportedRsnIeVersion = 44,
160 kStatusCodeInvalidRsnIeCaps = 45,
161 kStatusCodeCipherSuiteRejected = 46,
162 kStatusCodeTsDelayNotMet = 47,
163 kStatusCodeDirectLinkIllegal = 48,
164 kStatusCodeStaNotInBss = 49,
165 kStatusCodeStaNotInQsta = 50,
166 kStatusCodeExcessiveListenInterval = 51,
167 kStatusCodeMax,
168 kStatusCodeInvalid = UINT16_MAX
169};
170
171} // namespace IEEE_80211
Wade Guthrie0d438532012-05-18 14:18:50 -0700172
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700173} // namespace shill
174
Ben Chanc45688b2014-07-02 23:50:45 -0700175#endif // SHILL_IEEE80211_H_