blob: cbbee26c899e333ba4ebf1e147d5607c23ef54ce [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 Stewart72b2fdc2012-06-02 08:58:51 -070014const uint8_t kElemIdVendor = 221;
Thieu Le1df7f4e2012-02-10 15:21:45 -080015
mukesh agrawal7a4e4002011-09-06 11:26:05 -070016const unsigned int kMaxSSIDLen = 32;
17
18const unsigned int kWEP40AsciiLen = 5;
19const unsigned int kWEP40HexLen = 10;
20const unsigned int kWEP104AsciiLen = 13;
21const unsigned int kWEP104HexLen = 26;
mukesh agrawal8ede0522011-10-03 14:57:44 -070022
23const unsigned int kWPAAsciiMinLen = 8;
24const unsigned int kWPAAsciiMaxLen = 63;
25const unsigned int kWPAHexLen = 64;
Paul Stewart72b2fdc2012-06-02 08:58:51 -070026
27const uint32_t kOUIVendorEpigram = 0x00904c;
28const uint32_t kOUIVendorMicrosoft = 0x0050f2;
29
30const uint8_t kOUIMicrosoftWPS = 4;
31const uint16_t kWPSElementManufacturer = 0x1021;
32const uint16_t kWPSElementModelName = 0x1023;
33const uint16_t kWPSElementModelNumber = 0x1024;
34const uint16_t kWPSElementDeviceName = 0x1011;
Wade Guthrie0d438532012-05-18 14:18:50 -070035
36// This structure is incomplete. Fields will be added as necessary.
37//
38// NOTE: the uint16_t stuff is in little-endian format so conversions are
39// required.
40struct ieee80211_frame {
41 uint16_t frame_control;
42 uint16_t duration_usec;
43 uint8_t destination_mac[6];
44 uint8_t source_mac[6];
45 uint8_t address[6];
46 uint16_t sequence_control;
47 union {
48 struct {
49 uint16_t reserved_1;
50 uint16_t reserved_2;
51 uint16_t status_code;
52 } authentiate_message;
53 struct {
54 uint16_t reason_code;
55 } deauthentiate_message;
56 struct {
57 uint16_t reserved_1;
58 uint16_t status_code;
59 } associate_response;
60 } u;
mukesh agrawal7a4e4002011-09-06 11:26:05 -070061};
62
Wade Guthrie64b4c142012-08-20 15:21:01 -070063// Status/reason code returned by nl80211 messages: Authenticate,
64// Deauthenticate, Associate, and Reassociate.
Wade Guthried4977f22012-08-22 12:37:54 -070065enum WiFiReasonCode {
66 // 0 is reserved.
67 kReasonCodeUnspecified = 1,
68 kReasonCodePreviousAuthenticationInvalid = 2,
69 kReasonCodeSenderHasLeft = 3,
70 kReasonCodeInactivity = 4,
71 kReasonCodeTooManySTAs = 5,
72 kReasonCodeNonAuthenticated = 6,
73 kReasonCodeNonAssociated = 7,
74 kReasonCodeDisassociatedHasLeft = 8,
75 kReasonCodeReassociationNotAuthenticated = 9,
76 kReasonCodeUnacceptablePowerCapability = 10,
77 kReasonCodeUnacceptableSupportedChannelInfo = 11,
78 // 12 is reserved.
79 kReasonCodeInvalidInfoElement = 13,
80 kReasonCodeMICFailure = 14,
81 kReasonCode4WayTimeout = 15,
82 kReasonCodeGroupKeyHandshakeTimeout = 16,
83 kReasonCodeDifferenIE = 17,
84 kReasonCodeGroupCipherInvalid = 18,
85 kReasonCodePairwiseCipherInvalid = 19,
86 kReasonCodeAkmpInvalid = 20,
87 kReasonCodeUnsupportedRsnIeVersion = 21,
88 kReasonCodeInvalidRsnIeCaps = 22,
89 kReasonCode8021XAuth = 23,
90 kReasonCodeCipherSuiteRejected = 24,
91 // 25-31 are reserved.
92 kReasonCodeUnspecifiedQoS = 32,
93 kReasonCodeQoSBandwidth = 33,
94 kReasonCodeiPoorConditions = 34,
95 kReasonCodeOutsideTxop = 35,
96 kReasonCodeStaLeaving = 36,
97 kReasonCodeUnacceptableMechanism = 37,
98 kReasonCodeSetupRequired = 38,
99 kReasonCodeTimeout = 39,
100 kReasonCodeCipherSuiteNotSupported = 45,
101 kReasonCodeMax,
102 kReasonCodeInvalid = UINT16_MAX
Wade Guthrie64b4c142012-08-20 15:21:01 -0700103};
104
Wade Guthried4977f22012-08-22 12:37:54 -0700105enum WiFiStatusCode {
106 kStatusCodeSuccessful = 0,
107 kStatusCodeFailure = 1,
108 // 2-9 are reserved.
109 kStatusCodeAllCapabilitiesNotSupported = 10,
110 kStatusCodeCantConfirmAssociation = 11,
111 kStatusCodeAssociationDenied = 12,
112 kStatusCodeAuthenticationUnsupported = 13,
113 kStatusCodeOutOfSequence = 14,
114 kStatusCodeChallengeFailure = 15,
115 kStatusCodeFrameTimeout = 16,
116 kStatusCodeMaxSta = 17,
117 kStatusCodeDataRateUnsupported = 18,
118 kStatusCodeShortPreambleUnsupported = 19,
119 kStatusCodePbccUnsupported = 20,
120 kStatusCodeChannelAgilityUnsupported = 21,
121 kStatusCodeNeedSpectrumManagement = 22,
122 kStatusCodeUnacceptablePowerCapability = 23,
123 kStatusCodeUnacceptableSupportedChannelInfo = 24,
124 kStatusCodeShortTimeSlotRequired = 25,
125 kStatusCodeDssOfdmRequired = 26,
126 // 27-31 are reserved.
127 kStatusCodeQosFailure = 32,
128 kStatusCodeInsufficientBandwithForQsta = 33,
129 kStatusCodePoorConditions = 34,
130 kStatusCodeQosNotSupported = 35,
131 // 36 is reserved.
132 kStatusCodeDeclined = 37,
133 kStatusCodeInvalidParameterValues = 38,
134 kStatusCodeCannotBeHonored = 39,
135 kStatusCodeInvalidInfoElement = 40,
136 kStatusCodeGroupCipherInvalid = 41,
137 kStatusCodePairwiseCipherInvalid = 42,
138 kStatusCodeAkmpInvalid = 43,
139 kStatusCodeUnsupportedRsnIeVersion = 44,
140 kStatusCodeInvalidRsnIeCaps = 45,
141 kStatusCodeCipherSuiteRejected = 46,
142 kStatusCodeTsDelayNotMet = 47,
143 kStatusCodeDirectLinkIllegal = 48,
144 kStatusCodeStaNotInBss = 49,
145 kStatusCodeStaNotInQsta = 50,
146 kStatusCodeExcessiveListenInterval = 51,
147 kStatusCodeMax,
148 kStatusCodeInvalid = UINT16_MAX
149};
150
151} // namespace IEEE_80211
Wade Guthrie0d438532012-05-18 14:18:50 -0700152
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700153} // namespace shill
154
155#endif // SHILL_IEEE_80211_H