43a12c9afad6769fa2d4686513b0aabdfe0d6db6
[mech_eap.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
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 @remote_compatible
82 def test_wpas_ap_wep(dev):
83     """wpa_supplicant AP mode - WEP"""
84     id = dev[0].add_network()
85     dev[0].set_network(id, "mode", "2")
86     dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
87     dev[0].set_network(id, "key_mgmt", "NONE")
88     dev[0].set_network(id, "frequency", "2412")
89     dev[0].set_network(id, "scan_freq", "2412")
90     dev[0].set_network_quoted(id, "wep_key0", "hello")
91     dev[0].select_network(id)
92     wait_ap_ready(dev[0])
93
94     dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"',
95                    scan_freq="2412")
96     hwsim_utils.test_connectivity(dev[0], dev[1])
97     dev[1].request("DISCONNECT")
98
99 @remote_compatible
100 def test_wpas_ap_no_ssid(dev):
101     """wpa_supplicant AP mode - invalid network configuration"""
102     id = dev[0].add_network()
103     dev[0].set_network(id, "mode", "2")
104     dev[0].set_network(id, "key_mgmt", "NONE")
105     dev[0].set_network(id, "frequency", "2412")
106     dev[0].set_network(id, "scan_freq", "2412")
107     dev[0].select_network(id)
108     ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
109     if ev is not None:
110         raise Exception("Unexpected AP start")
111
112 @remote_compatible
113 def test_wpas_ap_default_frequency(dev):
114     """wpa_supplicant AP mode - default frequency"""
115     id = dev[0].add_network()
116     dev[0].set_network(id, "mode", "2")
117     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
118     dev[0].set_network(id, "key_mgmt", "NONE")
119     dev[0].set_network(id, "scan_freq", "2412")
120     dev[0].select_network(id)
121     wait_ap_ready(dev[0])
122     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462")
123     dev[1].request("DISCONNECT")
124
125 @remote_compatible
126 def test_wpas_ap_invalid_frequency(dev):
127     """wpa_supplicant AP mode - invalid frequency configuration"""
128     id = dev[0].add_network()
129     dev[0].set_network(id, "mode", "2")
130     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
131     dev[0].set_network(id, "key_mgmt", "NONE")
132     dev[0].set_network(id, "frequency", "2413")
133     dev[0].set_network(id, "scan_freq", "2412")
134     dev[0].select_network(id)
135     ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
136     if ev is not None:
137         raise Exception("Unexpected AP start")
138
139 def test_wpas_ap_wps(dev):
140     """wpa_supplicant AP mode - WPS operations"""
141     id = dev[0].add_network()
142     dev[0].set_network(id, "mode", "2")
143     dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
144     dev[0].set_network_quoted(id, "psk", "1234567890")
145     dev[0].set_network(id, "frequency", "2412")
146     dev[0].set_network(id, "scan_freq", "2412")
147     dev[0].select_network(id)
148     wait_ap_ready(dev[0])
149     bssid = dev[0].p2p_interface_addr()
150
151     logger.info("Test PBC mode start/stop")
152     if "FAIL" not in dev[0].request("WPS_CANCEL"):
153         raise Exception("Unexpected WPS_CANCEL success")
154     dev[0].request("WPS_PBC")
155     ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
156     if ev is None:
157         raise Exception("PBC mode start timeout")
158     if "OK" not in dev[0].request("WPS_CANCEL"):
159         raise Exception("Unexpected WPS_CANCEL failure")
160     ev = dev[0].wait_event(["WPS-TIMEOUT"])
161     if ev is None:
162         raise Exception("PBC mode disabling timeout")
163
164     logger.info("Test PBC protocol run")
165     dev[0].request("WPS_PBC")
166     ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
167     if ev is None:
168         raise Exception("PBC mode start timeout")
169     dev[1].request("WPS_PBC")
170     dev[1].wait_connected(timeout=30, error="WPS PBC operation timed out")
171     hwsim_utils.test_connectivity(dev[0], dev[1])
172
173     logger.info("Test AP PIN to learn configuration")
174     pin = dev[0].request("WPS_AP_PIN random")
175     if "FAIL" in pin:
176         raise Exception("Could not generate random AP PIN")
177     if pin not in dev[0].request("WPS_AP_PIN get"):
178         raise Exception("Could not fetch current AP PIN")
179     dev[2].wps_reg(bssid, pin)
180     hwsim_utils.test_connectivity(dev[1], dev[2])
181
182     dev[1].request("REMOVE_NETWORK all")
183     dev[2].request("REMOVE_NETWORK all")
184
185     logger.info("Test AP PIN operations")
186     dev[0].request("WPS_AP_PIN disable")
187     dev[0].request("WPS_AP_PIN set " + pin + " 1")
188     time.sleep(1.1)
189     if "FAIL" not in dev[0].request("WPS_AP_PIN get"):
190         raise Exception("AP PIN unexpectedly still enabled")
191
192     pin = dev[1].wps_read_pin()
193     dev[0].request("WPS_PIN any " + pin)
194     dev[1].request("WPS_PIN any " + pin)
195     dev[1].wait_connected(timeout=30)
196     dev[1].request("REMOVE_NETWORK all")
197     dev[1].dump_monitor()
198
199     dev[0].request("WPS_PIN any " + pin + " 100")
200     dev[1].request("WPS_PIN any " + pin)
201     dev[1].wait_connected(timeout=30)
202     dev[1].request("REMOVE_NETWORK all")
203     dev[1].dump_monitor()
204
205     dev[0].request("WPS_AP_PIN set 12345670")
206     dev[0].dump_monitor()
207
208     runs = ("88887777", "12340000", "00000000", "12345670")
209     for pin in runs:
210         logger.info("Try AP PIN " + pin)
211         dev[2].dump_monitor()
212         dev[2].request("WPS_REG " + bssid + " " + pin)
213         ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15)
214         if ev is None:
215             raise Exception("WPS operation timed out")
216         if "WPS-SUCCESS" in ev:
217             raise Exception("WPS operation succeeded unexpectedly")
218         dev[2].wait_disconnected(timeout=10)
219         dev[2].request("WPS_CANCEL")
220         dev[2].request("REMOVE_NETWORK all")
221     ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"])
222     if ev is None:
223         raise Exception("WPS AP PIN not locked")
224
225     dev[0].dump_monitor()
226     logger.info("Test random AP PIN timeout")
227     pin = dev[0].request("WPS_AP_PIN random 1")
228     if "FAIL" in pin:
229         raise Exception("Could not generate random AP PIN")
230     res = dev[0].request("WPS_AP_PIN get")
231     if pin not in res:
232         raise Exception("Could not fetch current AP PIN")
233     for i in range(10):
234         time.sleep(0.2)
235         res = dev[0].request("WPS_AP_PIN get")
236         if "FAIL" in res:
237             break
238     if "FAIL" not in res:
239         raise Exception("WPS_AP_PIN random timeout did not work")
240
241     if "FAIL" not in dev[0].request("WPS_AP_PIN foo"):
242         raise Exception("Invalid WPS_AP_PIN command not rejected")
243     if "FAIL" not in dev[0].request("WPS_AP_PIN set"):
244         raise Exception("Invalid WPS_AP_PIN command not rejected")
245
246 def test_wpas_ap_wps_frag(dev):
247     """wpa_supplicant AP mode - WPS operations with fragmentation"""
248     id = dev[0].add_network()
249     dev[0].set_network(id, "mode", "2")
250     dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
251     dev[0].set_network_quoted(id, "psk", "1234567890")
252     dev[0].set_network(id, "frequency", "2412")
253     dev[0].set_network(id, "scan_freq", "2412")
254     dev[0].set_network(id, "fragment_size", "300")
255     dev[0].select_network(id)
256     wait_ap_ready(dev[0])
257     bssid = dev[0].own_addr()
258
259     pin = dev[1].wps_read_pin()
260     dev[0].request("WPS_PIN any " + pin)
261     dev[1].scan_for_bss(bssid, freq="2412")
262     dev[1].request("WPS_PIN " + bssid + " " + pin)
263     dev[1].wait_connected(timeout=30)
264
265 def test_wpas_ap_wps_pbc_overlap(dev):
266     """wpa_supplicant AP mode - WPS operations with PBC overlap"""
267     id = dev[0].add_network()
268     dev[0].set_network(id, "mode", "2")
269     dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
270     dev[0].set_network_quoted(id, "psk", "1234567890")
271     dev[0].set_network(id, "frequency", "2412")
272     dev[0].set_network(id, "scan_freq", "2412")
273     dev[0].select_network(id)
274     wait_ap_ready(dev[0])
275     bssid = dev[0].p2p_interface_addr()
276
277     dev[1].scan_for_bss(bssid, freq="2412")
278     dev[1].dump_monitor()
279     dev[2].scan_for_bss(bssid, freq="2412")
280     dev[2].dump_monitor()
281     dev[0].request("WPS_PBC")
282     dev[1].request("WPS_PBC " + bssid)
283     dev[2].request("WPS_PBC " + bssid)
284
285     ev = dev[1].wait_event(["WPS-M2D"], timeout=15)
286     if ev is None:
287         raise Exception("PBC session overlap not detected (dev1)")
288     if "config_error=12" not in ev:
289         raise Exception("PBC session overlap not correctly reported (dev1)")
290
291     ev = dev[2].wait_event(["WPS-M2D"], timeout=15)
292     if ev is None:
293         raise Exception("PBC session overlap not detected (dev2)")
294     if "config_error=12" not in ev:
295         raise Exception("PBC session overlap not correctly reported (dev2)")
296
297     if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC"):
298         raise Exception("WPS_PBC(AP) accepted during overlap")
299     if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC any"):
300         raise Exception("WPS_PBC(AP) accepted during overlap")
301     dev[0].request("WPS_CANCEL")
302     dev[1].request("WPS_CANCEL")
303     dev[2].request("WPS_CANCEL")
304
305 @remote_compatible
306 def test_wpas_ap_wps_disabled(dev):
307     """wpa_supplicant AP mode - WPS disabled"""
308     id = dev[0].add_network()
309     dev[0].set_network(id, "mode", "2")
310     dev[0].set_network_quoted(id, "ssid", "wpas-ap-no-wps")
311     dev[0].set_network_quoted(id, "psk", "12345678")
312     dev[0].set_network(id, "frequency", "2412")
313     dev[0].set_network(id, "scan_freq", "2412")
314     dev[0].set_network(id, "wps_disabled", "1")
315     dev[0].select_network(id)
316     wait_ap_ready(dev[0])
317
318     dev[1].connect("wpas-ap-no-wps", psk="12345678", scan_freq="2412")
319     dev[1].request("DISCONNECT")
320     dev[1].wait_disconnected()
321
322 def test_wpas_ap_dfs(dev):
323     """wpa_supplicant AP mode - DFS"""
324     try:
325         _test_wpas_ap_dfs(dev)
326     finally:
327         set_country("00")
328         dev[0].request("SET country 00")
329         dev[1].flush_scan_cache()
330
331 def _test_wpas_ap_dfs(dev):
332     set_country("US")
333     dev[0].request("SET country US")
334     id = dev[0].add_network()
335     dev[0].set_network(id, "mode", "2")
336     dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs")
337     dev[0].set_network(id, "key_mgmt", "NONE")
338     dev[0].set_network(id, "frequency", "5260")
339     dev[0].set_network(id, "scan_freq", "5260")
340     dev[0].select_network(id)
341
342     ev = dev[0].wait_event(["DFS-CAC-START"])
343     if ev is None:
344         # For now, assume DFS is not supported by all kernel builds.
345         raise HwsimSkip("CAC did not start - assume not supported")
346
347     ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70)
348     if ev is None:
349         raise Exception("CAC did not complete")
350     if "success=1" not in ev:
351         raise Exception("CAC failed")
352     if "freq=5260" not in ev:
353         raise Exception("Unexpected DFS freq result")
354
355     ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
356     if ev is None:
357         raise Exception("AP failed to start")
358
359     dev[1].connect("wpas-ap-dfs", key_mgmt="NONE")
360
361 @remote_compatible
362 def test_wpas_ap_disable(dev):
363     """wpa_supplicant AP mode - DISABLE_NETWORK"""
364     id = dev[0].add_network()
365     dev[0].set_network(id, "mode", "2")
366     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
367     dev[0].set_network(id, "key_mgmt", "NONE")
368     dev[0].set_network(id, "scan_freq", "2412")
369     dev[0].select_network(id)
370
371     ev = dev[0].wait_event(["AP-ENABLED"])
372     if ev is None:
373         raise Exception("AP-ENABLED event not seen")
374     wait_ap_ready(dev[0])
375     dev[0].request("DISABLE_NETWORK %d" % id)
376     ev = dev[0].wait_event(["AP-DISABLED"])
377     if ev is None:
378         raise Exception("AP-DISABLED event not seen")
379     dev[0].wait_disconnected()
380
381 def test_wpas_ap_acs(dev):
382     """wpa_supplicant AP mode - ACS"""
383     res = dev[0].get_capability("acs")
384     if res is None or "ACS" not in res:
385         raise HwsimSkip("ACS not supported")
386
387     id = dev[0].add_network()
388     dev[0].set_network(id, "mode", "2")
389     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
390     dev[0].set_network(id, "key_mgmt", "NONE")
391     dev[0].set_network(id, "frequency", "2417")
392     dev[0].set_network(id, "scan_freq", "2417")
393     dev[0].set_network(id, "acs", "1")
394     dev[0].select_network(id)
395     wait_ap_ready(dev[0])
396
397     # ACS prefers channels 1, 6, 11
398     freq = dev[0].get_status_field('freq')
399     if freq == "2417":
400         raise Exception("Unexpected operating channel selected")
401
402     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq)
403
404 @remote_compatible
405 def test_wpas_ap_and_assoc_req_p2p_ie(dev):
406     """wpa_supplicant AP mode - unexpected P2P IE in Association Request"""
407     try:
408         _test_wpas_ap_and_assoc_req_p2p_ie(dev)
409     finally:
410         dev[1].request("VENDOR_ELEM_REMOVE 13 *")
411         dev[0].request("P2P_SET disabled 0")
412
413 def _test_wpas_ap_and_assoc_req_p2p_ie(dev):
414     dev[0].request("P2P_SET disabled 1")
415     id = dev[0].add_network()
416     dev[0].set_network(id, "mode", "2")
417     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
418     dev[0].set_network(id, "key_mgmt", "NONE")
419     dev[0].set_network(id, "frequency", "2412")
420     dev[0].set_network(id, "scan_freq", "2412")
421     dev[0].select_network(id)
422     wait_ap_ready(dev[0])
423
424     dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09")
425     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
426     dev[1].request("DISCONNECT")
427     dev[1].wait_disconnected()
428
429     dev[0].request("DISCONNECT")
430     dev[0].wait_disconnected()
431
432 @remote_compatible
433 def test_wpas_ap_open_ht_disabled(dev):
434     """wpa_supplicant AP mode - open network and HT disabled"""
435     id = dev[0].add_network()
436     dev[0].set_network(id, "mode", "2")
437     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
438     dev[0].set_network(id, "key_mgmt", "NONE")
439     dev[0].set_network(id, "frequency", "2412")
440     dev[0].set_network(id, "scan_freq", "2412")
441     dev[0].set_network(id, "disable_ht", "1")
442     dev[0].select_network(id)
443     wait_ap_ready(dev[0])
444
445     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
446     hwsim_utils.test_connectivity(dev[0], dev[1])
447
448 def test_wpas_ap_failures(dev):
449     """wpa_supplicant AP mode - failures"""
450     # No SSID configured for AP mode
451     id = dev[0].add_network()
452     dev[0].set_network(id, "mode", "2")
453     dev[0].set_network(id, "key_mgmt", "NONE")
454     dev[0].set_network(id, "frequency", "2412")
455     dev[0].set_network(id, "scan_freq", "2412")
456     dev[0].select_network(id)
457     ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED" ], timeout=0.1)
458     if ev is not None:
459         raise Exception("Unexpected connection event")
460     dev[0].request("REMOVE_NETWORK all")
461
462     # Invalid pbss value(2) for AP mode
463     dev[0].dump_monitor()
464     id = dev[0].add_network()
465     dev[0].set_network(id, "mode", "2")
466     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
467     dev[0].set_network(id, "key_mgmt", "NONE")
468     dev[0].set_network(id, "frequency", "2412")
469     dev[0].set_network(id, "scan_freq", "2412")
470     dev[0].set_network(id, "pbss", "2")
471     dev[0].select_network(id)
472     ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
473                              "CTRL-EVENT-DISCONNECTED" ], timeout=0.1)
474     if ev is not None and "CTRL-EVENT-CONNECTED" in ev:
475         raise Exception("Unexpected connection event(2)")
476     dev[0].request("REMOVE_NETWORK all")
477
478 def test_wpas_ap_oom(dev):
479     """wpa_supplicant AP mode - OOM"""
480     id = dev[0].add_network()
481     dev[0].set_network(id, "mode", "2")
482     dev[0].set_network_quoted(id, "ssid", "wpas-ap")
483     dev[0].set_network_quoted(id, "psk", "1234567890")
484     dev[0].set_network(id, "frequency", "2412")
485     dev[0].set_network(id, "scan_freq", "2412")
486     with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
487         dev[0].select_network(id)
488         dev[0].wait_disconnected()
489     dev[0].request("REMOVE_NETWORK all")
490
491     id = dev[0].add_network()
492     dev[0].set_network(id, "mode", "2")
493     dev[0].set_network_quoted(id, "ssid", "wpas-ap")
494     dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
495     dev[0].set_network(id, "frequency", "2412")
496     dev[0].set_network(id, "scan_freq", "2412")
497     with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
498         dev[0].select_network(id)
499         dev[0].wait_disconnected()
500     dev[0].request("REMOVE_NETWORK all")
501
502     id = dev[0].add_network()
503     dev[0].set_network(id, "mode", "2")
504     dev[0].set_network_quoted(id, "ssid", "wpas-ap")
505     dev[0].set_network(id, "key_mgmt", "NONE")
506     dev[0].set_network_quoted(id, "wep_key0", "hello")
507     dev[0].set_network(id, "frequency", "2412")
508     dev[0].set_network(id, "scan_freq", "2412")
509     with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
510         dev[0].select_network(id)
511         dev[0].wait_disconnected()
512     dev[0].request("REMOVE_NETWORK all")
513
514     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
515     wpas.interface_add("wlan5")
516     wpas.request("SET manufacturer test")
517     wpas.request("SET model_name test")
518     wpas.request("SET model_number test")
519     wpas.request("SET serial_number test")
520     wpas.request("SET serial_number test")
521     wpas.request("SET serial_number test")
522     wpas.request("SET ap_vendor_elements dd0411223301")
523     id = wpas.add_network()
524     wpas.set_network(id, "mode", "2")
525     wpas.set_network_quoted(id, "ssid", "wpas-ap")
526     wpas.set_network(id, "key_mgmt", "NONE")
527     wpas.set_network(id, "frequency", "2412")
528     wpas.set_network(id, "scan_freq", "2412")
529
530     for i in range(5):
531         with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"):
532             wpas.select_network(id)
533             ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
534                                      "CTRL-EVENT-DISCONNECTED" ], timeout=1)
535         wpas.request("DISCONNECT")
536         wpas.wait_disconnected()
537
538 def test_wpas_ap_params(dev):
539     """wpa_supplicant AP mode - parameters"""
540     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
541     wpas.interface_add("wlan5")
542     wpas.request("SET manufacturer test")
543     wpas.request("SET model_name test")
544     wpas.request("SET model_number test")
545     wpas.request("SET serial_number test")
546     wpas.request("SET serial_number test")
547     wpas.request("SET serial_number test")
548     wpas.request("SET ap_vendor_elements dd0411223301")
549     id = wpas.add_network()
550     wpas.set_network(id, "mode", "2")
551     wpas.set_network_quoted(id, "ssid", "wpas-ap")
552     wpas.set_network(id, "key_mgmt", "NONE")
553     wpas.set_network(id, "frequency", "2412")
554     wpas.set_network(id, "scan_freq", "2412")
555     wpas.select_network(id)
556     wpas.wait_connected()
557     wpas.request("DISCONNECT")
558     wpas.wait_disconnected()
559
560     wpas.request("SET beacon_int 200 3")
561     wpas.request("SET dtim_period 3")
562     wpas.select_network(id)
563     wpas.wait_connected()
564     wpas.request("DISCONNECT")
565     wpas.wait_disconnected()
566
567     wpas.set_network(id, "beacon_int", "300")
568     wpas.set_network(id, "dtim_period", "2")
569     wpas.select_network(id)
570     wpas.wait_connected()
571     if "---- AP ----" not in wpas.request("PMKSA"):
572         raise Exception("AP section missing from PMKSA output")
573     if "OK" not in wpas.request("PMKSA_FLUSH"):
574         raise Exception("PMKSA_FLUSH failed")
575     wpas.request("DISCONNECT")
576     wpas.wait_disconnected()