]> git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_wpas_ctrl.py
5d77aa676b92e882c2c8b0cfea6a4400beed37fb
[thirdparty/hostap.git] / tests / hwsim / test_wpas_ctrl.py
1 # wpa_supplicant control interface
2 # Copyright (c) 2014, Qualcomm Atheros, Inc.
3 #
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
6
7 import logging
8 logger = logging.getLogger()
9 import subprocess
10 import time
11
12 import hostapd
13 from wpasupplicant import WpaSupplicant
14 from utils import alloc_fail
15
16 def test_wpas_ctrl_network(dev):
17 """wpa_supplicant ctrl_iface network set/get"""
18 id = dev[0].add_network()
19
20 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id)):
21 raise Exception("Unexpected success for invalid SET_NETWORK")
22 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + " name"):
23 raise Exception("Unexpected success for invalid SET_NETWORK")
24 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id + 1) + " proto OPEN"):
25 raise Exception("Unexpected success for invalid network id")
26 if "FAIL" not in dev[0].request("GET_NETWORK " + str(id)):
27 raise Exception("Unexpected success for invalid GET_NETWORK")
28 if "FAIL" not in dev[0].request("GET_NETWORK " + str(id + 1) + " proto"):
29 raise Exception("Unexpected success for invalid network id")
30
31 tests = (("key_mgmt", "WPA-PSK WPA-EAP IEEE8021X NONE WPA-NONE FT-PSK FT-EAP WPA-PSK-SHA256 WPA-EAP-SHA256"),
32 ("pairwise", "CCMP-256 GCMP-256 CCMP GCMP TKIP"),
33 ("group", "CCMP-256 GCMP-256 CCMP GCMP TKIP WEP104 WEP40"),
34 ("auth_alg", "OPEN SHARED LEAP"),
35 ("scan_freq", "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"),
36 ("freq_list", "2412 2417"),
37 ("scan_ssid", "1"),
38 ("bssid", "00:11:22:33:44:55"),
39 ("proto", "WPA RSN OSEN"),
40 ("eap", "TLS"),
41 ("go_p2p_dev_addr", "22:33:44:55:66:aa"),
42 ("p2p_client_list", "22:33:44:55:66:bb 02:11:22:33:44:55"))
43
44 dev[0].set_network_quoted(id, "ssid", "test")
45 for field, value in tests:
46 dev[0].set_network(id, field, value)
47 res = dev[0].get_network(id, field)
48 if res != value:
49 raise Exception("Unexpected response for '" + field + "': '" + res + "'")
50
51 q_tests = (("identity", "hello"),
52 ("anonymous_identity", "foo@nowhere.com"))
53 for field, value in q_tests:
54 dev[0].set_network_quoted(id, field, value)
55 res = dev[0].get_network(id, field)
56 if res != '"' + value + '"':
57 raise Exception("Unexpected quoted response for '" + field + "': '" + res + "'")
58
59 get_tests = (("foo", None), ("ssid", '"test"'))
60 for field, value in get_tests:
61 res = dev[0].get_network(id, field)
62 if res != value:
63 raise Exception("Unexpected response for '" + field + "': '" + res + "'")
64
65 if dev[0].get_network(id, "password"):
66 raise Exception("Unexpected response for 'password'")
67 dev[0].set_network_quoted(id, "password", "foo")
68 if dev[0].get_network(id, "password") != '*':
69 raise Exception("Unexpected response for 'password' (expected *)")
70 dev[0].set_network(id, "password", "hash:12345678901234567890123456789012")
71 if dev[0].get_network(id, "password") != '*':
72 raise Exception("Unexpected response for 'password' (expected *)")
73 dev[0].set_network(id, "password", "NULL")
74 if dev[0].get_network(id, "password"):
75 raise Exception("Unexpected response for 'password'")
76 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + " password hash:12"):
77 raise Exception("Unexpected success for invalid password hash")
78 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + " password hash:123456789012345678x0123456789012"):
79 raise Exception("Unexpected success for invalid password hash")
80
81 dev[0].set_network(id, "identity", "414243")
82 if dev[0].get_network(id, "identity") != '"ABC"':
83 raise Exception("Unexpected identity hex->text response")
84
85 dev[0].set_network(id, "identity", 'P"abc\ndef"')
86 if dev[0].get_network(id, "identity") != "6162630a646566":
87 raise Exception("Unexpected identity printf->hex response")
88
89 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' identity P"foo'):
90 raise Exception("Unexpected success for invalid identity string")
91
92 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' identity 12x3'):
93 raise Exception("Unexpected success for invalid identity string")
94
95 for i in range(0, 4):
96 if "FAIL" in dev[0].request("SET_NETWORK " + str(id) + ' wep_key' + str(i) + ' aabbccddee'):
97 raise Exception("Unexpected wep_key set failure")
98 if dev[0].get_network(id, "wep_key" + str(i)) != '*':
99 raise Exception("Unexpected wep_key get failure")
100
101 if "FAIL" in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'):
102 raise Exception("Unexpected failure for psk_list string")
103
104 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list 00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'):
105 raise Exception("Unexpected success for invalid psk_list string")
106
107 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'):
108 raise Exception("Unexpected success for invalid psk_list string")
109
110 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55+0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'):
111 raise Exception("Unexpected success for invalid psk_list string")
112
113 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde'):
114 raise Exception("Unexpected success for invalid psk_list string")
115
116 if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdex'):
117 raise Exception("Unexpected success for invalid psk_list string")
118
119 if dev[0].get_network(id, "psk_list"):
120 raise Exception("Unexpected psk_list get response")
121
122 if dev[0].list_networks()[0]['ssid'] != "test":
123 raise Exception("Unexpected ssid in LIST_NETWORKS")
124 dev[0].set_network(id, "ssid", "NULL")
125 if dev[0].list_networks()[0]['ssid'] != "":
126 raise Exception("Unexpected ssid in LIST_NETWORKS after clearing it")
127
128 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' ssid "0123456789abcdef0123456789abcdef0"'):
129 raise Exception("Too long SSID accepted")
130 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' scan_ssid qwerty'):
131 raise Exception("Invalid integer accepted")
132 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' scan_ssid 2'):
133 raise Exception("Too large integer accepted")
134 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' psk 12345678'):
135 raise Exception("Invalid PSK accepted")
136 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' psk "1234567"'):
137 raise Exception("Too short PSK accepted")
138 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' psk "1234567890123456789012345678901234567890123456789012345678901234"'):
139 raise Exception("Too long PSK accepted")
140 dev[0].set_network_quoted(id, "psk", "123456768");
141 dev[0].set_network_quoted(id, "psk", "123456789012345678901234567890123456789012345678901234567890123");
142 if dev[0].get_network(id, "psk") != '*':
143 raise Exception("Unexpected psk read result");
144
145 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' eap UNKNOWN'):
146 raise Exception("Unknown EAP method accepted")
147
148 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' password "foo'):
149 raise Exception("Invalid password accepted")
150
151 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' wep_key0 "foo'):
152 raise Exception("Invalid WEP key accepted")
153 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' wep_key0 "12345678901234567"'):
154 raise Exception("Too long WEP key accepted")
155 # too short WEP key is ignored
156 dev[0].set_network_quoted(id, "wep_key0", "1234")
157 dev[0].set_network_quoted(id, "wep_key1", "12345")
158 dev[0].set_network_quoted(id, "wep_key2", "1234567890123")
159 dev[0].set_network_quoted(id, "wep_key3", "1234567890123456")
160
161 dev[0].set_network(id, "go_p2p_dev_addr", "any")
162 if dev[0].get_network(id, "go_p2p_dev_addr") is not None:
163 raise Exception("Unexpected go_p2p_dev_addr value")
164 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' go_p2p_dev_addr 00:11:22:33:44'):
165 raise Exception("Invalid go_p2p_dev_addr accepted")
166 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' p2p_client_list 00:11:22:33:44'):
167 raise Exception("Invalid p2p_client_list accepted")
168 if "FAIL" in dev[0].request('SET_NETWORK ' + str(id) + ' p2p_client_list 00:11:22:33:44:55 00:1'):
169 raise Exception("p2p_client_list truncation workaround failed")
170 if dev[0].get_network(id, "p2p_client_list") != "00:11:22:33:44:55":
171 raise Exception("p2p_client_list truncation workaround did not work")
172
173 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' auth_alg '):
174 raise Exception("Empty auth_alg accepted")
175 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' auth_alg FOO'):
176 raise Exception("Invalid auth_alg accepted")
177
178 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' proto '):
179 raise Exception("Empty proto accepted")
180 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' proto FOO'):
181 raise Exception("Invalid proto accepted")
182
183 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' pairwise '):
184 raise Exception("Empty pairwise accepted")
185 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' pairwise FOO'):
186 raise Exception("Invalid pairwise accepted")
187 if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' pairwise WEP40'):
188 raise Exception("Invalid pairwise accepted")
189
190 if "OK" not in dev[0].request('BSSID ' + str(id) + ' 00:11:22:33:44:55'):
191 raise Exception("Unexpected BSSID failure")
192 if dev[0].request("GET_NETWORK 0 bssid") != '00:11:22:33:44:55':
193 raise Exception("BSSID command did not set network bssid")
194 if "OK" not in dev[0].request('BSSID ' + str(id) + ' 00:00:00:00:00:00'):
195 raise Exception("Unexpected BSSID failure")
196 if "FAIL" not in dev[0].request("GET_NETWORK 0 bssid"):
197 raise Exception("bssid claimed configured after clearing")
198 if "FAIL" not in dev[0].request('BSSID 123 00:11:22:33:44:55'):
199 raise Exception("Unexpected BSSID success")
200 if "FAIL" not in dev[0].request('BSSID ' + str(id) + ' 00:11:22:33:44'):
201 raise Exception("Unexpected BSSID success")
202 if "FAIL" not in dev[0].request('BSSID ' + str(id)):
203 raise Exception("Unexpected BSSID success")
204
205 tests = [ "02:11:22:33:44:55",
206 "02:11:22:33:44:55 02:ae:be:ce:53:77",
207 "02:11:22:33:44:55/ff:00:ff:00:ff:00",
208 "02:11:22:33:44:55/ff:00:ff:00:ff:00 f2:99:88:77:66:55",
209 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00",
210 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00 12:34:56:78:90:ab",
211 "02:11:22:33:44:55/ff:ff:ff:00:00:00 02:ae:be:ce:53:77/00:00:00:00:00:ff" ]
212 for val in tests:
213 dev[0].set_network(id, "bssid_blacklist", val)
214 res = dev[0].get_network(id, "bssid_blacklist")
215 if res != val:
216 raise Exception("Unexpected bssid_blacklist value: %s != %s" % (res, val))
217 dev[0].set_network(id, "bssid_whitelist", val)
218 res = dev[0].get_network(id, "bssid_whitelist")
219 if res != val:
220 raise Exception("Unexpected bssid_whitelist value: %s != %s" % (res, val))
221
222 tests = [ "foo",
223 "00:11:22:33:44:5",
224 "00:11:22:33:44:55q",
225 "00:11:22:33:44:55/",
226 "00:11:22:33:44:55/66:77:88:99:aa:b" ]
227 for val in tests:
228 if "FAIL" not in dev[0].request("SET_NETWORK %d bssid_blacklist %s" % (id, val)):
229 raise Exception("Invalid bssid_blacklist value accepted")
230
231 def test_wpas_ctrl_many_networks(dev, apdev):
232 """wpa_supplicant ctrl_iface LIST_NETWORKS with huge number of networks"""
233 for i in range(1000):
234 id = dev[0].add_network()
235 res = dev[0].request("LIST_NETWORKS")
236 if str(id) in res:
237 raise Exception("Last added network was unexpectedly included")
238 res = dev[0].request("LIST_NETWORKS LAST_ID=%d" % (id - 2))
239 if str(id) not in res:
240 raise Exception("Last added network was not present when using LAST_ID")
241
242 def test_wpas_ctrl_dup_network(dev, apdev):
243 """wpa_supplicant ctrl_iface DUP_NETWORK"""
244 ssid = "target"
245 passphrase = 'qwertyuiop'
246 params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
247 hostapd.add_ap(apdev[0]['ifname'], params)
248
249 src = dev[0].connect("another", psk=passphrase, scan_freq="2412",
250 only_add_network=True)
251 id = dev[0].add_network()
252 dev[0].set_network_quoted(id, "ssid", ssid)
253 for f in [ "key_mgmt", "psk", "scan_freq" ]:
254 res = dev[0].request("DUP_NETWORK {} {} {}".format(src, id, f))
255 if "OK" not in res:
256 raise Exception("DUP_NETWORK failed")
257 dev[0].connect_network(id)
258
259 if "FAIL" not in dev[0].request("DUP_NETWORK "):
260 raise Exception("Unexpected DUP_NETWORK success")
261 if "FAIL" not in dev[0].request("DUP_NETWORK %d " % id):
262 raise Exception("Unexpected DUP_NETWORK success")
263 if "FAIL" not in dev[0].request("DUP_NETWORK %d %d" % (id, id)):
264 raise Exception("Unexpected DUP_NETWORK success")
265 if "FAIL" not in dev[0].request("DUP_NETWORK 123456 1234567 "):
266 raise Exception("Unexpected DUP_NETWORK success")
267 if "FAIL" not in dev[0].request("DUP_NETWORK %d 123456 " % id):
268 raise Exception("Unexpected DUP_NETWORK success")
269 if "FAIL" not in dev[0].request("DUP_NETWORK %d %d foo" % (id, id)):
270 raise Exception("Unexpected DUP_NETWORK success")
271 dev[0].request("DISCONNECT")
272 if "OK" not in dev[0].request("DUP_NETWORK %d %d ssid" % (id, id)):
273 raise Exception("Unexpected DUP_NETWORK failure")
274
275 def add_cred(dev):
276 id = dev.add_cred()
277 ev = dev.wait_event(["CRED-ADDED"])
278 if ev is None:
279 raise Exception("Missing CRED-ADDED event")
280 if " " + str(id) not in ev:
281 raise Exception("CRED-ADDED event without matching id")
282 return id
283
284 def set_cred(dev, id, field, value):
285 dev.set_cred(id, field, value)
286 ev = dev.wait_event(["CRED-MODIFIED"])
287 if ev is None:
288 raise Exception("Missing CRED-MODIFIED event")
289 if " " + str(id) + " " not in ev:
290 raise Exception("CRED-MODIFIED event without matching id")
291 if field not in ev:
292 raise Exception("CRED-MODIFIED event without matching field")
293
294 def set_cred_quoted(dev, id, field, value):
295 dev.set_cred_quoted(id, field, value)
296 ev = dev.wait_event(["CRED-MODIFIED"])
297 if ev is None:
298 raise Exception("Missing CRED-MODIFIED event")
299 if " " + str(id) + " " not in ev:
300 raise Exception("CRED-MODIFIED event without matching id")
301 if field not in ev:
302 raise Exception("CRED-MODIFIED event without matching field")
303
304 def remove_cred(dev, id):
305 dev.remove_cred(id)
306 ev = dev.wait_event(["CRED-REMOVED"])
307 if ev is None:
308 raise Exception("Missing CRED-REMOVED event")
309 if " " + str(id) not in ev:
310 raise Exception("CRED-REMOVED event without matching id")
311
312 def test_wpas_ctrl_cred(dev):
313 """wpa_supplicant ctrl_iface cred set"""
314 id1 = add_cred(dev[0])
315 if "FAIL" not in dev[0].request("SET_CRED " + str(id1 + 1) + " temporary 1"):
316 raise Exception("SET_CRED succeeded unexpectedly on unknown cred id")
317 if "FAIL" not in dev[0].request("SET_CRED " + str(id1)):
318 raise Exception("Invalid SET_CRED succeeded unexpectedly")
319 if "FAIL" not in dev[0].request("SET_CRED " + str(id1) + " temporary"):
320 raise Exception("Invalid SET_CRED succeeded unexpectedly")
321 if "FAIL" not in dev[0].request("GET_CRED " + str(id1 + 1) + " temporary"):
322 raise Exception("GET_CRED succeeded unexpectedly on unknown cred id")
323 if "FAIL" not in dev[0].request("GET_CRED " + str(id1)):
324 raise Exception("Invalid GET_CRED succeeded unexpectedly")
325 if "FAIL" not in dev[0].request("GET_CRED " + str(id1) + " foo"):
326 raise Exception("Invalid GET_CRED succeeded unexpectedly")
327 id = add_cred(dev[0])
328 id2 = add_cred(dev[0])
329 set_cred(dev[0], id, "temporary", "1")
330 set_cred(dev[0], id, "priority", "1")
331 set_cred(dev[0], id, "pcsc", "1")
332 set_cred_quoted(dev[0], id, "private_key_passwd", "test")
333 set_cred_quoted(dev[0], id, "domain_suffix_match", "test")
334 set_cred_quoted(dev[0], id, "phase1", "test")
335 set_cred_quoted(dev[0], id, "phase2", "test")
336
337 if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " eap FOO"):
338 raise Exception("Unexpected success on unknown EAP method")
339
340 if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " username 12xa"):
341 raise Exception("Unexpected success on invalid string")
342
343 for i in ("11", "1122", "112233445566778899aabbccddeeff00"):
344 if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " roaming_consortium " + i):
345 raise Exception("Unexpected success on invalid roaming_consortium")
346
347 dev[0].set_cred(id, "excluded_ssid", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff")
348 if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " excluded_ssid 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00"):
349 raise Exception("Unexpected success on invalid excluded_ssid")
350
351 if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " foo 4142"):
352 raise Exception("Unexpected success on unknown field")
353
354 id3 = add_cred(dev[0])
355 id4 = add_cred(dev[0])
356 if len(dev[0].request("LIST_CREDS").splitlines()) != 6:
357 raise Exception("Unexpected LIST_CREDS result(1)")
358
359 remove_cred(dev[0], id1)
360 remove_cred(dev[0], id3)
361 remove_cred(dev[0], id4)
362 remove_cred(dev[0], id2)
363 remove_cred(dev[0], id)
364 if "FAIL" not in dev[0].request("REMOVE_CRED 1"):
365 raise Exception("Unexpected success on invalid remove cred")
366 if len(dev[0].request("LIST_CREDS").splitlines()) != 1:
367 raise Exception("Unexpected LIST_CREDS result(2)")
368
369 id = add_cred(dev[0])
370 values = [ ("temporary", "1", False),
371 ("temporary", "0", False),
372 ("pcsc", "1", False),
373 ("realm", "example.com", True),
374 ("username", "user@example.com", True),
375 ("password", "foo", True, "*"),
376 ("ca_cert", "ca.pem", True),
377 ("client_cert", "user.pem", True),
378 ("private_key", "key.pem", True),
379 ("private_key_passwd", "foo", True, "*"),
380 ("imsi", "310026-000000000", True),
381 ("milenage", "foo", True, "*"),
382 ("domain_suffix_match", "example.com", True),
383 ("domain", "example.com", True),
384 ("domain", "example.org", True, "example.com\nexample.org"),
385 ("roaming_consortium", "0123456789", False),
386 ("required_roaming_consortium", "456789", False),
387 ("eap", "TTLS", False),
388 ("phase1", "foo=bar1", True),
389 ("phase2", "foo=bar2", True),
390 ("excluded_ssid", "test", True),
391 ("excluded_ssid", "foo", True, "test\nfoo"),
392 ("roaming_partner", "example.com,0,4,*", True),
393 ("roaming_partner", "example.org,1,2,US", True,
394 "example.com,0,4,*\nexample.org,1,2,US"),
395 ("update_identifier", "4", False),
396 ("provisioning_sp", "sp.example.com", True),
397 ("sp_priority", "7", False),
398 ("min_dl_bandwidth_home", "100", False),
399 ("min_ul_bandwidth_home", "101", False),
400 ("min_dl_bandwidth_roaming", "102", False),
401 ("min_ul_bandwidth_roaming", "103", False),
402 ("max_bss_load", "57", False),
403 ("req_conn_capab", "6:22,80,443", False),
404 ("req_conn_capab", "17:500", False, "6:22,80,443\n17:500"),
405 ("req_conn_capab", "50", False, "6:22,80,443\n17:500\n50"),
406 ("ocsp", "1", False) ]
407 for v in values:
408 if v[2]:
409 set_cred_quoted(dev[0], id, v[0], v[1])
410 else:
411 set_cred(dev[0], id, v[0], v[1])
412 val = dev[0].get_cred(id, v[0])
413 if len(v) == 4:
414 expect = v[3]
415 else:
416 expect = v[1]
417 if val != expect:
418 raise Exception("Unexpected GET_CRED value for {}: {} != {}".format(v[0], val, expect))
419 creds = dev[0].request("LIST_CREDS").splitlines()
420 if len(creds) != 2:
421 raise Exception("Unexpected LIST_CREDS result(3)")
422 if creds[1] != "0\texample.com\tuser@example.com\texample.com\t310026-000000000":
423 raise Exception("Unexpected LIST_CREDS value")
424 remove_cred(dev[0], id)
425 if len(dev[0].request("LIST_CREDS").splitlines()) != 1:
426 raise Exception("Unexpected LIST_CREDS result(4)")
427
428 id = add_cred(dev[0])
429 set_cred_quoted(dev[0], id, "domain", "foo.example.com")
430 id = add_cred(dev[0])
431 set_cred_quoted(dev[0], id, "domain", "bar.example.com")
432 id = add_cred(dev[0])
433 set_cred_quoted(dev[0], id, "domain", "foo.example.com")
434 if "OK" not in dev[0].request("REMOVE_CRED sp_fqdn=foo.example.com"):
435 raise Exception("REMOVE_CRED failed")
436 creds = dev[0].request("LIST_CREDS")
437 if "foo.example.com" in creds:
438 raise Exception("REMOVE_CRED sp_fqdn did not remove cred")
439 if "bar.example.com" not in creds:
440 raise Exception("REMOVE_CRED sp_fqdn removed incorrect cred")
441 dev[0].request("REMOVE_CRED all")
442
443 id = add_cred(dev[0])
444 set_cred_quoted(dev[0], id, "domain", "foo.example.com")
445 set_cred_quoted(dev[0], id, "provisioning_sp", "sp.foo.example.com")
446 id = add_cred(dev[0])
447 set_cred_quoted(dev[0], id, "domain", "bar.example.com")
448 set_cred_quoted(dev[0], id, "provisioning_sp", "sp.bar.example.com")
449 id = add_cred(dev[0])
450 set_cred_quoted(dev[0], id, "domain", "foo.example.com")
451 set_cred_quoted(dev[0], id, "provisioning_sp", "sp.foo.example.com")
452 if "OK" not in dev[0].request("REMOVE_CRED provisioning_sp=sp.foo.example.com"):
453 raise Exception("REMOVE_CRED failed")
454 creds = dev[0].request("LIST_CREDS")
455 if "foo.example.com" in creds:
456 raise Exception("REMOVE_CRED provisioning_sp did not remove cred")
457 if "bar.example.com" not in creds:
458 raise Exception("REMOVE_CRED provisioning_sp removed incorrect cred")
459 dev[0].request("REMOVE_CRED all")
460
461 # Test large number of creds and LIST_CREDS truncation
462 dev[0].dump_monitor()
463 for i in range(0, 100):
464 id = add_cred(dev[0])
465 set_cred_quoted(dev[0], id, "realm", "relatively.long.realm.test%d.example.com" % i)
466 dev[0].dump_monitor()
467 creds = dev[0].request("LIST_CREDS")
468 for i in range(0, 100):
469 dev[0].remove_cred(i)
470 dev[0].dump_monitor()
471 if len(creds) < 3900 or len(creds) > 4100:
472 raise Exception("Unexpected LIST_CREDS length: %d" % len(creds))
473 if "test10.example.com" not in creds:
474 raise Exception("Missing credential")
475 if len(creds.splitlines()) > 95:
476 raise Exception("Too many LIST_CREDS entries in the buffer")
477
478 def test_wpas_ctrl_pno(dev):
479 """wpa_supplicant ctrl_iface pno"""
480 if "FAIL" not in dev[0].request("SET pno 1"):
481 raise Exception("Unexpected success in enabling PNO without enabled network blocks")
482 id = dev[0].add_network()
483 dev[0].set_network_quoted(id, "ssid", "test")
484 dev[0].set_network(id, "key_mgmt", "NONE")
485 dev[0].request("ENABLE_NETWORK " + str(id) + " no-connect")
486 #mac80211_hwsim does not yet support PNO, so this fails
487 if "FAIL" not in dev[0].request("SET pno 1"):
488 raise Exception("Unexpected success in enabling PNO")
489 if "FAIL" not in dev[0].request("SET pno 1 freq=2000-3000,5180"):
490 raise Exception("Unexpected success in enabling PNO")
491 if "FAIL" not in dev[0].request("SET pno 1 freq=0-6000"):
492 raise Exception("Unexpected success in enabling PNO")
493 if "FAIL" in dev[0].request("SET pno 0"):
494 raise Exception("Unexpected failure in disabling PNO")
495
496 def test_wpas_ctrl_get(dev):
497 """wpa_supplicant ctrl_iface get"""
498 if "FAIL" in dev[0].request("GET version"):
499 raise Exception("Unexpected get failure for version")
500 if "FAIL" in dev[0].request("GET wifi_display"):
501 raise Exception("Unexpected get failure for wifi_display")
502 if "FAIL" not in dev[0].request("GET foo"):
503 raise Exception("Unexpected success on get command")
504
505 def test_wpas_ctrl_preauth(dev):
506 """wpa_supplicant ctrl_iface preauth"""
507 if "FAIL" not in dev[0].request("PREAUTH "):
508 raise Exception("Unexpected success on invalid PREAUTH")
509 if "FAIL" in dev[0].request("PREAUTH 00:11:22:33:44:55"):
510 raise Exception("Unexpected failure on PREAUTH")
511
512 def test_wpas_ctrl_stkstart(dev):
513 """wpa_supplicant ctrl_iface strkstart"""
514 if "FAIL" not in dev[0].request("STKSTART "):
515 raise Exception("Unexpected success on invalid STKSTART")
516 if "FAIL" not in dev[0].request("STKSTART 00:11:22:33:44:55"):
517 raise Exception("Unexpected success on STKSTART")
518
519 def test_wpas_ctrl_tdls_discover(dev):
520 """wpa_supplicant ctrl_iface tdls_discover"""
521 if "FAIL" not in dev[0].request("TDLS_DISCOVER "):
522 raise Exception("Unexpected success on invalid TDLS_DISCOVER")
523 if "FAIL" not in dev[0].request("TDLS_DISCOVER 00:11:22:33:44:55"):
524 raise Exception("Unexpected success on TDLS_DISCOVER")
525
526 def test_wpas_ctrl_tdls_chan_switch(dev):
527 """wpa_supplicant ctrl_iface tdls_chan_switch error cases"""
528 for args in [ '', '00:11:22:33:44:55' ]:
529 if "FAIL" not in dev[0].request("TDLS_CANCEL_CHAN_SWITCH " + args):
530 raise Exception("Unexpected success on invalid TDLS_CANCEL_CHAN_SWITCH: " + args)
531
532 for args in [ '', 'foo ', '00:11:22:33:44:55 ', '00:11:22:33:44:55 q',
533 '00:11:22:33:44:55 81', '00:11:22:33:44:55 81 1234',
534 '00:11:22:33:44:55 81 1234 center_freq1=234 center_freq2=345 bandwidth=456 sec_channel_offset=567 ht vht' ]:
535 if "FAIL" not in dev[0].request("TDLS_CHAN_SWITCH " + args):
536 raise Exception("Unexpected success on invalid TDLS_CHAN_SWITCH: " + args)
537
538 def test_wpas_ctrl_addr(dev):
539 """wpa_supplicant ctrl_iface invalid address"""
540 if "FAIL" not in dev[0].request("TDLS_SETUP "):
541 raise Exception("Unexpected success on invalid TDLS_SETUP")
542 if "FAIL" not in dev[0].request("TDLS_TEARDOWN "):
543 raise Exception("Unexpected success on invalid TDLS_TEARDOWN")
544 if "FAIL" not in dev[0].request("FT_DS "):
545 raise Exception("Unexpected success on invalid FT_DS")
546 if "FAIL" not in dev[0].request("WPS_PBC 00:11:22:33:44"):
547 raise Exception("Unexpected success on invalid WPS_PBC")
548 if "FAIL" not in dev[0].request("WPS_PIN 00:11:22:33:44"):
549 raise Exception("Unexpected success on invalid WPS_PIN")
550 if "FAIL" not in dev[0].request("WPS_NFC 00:11:22:33:44"):
551 raise Exception("Unexpected success on invalid WPS_NFC")
552 if "FAIL" not in dev[0].request("WPS_REG 00:11:22:33:44 12345670"):
553 raise Exception("Unexpected success on invalid WPS_REG")
554 if "FAIL" not in dev[0].request("IBSS_RSN 00:11:22:33:44"):
555 raise Exception("Unexpected success on invalid IBSS_RSN")
556 if "FAIL" not in dev[0].request("BLACKLIST 00:11:22:33:44"):
557 raise Exception("Unexpected success on invalid BLACKLIST")
558
559 def test_wpas_ctrl_wps_errors(dev):
560 """wpa_supplicant ctrl_iface WPS error cases"""
561 if "FAIL" not in dev[0].request("WPS_REG 00:11:22:33:44:55"):
562 raise Exception("Unexpected success on invalid WPS_REG")
563 if "FAIL" not in dev[0].request("WPS_REG 00:11:22:33:44:55 12345670 2233"):
564 raise Exception("Unexpected success on invalid WPS_REG")
565 if "FAIL" not in dev[0].request("WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN"):
566 raise Exception("Unexpected success on invalid WPS_REG")
567 if "FAIL" not in dev[0].request("WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN NONE"):
568 raise Exception("Unexpected success on invalid WPS_REG")
569
570 if "FAIL" not in dev[0].request("WPS_AP_PIN random"):
571 raise Exception("Unexpected success on WPS_AP_PIN in non-AP mode")
572
573 if "FAIL" not in dev[0].request("WPS_ER_PIN any"):
574 raise Exception("Unexpected success on invalid WPS_ER_PIN")
575
576 if "FAIL" not in dev[0].request("WPS_ER_LEARN 00:11:22:33:44:55"):
577 raise Exception("Unexpected success on invalid WPS_ER_LEARN")
578
579 if "FAIL" not in dev[0].request("WPS_ER_SET_CONFIG 00:11:22:33:44:55"):
580 raise Exception("Unexpected success on invalid WPS_ER_SET_CONFIG")
581
582 if "FAIL" not in dev[0].request("WPS_ER_CONFIG 00:11:22:33:44:55"):
583 raise Exception("Unexpected success on invalid WPS_ER_CONFIG")
584 if "FAIL" not in dev[0].request("WPS_ER_CONFIG 00:11:22:33:44:55 12345670"):
585 raise Exception("Unexpected success on invalid WPS_ER_CONFIG")
586 if "FAIL" not in dev[0].request("WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233"):
587 raise Exception("Unexpected success on invalid WPS_ER_CONFIG")
588 if "FAIL" not in dev[0].request("WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN"):
589 raise Exception("Unexpected success on invalid WPS_ER_CONFIG")
590 if "FAIL" not in dev[0].request("WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN NONE"):
591 raise Exception("Unexpected success on invalid WPS_ER_CONFIG")
592
593 if "FAIL" not in dev[0].request("WPS_ER_NFC_CONFIG_TOKEN WPS"):
594 raise Exception("Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN")
595 if "FAIL" not in dev[0].request("WPS_ER_NFC_CONFIG_TOKEN FOO 00:11:22:33:44:55"):
596 raise Exception("Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN")
597 if "FAIL" not in dev[0].request("WPS_ER_NFC_CONFIG_TOKEN NDEF 00:11:22:33:44:55"):
598 raise Exception("Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN")
599
600 if "FAIL" not in dev[0].request("WPS_NFC_CONFIG_TOKEN FOO"):
601 raise Exception("Unexpected success on invalid WPS_NFC_CONFIG_TOKEN")
602 if "FAIL" not in dev[0].request("WPS_NFC_CONFIG_TOKEN WPS FOO"):
603 raise Exception("Unexpected success on invalid WPS_NFC_CONFIG_TOKEN")
604 if "FAIL" not in dev[0].request("WPS_NFC_TOKEN FOO"):
605 raise Exception("Unexpected success on invalid WPS_NFC_TOKEN")
606
607 def test_wpas_ctrl_config_parser(dev):
608 """wpa_supplicant ctrl_iface SET config parser"""
609 if "FAIL" not in dev[0].request("SET pbc_in_m1 qwerty"):
610 raise Exception("Non-number accepted as integer")
611 if "FAIL" not in dev[0].request("SET eapol_version 0"):
612 raise Exception("Out-of-range value accepted")
613 if "FAIL" not in dev[0].request("SET eapol_version 10"):
614 raise Exception("Out-of-range value accepted")
615
616 if "FAIL" not in dev[0].request("SET serial_number 0123456789abcdef0123456789abcdef0"):
617 raise Exception("Too long string accepted")
618
619 def test_wpas_ctrl_mib(dev):
620 """wpa_supplicant ctrl_iface MIB"""
621 mib = dev[0].get_mib()
622 if "dot11RSNAOptionImplemented" not in mib:
623 raise Exception("Missing MIB entry")
624 if mib["dot11RSNAOptionImplemented"] != "TRUE":
625 raise Exception("Unexpected dot11RSNAOptionImplemented value")
626
627 def test_wpas_ctrl_set_wps_params(dev):
628 """wpa_supplicant ctrl_iface SET config_methods"""
629 ts = [ "config_methods label virtual_display virtual_push_button keypad",
630 "device_type 1-0050F204-1",
631 "os_version 01020300",
632 "uuid 12345678-9abc-def0-1234-56789abcdef0" ]
633 for t in ts:
634 if "OK" not in dev[2].request("SET " + t):
635 raise Exception("SET failed for: " + t)
636
637 def test_wpas_ctrl_level(dev):
638 """wpa_supplicant ctrl_iface LEVEL"""
639 try:
640 if "FAIL" not in dev[2].request("LEVEL 3"):
641 raise Exception("Unexpected LEVEL success")
642 if "OK" not in dev[2].mon.request("LEVEL 2"):
643 raise Exception("Unexpected LEVEL failure")
644 dev[2].request("SCAN freq=2412")
645 ev = dev[2].wait_event(["State:"], timeout=5)
646 if ev is None:
647 raise Exception("No debug message received")
648 dev[2].wait_event(["CTRL-EVENT-SCAN-RESULTS"], timeout=5)
649 finally:
650 dev[2].mon.request("LEVEL 3")
651
652 def test_wpas_ctrl_bssid_filter(dev, apdev):
653 """wpa_supplicant bssid_filter"""
654 try:
655 if "OK" not in dev[2].request("SET bssid_filter " + apdev[0]['bssid']):
656 raise Exception("Failed to set bssid_filter")
657 params = { "ssid": "test" }
658 hostapd.add_ap(apdev[0]['ifname'], params)
659 hostapd.add_ap(apdev[1]['ifname'], params)
660 dev[2].scan_for_bss(apdev[0]['bssid'], freq="2412")
661 dev[2].scan(freq="2412")
662 bss = dev[2].get_bss(apdev[0]['bssid'])
663 if bss is None or len(bss) == 0:
664 raise Exception("Missing BSS data")
665 bss = dev[2].get_bss(apdev[1]['bssid'])
666 if bss and len(bss) != 0:
667 raise Exception("Unexpected BSS data")
668 dev[2].request("SET bssid_filter ")
669 dev[2].scan(freq="2412")
670 bss = dev[2].get_bss(apdev[0]['bssid'])
671 if bss is None or len(bss) == 0:
672 raise Exception("Missing BSS data")
673 bss = dev[2].get_bss(apdev[1]['bssid'])
674 if bss is None or len(bss) == 0:
675 raise Exception("Missing BSS data(2)")
676 res = dev[2].request("SCAN_RESULTS").splitlines()
677 if "test" not in res[1] or "test" not in res[2]:
678 raise Exception("SSID missing from SCAN_RESULTS")
679 if apdev[0]['bssid'] not in res[1] and apdev[1]['bssid'] not in res[1]:
680 raise Exception("BSS1 missing from SCAN_RESULTS")
681 if apdev[0]['bssid'] not in res[2] and apdev[1]['bssid'] not in res[2]:
682 raise Exception("BSS1 missing from SCAN_RESULTS")
683
684 if "FAIL" not in dev[2].request("SET bssid_filter 00:11:22:33:44:55 00:11:22:33:44"):
685 raise Exception("Unexpected success for invalid SET bssid_filter")
686 finally:
687 dev[2].request("SET bssid_filter ")
688
689 def test_wpas_ctrl_disallow_aps(dev, apdev):
690 """wpa_supplicant ctrl_iface disallow_aps"""
691 params = { "ssid": "test" }
692 hostapd.add_ap(apdev[0]['ifname'], params)
693
694 if "FAIL" not in dev[0].request("SET disallow_aps bssid "):
695 raise Exception("Unexpected success on invalid disallow_aps")
696 if "FAIL" not in dev[0].request("SET disallow_aps bssid 00:11:22:33:44"):
697 raise Exception("Unexpected success on invalid disallow_aps")
698 if "FAIL" not in dev[0].request("SET disallow_aps ssid 0"):
699 raise Exception("Unexpected success on invalid disallow_aps")
700 if "FAIL" not in dev[0].request("SET disallow_aps ssid 4q"):
701 raise Exception("Unexpected success on invalid disallow_aps")
702 if "FAIL" not in dev[0].request("SET disallow_aps bssid 00:11:22:33:44:55 ssid 112233 ssid 123"):
703 raise Exception("Unexpected success on invalid disallow_aps")
704 if "FAIL" not in dev[0].request("SET disallow_aps ssid 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f00"):
705 raise Exception("Unexpected success on invalid disallow_aps")
706 if "FAIL" not in dev[0].request("SET disallow_aps foo 112233445566"):
707 raise Exception("Unexpected success on invalid disallow_aps")
708
709 dev[0].connect("test", key_mgmt="NONE", scan_freq="2412")
710 hostapd.add_ap(apdev[1]['ifname'], params)
711 dev[0].dump_monitor()
712 if "OK" not in dev[0].request("SET disallow_aps bssid 00:11:22:33:44:55 bssid 00:22:33:44:55:66"):
713 raise Exception("Failed to set disallow_aps")
714 if "OK" not in dev[0].request("SET disallow_aps bssid " + apdev[0]['bssid']):
715 raise Exception("Failed to set disallow_aps")
716 ev = dev[0].wait_connected(timeout=15, error="Reassociation timed out")
717 if apdev[1]['bssid'] not in ev:
718 raise Exception("Unexpected BSSID")
719
720 dev[0].dump_monitor()
721 if "OK" not in dev[0].request("SET disallow_aps ssid " + "test".encode("hex")):
722 raise Exception("Failed to set disallow_aps")
723 dev[0].wait_disconnected(timeout=5, error="Disconnection not seen")
724 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
725 if ev is not None:
726 raise Exception("Unexpected reassociation")
727
728 dev[0].request("DISCONNECT")
729 dev[0].p2p_start_go(freq=2412)
730 if "OK" not in dev[0].request("SET disallow_aps "):
731 raise Exception("Failed to set disallow_aps")
732
733 def test_wpas_ctrl_blob(dev):
734 """wpa_supplicant ctrl_iface SET blob"""
735 if "FAIL" not in dev[0].request("SET blob foo"):
736 raise Exception("Unexpected SET success")
737 if "FAIL" not in dev[0].request("SET blob foo 0"):
738 raise Exception("Unexpected SET success")
739 if "FAIL" not in dev[0].request("SET blob foo 0q"):
740 raise Exception("Unexpected SET success")
741 if "OK" not in dev[0].request("SET blob foo 00"):
742 raise Exception("Unexpected SET failure")
743 if "OK" not in dev[0].request("SET blob foo 0011"):
744 raise Exception("Unexpected SET failure")
745
746 def test_wpas_ctrl_set_uapsd(dev):
747 """wpa_supplicant ctrl_iface SET uapsd"""
748 if "FAIL" not in dev[0].request("SET uapsd foo"):
749 raise Exception("Unexpected SET success")
750 if "FAIL" not in dev[0].request("SET uapsd 0,0,0"):
751 raise Exception("Unexpected SET success")
752 if "FAIL" not in dev[0].request("SET uapsd 0,0"):
753 raise Exception("Unexpected SET success")
754 if "FAIL" not in dev[0].request("SET uapsd 0"):
755 raise Exception("Unexpected SET success")
756 if "OK" not in dev[0].request("SET uapsd 1,1,1,1;1"):
757 raise Exception("Unexpected SET failure")
758 if "OK" not in dev[0].request("SET uapsd 0,0,0,0;0"):
759 raise Exception("Unexpected SET failure")
760 if "OK" not in dev[0].request("SET uapsd disable"):
761 raise Exception("Unexpected SET failure")
762
763 def test_wpas_ctrl_set(dev):
764 """wpa_supplicant ctrl_iface SET"""
765 vals = [ "foo",
766 "ampdu 0",
767 "radio_disable 0",
768 "ps 10",
769 "ps 1",
770 "dot11RSNAConfigPMKLifetime 0",
771 "dot11RSNAConfigPMKReauthThreshold 101",
772 "dot11RSNAConfigSATimeout 0",
773 "wps_version_number -1",
774 "wps_version_number 256" ]
775 for val in vals:
776 if "FAIL" not in dev[0].request("SET " + val):
777 raise Exception("Unexpected SET success for " + val)
778
779 vals = [ "EAPOL::heldPeriod 60",
780 "EAPOL::authPeriod 30",
781 "EAPOL::startPeriod 30",
782 "EAPOL::maxStart 3",
783 "dot11RSNAConfigSATimeout 60",
784 "ps -1",
785 "ps 0",
786 "no_keep_alive 0",
787 "tdls_disabled 1",
788 "tdls_disabled 0" ]
789 for val in vals:
790 if "OK" not in dev[0].request("SET " + val):
791 raise Exception("Unexpected SET failure for " + val)
792
793 def test_wpas_ctrl_get_capability(dev):
794 """wpa_supplicant ctrl_iface GET_CAPABILITY"""
795 if "FAIL" not in dev[0].request("GET_CAPABILITY 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"):
796 raise Exception("Unexpected success on invalid GET_CAPABILITY")
797 if "FAIL" not in dev[0].request("GET_CAPABILITY eap foo"):
798 raise Exception("Unexpected success on invalid GET_CAPABILITY")
799 if "AP" not in dev[0].request("GET_CAPABILITY modes strict"):
800 raise Exception("Unexpected GET_CAPABILITY response")
801 res = dev[0].get_capability("eap")
802 if "TTLS" not in res:
803 raise Exception("Unexpected GET_CAPABILITY eap response: " + str(res))
804
805 res = dev[0].get_capability("pairwise")
806 if "CCMP" not in res:
807 raise Exception("Unexpected GET_CAPABILITY pairwise response: " + str(res))
808
809 res = dev[0].get_capability("group")
810 if "CCMP" not in res:
811 raise Exception("Unexpected GET_CAPABILITY group response: " + str(res))
812
813 res = dev[0].get_capability("key_mgmt")
814 if "WPA-PSK" not in res or "WPA-EAP" not in res:
815 raise Exception("Unexpected GET_CAPABILITY key_mgmt response: " + str(res))
816
817 res = dev[0].get_capability("proto")
818 if "WPA" not in res or "RSN" not in res:
819 raise Exception("Unexpected GET_CAPABILITY proto response: " + str(res))
820
821 res = dev[0].get_capability("auth_alg")
822 if "OPEN" not in res or "SHARED" not in res:
823 raise Exception("Unexpected GET_CAPABILITY auth_alg response: " + str(res))
824
825 res = dev[0].get_capability("modes")
826 if "IBSS" not in res or "AP" not in res:
827 raise Exception("Unexpected GET_CAPABILITY modes response: " + str(res))
828
829 res = dev[0].get_capability("channels")
830 if "8" not in res or "36" not in res:
831 raise Exception("Unexpected GET_CAPABILITY channels response: " + str(res))
832
833 res = dev[0].get_capability("freq")
834 if "2457" not in res or "5180" not in res:
835 raise Exception("Unexpected GET_CAPABILITY freq response: " + str(res))
836
837 res = dev[0].get_capability("tdls")
838 if "EXTERNAL" not in res[0]:
839 raise Exception("Unexpected GET_CAPABILITY tdls response: " + str(res))
840
841 res = dev[0].get_capability("erp")
842 if res is None or "ERP" not in res[0]:
843 raise Exception("Unexpected GET_CAPABILITY erp response: " + str(res))
844
845 if dev[0].get_capability("foo") is not None:
846 raise Exception("Unexpected GET_CAPABILITY foo response: " + str(res))
847
848 def test_wpas_ctrl_nfc_report_handover(dev):
849 """wpa_supplicant ctrl_iface NFC_REPORT_HANDOVER"""
850 vals = [ "FOO",
851 "ROLE freq=12345",
852 "ROLE TYPE",
853 "ROLE TYPE REQ",
854 "ROLE TYPE REQ SEL",
855 "ROLE TYPE 0Q SEL",
856 "ROLE TYPE 00 SEL",
857 "ROLE TYPE 00 0Q",
858 "ROLE TYPE 00 00" ]
859 for v in vals:
860 if "FAIL" not in dev[0].request("NFC_REPORT_HANDOVER " + v):
861 raise Exception("Unexpected NFC_REPORT_HANDOVER success for " + v)
862
863 def test_wpas_ctrl_nfc_tag_read(dev):
864 """wpa_supplicant ctrl_iface WPS_NFC_TAG_READ"""
865 vals = [ "FOO", "0Q", "00", "000000", "10000001", "10000000", "00000000",
866 "100e0000", "100e0001ff", "100e000411110000", "100e0004100e0001" ]
867 for v in vals:
868 if "FAIL" not in dev[0].request("WPS_NFC_TAG_READ " + v):
869 raise Exception("Unexpected WPS_NFC_TAG_READ success for " + v)
870
871 def test_wpas_ctrl_nfc_get_handover(dev):
872 """wpa_supplicant ctrl_iface NFC_GET_HANDOVER"""
873 vals = [ "FOO", "FOO BAR", "WPS WPS", "WPS WPS-CR", "WPS FOO", "NDEF P2P" ]
874 for v in vals:
875 if "FAIL" not in dev[0].request("NFC_GET_HANDOVER_REQ " + v):
876 raise Exception("Unexpected NFC_GET_HANDOVER_REQ success for " + v)
877
878 vals = [ "NDEF WPS", "NDEF P2P-CR", "WPS P2P-CR" ]
879 for v in vals:
880 if "FAIL" in dev[0].request("NFC_GET_HANDOVER_REQ " + v):
881 raise Exception("Unexpected NFC_GET_HANDOVER_REQ failure for " + v)
882
883 vals = [ "FOO", "FOO BAR", "WPS WPS", "WPS WPS-CR", "WPS FOO", "NDEF P2P",
884 "NDEF WPS", "NDEF WPS uuid" ]
885 for v in vals:
886 if "FAIL" not in dev[0].request("NFC_GET_HANDOVER_SEL " + v):
887 raise Exception("Unexpected NFC_GET_HANDOVER_SEL success for " + v)
888
889 vals = [ "NDEF P2P-CR", "WPS P2P-CR", "NDEF P2P-CR-TAG",
890 "WPS P2P-CR-TAG" ]
891 for v in vals:
892 if "FAIL" in dev[0].request("NFC_GET_HANDOVER_SEL " + v):
893 raise Exception("Unexpected NFC_GET_HANDOVER_SEL failure for " + v)
894
895 def get_blacklist(dev):
896 return dev.request("BLACKLIST").splitlines()
897
898 def test_wpas_ctrl_blacklist(dev):
899 """wpa_supplicant ctrl_iface BLACKLIST"""
900 if "OK" not in dev[0].request("BLACKLIST clear"):
901 raise Exception("BLACKLIST clear failed")
902 b = get_blacklist(dev[0])
903 if len(b) != 0:
904 raise Exception("Unexpected blacklist contents: " + str(b))
905 if "OK" not in dev[0].request("BLACKLIST 00:11:22:33:44:55"):
906 raise Exception("BLACKLIST add failed")
907 b = get_blacklist(dev[0])
908 if "00:11:22:33:44:55" not in b:
909 raise Exception("Unexpected blacklist contents: " + str(b))
910 if "OK" not in dev[0].request("BLACKLIST 00:11:22:33:44:56"):
911 raise Exception("BLACKLIST add failed")
912 b = get_blacklist(dev[0])
913 if "00:11:22:33:44:55" not in b or "00:11:22:33:44:56" not in b:
914 raise Exception("Unexpected blacklist contents: " + str(b))
915 if "OK" not in dev[0].request("BLACKLIST 00:11:22:33:44:56"):
916 raise Exception("BLACKLIST add failed")
917 b = get_blacklist(dev[0])
918 if "00:11:22:33:44:55" not in b or "00:11:22:33:44:56" not in b or len(b) != 2:
919 raise Exception("Unexpected blacklist contents: " + str(b))
920
921 if "OK" not in dev[0].request("BLACKLIST clear"):
922 raise Exception("BLACKLIST clear failed")
923 if dev[0].request("BLACKLIST") != "":
924 raise Exception("Unexpected blacklist contents")
925
926 def test_wpas_ctrl_blacklist_oom(dev):
927 """wpa_supplicant ctrl_iface BLACKLIST and out-of-memory"""
928 with alloc_fail(dev[0], 1, "wpa_blacklist_add"):
929 if "FAIL" not in dev[0].request("BLACKLIST aa:bb:cc:dd:ee:ff"):
930 raise Exception("Unexpected success with allocation failure")
931
932 def test_wpas_ctrl_log_level(dev):
933 """wpa_supplicant ctrl_iface LOG_LEVEL"""
934 level = dev[2].request("LOG_LEVEL")
935 if "Current level: MSGDUMP" not in level:
936 raise Exception("Unexpected debug level(1): " + level)
937 if "Timestamp: 1" not in level:
938 raise Exception("Unexpected timestamp(1): " + level)
939
940 if "OK" not in dev[2].request("LOG_LEVEL MSGDUMP 0"):
941 raise Exception("LOG_LEVEL failed")
942 level = dev[2].request("LOG_LEVEL")
943 if "Current level: MSGDUMP" not in level:
944 raise Exception("Unexpected debug level(2): " + level)
945 if "Timestamp: 0" not in level:
946 raise Exception("Unexpected timestamp(2): " + level)
947
948 if "OK" not in dev[2].request("LOG_LEVEL MSGDUMP 1"):
949 raise Exception("LOG_LEVEL failed")
950 level = dev[2].request("LOG_LEVEL")
951 if "Current level: MSGDUMP" not in level:
952 raise Exception("Unexpected debug level(3): " + level)
953 if "Timestamp: 1" not in level:
954 raise Exception("Unexpected timestamp(3): " + level)
955
956 if "FAIL" not in dev[2].request("LOG_LEVEL FOO"):
957 raise Exception("Invalid LOG_LEVEL accepted")
958
959 for lev in [ "EXCESSIVE", "MSGDUMP", "DEBUG", "INFO", "WARNING", "ERROR" ]:
960 if "OK" not in dev[2].request("LOG_LEVEL " + lev):
961 raise Exception("LOG_LEVEL failed for " + lev)
962 level = dev[2].request("LOG_LEVEL")
963 if "Current level: " + lev not in level:
964 raise Exception("Unexpected debug level: " + level)
965
966 if "OK" not in dev[2].request("LOG_LEVEL MSGDUMP 1"):
967 raise Exception("LOG_LEVEL failed")
968 level = dev[2].request("LOG_LEVEL")
969 if "Current level: MSGDUMP" not in level:
970 raise Exception("Unexpected debug level(3): " + level)
971 if "Timestamp: 1" not in level:
972 raise Exception("Unexpected timestamp(3): " + level)
973
974 def test_wpas_ctrl_enable_disable_network(dev, apdev):
975 """wpa_supplicant ctrl_iface ENABLE/DISABLE_NETWORK"""
976 params = { "ssid": "test" }
977 hostapd.add_ap(apdev[0]['ifname'], params)
978
979 id = dev[0].connect("test", key_mgmt="NONE", scan_freq="2412",
980 only_add_network=True)
981 if "OK" not in dev[0].request("DISABLE_NETWORK " + str(id)):
982 raise Exception("Failed to disable network")
983 if "OK" not in dev[0].request("ENABLE_NETWORK " + str(id) + " no-connect"):
984 raise Exception("Failed to enable network")
985 if "OK" not in dev[0].request("DISABLE_NETWORK all"):
986 raise Exception("Failed to disable networks")
987 if "OK" not in dev[0].request("ENABLE_NETWORK " + str(id)):
988 raise Exception("Failed to enable network")
989 dev[0].wait_connected(timeout=10)
990 if "OK" not in dev[0].request("DISABLE_NETWORK " + str(id)):
991 raise Exception("Failed to disable network")
992 dev[0].wait_disconnected(timeout=10)
993 time.sleep(0.1)
994
995 if "OK" not in dev[0].request("ENABLE_NETWORK all"):
996 raise Exception("Failed to enable network")
997 dev[0].wait_connected(timeout=10)
998 if "OK" not in dev[0].request("DISABLE_NETWORK all"):
999 raise Exception("Failed to disable network")
1000 dev[0].wait_disconnected(timeout=10)
1001
1002 def test_wpas_ctrl_country(dev, apdev):
1003 """wpa_supplicant SET/GET country code"""
1004 try:
1005 # work around issues with possible pending regdom event from the end of
1006 # the previous test case
1007 time.sleep(0.2)
1008 dev[0].dump_monitor()
1009
1010 if "OK" not in dev[0].request("SET country FI"):
1011 raise Exception("Failed to set country code")
1012 if dev[0].request("GET country") != "FI":
1013 raise Exception("Country code set failed")
1014 ev = dev[0].wait_event(["CTRL-EVENT-REGDOM-CHANGE"])
1015 if ev is None:
1016 raise Exception("regdom change event not seen")
1017 if "init=USER type=COUNTRY alpha2=FI" not in ev:
1018 raise Exception("Unexpected event contents: " + ev)
1019 dev[0].request("SET country 00")
1020 if dev[0].request("GET country") != "00":
1021 raise Exception("Country code set failed")
1022 ev = dev[0].wait_event(["CTRL-EVENT-REGDOM-CHANGE"])
1023 if ev is None:
1024 raise Exception("regdom change event not seen")
1025 if "init=CORE type=WORLD" not in ev:
1026 raise Exception("Unexpected event contents: " + ev)
1027 finally:
1028 subprocess.call(['sudo', 'iw', 'reg', 'set', '00'])
1029
1030 def test_wpas_ctrl_suspend_resume(dev):
1031 """wpa_supplicant SUSPEND/RESUME"""
1032 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
1033 wpas.interface_add("wlan5")
1034 if "OK" not in wpas.global_request("SUSPEND"):
1035 raise Exception("SUSPEND failed")
1036 time.sleep(1)
1037 if "OK" not in wpas.global_request("RESUME"):
1038 raise Exception("RESUME failed")
1039 if "OK" not in wpas.request("SUSPEND"):
1040 raise Exception("Per-interface SUSPEND failed")
1041 if "OK" not in wpas.request("RESUME"):
1042 raise Exception("Per-interface RESUME failed")
1043 ev = wpas.wait_event(["CTRL-EVENT-SCAN-RESULTS"], timeout=10)
1044 if ev is None:
1045 raise Exception("Scan not completed")
1046
1047 def test_wpas_ctrl_global(dev):
1048 """wpa_supplicant global control interface"""
1049 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
1050 wpas.interface_add("wlan5")
1051
1052 if "PONG" not in wpas.global_request("PING"):
1053 raise Exception("PING failed")
1054 if "wlan5" not in wpas.global_request("INTERFACES"):
1055 raise Exception("Interface not found")
1056 if "UNKNOWN COMMAND" not in wpas.global_request("FOO"):
1057 raise Exception("Unexpected response to unknown command")
1058 if "PONG" not in wpas.global_request("IFNAME=wlan5 PING"):
1059 raise Exception("Per-interface PING failed")
1060 if "FAIL-NO-IFNAME-MATCH" not in wpas.global_request("IFNAME=notfound PING"):
1061 raise Exception("Unknown interface not reported correctly")
1062 if "FAIL" not in wpas.global_request("SAVE_CONFIG"):
1063 raise Exception("SAVE_CONFIG succeeded unexpectedly")
1064 if "OK" not in wpas.global_request("SET wifi_display 0"):
1065 raise Exception("SET failed")
1066 if "wifi_display=0" not in wpas.global_request("STATUS"):
1067 raise Exception("wifi_display not disabled")
1068 if "OK" not in wpas.global_request("SET wifi_display 1"):
1069 raise Exception("SET failed")
1070 if "wifi_display=1" not in wpas.global_request("STATUS"):
1071 raise Exception("wifi_display not enabled")
1072 if "FAIL" not in wpas.global_request("SET foo 1"):
1073 raise Exception("SET succeeded unexpectedly")
1074
1075 if "p2p_state=IDLE" not in wpas.global_request("STATUS"):
1076 raise Exception("P2P was disabled")
1077 wpas.request("P2P_SET disabled 1")
1078 if "p2p_state=DISABLED" not in wpas.global_request("STATUS"):
1079 raise Exception("P2P was not disabled")
1080 wpas.request("P2P_SET disabled 0")
1081 if "p2p_state=IDLE" not in wpas.global_request("STATUS"):
1082 raise Exception("P2P was not enabled")
1083
1084 # driver_nl80211.c does not support interface list, so do not fail because
1085 # of that
1086 logger.debug(wpas.global_request("INTERFACE_LIST"))
1087
1088 if "FAIL" not in wpas.global_request("INTERFACE_ADD "):
1089 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1090 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO"):
1091 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1092 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO conf"):
1093 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1094 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO conf driver"):
1095 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1096 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO conf driver ctrliface"):
1097 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1098 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO conf driver ctrliface driverparam"):
1099 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1100 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO conf driver ctrliface driverparam bridge"):
1101 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1102 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO conf driver ctrliface driverparam bridge foo"):
1103 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1104 if "FAIL" not in wpas.global_request("INTERFACE_ADD FOO "):
1105 raise Exception("INTERFACE_ADD succeeded unexpectedly")
1106
1107 def test_wpas_ctrl_roam(dev, apdev):
1108 """wpa_supplicant ctrl_iface ROAM error cases"""
1109 if "FAIL" not in dev[0].request("ROAM 00:11:22:33:44"):
1110 raise Exception("Unexpected success")
1111 if "FAIL" not in dev[0].request("ROAM 00:11:22:33:44:55"):
1112 raise Exception("Unexpected success")
1113 params = { "ssid": "test" }
1114 hostapd.add_ap(apdev[0]['ifname'], params)
1115 id = dev[0].connect("test", key_mgmt="NONE", scan_freq="2412")
1116 if "FAIL" not in dev[0].request("ROAM 00:11:22:33:44:55"):
1117 raise Exception("Unexpected success")
1118
1119 def test_wpas_ctrl_ipaddr(dev, apdev):
1120 """wpa_supplicant IP address in STATUS"""
1121 try:
1122 subprocess.call(['ip', 'addr', 'add', '10.174.65.207/32', 'dev',
1123 dev[0].ifname])
1124 ipaddr = dev[0].get_status_field('ip_address')
1125 if ipaddr != '10.174.65.207':
1126 raise Exception("IP address not in STATUS output")
1127 finally:
1128 subprocess.call(['ip', 'addr', 'del', '10.174.65.207/32', 'dev',
1129 dev[0].ifname])
1130
1131 def test_wpas_ctrl_neighbor_rep_req(dev, apdev):
1132 """wpa_supplicant ctrl_iface NEIGHBOR_REP_REQUEST"""
1133 params = { "ssid": "test" }
1134 hostapd.add_ap(apdev[0]['ifname'], params)
1135 params = { "ssid": "test2", "radio_measurements": "1" }
1136 hostapd.add_ap(apdev[1]['ifname'], params)
1137
1138 dev[0].connect("test", key_mgmt="NONE", scan_freq="2412")
1139 if "FAIL" not in dev[0].request("NEIGHBOR_REP_REQUEST"):
1140 raise Exception("Request succeeded unexpectedly")
1141 if "FAIL" not in dev[0].request("NEIGHBOR_REP_REQUEST ssid=abcdef"):
1142 raise Exception("Request succeeded unexpectedly")
1143 dev[0].request("DISCONNECT")
1144
1145 rrm = int(dev[0].get_driver_status_field("capa.rrm_flags"), 16)
1146 if rrm & 0x5 != 0x5:
1147 logger.info("Driver does not support required RRM capabilities - skip rest of the test case")
1148 return
1149
1150 dev[0].connect("test2", key_mgmt="NONE", scan_freq="2412")
1151
1152 # These requests are expected to get sent properly, but since hostapd does
1153 # not yet support processing of the request, these are expected to fail.
1154
1155 if "OK" not in dev[0].request("NEIGHBOR_REP_REQUEST"):
1156 raise Exception("Request failed")
1157 ev = dev[0].wait_event([ "RRM-NEIGHBOR-REP-RECEIVED",
1158 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout=10)
1159 if ev is None:
1160 raise Exception("RRM report result not indicated")
1161 logger.info("RRM result: " + ev)
1162
1163 if "OK" not in dev[0].request("NEIGHBOR_REP_REQUEST ssid=abcdef"):
1164 raise Exception("Request failed")
1165 ev = dev[0].wait_event([ "RRM-NEIGHBOR-REP-RECEIVED",
1166 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout=10)
1167 if ev is None:
1168 raise Exception("RRM report result not indicated")
1169 logger.info("RRM result: " + ev)
1170
1171 def test_wpas_ctrl_rsp(dev, apdev):
1172 """wpa_supplicant ctrl_iface CTRL-RSP-"""
1173 if "FAIL" not in dev[0].request("CTRL-RSP-"):
1174 raise Exception("Request succeeded unexpectedly")
1175 if "FAIL" not in dev[0].request("CTRL-RSP-foo-"):
1176 raise Exception("Request succeeded unexpectedly")
1177 if "FAIL" not in dev[0].request("CTRL-RSP-foo-1234567"):
1178 raise Exception("Request succeeded unexpectedly")
1179 if "FAIL" not in dev[0].request("CTRL-RSP-foo-1234567:"):
1180 raise Exception("Request succeeded unexpectedly")
1181 id = dev[0].add_network()
1182 if "FAIL" not in dev[0].request("CTRL-RSP-foo-%d:" % id):
1183 raise Exception("Request succeeded unexpectedly")
1184 for req in [ "IDENTITY", "PASSWORD", "NEW_PASSWORD", "PIN", "OTP",
1185 "PASSPHRASE", "SIM" ]:
1186 if "OK" not in dev[0].request("CTRL-RSP-%s-%d:" % (req, id)):
1187 raise Exception("Request failed unexpectedly")
1188 if "OK" not in dev[0].request("CTRL-RSP-%s-%d:" % (req, id)):
1189 raise Exception("Request failed unexpectedly")
1190
1191 def test_wpas_ctrl_vendor(dev, apdev):
1192 """wpa_supplicant ctrl_iface VENDOR"""
1193 cmds = [ "foo",
1194 "1",
1195 "1 foo",
1196 "1 2foo",
1197 "1 2 qq" ]
1198 for cmd in cmds:
1199 if "FAIL" not in dev[0].request("VENDOR " + cmd):
1200 raise Exception("Invalid VENDOR command accepted: " + cmd)
1201
1202 def test_wpas_ctrl_mgmt_tx(dev, apdev):
1203 """wpa_supplicant ctrl_iface MGMT_TX"""
1204 cmds = [ "foo",
1205 "00:11:22:33:44:55 foo",
1206 "00:11:22:33:44:55 11:22:33:44:55:66",
1207 "00:11:22:33:44:55 11:22:33:44:55:66 freq=0 no_cck=0 wait_time=0 action=123",
1208 "00:11:22:33:44:55 11:22:33:44:55:66 action=12qq" ]
1209 for cmd in cmds:
1210 if "FAIL" not in dev[0].request("MGMT_TX " + cmd):
1211 raise Exception("Invalid MGMT_TX command accepted: " + cmd)
1212
1213 if "OK" not in dev[0].request("MGMT_TX_DONE"):
1214 raise Exception("MGMT_TX_DONE failed")
1215
1216 def test_wpas_ctrl_driver_event(dev, apdev):
1217 """wpa_supplicant ctrl_iface DRIVER_EVENT"""
1218 if "FAIL" not in dev[0].request("DRIVER_EVENT foo"):
1219 raise Exception("Invalid DRIVER_EVENT accepted")
1220
1221 def test_wpas_ctrl_eapol_rx(dev, apdev):
1222 """wpa_supplicant ctrl_iface EAPOL_RX"""
1223 cmds = [ "foo",
1224 "00:11:22:33:44:55 123",
1225 "00:11:22:33:44:55 12qq" ]
1226 for cmd in cmds:
1227 if "FAIL" not in dev[0].request("EAPOL_RX " + cmd):
1228 raise Exception("Invalid EAPOL_RX command accepted: " + cmd)
1229
1230 def test_wpas_ctrl_data_test(dev, apdev):
1231 """wpa_supplicant ctrl_iface DATA_TEST"""
1232 dev[0].request("DATA_TEST_CONFIG 0")
1233 if "FAIL" not in dev[0].request("DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0"):
1234 raise Exception("DATA_TEST_TX accepted when not in test mode")
1235
1236 try:
1237 if "OK" not in dev[0].request("DATA_TEST_CONFIG 1"):
1238 raise Exception("DATA_TEST_CONFIG failed")
1239 if "OK" not in dev[0].request("DATA_TEST_CONFIG 1"):
1240 raise Exception("DATA_TEST_CONFIG failed")
1241 cmds = [ "foo",
1242 "00:11:22:33:44:55 foo",
1243 "00:11:22:33:44:55 00:11:22:33:44:55 -1",
1244 "00:11:22:33:44:55 00:11:22:33:44:55 256" ]
1245 for cmd in cmds:
1246 if "FAIL" not in dev[0].request("DATA_TEST_TX " + cmd):
1247 raise Exception("Invalid DATA_TEST_TX command accepted: " + cmd)
1248 if "OK" not in dev[0].request("DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0"):
1249 raise Exception("DATA_TEST_TX failed")
1250 finally:
1251 dev[0].request("DATA_TEST_CONFIG 0")
1252
1253 cmds = [ "",
1254 "00",
1255 "00112233445566778899aabbccdde",
1256 "00112233445566778899aabbccdq" ]
1257 for cmd in cmds:
1258 if "FAIL" not in dev[0].request("DATA_TEST_FRAME " + cmd):
1259 raise Exception("Invalid DATA_TEST_FRAME command accepted: " + cmd)
1260
1261 if "OK" not in dev[0].request("DATA_TEST_FRAME 00112233445566778899aabbccddee"):
1262 raise Exception("DATA_TEST_FRAME failed")
1263
1264 def test_wpas_ctrl_vendor_elem(dev, apdev):
1265 """wpa_supplicant ctrl_iface VENDOR_ELEM"""
1266 if "OK" not in dev[0].request("VENDOR_ELEM_ADD 1 "):
1267 raise Exception("VENDOR_ELEM_ADD failed")
1268 cmds = [ "-1 ",
1269 "255 ",
1270 "1",
1271 "1 123",
1272 "1 12qq34" ]
1273 for cmd in cmds:
1274 if "FAIL" not in dev[0].request("VENDOR_ELEM_ADD " + cmd):
1275 raise Exception("Invalid VENDOR_ELEM_ADD command accepted: " + cmd)
1276
1277 cmds = [ "-1 ",
1278 "255 " ]
1279 for cmd in cmds:
1280 if "FAIL" not in dev[0].request("VENDOR_ELEM_GET " + cmd):
1281 raise Exception("Invalid VENDOR_ELEM_GET command accepted: " + cmd)
1282
1283 dev[0].request("VENDOR_ELEM_REMOVE 1 *")
1284 cmds = [ "-1 ",
1285 "255 ",
1286 "1",
1287 "1",
1288 "1 123",
1289 "1 12qq34",
1290 "1 12",
1291 "1 0000" ]
1292 for cmd in cmds:
1293 if "FAIL" not in dev[0].request("VENDOR_ELEM_REMOVE " + cmd):
1294 raise Exception("Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd)
1295
1296 dev[0].request("VENDOR_ELEM_ADD 1 000100")
1297 if "OK" not in dev[0].request("VENDOR_ELEM_REMOVE 1 "):
1298 raise Exception("VENDOR_ELEM_REMOVE failed")
1299 cmds = [ "-1 ",
1300 "255 ",
1301 "1",
1302 "1 123",
1303 "1 12qq34",
1304 "1 12",
1305 "1 0000" ]
1306 for cmd in cmds:
1307 if "FAIL" not in dev[0].request("VENDOR_ELEM_REMOVE " + cmd):
1308 raise Exception("Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd)
1309 if "OK" not in dev[0].request("VENDOR_ELEM_REMOVE 1 000100"):
1310 raise Exception("VENDOR_ELEM_REMOVE failed")
1311
1312 def test_wpas_ctrl_misc(dev, apdev):
1313 """wpa_supplicant ctrl_iface and miscellaneous commands"""
1314 if "OK" not in dev[0].request("RELOG"):
1315 raise Exception("RELOG failed")
1316 if dev[0].request("IFNAME") != dev[0].ifname:
1317 raise Exception("IFNAME returned unexpected response")
1318 if "FAIL" not in dev[0].request("REATTACH"):
1319 raise Exception("REATTACH accepted while disabled")
1320 if "OK" not in dev[2].request("RECONFIGURE"):
1321 raise Exception("RECONFIGURE failed")
1322 if "FAIL" in dev[0].request("INTERFACE_LIST"):
1323 raise Exception("INTERFACE_LIST failed")
1324 if "UNKNOWN COMMAND" not in dev[0].request("FOO"):
1325 raise Exception("Unknown command accepted")
1326
1327 if "FAIL" not in dev[0].global_request("INTERFACE_REMOVE foo"):
1328 raise Exception("Invalid INTERFACE_REMOVE accepted")
1329 if "FAIL" not in dev[0].global_request("SET foo"):
1330 raise Exception("Invalid global SET accepted")