]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_wpas_ap.py
1 # wpa_supplicant AP mode tests
2 # Copyright (c) 2014, Qualcomm Atheros, Inc.
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
8 from remotehost
import remote_compatible
11 logger
= logging
.getLogger()
14 from utils
import HwsimSkip
, alloc_fail
, clear_regdom_dev
15 from wpasupplicant
import WpaSupplicant
16 from test_p2p_channel
import set_country
17 from test_wep
import check_wep_capa
19 def wait_ap_ready(dev
):
20 ev
= dev
.wait_event(["CTRL-EVENT-CONNECTED"])
22 raise Exception("AP failed to start")
24 def test_wpas_ap_open(dev
):
25 """wpa_supplicant AP mode - open network"""
26 if "FAIL" not in dev
[0].request("DEAUTHENTICATE 00:11:22:33:44:55"):
27 raise Exception("Unexpected DEAUTHENTICATE accepted")
28 if "FAIL" not in dev
[0].request("DISASSOCIATE 00:11:22:33:44:55"):
29 raise Exception("Unexpected DISASSOCIATE accepted")
30 if "FAIL" not in dev
[0].request("CHAN_SWITCH 0 2432"):
31 raise Exception("Unexpected CHAN_SWITCH accepted")
33 id = dev
[0].add_network()
34 dev
[0].set_network(id, "mode", "2")
35 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
36 dev
[0].set_network(id, "key_mgmt", "NONE")
37 dev
[0].set_network(id, "frequency", "2412")
38 dev
[0].set_network(id, "scan_freq", "2412")
39 dev
[0].select_network(id)
42 if "FAIL" not in dev
[0].request("DEAUTHENTICATE foo"):
43 raise Exception("Invalid DEAUTHENTICATE accepted")
44 if "FAIL" not in dev
[0].request("DISASSOCIATE foo"):
45 raise Exception("Invalid DISASSOCIATE accepted")
47 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
48 dev
[2].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
49 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
50 hwsim_utils
.test_connectivity(dev
[1], dev
[2])
52 addr1
= dev
[1].p2p_interface_addr()
53 addr2
= dev
[2].p2p_interface_addr()
54 addrs
= [addr1
, addr2
]
55 sta
= dev
[0].get_sta(None)
56 if sta
['addr'] not in addrs
:
57 raise Exception("Unexpected STA address")
58 sta1
= dev
[0].get_sta(sta
['addr'])
59 if sta1
['addr'] not in addrs
:
60 raise Exception("Unexpected STA address")
61 sta2
= dev
[0].get_sta(sta
['addr'], next
=True)
62 if sta2
['addr'] not in addrs
:
63 raise Exception("Unexpected STA2 address")
64 sta3
= dev
[0].get_sta(sta2
['addr'], next
=True)
66 raise Exception("Unexpected STA iteration result (did not stop)")
68 status
= dev
[0].get_status()
69 if status
['mode'] != "AP":
70 raise Exception("Unexpected status mode")
74 dev
[0].request("DEAUTHENTICATE " + addr1
)
75 dev
[0].request("DISASSOCIATE " + addr2
)
76 dev
[1].wait_disconnected(timeout
=10)
77 dev
[2].wait_disconnected(timeout
=10)
78 dev
[1].wait_connected(timeout
=10, error
="Reconnection timed out")
79 dev
[2].wait_connected(timeout
=10, error
="Reconnection timed out")
80 dev
[1].request("DISCONNECT")
81 dev
[2].request("DISCONNECT")
83 def test_wpas_ap_open_isolate(dev
):
84 """wpa_supplicant AP mode - open network with client isolation"""
86 dev
[0].set("ap_isolate", "1")
87 id = dev
[0].add_network()
88 dev
[0].set_network(id, "mode", "2")
89 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
90 dev
[0].set_network(id, "key_mgmt", "NONE")
91 dev
[0].set_network(id, "frequency", "2412")
92 dev
[0].set_network(id, "scan_freq", "2412")
93 dev
[0].select_network(id)
96 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
97 dev
[2].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
98 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
99 hwsim_utils
.test_connectivity(dev
[0], dev
[2])
100 hwsim_utils
.test_connectivity(dev
[1], dev
[2], success_expected
=False,
103 dev
[0].set("ap_isolate", "0")
106 def test_wpas_ap_wep(dev
):
107 """wpa_supplicant AP mode - WEP"""
108 check_wep_capa(dev
[0])
109 id = dev
[0].add_network()
110 dev
[0].set_network(id, "mode", "2")
111 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
112 dev
[0].set_network(id, "key_mgmt", "NONE")
113 dev
[0].set_network(id, "frequency", "2412")
114 dev
[0].set_network(id, "scan_freq", "2412")
115 dev
[0].set_network_quoted(id, "wep_key0", "hello")
116 dev
[0].select_network(id)
117 wait_ap_ready(dev
[0])
119 dev
[1].connect("wpas-ap-wep", key_mgmt
="NONE", wep_key0
='"hello"',
121 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
122 dev
[1].request("DISCONNECT")
125 def test_wpas_ap_no_ssid(dev
):
126 """wpa_supplicant AP mode - invalid network configuration"""
127 id = dev
[0].add_network()
128 dev
[0].set_network(id, "mode", "2")
129 dev
[0].set_network(id, "key_mgmt", "NONE")
130 dev
[0].set_network(id, "frequency", "2412")
131 dev
[0].set_network(id, "scan_freq", "2412")
132 dev
[0].select_network(id)
133 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout
=1)
135 raise Exception("Unexpected AP start")
138 def test_wpas_ap_default_frequency(dev
):
139 """wpa_supplicant AP mode - default frequency"""
140 id = dev
[0].add_network()
141 dev
[0].set_network(id, "mode", "2")
142 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
143 dev
[0].set_network(id, "key_mgmt", "NONE")
144 dev
[0].set_network(id, "scan_freq", "2412")
145 dev
[0].select_network(id)
146 wait_ap_ready(dev
[0])
147 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2462")
148 dev
[1].request("DISCONNECT")
151 def test_wpas_ap_invalid_frequency(dev
):
152 """wpa_supplicant AP mode - invalid frequency configuration"""
153 id = dev
[0].add_network()
154 dev
[0].set_network(id, "mode", "2")
155 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
156 dev
[0].set_network(id, "key_mgmt", "NONE")
157 dev
[0].set_network(id, "frequency", "2413")
158 dev
[0].set_network(id, "scan_freq", "2412")
159 dev
[0].select_network(id)
160 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout
=1)
162 raise Exception("Unexpected AP start")
164 def test_wpas_ap_wps(dev
):
165 """wpa_supplicant AP mode - WPS operations"""
166 id = dev
[0].add_network()
167 dev
[0].set_network(id, "mode", "2")
168 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
169 dev
[0].set_network_quoted(id, "psk", "1234567890")
170 dev
[0].set_network(id, "frequency", "2412")
171 dev
[0].set_network(id, "scan_freq", "2412")
172 dev
[0].select_network(id)
173 wait_ap_ready(dev
[0])
174 bssid
= dev
[0].p2p_interface_addr()
176 logger
.info("Test PBC mode start/stop")
177 if "FAIL" not in dev
[0].request("WPS_CANCEL"):
178 raise Exception("Unexpected WPS_CANCEL success")
179 dev
[0].request("WPS_PBC")
180 ev
= dev
[0].wait_event(["WPS-PBC-ACTIVE"])
182 raise Exception("PBC mode start timeout")
183 if "OK" not in dev
[0].request("WPS_CANCEL"):
184 raise Exception("Unexpected WPS_CANCEL failure")
185 ev
= dev
[0].wait_event(["WPS-TIMEOUT"])
187 raise Exception("PBC mode disabling timeout")
189 logger
.info("Test PBC protocol run")
190 dev
[0].request("WPS_PBC")
191 ev
= dev
[0].wait_event(["WPS-PBC-ACTIVE"])
193 raise Exception("PBC mode start timeout")
194 dev
[1].request("WPS_PBC")
195 dev
[1].wait_connected(timeout
=30, error
="WPS PBC operation timed out")
196 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
198 logger
.info("Test AP PIN to learn configuration")
199 pin
= dev
[0].request("WPS_AP_PIN random")
201 raise Exception("Could not generate random AP PIN")
202 if pin
not in dev
[0].request("WPS_AP_PIN get"):
203 raise Exception("Could not fetch current AP PIN")
204 dev
[2].wps_reg(bssid
, pin
)
205 hwsim_utils
.test_connectivity(dev
[1], dev
[2])
207 dev
[1].request("REMOVE_NETWORK all")
208 dev
[2].request("REMOVE_NETWORK all")
210 logger
.info("Test AP PIN operations")
211 dev
[0].request("WPS_AP_PIN disable")
212 dev
[0].request("WPS_AP_PIN set " + pin
+ " 1")
214 if "FAIL" not in dev
[0].request("WPS_AP_PIN get"):
215 raise Exception("AP PIN unexpectedly still enabled")
217 pin
= dev
[1].wps_read_pin()
218 dev
[0].request("WPS_PIN any " + pin
)
219 dev
[1].request("WPS_PIN any " + pin
)
220 dev
[1].wait_connected(timeout
=30)
221 dev
[1].request("REMOVE_NETWORK all")
222 dev
[1].dump_monitor()
224 dev
[0].request("WPS_PIN any " + pin
+ " 100")
225 dev
[1].request("WPS_PIN any " + pin
)
226 dev
[1].wait_connected(timeout
=30)
227 dev
[1].request("REMOVE_NETWORK all")
228 dev
[1].dump_monitor()
230 dev
[0].request("WPS_AP_PIN set 12345670")
231 dev
[0].dump_monitor()
233 runs
= ("88887777", "12340000", "00000000", "12345670")
235 logger
.info("Try AP PIN " + pin
)
236 dev
[2].dump_monitor()
237 dev
[2].request("WPS_REG " + bssid
+ " " + pin
)
238 ev
= dev
[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout
=15)
240 raise Exception("WPS operation timed out")
241 if "WPS-SUCCESS" in ev
:
242 raise Exception("WPS operation succeeded unexpectedly")
243 dev
[2].wait_disconnected(timeout
=10)
244 dev
[2].request("WPS_CANCEL")
245 dev
[2].request("REMOVE_NETWORK all")
246 ev
= dev
[0].wait_event(["WPS-AP-SETUP-LOCKED"])
248 raise Exception("WPS AP PIN not locked")
250 dev
[0].dump_monitor()
251 logger
.info("Test random AP PIN timeout")
252 pin
= dev
[0].request("WPS_AP_PIN random 1")
254 raise Exception("Could not generate random AP PIN")
255 res
= dev
[0].request("WPS_AP_PIN get")
257 raise Exception("Could not fetch current AP PIN")
260 res
= dev
[0].request("WPS_AP_PIN get")
263 if "FAIL" not in res
:
264 raise Exception("WPS_AP_PIN random timeout did not work")
266 if "FAIL" not in dev
[0].request("WPS_AP_PIN foo"):
267 raise Exception("Invalid WPS_AP_PIN command not rejected")
268 if "FAIL" not in dev
[0].request("WPS_AP_PIN set"):
269 raise Exception("Invalid WPS_AP_PIN command not rejected")
271 def test_wpas_ap_wps_frag(dev
):
272 """wpa_supplicant AP mode - WPS operations with fragmentation"""
273 id = dev
[0].add_network()
274 dev
[0].set_network(id, "mode", "2")
275 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
276 dev
[0].set_network_quoted(id, "psk", "1234567890")
277 dev
[0].set_network(id, "frequency", "2412")
278 dev
[0].set_network(id, "scan_freq", "2412")
279 dev
[0].set_network(id, "fragment_size", "300")
280 dev
[0].select_network(id)
281 wait_ap_ready(dev
[0])
282 bssid
= dev
[0].own_addr()
284 pin
= dev
[1].wps_read_pin()
285 dev
[0].request("WPS_PIN any " + pin
)
286 dev
[1].scan_for_bss(bssid
, freq
="2412")
287 dev
[1].request("WPS_PIN " + bssid
+ " " + pin
)
288 dev
[1].wait_connected(timeout
=30)
290 def test_wpas_ap_wps_pbc_overlap(dev
):
291 """wpa_supplicant AP mode - WPS operations with PBC overlap"""
292 id = dev
[0].add_network()
293 dev
[0].set_network(id, "mode", "2")
294 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
295 dev
[0].set_network_quoted(id, "psk", "1234567890")
296 dev
[0].set_network(id, "frequency", "2412")
297 dev
[0].set_network(id, "scan_freq", "2412")
298 dev
[0].select_network(id)
299 wait_ap_ready(dev
[0])
300 bssid
= dev
[0].p2p_interface_addr()
302 dev
[1].scan_for_bss(bssid
, freq
="2412")
303 dev
[1].dump_monitor()
304 dev
[2].scan_for_bss(bssid
, freq
="2412")
305 dev
[2].dump_monitor()
306 dev
[0].request("WPS_PBC")
307 dev
[1].request("WPS_PBC " + bssid
)
308 dev
[2].request("WPS_PBC " + bssid
)
310 ev
= dev
[1].wait_event(["WPS-M2D"], timeout
=15)
312 raise Exception("PBC session overlap not detected (dev1)")
313 if "config_error=12" not in ev
:
314 raise Exception("PBC session overlap not correctly reported (dev1)")
316 ev
= dev
[2].wait_event(["WPS-M2D"], timeout
=15)
318 raise Exception("PBC session overlap not detected (dev2)")
319 if "config_error=12" not in ev
:
320 raise Exception("PBC session overlap not correctly reported (dev2)")
322 if "FAIL-PBC-OVERLAP" not in dev
[0].request("WPS_PBC"):
323 raise Exception("WPS_PBC(AP) accepted during overlap")
324 if "FAIL-PBC-OVERLAP" not in dev
[0].request("WPS_PBC any"):
325 raise Exception("WPS_PBC(AP) accepted during overlap")
326 dev
[0].request("WPS_CANCEL")
327 dev
[1].request("WPS_CANCEL")
328 dev
[2].request("WPS_CANCEL")
331 def test_wpas_ap_wps_disabled(dev
):
332 """wpa_supplicant AP mode - WPS disabled"""
333 id = dev
[0].add_network()
334 dev
[0].set_network(id, "mode", "2")
335 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-no-wps")
336 dev
[0].set_network_quoted(id, "psk", "12345678")
337 dev
[0].set_network(id, "frequency", "2412")
338 dev
[0].set_network(id, "scan_freq", "2412")
339 dev
[0].set_network(id, "wps_disabled", "1")
340 dev
[0].select_network(id)
341 wait_ap_ready(dev
[0])
343 dev
[1].connect("wpas-ap-no-wps", psk
="12345678", scan_freq
="2412")
344 dev
[1].request("DISCONNECT")
345 dev
[1].wait_disconnected()
347 def test_wpas_ap_dfs(dev
):
348 """wpa_supplicant AP mode - DFS"""
349 if dev
[0].get_mcc() > 1:
350 raise HwsimSkip("DFS is not supported with multi channel contexts")
353 _test_wpas_ap_dfs(dev
)
356 dev
[0].request("SET country 00")
357 dev
[1].flush_scan_cache()
359 def _test_wpas_ap_dfs(dev
):
361 dev
[0].request("SET country US")
362 id = dev
[0].add_network()
363 dev
[0].set_network(id, "mode", "2")
364 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-dfs")
365 dev
[0].set_network(id, "key_mgmt", "NONE")
366 dev
[0].set_network(id, "frequency", "5260")
367 dev
[0].set_network(id, "scan_freq", "5260")
368 dev
[0].select_network(id)
370 ev
= dev
[0].wait_event(["DFS-CAC-START"])
372 # For now, assume DFS is not supported by all kernel builds.
373 raise HwsimSkip("CAC did not start - assume not supported")
375 ev
= dev
[0].wait_event(["DFS-CAC-COMPLETED"], timeout
=70)
377 raise Exception("CAC did not complete")
378 if "success=1" not in ev
:
379 raise Exception("CAC failed")
380 if "freq=5260" not in ev
:
381 raise Exception("Unexpected DFS freq result")
383 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED"])
385 raise Exception("AP failed to start")
387 dev
[1].connect("wpas-ap-dfs", key_mgmt
="NONE")
388 dev
[1].wait_regdom(country_ie
=True)
389 dev
[0].request("DISCONNECT")
390 dev
[1].disconnect_and_stop_scan()
393 def test_wpas_ap_disable(dev
):
394 """wpa_supplicant AP mode - DISABLE_NETWORK"""
395 id = dev
[0].add_network()
396 dev
[0].set_network(id, "mode", "2")
397 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
398 dev
[0].set_network(id, "key_mgmt", "NONE")
399 dev
[0].set_network(id, "scan_freq", "2412")
400 dev
[0].select_network(id)
402 ev
= dev
[0].wait_event(["AP-ENABLED"])
404 raise Exception("AP-ENABLED event not seen")
405 wait_ap_ready(dev
[0])
406 dev
[0].request("DISABLE_NETWORK %d" % id)
407 ev
= dev
[0].wait_event(["AP-DISABLED"])
409 raise Exception("AP-DISABLED event not seen")
410 dev
[0].wait_disconnected()
412 def test_wpas_ap_acs(dev
):
413 """wpa_supplicant AP mode - ACS"""
414 res
= dev
[0].get_capability("acs")
415 if res
is None or "ACS" not in res
:
416 raise HwsimSkip("ACS not supported")
418 # For now, make sure the last operating channel was on 2.4 GHz band to get
419 # sufficient survey data from mac80211_hwsim.
420 id = dev
[0].add_network()
421 dev
[0].set_network(id, "mode", "2")
422 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
423 dev
[0].set_network(id, "key_mgmt", "NONE")
424 dev
[0].set_network(id, "frequency", "2412")
425 dev
[0].set_network(id, "scan_freq", "2412")
426 dev
[0].select_network(id)
427 wait_ap_ready(dev
[0])
428 dev
[0].request("REMOVE_NETWORK all")
429 dev
[0].wait_disconnected()
431 id = dev
[0].add_network()
432 dev
[0].set_network(id, "mode", "2")
433 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
434 dev
[0].set_network(id, "key_mgmt", "NONE")
435 dev
[0].set_network(id, "frequency", "2417")
436 dev
[0].set_network(id, "scan_freq", "2417")
437 dev
[0].set_network(id, "acs", "1")
438 dev
[0].select_network(id)
439 wait_ap_ready(dev
[0])
441 # ACS prefers channels 1, 6, 11
442 freq
= dev
[0].get_status_field('freq')
444 raise Exception("Unexpected operating channel selected")
446 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
=freq
)
449 def test_wpas_ap_and_assoc_req_p2p_ie(dev
):
450 """wpa_supplicant AP mode - unexpected P2P IE in Association Request"""
452 _test_wpas_ap_and_assoc_req_p2p_ie(dev
)
454 dev
[1].request("VENDOR_ELEM_REMOVE 13 *")
455 dev
[0].request("P2P_SET disabled 0")
457 def _test_wpas_ap_and_assoc_req_p2p_ie(dev
):
458 dev
[0].request("P2P_SET disabled 1")
459 id = dev
[0].add_network()
460 dev
[0].set_network(id, "mode", "2")
461 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
462 dev
[0].set_network(id, "key_mgmt", "NONE")
463 dev
[0].set_network(id, "frequency", "2412")
464 dev
[0].set_network(id, "scan_freq", "2412")
465 dev
[0].select_network(id)
466 wait_ap_ready(dev
[0])
468 dev
[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09")
469 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
470 dev
[1].request("DISCONNECT")
471 dev
[1].wait_disconnected()
473 dev
[0].request("DISCONNECT")
474 dev
[0].wait_disconnected()
477 def test_wpas_ap_open_ht_disabled(dev
):
478 """wpa_supplicant AP mode - open network and HT disabled"""
479 id = dev
[0].add_network()
480 dev
[0].set_network(id, "mode", "2")
481 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
482 dev
[0].set_network(id, "key_mgmt", "NONE")
483 dev
[0].set_network(id, "frequency", "2412")
484 dev
[0].set_network(id, "scan_freq", "2412")
485 dev
[0].set_network(id, "disable_ht", "1")
486 dev
[0].select_network(id)
487 wait_ap_ready(dev
[0])
489 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
490 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
492 def test_wpas_ap_failures(dev
):
493 """wpa_supplicant AP mode - failures"""
494 # No SSID configured for AP mode
495 id = dev
[0].add_network()
496 dev
[0].set_network(id, "mode", "2")
497 dev
[0].set_network(id, "key_mgmt", "NONE")
498 dev
[0].set_network(id, "frequency", "2412")
499 dev
[0].set_network(id, "scan_freq", "2412")
500 dev
[0].select_network(id)
501 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout
=0.1)
503 raise Exception("Unexpected connection event")
504 dev
[0].request("REMOVE_NETWORK all")
506 # Invalid pbss value(2) for AP mode
507 dev
[0].dump_monitor()
508 id = dev
[0].add_network()
509 dev
[0].set_network(id, "mode", "2")
510 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
511 dev
[0].set_network(id, "key_mgmt", "NONE")
512 dev
[0].set_network(id, "frequency", "2412")
513 dev
[0].set_network(id, "scan_freq", "2412")
514 dev
[0].set_network(id, "pbss", "2")
515 dev
[0].select_network(id)
516 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED",
517 "CTRL-EVENT-DISCONNECTED"], timeout
=0.1)
518 if ev
is not None and "CTRL-EVENT-CONNECTED" in ev
:
519 raise Exception("Unexpected connection event(2)")
520 dev
[0].request("REMOVE_NETWORK all")
522 def test_wpas_ap_oom(dev
):
523 """wpa_supplicant AP mode - OOM"""
524 id = dev
[0].add_network()
525 dev
[0].set_network(id, "mode", "2")
526 dev
[0].set_network_quoted(id, "ssid", "wpas-ap")
527 dev
[0].set_network_quoted(id, "psk", "1234567890")
528 dev
[0].set_network(id, "frequency", "2412")
529 dev
[0].set_network(id, "scan_freq", "2412")
530 with
alloc_fail(dev
[0], 1, "=wpa_supplicant_conf_ap"):
531 dev
[0].select_network(id)
532 dev
[0].wait_disconnected()
533 dev
[0].request("REMOVE_NETWORK all")
535 id = dev
[0].add_network()
536 dev
[0].set_network(id, "mode", "2")
537 dev
[0].set_network_quoted(id, "ssid", "wpas-ap")
538 dev
[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
539 dev
[0].set_network(id, "frequency", "2412")
540 dev
[0].set_network(id, "scan_freq", "2412")
541 with
alloc_fail(dev
[0], 1, "=wpa_supplicant_conf_ap"):
542 dev
[0].select_network(id)
543 dev
[0].wait_disconnected()
544 dev
[0].request("REMOVE_NETWORK all")
546 if "WEP40" in dev
[0].get_capability("group"):
547 id = dev
[0].add_network()
548 dev
[0].set_network(id, "mode", "2")
549 dev
[0].set_network_quoted(id, "ssid", "wpas-ap")
550 dev
[0].set_network(id, "key_mgmt", "NONE")
551 dev
[0].set_network_quoted(id, "wep_key0", "hello")
552 dev
[0].set_network(id, "frequency", "2412")
553 dev
[0].set_network(id, "scan_freq", "2412")
554 with
alloc_fail(dev
[0], 1, "=wpa_supplicant_conf_ap"):
555 dev
[0].select_network(id)
556 dev
[0].wait_disconnected()
557 dev
[0].request("REMOVE_NETWORK all")
559 wpas
= WpaSupplicant(global_iface
='/tmp/wpas-wlan5')
560 wpas
.interface_add("wlan5")
561 wpas
.request("SET manufacturer test")
562 wpas
.request("SET model_name test")
563 wpas
.request("SET model_number test")
564 wpas
.request("SET serial_number test")
565 wpas
.request("SET serial_number test")
566 wpas
.request("SET serial_number test")
567 wpas
.request("SET ap_vendor_elements dd0411223301")
568 id = wpas
.add_network()
569 wpas
.set_network(id, "mode", "2")
570 wpas
.set_network_quoted(id, "ssid", "wpas-ap")
571 wpas
.set_network(id, "key_mgmt", "NONE")
572 wpas
.set_network(id, "frequency", "2412")
573 wpas
.set_network(id, "scan_freq", "2412")
576 with
alloc_fail(wpas
, i
, "=wpa_supplicant_conf_ap"):
577 wpas
.select_network(id)
578 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED",
579 "CTRL-EVENT-DISCONNECTED"], timeout
=1)
580 wpas
.request("DISCONNECT")
581 wpas
.wait_disconnected()
583 def test_wpas_ap_params(dev
):
584 """wpa_supplicant AP mode - parameters"""
585 wpas
= WpaSupplicant(global_iface
='/tmp/wpas-wlan5')
586 wpas
.interface_add("wlan5")
587 wpas
.request("SET manufacturer test")
588 wpas
.request("SET model_name test")
589 wpas
.request("SET model_number test")
590 wpas
.request("SET serial_number test")
591 wpas
.request("SET serial_number test")
592 wpas
.request("SET serial_number test")
593 wpas
.request("SET ap_vendor_elements dd0411223301")
594 id = wpas
.add_network()
595 wpas
.set_network(id, "mode", "2")
596 wpas
.set_network_quoted(id, "ssid", "wpas-ap")
597 wpas
.set_network(id, "key_mgmt", "NONE")
598 wpas
.set_network(id, "frequency", "2412")
599 wpas
.set_network(id, "scan_freq", "2412")
600 wpas
.select_network(id)
601 wpas
.wait_connected()
602 wpas
.request("DISCONNECT")
603 wpas
.wait_disconnected()
605 wpas
.request("SET beacon_int 200 3")
606 wpas
.request("SET dtim_period 3")
607 wpas
.select_network(id)
608 wpas
.wait_connected()
609 wpas
.request("DISCONNECT")
610 wpas
.wait_disconnected()
612 wpas
.set_network(id, "beacon_int", "300")
613 wpas
.set_network(id, "dtim_period", "2")
614 wpas
.select_network(id)
615 wpas
.wait_connected()
616 if "---- AP ----" not in wpas
.request("PMKSA"):
617 raise Exception("AP section missing from PMKSA output")
618 if "OK" not in wpas
.request("PMKSA_FLUSH"):
619 raise Exception("PMKSA_FLUSH failed")
620 wpas
.request("DISCONNECT")
621 wpas
.wait_disconnected()
623 def test_wpas_ap_global_sta(dev
):
624 """wpa_supplicant AP mode - STA commands on global control interface"""
625 id = dev
[0].add_network()
626 dev
[0].set_network(id, "mode", "2")
627 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
628 dev
[0].set_network(id, "key_mgmt", "NONE")
629 dev
[0].set_network(id, "frequency", "2412")
630 dev
[0].set_network(id, "scan_freq", "2412")
631 dev
[0].select_network(id)
632 wait_ap_ready(dev
[0])
634 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
636 addr1
= dev
[1].own_addr()
637 res
= dev
[0].global_request("STA " + addr1
)
638 if "UNKNOWN COMMAND" in res
:
639 raise Exception("STA command not known on global control interface")
640 res
= dev
[0].global_request("STA-FIRST")
641 if "UNKNOWN COMMAND" in res
:
642 raise Exception("STA-FIRST command not known on global control interface")
643 res
= dev
[0].global_request("STA-NEXT " + addr1
)
644 if "UNKNOWN COMMAND" in res
:
645 raise Exception("STA-NEXT command not known on global control interface")
646 dev
[1].request("DISCONNECT")
647 dev
[1].wait_disconnected()
648 dev
[0].request("DISCONNECT")
649 dev
[0].wait_disconnected()
651 def test_wpas_ap_5ghz(dev
):
652 """wpa_supplicant AP mode - 5 GHz"""
654 _test_wpas_ap_5ghz(dev
)
657 dev
[0].request("SET country 00")
658 dev
[1].flush_scan_cache()
660 def _test_wpas_ap_5ghz(dev
):
662 dev
[0].request("SET country US")
663 id = dev
[0].add_network()
664 dev
[0].set_network(id, "mode", "2")
665 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-5ghz")
666 dev
[0].set_network(id, "key_mgmt", "NONE")
667 dev
[0].set_network(id, "frequency", "5180")
668 dev
[0].set_network(id, "scan_freq", "5180")
669 dev
[0].select_network(id)
670 wait_ap_ready(dev
[0])
672 dev
[1].connect("wpas-ap-5ghz", key_mgmt
="NONE", scan_freq
="5180")
673 dev
[1].request("DISCONNECT")
674 dev
[1].wait_disconnected()
676 def test_wpas_ap_open_vht80(dev
):
677 """wpa_supplicant AP mode - VHT 80 MHz"""
678 id = dev
[0].add_network()
679 dev
[0].set("country", "FI")
681 dev
[0].set_network(id, "mode", "2")
682 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
683 dev
[0].set_network(id, "key_mgmt", "NONE")
684 dev
[0].set_network(id, "frequency", "5180")
685 dev
[0].set_network(id, "scan_freq", "5180")
686 dev
[0].set_network(id, "vht", "1")
687 dev
[0].set_network(id, "vht_center_freq1", "5210")
688 dev
[0].set_network(id, "max_oper_chwidth", "1")
689 dev
[0].set_network(id, "ht40", "1")
690 dev
[0].select_network(id)
691 wait_ap_ready(dev
[0])
693 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="5180")
694 sig
= dev
[1].request("SIGNAL_POLL").splitlines()
695 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
696 dev
[1].request("DISCONNECT")
697 dev
[1].wait_disconnected()
698 if "FREQUENCY=5180" not in sig
:
699 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig
))
700 if "WIDTH=80 MHz" not in sig
:
701 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig
))
704 dev
[0].set("country", "00")
705 dev
[1].flush_scan_cache()
707 def test_wpas_ap_no_ht(dev
):
708 """wpa_supplicant AP mode - HT disabled"""
709 id = dev
[0].add_network()
710 dev
[0].set_network(id, "mode", "2")
711 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
712 dev
[0].set_network(id, "key_mgmt", "NONE")
713 dev
[0].set_network(id, "frequency", "2412")
714 dev
[0].set_network(id, "scan_freq", "2412")
715 dev
[0].set_network(id, "ht", "0")
716 dev
[0].set_network(id, "wps_disabled", "1")
717 dev
[0].select_network(id)
718 wait_ap_ready(dev
[0])
719 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
720 sig
= dev
[1].request("SIGNAL_POLL").splitlines()
721 dev
[1].request("DISCONNECT")
722 dev
[1].wait_disconnected()
723 dev
[0].request("REMOVE_NETWORK all")
724 dev
[0].wait_disconnected()
726 id = dev
[0].add_network()
727 dev
[0].set_network(id, "mode", "2")
728 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
729 dev
[0].set_network(id, "key_mgmt", "NONE")
730 dev
[0].set_network(id, "frequency", "2412")
731 dev
[0].set_network(id, "scan_freq", "2412")
732 dev
[0].set_network(id, "wps_disabled", "1")
733 dev
[0].select_network(id)
734 wait_ap_ready(dev
[0])
735 dev
[1].flush_scan_cache()
736 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
737 sig2
= dev
[1].request("SIGNAL_POLL").splitlines()
738 dev
[1].request("DISCONNECT")
739 dev
[1].wait_disconnected()
740 dev
[0].request("REMOVE_NETWORK all")
741 dev
[0].wait_disconnected()
743 if "WIDTH=20 MHz (no HT)" not in sig
:
744 raise Exception("HT was not disabled: " + str(sig
))
745 if "WIDTH=20 MHz" not in sig2
:
746 raise Exception("HT was not enabled: " + str(sig2
))
748 def test_wpas_ap_async_fail(dev
):
749 """wpa_supplicant AP mode - Async failure"""
750 id = dev
[0].add_network()
751 dev
[0].set("country", "FI")
753 dev
[0].set_network(id, "mode", "2")
754 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
755 dev
[0].set_network(id, "key_mgmt", "NONE")
756 dev
[0].set_network(id, "frequency", "5180")
757 dev
[0].set_network(id, "scan_freq", "5180")
758 dev
[0].set_network(id, "vht", "1")
759 dev
[0].set_network(id, "vht_center_freq1", "5210")
760 dev
[0].set_network(id, "max_oper_chwidth", "1")
761 dev
[0].set_network(id, "ht40", "1")
763 with
alloc_fail(dev
[0], 1,
764 "nl80211_get_scan_results;ieee80211n_check_scan"):
765 dev
[0].select_network(id)
766 dev
[0].wait_disconnected()
768 clear_regdom_dev(dev
)
770 def test_wpas_ap_sae(dev
):
771 """wpa_supplicant AP mode - SAE using psk"""
772 run_wpas_ap_sae(dev
, False)
774 def test_wpas_ap_sae_password(dev
):
775 """wpa_supplicant AP mode - SAE using sae_password"""
776 run_wpas_ap_sae(dev
, True)
778 def test_wpas_ap_sae_pwe_1(dev
):
779 """wpa_supplicant AP mode - SAE using sae_password and sae_pwe=1"""
781 dev
[0].set("sae_pwe", "1")
782 dev
[1].set("sae_pwe", "1")
783 run_wpas_ap_sae(dev
, True, sae_password_id
=True)
785 dev
[0].set("sae_pwe", "0")
786 dev
[1].set("sae_pwe", "0")
788 def run_wpas_ap_sae(dev
, sae_password
, sae_password_id
=False):
789 if "SAE" not in dev
[0].get_capability("auth_alg"):
790 raise HwsimSkip("SAE not supported")
791 if "SAE" not in dev
[1].get_capability("auth_alg"):
792 raise HwsimSkip("SAE not supported")
793 dev
[0].request("SET sae_groups ")
794 id = dev
[0].add_network()
795 dev
[0].set_network(id, "mode", "2")
796 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-sae")
797 dev
[0].set_network(id, "proto", "WPA2")
798 dev
[0].set_network(id, "key_mgmt", "SAE")
799 dev
[0].set_network(id, "pairwise", "CCMP")
800 dev
[0].set_network(id, "group", "CCMP")
802 dev
[0].set_network_quoted(id, "sae_password", "12345678")
804 dev
[0].set_network_quoted(id, "psk", "12345678")
807 dev
[0].set_network_quoted(id, "sae_password_id", pw_id
)
810 dev
[0].set_network(id, "frequency", "2412")
811 dev
[0].set_network(id, "scan_freq", "2412")
812 dev
[0].set_network(id, "wps_disabled", "1")
813 dev
[0].select_network(id)
814 wait_ap_ready(dev
[0])
816 dev
[1].request("SET sae_groups ")
817 dev
[1].connect("wpas-ap-sae", key_mgmt
="SAE", sae_password
="12345678",
818 sae_password_id
=pw_id
, scan_freq
="2412")
820 def test_wpas_ap_scan(dev
, apdev
):
821 """wpa_supplicant AP mode and scanning"""
822 dev
[0].flush_scan_cache()
824 hapd
= hostapd
.add_ap(apdev
[0], {"ssid": "open"})
825 bssid
= hapd
.own_addr()
827 id = dev
[0].add_network()
828 dev
[0].set_network(id, "mode", "2")
829 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
830 dev
[0].set_network(id, "key_mgmt", "NONE")
831 dev
[0].set_network(id, "frequency", "2412")
832 dev
[0].set_network(id, "scan_freq", "2412")
833 dev
[0].select_network(id)
834 wait_ap_ready(dev
[0])
835 dev
[0].dump_monitor()
837 if "OK" not in dev
[0].request("SCAN freq=2412"):
838 raise Exception("SCAN command not accepted")
839 ev
= dev
[0].wait_event(["CTRL-EVENT-SCAN-RESULTS",
840 "CTRL-EVENT-SCAN-FAILED"], 15)
842 raise Exception("Scan result timed out")
843 if "CTRL-EVENT-SCAN-FAILED ret=-95" in ev
:
844 # Scanning in AP mode not supported
846 if "CTRL-EVENT-SCAN-FAILED" in ev
:
847 raise Exception("Unexpected scan failure reason: " + ev
)
848 if "CTRL-EVENT-SCAN-RESULTS" in ev
:
849 bss
= dev
[0].get_bss(bssid
)
851 raise Exception("AP not found in scan")
853 def test_wpas_ap_sae(dev
):
854 """wpa_supplicant AP mode - SAE using psk"""
855 run_wpas_ap_sae(dev
, False)
857 def test_wpas_ap_sae_and_psk_transition_disable(dev
):
858 """wpa_supplicant AP mode - SAE+PSK transition disable indication"""
859 if "SAE" not in dev
[0].get_capability("auth_alg"):
860 raise HwsimSkip("SAE not supported")
861 if "SAE" not in dev
[1].get_capability("auth_alg"):
862 raise HwsimSkip("SAE not supported")
863 dev
[0].set("sae_groups", "")
864 id = dev
[0].add_network()
865 dev
[0].set_network(id, "mode", "2")
866 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-sae")
867 dev
[0].set_network(id, "proto", "WPA2")
868 dev
[0].set_network(id, "key_mgmt", "SAE")
869 dev
[0].set_network(id, "transition_disable", "1")
870 dev
[0].set_network(id, "ieee80211w", "1")
871 dev
[0].set_network(id, "pairwise", "CCMP")
872 dev
[0].set_network(id, "group", "CCMP")
873 dev
[0].set_network_quoted(id, "psk", "12345678")
874 dev
[0].set_network(id, "frequency", "2412")
875 dev
[0].set_network(id, "scan_freq", "2412")
876 dev
[0].set_network(id, "wps_disabled", "1")
877 dev
[0].select_network(id)
878 wait_ap_ready(dev
[0])
880 dev
[1].set("sae_groups", "")
881 dev
[1].connect("wpas-ap-sae", key_mgmt
="SAE WPA-PSK",
882 psk
="12345678", ieee80211w
="1",
884 ev
= dev
[1].wait_event(["TRANSITION-DISABLE"], timeout
=1)
886 raise Exception("Transition disable not indicated")
887 if ev
.split(' ')[1] != "01":
888 raise Exception("Unexpected transition disable bitmap: " + ev
)
890 val
= dev
[1].get_network(id, "ieee80211w")
892 raise Exception("Unexpected ieee80211w value: " + val
)
893 val
= dev
[1].get_network(id, "key_mgmt")
895 raise Exception("Unexpected key_mgmt value: " + val
)
896 val
= dev
[1].get_network(id, "group")
898 raise Exception("Unexpected group value: " + val
)
899 val
= dev
[1].get_network(id, "proto")
901 raise Exception("Unexpected proto value: " + val
)
903 dev
[1].request("DISCONNECT")
904 dev
[1].wait_disconnected()
905 dev
[1].request("RECONNECT")
906 dev
[1].wait_connected()