]> git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_wpas_ap.py
85074974aa8fe60efe1153622c57f1a16b932c0b
[thirdparty/hostap.git] / tests / hwsim / test_wpas_ap.py
1 # wpa_supplicant AP mode tests
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 from remotehost import remote_compatible
8 import time
9 import logging
10 logger = logging.getLogger()
11
12 import hwsim_utils
13 from utils import HwsimSkip, alloc_fail, clear_regdom_dev
14 from wpasupplicant import WpaSupplicant
15 from test_p2p_channel import set_country
16
17 def wait_ap_ready(dev):
18 ev = dev.wait_event(["CTRL-EVENT-CONNECTED"])
19 if ev is None:
20 raise Exception("AP failed to start")
21
22 def test_wpas_ap_open(dev):
23 """wpa_supplicant AP mode - open network"""
24 if "FAIL" not in dev[0].request("DEAUTHENTICATE 00:11:22:33:44:55"):
25 raise Exception("Unexpected DEAUTHENTICATE accepted")
26 if "FAIL" not in dev[0].request("DISASSOCIATE 00:11:22:33:44:55"):
27 raise Exception("Unexpected DISASSOCIATE accepted")
28 if "FAIL" not in dev[0].request("CHAN_SWITCH 0 2432"):
29 raise Exception("Unexpected CHAN_SWITCH accepted")
30
31 id = dev[0].add_network()
32 dev[0].set_network(id, "mode", "2")
33 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
34 dev[0].set_network(id, "key_mgmt", "NONE")
35 dev[0].set_network(id, "frequency", "2412")
36 dev[0].set_network(id, "scan_freq", "2412")
37 dev[0].select_network(id)
38 wait_ap_ready(dev[0])
39
40 if "FAIL" not in dev[0].request("DEAUTHENTICATE foo"):
41 raise Exception("Invalid DEAUTHENTICATE accepted")
42 if "FAIL" not in dev[0].request("DISASSOCIATE foo"):
43 raise Exception("Invalid DISASSOCIATE accepted")
44
45 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
46 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
47 hwsim_utils.test_connectivity(dev[0], dev[1])
48 hwsim_utils.test_connectivity(dev[1], dev[2])
49
50 addr1 = dev[1].p2p_interface_addr()
51 addr2 = dev[2].p2p_interface_addr()
52 addrs = [addr1, addr2]
53 sta = dev[0].get_sta(None)
54 if sta['addr'] not in addrs:
55 raise Exception("Unexpected STA address")
56 sta1 = dev[0].get_sta(sta['addr'])
57 if sta1['addr'] not in addrs:
58 raise Exception("Unexpected STA address")
59 sta2 = dev[0].get_sta(sta['addr'], next=True)
60 if sta2['addr'] not in addrs:
61 raise Exception("Unexpected STA2 address")
62 sta3 = dev[0].get_sta(sta2['addr'], next=True)
63 if len(sta3) != 0:
64 raise Exception("Unexpected STA iteration result (did not stop)")
65
66 status = dev[0].get_status()
67 if status['mode'] != "AP":
68 raise Exception("Unexpected status mode")
69
70 dev[1].dump_monitor()
71 dev[2].dump_monitor()
72 dev[0].request("DEAUTHENTICATE " + addr1)
73 dev[0].request("DISASSOCIATE " + addr2)
74 dev[1].wait_disconnected(timeout=10)
75 dev[2].wait_disconnected(timeout=10)
76 dev[1].wait_connected(timeout=10, error="Reconnection timed out")
77 dev[2].wait_connected(timeout=10, error="Reconnection timed out")
78 dev[1].request("DISCONNECT")
79 dev[2].request("DISCONNECT")
80
81 def test_wpas_ap_open_isolate(dev):
82 """wpa_supplicant AP mode - open network with client isolation"""
83 try:
84 dev[0].set("ap_isolate", "1")
85 id = dev[0].add_network()
86 dev[0].set_network(id, "mode", "2")
87 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
88 dev[0].set_network(id, "key_mgmt", "NONE")
89 dev[0].set_network(id, "frequency", "2412")
90 dev[0].set_network(id, "scan_freq", "2412")
91 dev[0].select_network(id)
92 wait_ap_ready(dev[0])
93
94 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
95 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
96 hwsim_utils.test_connectivity(dev[0], dev[1])
97 hwsim_utils.test_connectivity(dev[0], dev[2])
98 hwsim_utils.test_connectivity(dev[1], dev[2], success_expected=False,
99 timeout=1)
100 finally:
101 dev[0].set("ap_isolate", "0")
102
103 @remote_compatible
104 def test_wpas_ap_wep(dev):
105 """wpa_supplicant AP mode - WEP"""
106 id = dev[0].add_network()
107 dev[0].set_network(id, "mode", "2")
108 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
109 dev[0].set_network(id, "key_mgmt", "NONE")
110 dev[0].set_network(id, "frequency", "2412")
111 dev[0].set_network(id, "scan_freq", "2412")
112 dev[0].set_network_quoted(id, "wep_key0", "hello")
113 dev[0].select_network(id)
114 wait_ap_ready(dev[0])
115
116 dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"',
117 scan_freq="2412")
118 hwsim_utils.test_connectivity(dev[0], dev[1])
119 dev[1].request("DISCONNECT")
120
121 @remote_compatible
122 def test_wpas_ap_no_ssid(dev):
123 """wpa_supplicant AP mode - invalid network configuration"""
124 id = dev[0].add_network()
125 dev[0].set_network(id, "mode", "2")
126 dev[0].set_network(id, "key_mgmt", "NONE")
127 dev[0].set_network(id, "frequency", "2412")
128 dev[0].set_network(id, "scan_freq", "2412")
129 dev[0].select_network(id)
130 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
131 if ev is not None:
132 raise Exception("Unexpected AP start")
133
134 @remote_compatible
135 def test_wpas_ap_default_frequency(dev):
136 """wpa_supplicant AP mode - default frequency"""
137 id = dev[0].add_network()
138 dev[0].set_network(id, "mode", "2")
139 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
140 dev[0].set_network(id, "key_mgmt", "NONE")
141 dev[0].set_network(id, "scan_freq", "2412")
142 dev[0].select_network(id)
143 wait_ap_ready(dev[0])
144 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462")
145 dev[1].request("DISCONNECT")
146
147 @remote_compatible
148 def test_wpas_ap_invalid_frequency(dev):
149 """wpa_supplicant AP mode - invalid frequency configuration"""
150 id = dev[0].add_network()
151 dev[0].set_network(id, "mode", "2")
152 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
153 dev[0].set_network(id, "key_mgmt", "NONE")
154 dev[0].set_network(id, "frequency", "2413")
155 dev[0].set_network(id, "scan_freq", "2412")
156 dev[0].select_network(id)
157 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
158 if ev is not None:
159 raise Exception("Unexpected AP start")
160
161 def test_wpas_ap_wps(dev):
162 """wpa_supplicant AP mode - WPS operations"""
163 id = dev[0].add_network()
164 dev[0].set_network(id, "mode", "2")
165 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
166 dev[0].set_network_quoted(id, "psk", "1234567890")
167 dev[0].set_network(id, "frequency", "2412")
168 dev[0].set_network(id, "scan_freq", "2412")
169 dev[0].select_network(id)
170 wait_ap_ready(dev[0])
171 bssid = dev[0].p2p_interface_addr()
172
173 logger.info("Test PBC mode start/stop")
174 if "FAIL" not in dev[0].request("WPS_CANCEL"):
175 raise Exception("Unexpected WPS_CANCEL success")
176 dev[0].request("WPS_PBC")
177 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
178 if ev is None:
179 raise Exception("PBC mode start timeout")
180 if "OK" not in dev[0].request("WPS_CANCEL"):
181 raise Exception("Unexpected WPS_CANCEL failure")
182 ev = dev[0].wait_event(["WPS-TIMEOUT"])
183 if ev is None:
184 raise Exception("PBC mode disabling timeout")
185
186 logger.info("Test PBC protocol run")
187 dev[0].request("WPS_PBC")
188 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
189 if ev is None:
190 raise Exception("PBC mode start timeout")
191 dev[1].request("WPS_PBC")
192 dev[1].wait_connected(timeout=30, error="WPS PBC operation timed out")
193 hwsim_utils.test_connectivity(dev[0], dev[1])
194
195 logger.info("Test AP PIN to learn configuration")
196 pin = dev[0].request("WPS_AP_PIN random")
197 if "FAIL" in pin:
198 raise Exception("Could not generate random AP PIN")
199 if pin not in dev[0].request("WPS_AP_PIN get"):
200 raise Exception("Could not fetch current AP PIN")
201 dev[2].wps_reg(bssid, pin)
202 hwsim_utils.test_connectivity(dev[1], dev[2])
203
204 dev[1].request("REMOVE_NETWORK all")
205 dev[2].request("REMOVE_NETWORK all")
206
207 logger.info("Test AP PIN operations")
208 dev[0].request("WPS_AP_PIN disable")
209 dev[0].request("WPS_AP_PIN set " + pin + " 1")
210 time.sleep(1.1)
211 if "FAIL" not in dev[0].request("WPS_AP_PIN get"):
212 raise Exception("AP PIN unexpectedly still enabled")
213
214 pin = dev[1].wps_read_pin()
215 dev[0].request("WPS_PIN any " + pin)
216 dev[1].request("WPS_PIN any " + pin)
217 dev[1].wait_connected(timeout=30)
218 dev[1].request("REMOVE_NETWORK all")
219 dev[1].dump_monitor()
220
221 dev[0].request("WPS_PIN any " + pin + " 100")
222 dev[1].request("WPS_PIN any " + pin)
223 dev[1].wait_connected(timeout=30)
224 dev[1].request("REMOVE_NETWORK all")
225 dev[1].dump_monitor()
226
227 dev[0].request("WPS_AP_PIN set 12345670")
228 dev[0].dump_monitor()
229
230 runs = ("88887777", "12340000", "00000000", "12345670")
231 for pin in runs:
232 logger.info("Try AP PIN " + pin)
233 dev[2].dump_monitor()
234 dev[2].request("WPS_REG " + bssid + " " + pin)
235 ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15)
236 if ev is None:
237 raise Exception("WPS operation timed out")
238 if "WPS-SUCCESS" in ev:
239 raise Exception("WPS operation succeeded unexpectedly")
240 dev[2].wait_disconnected(timeout=10)
241 dev[2].request("WPS_CANCEL")
242 dev[2].request("REMOVE_NETWORK all")
243 ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"])
244 if ev is None:
245 raise Exception("WPS AP PIN not locked")
246
247 dev[0].dump_monitor()
248 logger.info("Test random AP PIN timeout")
249 pin = dev[0].request("WPS_AP_PIN random 1")
250 if "FAIL" in pin:
251 raise Exception("Could not generate random AP PIN")
252 res = dev[0].request("WPS_AP_PIN get")
253 if pin not in res:
254 raise Exception("Could not fetch current AP PIN")
255 for i in range(10):
256 time.sleep(0.2)
257 res = dev[0].request("WPS_AP_PIN get")
258 if "FAIL" in res:
259 break
260 if "FAIL" not in res:
261 raise Exception("WPS_AP_PIN random timeout did not work")
262
263 if "FAIL" not in dev[0].request("WPS_AP_PIN foo"):
264 raise Exception("Invalid WPS_AP_PIN command not rejected")
265 if "FAIL" not in dev[0].request("WPS_AP_PIN set"):
266 raise Exception("Invalid WPS_AP_PIN command not rejected")
267
268 def test_wpas_ap_wps_frag(dev):
269 """wpa_supplicant AP mode - WPS operations with fragmentation"""
270 id = dev[0].add_network()
271 dev[0].set_network(id, "mode", "2")
272 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
273 dev[0].set_network_quoted(id, "psk", "1234567890")
274 dev[0].set_network(id, "frequency", "2412")
275 dev[0].set_network(id, "scan_freq", "2412")
276 dev[0].set_network(id, "fragment_size", "300")
277 dev[0].select_network(id)
278 wait_ap_ready(dev[0])
279 bssid = dev[0].own_addr()
280
281 pin = dev[1].wps_read_pin()
282 dev[0].request("WPS_PIN any " + pin)
283 dev[1].scan_for_bss(bssid, freq="2412")
284 dev[1].request("WPS_PIN " + bssid + " " + pin)
285 dev[1].wait_connected(timeout=30)
286
287 def test_wpas_ap_wps_pbc_overlap(dev):
288 """wpa_supplicant AP mode - WPS operations with PBC overlap"""
289 id = dev[0].add_network()
290 dev[0].set_network(id, "mode", "2")
291 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
292 dev[0].set_network_quoted(id, "psk", "1234567890")
293 dev[0].set_network(id, "frequency", "2412")
294 dev[0].set_network(id, "scan_freq", "2412")
295 dev[0].select_network(id)
296 wait_ap_ready(dev[0])
297 bssid = dev[0].p2p_interface_addr()
298
299 dev[1].scan_for_bss(bssid, freq="2412")
300 dev[1].dump_monitor()
301 dev[2].scan_for_bss(bssid, freq="2412")
302 dev[2].dump_monitor()
303 dev[0].request("WPS_PBC")
304 dev[1].request("WPS_PBC " + bssid)
305 dev[2].request("WPS_PBC " + bssid)
306
307 ev = dev[1].wait_event(["WPS-M2D"], timeout=15)
308 if ev is None:
309 raise Exception("PBC session overlap not detected (dev1)")
310 if "config_error=12" not in ev:
311 raise Exception("PBC session overlap not correctly reported (dev1)")
312
313 ev = dev[2].wait_event(["WPS-M2D"], timeout=15)
314 if ev is None:
315 raise Exception("PBC session overlap not detected (dev2)")
316 if "config_error=12" not in ev:
317 raise Exception("PBC session overlap not correctly reported (dev2)")
318
319 if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC"):
320 raise Exception("WPS_PBC(AP) accepted during overlap")
321 if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC any"):
322 raise Exception("WPS_PBC(AP) accepted during overlap")
323 dev[0].request("WPS_CANCEL")
324 dev[1].request("WPS_CANCEL")
325 dev[2].request("WPS_CANCEL")
326
327 @remote_compatible
328 def test_wpas_ap_wps_disabled(dev):
329 """wpa_supplicant AP mode - WPS disabled"""
330 id = dev[0].add_network()
331 dev[0].set_network(id, "mode", "2")
332 dev[0].set_network_quoted(id, "ssid", "wpas-ap-no-wps")
333 dev[0].set_network_quoted(id, "psk", "12345678")
334 dev[0].set_network(id, "frequency", "2412")
335 dev[0].set_network(id, "scan_freq", "2412")
336 dev[0].set_network(id, "wps_disabled", "1")
337 dev[0].select_network(id)
338 wait_ap_ready(dev[0])
339
340 dev[1].connect("wpas-ap-no-wps", psk="12345678", scan_freq="2412")
341 dev[1].request("DISCONNECT")
342 dev[1].wait_disconnected()
343
344 def test_wpas_ap_dfs(dev):
345 """wpa_supplicant AP mode - DFS"""
346 if dev[0].get_mcc() > 1:
347 raise HwsimSkip("DFS is not supported with multi channel contexts")
348
349 try:
350 _test_wpas_ap_dfs(dev)
351 finally:
352 set_country("00")
353 dev[0].request("SET country 00")
354 dev[1].flush_scan_cache()
355
356 def _test_wpas_ap_dfs(dev):
357 set_country("US")
358 dev[0].request("SET country US")
359 id = dev[0].add_network()
360 dev[0].set_network(id, "mode", "2")
361 dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs")
362 dev[0].set_network(id, "key_mgmt", "NONE")
363 dev[0].set_network(id, "frequency", "5260")
364 dev[0].set_network(id, "scan_freq", "5260")
365 dev[0].select_network(id)
366
367 ev = dev[0].wait_event(["DFS-CAC-START"])
368 if ev is None:
369 # For now, assume DFS is not supported by all kernel builds.
370 raise HwsimSkip("CAC did not start - assume not supported")
371
372 ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70)
373 if ev is None:
374 raise Exception("CAC did not complete")
375 if "success=1" not in ev:
376 raise Exception("CAC failed")
377 if "freq=5260" not in ev:
378 raise Exception("Unexpected DFS freq result")
379
380 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
381 if ev is None:
382 raise Exception("AP failed to start")
383
384 dev[1].connect("wpas-ap-dfs", key_mgmt="NONE")
385 dev[1].wait_regdom(country_ie=True)
386 dev[0].request("DISCONNECT")
387 dev[1].disconnect_and_stop_scan()
388
389 @remote_compatible
390 def test_wpas_ap_disable(dev):
391 """wpa_supplicant AP mode - DISABLE_NETWORK"""
392 id = dev[0].add_network()
393 dev[0].set_network(id, "mode", "2")
394 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
395 dev[0].set_network(id, "key_mgmt", "NONE")
396 dev[0].set_network(id, "scan_freq", "2412")
397 dev[0].select_network(id)
398
399 ev = dev[0].wait_event(["AP-ENABLED"])
400 if ev is None:
401 raise Exception("AP-ENABLED event not seen")
402 wait_ap_ready(dev[0])
403 dev[0].request("DISABLE_NETWORK %d" % id)
404 ev = dev[0].wait_event(["AP-DISABLED"])
405 if ev is None:
406 raise Exception("AP-DISABLED event not seen")
407 dev[0].wait_disconnected()
408
409 def test_wpas_ap_acs(dev):
410 """wpa_supplicant AP mode - ACS"""
411 res = dev[0].get_capability("acs")
412 if res is None or "ACS" not in res:
413 raise HwsimSkip("ACS not supported")
414
415 # For now, make sure the last operating channel was on 2.4 GHz band to get
416 # sufficient survey data from mac80211_hwsim.
417 id = dev[0].add_network()
418 dev[0].set_network(id, "mode", "2")
419 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
420 dev[0].set_network(id, "key_mgmt", "NONE")
421 dev[0].set_network(id, "frequency", "2412")
422 dev[0].set_network(id, "scan_freq", "2412")
423 dev[0].select_network(id)
424 wait_ap_ready(dev[0])
425 dev[0].request("REMOVE_NETWORK all")
426 dev[0].wait_disconnected()
427
428 id = dev[0].add_network()
429 dev[0].set_network(id, "mode", "2")
430 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
431 dev[0].set_network(id, "key_mgmt", "NONE")
432 dev[0].set_network(id, "frequency", "2417")
433 dev[0].set_network(id, "scan_freq", "2417")
434 dev[0].set_network(id, "acs", "1")
435 dev[0].select_network(id)
436 wait_ap_ready(dev[0])
437
438 # ACS prefers channels 1, 6, 11
439 freq = dev[0].get_status_field('freq')
440 if freq == "2417":
441 raise Exception("Unexpected operating channel selected")
442
443 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq)
444
445 @remote_compatible
446 def test_wpas_ap_and_assoc_req_p2p_ie(dev):
447 """wpa_supplicant AP mode - unexpected P2P IE in Association Request"""
448 try:
449 _test_wpas_ap_and_assoc_req_p2p_ie(dev)
450 finally:
451 dev[1].request("VENDOR_ELEM_REMOVE 13 *")
452 dev[0].request("P2P_SET disabled 0")
453
454 def _test_wpas_ap_and_assoc_req_p2p_ie(dev):
455 dev[0].request("P2P_SET disabled 1")
456 id = dev[0].add_network()
457 dev[0].set_network(id, "mode", "2")
458 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
459 dev[0].set_network(id, "key_mgmt", "NONE")
460 dev[0].set_network(id, "frequency", "2412")
461 dev[0].set_network(id, "scan_freq", "2412")
462 dev[0].select_network(id)
463 wait_ap_ready(dev[0])
464
465 dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09")
466 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
467 dev[1].request("DISCONNECT")
468 dev[1].wait_disconnected()
469
470 dev[0].request("DISCONNECT")
471 dev[0].wait_disconnected()
472
473 @remote_compatible
474 def test_wpas_ap_open_ht_disabled(dev):
475 """wpa_supplicant AP mode - open network and HT disabled"""
476 id = dev[0].add_network()
477 dev[0].set_network(id, "mode", "2")
478 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
479 dev[0].set_network(id, "key_mgmt", "NONE")
480 dev[0].set_network(id, "frequency", "2412")
481 dev[0].set_network(id, "scan_freq", "2412")
482 dev[0].set_network(id, "disable_ht", "1")
483 dev[0].select_network(id)
484 wait_ap_ready(dev[0])
485
486 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
487 hwsim_utils.test_connectivity(dev[0], dev[1])
488
489 def test_wpas_ap_failures(dev):
490 """wpa_supplicant AP mode - failures"""
491 # No SSID configured for AP mode
492 id = dev[0].add_network()
493 dev[0].set_network(id, "mode", "2")
494 dev[0].set_network(id, "key_mgmt", "NONE")
495 dev[0].set_network(id, "frequency", "2412")
496 dev[0].set_network(id, "scan_freq", "2412")
497 dev[0].select_network(id)
498 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=0.1)
499 if ev is not None:
500 raise Exception("Unexpected connection event")
501 dev[0].request("REMOVE_NETWORK all")
502
503 # Invalid pbss value(2) for AP mode
504 dev[0].dump_monitor()
505 id = dev[0].add_network()
506 dev[0].set_network(id, "mode", "2")
507 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
508 dev[0].set_network(id, "key_mgmt", "NONE")
509 dev[0].set_network(id, "frequency", "2412")
510 dev[0].set_network(id, "scan_freq", "2412")
511 dev[0].set_network(id, "pbss", "2")
512 dev[0].select_network(id)
513 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
514 "CTRL-EVENT-DISCONNECTED"], timeout=0.1)
515 if ev is not None and "CTRL-EVENT-CONNECTED" in ev:
516 raise Exception("Unexpected connection event(2)")
517 dev[0].request("REMOVE_NETWORK all")
518
519 def test_wpas_ap_oom(dev):
520 """wpa_supplicant AP mode - OOM"""
521 id = dev[0].add_network()
522 dev[0].set_network(id, "mode", "2")
523 dev[0].set_network_quoted(id, "ssid", "wpas-ap")
524 dev[0].set_network_quoted(id, "psk", "1234567890")
525 dev[0].set_network(id, "frequency", "2412")
526 dev[0].set_network(id, "scan_freq", "2412")
527 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
528 dev[0].select_network(id)
529 dev[0].wait_disconnected()
530 dev[0].request("REMOVE_NETWORK all")
531
532 id = dev[0].add_network()
533 dev[0].set_network(id, "mode", "2")
534 dev[0].set_network_quoted(id, "ssid", "wpas-ap")
535 dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
536 dev[0].set_network(id, "frequency", "2412")
537 dev[0].set_network(id, "scan_freq", "2412")
538 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
539 dev[0].select_network(id)
540 dev[0].wait_disconnected()
541 dev[0].request("REMOVE_NETWORK all")
542
543 id = dev[0].add_network()
544 dev[0].set_network(id, "mode", "2")
545 dev[0].set_network_quoted(id, "ssid", "wpas-ap")
546 dev[0].set_network(id, "key_mgmt", "NONE")
547 dev[0].set_network_quoted(id, "wep_key0", "hello")
548 dev[0].set_network(id, "frequency", "2412")
549 dev[0].set_network(id, "scan_freq", "2412")
550 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
551 dev[0].select_network(id)
552 dev[0].wait_disconnected()
553 dev[0].request("REMOVE_NETWORK all")
554
555 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
556 wpas.interface_add("wlan5")
557 wpas.request("SET manufacturer test")
558 wpas.request("SET model_name test")
559 wpas.request("SET model_number test")
560 wpas.request("SET serial_number test")
561 wpas.request("SET serial_number test")
562 wpas.request("SET serial_number test")
563 wpas.request("SET ap_vendor_elements dd0411223301")
564 id = wpas.add_network()
565 wpas.set_network(id, "mode", "2")
566 wpas.set_network_quoted(id, "ssid", "wpas-ap")
567 wpas.set_network(id, "key_mgmt", "NONE")
568 wpas.set_network(id, "frequency", "2412")
569 wpas.set_network(id, "scan_freq", "2412")
570
571 for i in range(5):
572 with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"):
573 wpas.select_network(id)
574 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
575 "CTRL-EVENT-DISCONNECTED"], timeout=1)
576 wpas.request("DISCONNECT")
577 wpas.wait_disconnected()
578
579 def test_wpas_ap_params(dev):
580 """wpa_supplicant AP mode - parameters"""
581 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
582 wpas.interface_add("wlan5")
583 wpas.request("SET manufacturer test")
584 wpas.request("SET model_name test")
585 wpas.request("SET model_number test")
586 wpas.request("SET serial_number test")
587 wpas.request("SET serial_number test")
588 wpas.request("SET serial_number test")
589 wpas.request("SET ap_vendor_elements dd0411223301")
590 id = wpas.add_network()
591 wpas.set_network(id, "mode", "2")
592 wpas.set_network_quoted(id, "ssid", "wpas-ap")
593 wpas.set_network(id, "key_mgmt", "NONE")
594 wpas.set_network(id, "frequency", "2412")
595 wpas.set_network(id, "scan_freq", "2412")
596 wpas.select_network(id)
597 wpas.wait_connected()
598 wpas.request("DISCONNECT")
599 wpas.wait_disconnected()
600
601 wpas.request("SET beacon_int 200 3")
602 wpas.request("SET dtim_period 3")
603 wpas.select_network(id)
604 wpas.wait_connected()
605 wpas.request("DISCONNECT")
606 wpas.wait_disconnected()
607
608 wpas.set_network(id, "beacon_int", "300")
609 wpas.set_network(id, "dtim_period", "2")
610 wpas.select_network(id)
611 wpas.wait_connected()
612 if "---- AP ----" not in wpas.request("PMKSA"):
613 raise Exception("AP section missing from PMKSA output")
614 if "OK" not in wpas.request("PMKSA_FLUSH"):
615 raise Exception("PMKSA_FLUSH failed")
616 wpas.request("DISCONNECT")
617 wpas.wait_disconnected()
618
619 def test_wpas_ap_global_sta(dev):
620 """wpa_supplicant AP mode - STA commands on global control interface"""
621 id = dev[0].add_network()
622 dev[0].set_network(id, "mode", "2")
623 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
624 dev[0].set_network(id, "key_mgmt", "NONE")
625 dev[0].set_network(id, "frequency", "2412")
626 dev[0].set_network(id, "scan_freq", "2412")
627 dev[0].select_network(id)
628 wait_ap_ready(dev[0])
629
630 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
631
632 addr1 = dev[1].own_addr()
633 res = dev[0].global_request("STA " + addr1)
634 if "UNKNOWN COMMAND" in res:
635 raise Exception("STA command not known on global control interface")
636 res = dev[0].global_request("STA-FIRST")
637 if "UNKNOWN COMMAND" in res:
638 raise Exception("STA-FIRST command not known on global control interface")
639 res = dev[0].global_request("STA-NEXT " + addr1)
640 if "UNKNOWN COMMAND" in res:
641 raise Exception("STA-NEXT command not known on global control interface")
642 dev[1].request("DISCONNECT")
643 dev[1].wait_disconnected()
644 dev[0].request("DISCONNECT")
645 dev[0].wait_disconnected()
646
647 def test_wpas_ap_5ghz(dev):
648 """wpa_supplicant AP mode - 5 GHz"""
649 try:
650 _test_wpas_ap_5ghz(dev)
651 finally:
652 set_country("00")
653 dev[0].request("SET country 00")
654 dev[1].flush_scan_cache()
655
656 def _test_wpas_ap_5ghz(dev):
657 set_country("US")
658 dev[0].request("SET country US")
659 id = dev[0].add_network()
660 dev[0].set_network(id, "mode", "2")
661 dev[0].set_network_quoted(id, "ssid", "wpas-ap-5ghz")
662 dev[0].set_network(id, "key_mgmt", "NONE")
663 dev[0].set_network(id, "frequency", "5180")
664 dev[0].set_network(id, "scan_freq", "5180")
665 dev[0].select_network(id)
666 wait_ap_ready(dev[0])
667
668 dev[1].connect("wpas-ap-5ghz", key_mgmt="NONE", scan_freq="5180")
669 dev[1].request("DISCONNECT")
670 dev[1].wait_disconnected()
671
672 def test_wpas_ap_open_vht80(dev):
673 """wpa_supplicant AP mode - VHT 80 MHz"""
674 id = dev[0].add_network()
675 dev[0].set("country", "FI")
676 try:
677 dev[0].set_network(id, "mode", "2")
678 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
679 dev[0].set_network(id, "key_mgmt", "NONE")
680 dev[0].set_network(id, "frequency", "5180")
681 dev[0].set_network(id, "scan_freq", "5180")
682 dev[0].set_network(id, "vht", "1")
683 dev[0].set_network(id, "vht_center_freq1", "5210")
684 dev[0].set_network(id, "max_oper_chwidth", "1")
685 dev[0].set_network(id, "ht40", "1")
686 dev[0].select_network(id)
687 wait_ap_ready(dev[0])
688
689 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="5180")
690 sig = dev[1].request("SIGNAL_POLL").splitlines()
691 hwsim_utils.test_connectivity(dev[0], dev[1])
692 dev[1].request("DISCONNECT")
693 dev[1].wait_disconnected()
694 if "FREQUENCY=5180" not in sig:
695 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig))
696 if "WIDTH=80 MHz" not in sig:
697 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig))
698 finally:
699 set_country("00")
700 dev[0].set("country", "00")
701 dev[1].flush_scan_cache()
702
703 def test_wpas_ap_no_ht(dev):
704 """wpa_supplicant AP mode - HT disabled"""
705 id = dev[0].add_network()
706 dev[0].set_network(id, "mode", "2")
707 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
708 dev[0].set_network(id, "key_mgmt", "NONE")
709 dev[0].set_network(id, "frequency", "2412")
710 dev[0].set_network(id, "scan_freq", "2412")
711 dev[0].set_network(id, "ht", "0")
712 dev[0].set_network(id, "wps_disabled", "1")
713 dev[0].select_network(id)
714 wait_ap_ready(dev[0])
715 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
716 sig = dev[1].request("SIGNAL_POLL").splitlines()
717 dev[1].request("DISCONNECT")
718 dev[1].wait_disconnected()
719 dev[0].request("REMOVE_NETWORK all")
720 dev[0].wait_disconnected()
721
722 id = dev[0].add_network()
723 dev[0].set_network(id, "mode", "2")
724 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
725 dev[0].set_network(id, "key_mgmt", "NONE")
726 dev[0].set_network(id, "frequency", "2412")
727 dev[0].set_network(id, "scan_freq", "2412")
728 dev[0].set_network(id, "wps_disabled", "1")
729 dev[0].select_network(id)
730 wait_ap_ready(dev[0])
731 dev[1].flush_scan_cache()
732 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
733 sig2 = dev[1].request("SIGNAL_POLL").splitlines()
734 dev[1].request("DISCONNECT")
735 dev[1].wait_disconnected()
736 dev[0].request("REMOVE_NETWORK all")
737 dev[0].wait_disconnected()
738
739 if "WIDTH=20 MHz (no HT)" not in sig:
740 raise Exception("HT was not disabled: " + str(sig))
741 if "WIDTH=20 MHz" not in sig2:
742 raise Exception("HT was not enabled: " + str(sig2))
743
744 def test_wpas_ap_async_fail(dev):
745 """wpa_supplicant AP mode - Async failure"""
746 id = dev[0].add_network()
747 dev[0].set("country", "FI")
748 try:
749 dev[0].set_network(id, "mode", "2")
750 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
751 dev[0].set_network(id, "key_mgmt", "NONE")
752 dev[0].set_network(id, "frequency", "5180")
753 dev[0].set_network(id, "scan_freq", "5180")
754 dev[0].set_network(id, "vht", "1")
755 dev[0].set_network(id, "vht_center_freq1", "5210")
756 dev[0].set_network(id, "max_oper_chwidth", "1")
757 dev[0].set_network(id, "ht40", "1")
758
759 with alloc_fail(dev[0], 1,
760 "nl80211_get_scan_results;ieee80211n_check_scan"):
761 dev[0].select_network(id)
762 dev[0].wait_disconnected()
763 finally:
764 clear_regdom_dev(dev)