2 # Copyright (c) 2014, Jouni Malinen <j@w1.fi>
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
38 'GET_MESH_CONFIG': 28,
39 'SET_MESH_CONFIG': 29,
40 'SET_MGMT_EXTRA_IE[RESERVED]': 30,
44 'NEW_SCAN_RESULTS': 34,
51 'MICHAEL_MIC_FAILURE': 41,
52 'REG_BEACON_HINT': 42,
59 'SET_WIPHY_NETNS': 49,
61 'NEW_SURVEY_RESULTS': 51,
65 'REMAIN_ON_CHANNEL': 55,
66 'CANCEL_REMAIN_ON_CHANNEL': 56,
67 'SET_TX_BITRATE_MASK': 57,
70 'FRAME_TX_STATUS': 60,
77 'FRAME_WAIT_CANCEL': 67,
80 'UNPROT_DEAUTHENTICATE': 70,
81 'UNPROT_DISASSOCIATE': 71,
82 'NEW_PEER_CANDIDATE': 72,
85 'START_SCHED_SCAN': 75,
86 'STOP_SCHED_SCAN': 76,
87 'SCHED_SCAN_RESULTS': 77,
88 'SCHED_SCAN_STOPPED': 78,
89 'SET_REKEY_OFFLOAD': 79,
90 'PMKSA_CANDIDATE': 80,
93 'UNEXPECTED_FRAME': 83,
95 'REGISTER_BEACONS': 85,
96 'UNEXPECTED_4ADDR_FRAME': 86,
98 'CH_SWITCH_NOTIFY': 88,
99 'START_P2P_DEVICE': 89,
100 'STOP_P2P_DEVICE': 90,
102 'SET_MCAST_RATE': 92,
105 'GET_PROTOCOL_FEATURES': 95,
108 'CRIT_PROTOCOL_START': 98,
109 'CRIT_PROTOCOL_STOP': 99,
112 'CHANNEL_SWITCH': 102,
129 'BEACON_INTERVAL': 12,
135 'STA_LISTEN_INTERVAL': 18,
136 'STA_SUPPORTED_RATES': 19,
142 'STA_PLINK_ACTION': 25,
143 'MPATH_NEXT_HOP': 26,
146 'BSS_SHORT_PREAMBLE': 29,
147 'BSS_SHORT_SLOT_TIME': 30,
149 'SUPPORTED_IFTYPES': 32,
153 'BSS_BASIC_RATES': 36,
154 'WIPHY_TXQ_PARAMS': 37,
156 'WIPHY_CHANNEL_TYPE': 39,
157 'KEY_DEFAULT_MGMT': 40,
160 'MAX_NUM_SCAN_SSIDS': 43,
161 'SCAN_FREQUENCIES': 44,
167 'SUPPORTED_COMMANDS': 50,
173 'MAX_SCAN_IE_LEN': 56,
178 'WIPHY_RETRY_SHORT': 61,
179 'WIPHY_RETRY_LONG': 62,
180 'WIPHY_FRAG_THRESHOLD': 63,
181 'WIPHY_RTS_THRESHOLD': 64,
188 'DISCONNECTED_BY_AP': 71,
190 'CIPHER_SUITES_PAIRWISE': 73,
191 'CIPHER_SUITE_GROUP': 74,
203 'MAX_NUM_PMKIDS': 86,
206 'WIPHY_COVERAGE_CLASS': 89,
212 'LOCAL_STATE_CHANGE': 95,
214 'WIPHY_TX_POWER_SETTING': 97,
215 'WIPHY_TX_POWER_LEVEL': 98,
216 'TX_FRAME_TYPES': 99,
217 'RX_FRAME_TYPES': 100,
219 'CONTROL_PORT_ETHERTYPE': 102,
220 'CONTROL_PORT_NO_ENCRYPT': 103,
221 'SUPPORT_IBSS_RSN': 104,
222 'WIPHY_ANTENNA_TX': 105,
223 'WIPHY_ANTENNA_RX': 106,
225 'OFFCHANNEL_TX_OK': 108,
226 'BSS_HT_OPMODE': 109,
227 'KEY_DEFAULT_TYPES': 110,
228 'MAX_REMAIN_ON_CHANNEL_DURATION': 111,
230 'WIPHY_ANTENNA_AVAIL_TX': 113,
231 'WIPHY_ANTENNA_AVAIL_RX': 114,
232 'SUPPORT_MESH_AUTH': 115,
233 'STA_PLINK_STATE': 116,
234 'WOWLAN_TRIGGERS': 117,
235 'WOWLAN_TRIGGERS_SUPPORTED': 118,
236 'SCHED_SCAN_INTERVAL': 119,
237 'INTERFACE_COMBINATIONS': 120,
238 'SOFTWARE_IFTYPES': 121,
240 'MAX_NUM_SCHED_SCAN_SSIDS': 123,
241 'MAX_SCHED_SCAN_IE_LEN': 124,
242 'SCAN_SUPP_RATES': 125,
244 'IE_PROBE_RESP': 127,
245 'IE_ASSOC_RESP': 128,
247 'SUPPORT_AP_UAPSD': 130,
249 'SCHED_SCAN_MATCH': 132,
250 'MAX_MATCH_SETS': 133,
251 'PMKSA_CANDIDATE': 134,
252 'TX_NO_CCK_RATE': 135,
254 'TDLS_DIALOG_TOKEN': 137,
255 'TDLS_OPERATION': 138,
257 'TDLS_EXTERNAL_SETUP': 140,
258 'DEVICE_AP_SME': 141,
259 'DONT_WAIT_FOR_ACK': 142,
260 'FEATURE_FLAGS': 143,
261 'PROBE_RESP_OFFLOAD': 144,
265 'HT_CAPABILITY_MASK': 148,
267 'INACTIVITY_TIMEOUT': 150,
268 'RX_SIGNAL_DBM': 151,
269 'BG_SCAN_PERIOD': 152,
271 'USER_REG_HINT_TYPE': 154,
272 'CONN_FAILED_REASON': 155,
274 'VHT_CAPABILITY': 157,
276 'CHANNEL_WIDTH': 159,
281 'LOCAL_MESH_POWER_MODE': 164,
287 'EXT_CAPA_MASK': 170,
288 'STA_CAPABILITY': 171,
289 'STA_EXT_CAPABILITY': 172,
290 'PROTOCOL_FEATURES': 173,
291 'SPLIT_WIPHY_DUMP': 174,
293 'VHT_CAPABILITY_MASK': 176,
297 'MAX_CRIT_PROT_DURATION': 180,
299 'COALESCE_RULE': 182,
300 'CH_SWITCH_COUNT': 183,
301 'CH_SWITCH_BLOCK_TX': 184,
303 'CSA_C_OFF_BEACON': 186,
304 'CSA_C_OFF_PRESP': 187,
306 'STA_SUPPORTED_CHANNELS': 189,
307 'STA_SUPPORTED_OPER_CLASSES': 190,
309 'SUPPORT_5_MHZ': 192,
310 'SUPPORT_10_MHZ': 193,
313 'VENDOR_SUBCMD': 196,
315 'VENDOR_EVENTS': 198,
318 'WIPHY_FREQ_HINT': 201,
319 'MAX_AP_ASSOC_STA': 202,
322 def build_nl80211_attr(id, val):
323 return struct.pack("@HH", 4 + len(val), nl80211_attr[id]) + val
325 def build_nl80211_attr_u32(id, val):
326 return build_nl80211_attr(id, struct.pack("@I", val))
328 def build_nl80211_attr_u16(id, val):
329 return build_nl80211_attr(id, struct.pack("@HH", val, 0))
331 def build_nl80211_attr_u8(id, val):
332 return build_nl80211_attr(id, struct.pack("@4B", val, 0, 0, 0))
334 def build_nl80211_attr_flag(id):
335 return build_nl80211_attr(id, '')
337 def build_nl80211_attr_mac(id, val):
338 addr = struct.unpack('6B', binascii.unhexlify(val.replace(':','')))
340 aval = struct.pack('<6BBB', *t)
341 return build_nl80211_attr(id, aval)
343 def parse_nl80211_attrs(msg):
346 alen,attr = struct.unpack("@HH", msg[0:4])
348 raise Exception("Too short nl80211 attribute")
352 raise Exception("nl80211 attribute underflow")
353 attrs[attr] = msg[0:alen]