blob: 72234e53ea0c7dacf62f7f7fbba87f67f969ac14 [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 {
Thieu Le1df7f4e2012-02-10 15:21:45 -080011const uint8_t kElemIdErp = 42;
12const uint8_t kElemIdHTCap = 45;
13const uint8_t kElemIdHTInfo = 61;
Paul Stewarta5e7d5f2013-01-09 18:06:15 -080014const uint8_t kElemIdRSN = 48;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070015const uint8_t kElemIdVendor = 221;
Thieu Le1df7f4e2012-02-10 15:21:45 -080016
mukesh agrawal7a4e4002011-09-06 11:26:05 -070017const unsigned int kMaxSSIDLen = 32;
18
19const unsigned int kWEP40AsciiLen = 5;
20const unsigned int kWEP40HexLen = 10;
21const unsigned int kWEP104AsciiLen = 13;
22const unsigned int kWEP104HexLen = 26;
mukesh agrawal8ede0522011-10-03 14:57:44 -070023
24const unsigned int kWPAAsciiMinLen = 8;
25const unsigned int kWPAAsciiMaxLen = 63;
26const unsigned int kWPAHexLen = 64;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070027
28const uint32_t kOUIVendorEpigram = 0x00904c;
29const uint32_t kOUIVendorMicrosoft = 0x0050f2;
30
Paul Stewarta5e7d5f2013-01-09 18:06:15 -080031const uint8_t kOUIMicrosoftWPA = 1;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070032const uint8_t kOUIMicrosoftWPS = 4;
33const uint16_t kWPSElementManufacturer = 0x1021;
34const uint16_t kWPSElementModelName = 0x1023;
35const uint16_t kWPSElementModelNumber = 0x1024;
36const uint16_t kWPSElementDeviceName = 0x1011;
Wade Guthrie0d438532012-05-18 14:18:50 -070037
Paul Stewarta5e7d5f2013-01-09 18:06:15 -080038const int kRSNIEVersionLen = 2;
39const int kRSNIESelectorLen = 4;
40const int kRSNIECipherCountOffset = kRSNIEVersionLen + kRSNIESelectorLen;
41const int kRSNIECipherCountLen = 2;
42const int kRSNIENumCiphers = 2;
43const int kRSNIECapabilitiesLen = 2;
44const uint16_t kRSNCapabilityPreAuth = 0x0001;
45const uint16_t kRSNCapabilityPairwise = 0x0002;
46const uint16_t kRSNCapabilityPTKSA = 0x000c;
47const uint16_t kRSNCapabilityGTKSA = 0x0030;
48const uint16_t kRSNCapabilityFrameProtectionRequired = 0x0040;
49const uint16_t kRSNCapabilityFrameProtectionCapable = 0x0080;
50const uint16_t kRSNCapabilityPeerKey = 0x0200;
51
Wade Guthrie0d438532012-05-18 14:18:50 -070052// This structure is incomplete. Fields will be added as necessary.
53//
54// NOTE: the uint16_t stuff is in little-endian format so conversions are
55// required.
56struct ieee80211_frame {
57 uint16_t frame_control;
58 uint16_t duration_usec;
59 uint8_t destination_mac[6];
60 uint8_t source_mac[6];
61 uint8_t address[6];
62 uint16_t sequence_control;
63 union {
64 struct {
65 uint16_t reserved_1;
66 uint16_t reserved_2;
67 uint16_t status_code;
68 } authentiate_message;
69 struct {
70 uint16_t reason_code;
71 } deauthentiate_message;
72 struct {
73 uint16_t reserved_1;
74 uint16_t status_code;
75 } associate_response;
76 } u;
mukesh agrawal7a4e4002011-09-06 11:26:05 -070077};
78
Wade Guthrie64b4c142012-08-20 15:21:01 -070079// Status/reason code returned by nl80211 messages: Authenticate,
80// Deauthenticate, Associate, and Reassociate.
Wade Guthried4977f22012-08-22 12:37:54 -070081enum WiFiReasonCode {
82 // 0 is reserved.
83 kReasonCodeUnspecified = 1,
84 kReasonCodePreviousAuthenticationInvalid = 2,
85 kReasonCodeSenderHasLeft = 3,
86 kReasonCodeInactivity = 4,
87 kReasonCodeTooManySTAs = 5,
88 kReasonCodeNonAuthenticated = 6,
89 kReasonCodeNonAssociated = 7,
90 kReasonCodeDisassociatedHasLeft = 8,
91 kReasonCodeReassociationNotAuthenticated = 9,
92 kReasonCodeUnacceptablePowerCapability = 10,
93 kReasonCodeUnacceptableSupportedChannelInfo = 11,
94 // 12 is reserved.
95 kReasonCodeInvalidInfoElement = 13,
96 kReasonCodeMICFailure = 14,
97 kReasonCode4WayTimeout = 15,
98 kReasonCodeGroupKeyHandshakeTimeout = 16,
99 kReasonCodeDifferenIE = 17,
100 kReasonCodeGroupCipherInvalid = 18,
101 kReasonCodePairwiseCipherInvalid = 19,
102 kReasonCodeAkmpInvalid = 20,
103 kReasonCodeUnsupportedRsnIeVersion = 21,
104 kReasonCodeInvalidRsnIeCaps = 22,
105 kReasonCode8021XAuth = 23,
106 kReasonCodeCipherSuiteRejected = 24,
107 // 25-31 are reserved.
108 kReasonCodeUnspecifiedQoS = 32,
109 kReasonCodeQoSBandwidth = 33,
110 kReasonCodeiPoorConditions = 34,
111 kReasonCodeOutsideTxop = 35,
112 kReasonCodeStaLeaving = 36,
113 kReasonCodeUnacceptableMechanism = 37,
114 kReasonCodeSetupRequired = 38,
115 kReasonCodeTimeout = 39,
116 kReasonCodeCipherSuiteNotSupported = 45,
117 kReasonCodeMax,
118 kReasonCodeInvalid = UINT16_MAX
Wade Guthrie64b4c142012-08-20 15:21:01 -0700119};
120
Wade Guthried4977f22012-08-22 12:37:54 -0700121enum WiFiStatusCode {
122 kStatusCodeSuccessful = 0,
123 kStatusCodeFailure = 1,
124 // 2-9 are reserved.
125 kStatusCodeAllCapabilitiesNotSupported = 10,
126 kStatusCodeCantConfirmAssociation = 11,
127 kStatusCodeAssociationDenied = 12,
128 kStatusCodeAuthenticationUnsupported = 13,
129 kStatusCodeOutOfSequence = 14,
130 kStatusCodeChallengeFailure = 15,
131 kStatusCodeFrameTimeout = 16,
132 kStatusCodeMaxSta = 17,
133 kStatusCodeDataRateUnsupported = 18,
134 kStatusCodeShortPreambleUnsupported = 19,
135 kStatusCodePbccUnsupported = 20,
136 kStatusCodeChannelAgilityUnsupported = 21,
137 kStatusCodeNeedSpectrumManagement = 22,
138 kStatusCodeUnacceptablePowerCapability = 23,
139 kStatusCodeUnacceptableSupportedChannelInfo = 24,
140 kStatusCodeShortTimeSlotRequired = 25,
141 kStatusCodeDssOfdmRequired = 26,
142 // 27-31 are reserved.
143 kStatusCodeQosFailure = 32,
144 kStatusCodeInsufficientBandwithForQsta = 33,
145 kStatusCodePoorConditions = 34,
146 kStatusCodeQosNotSupported = 35,
147 // 36 is reserved.
148 kStatusCodeDeclined = 37,
149 kStatusCodeInvalidParameterValues = 38,
150 kStatusCodeCannotBeHonored = 39,
151 kStatusCodeInvalidInfoElement = 40,
152 kStatusCodeGroupCipherInvalid = 41,
153 kStatusCodePairwiseCipherInvalid = 42,
154 kStatusCodeAkmpInvalid = 43,
155 kStatusCodeUnsupportedRsnIeVersion = 44,
156 kStatusCodeInvalidRsnIeCaps = 45,
157 kStatusCodeCipherSuiteRejected = 46,
158 kStatusCodeTsDelayNotMet = 47,
159 kStatusCodeDirectLinkIllegal = 48,
160 kStatusCodeStaNotInBss = 49,
161 kStatusCodeStaNotInQsta = 50,
162 kStatusCodeExcessiveListenInterval = 51,
163 kStatusCodeMax,
164 kStatusCodeInvalid = UINT16_MAX
165};
166
167} // namespace IEEE_80211
Wade Guthrie0d438532012-05-18 14:18:50 -0700168
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700169} // namespace shill
170
171#endif // SHILL_IEEE_80211_H