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