Updated to hostap_2_6
[mech_eap.git] / libeap / 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     if dev[0].get_mcc() > 1:
325         raise HwsimSkip("DFS is not supported with multi channel contexts")
326
327     try:
328         _test_wpas_ap_dfs(dev)
329     finally:
330         set_country("00")
331         dev[0].request("SET country 00")
332         dev[1].flush_scan_cache()
333
334 def _test_wpas_ap_dfs(dev):
335     set_country("US")
336     dev[0].request("SET country US")
337     id = dev[0].add_network()
338     dev[0].set_network(id, "mode", "2")
339     dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs")
340     dev[0].set_network(id, "key_mgmt", "NONE")
341     dev[0].set_network(id, "frequency", "5260")
342     dev[0].set_network(id, "scan_freq", "5260")
343     dev[0].select_network(id)
344
345     ev = dev[0].wait_event(["DFS-CAC-START"])
346     if ev is None:
347         # For now, assume DFS is not supported by all kernel builds.
348         raise HwsimSkip("CAC did not start - assume not supported")
349
350     ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70)
351     if ev is None:
352         raise Exception("CAC did not complete")
353     if "success=1" not in ev:
354         raise Exception("CAC failed")
355     if "freq=5260" not in ev:
356         raise Exception("Unexpected DFS freq result")
357
358     ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
359     if ev is None:
360         raise Exception("AP failed to start")
361
362     dev[1].connect("wpas-ap-dfs", key_mgmt="NONE")
363
364 @remote_compatible
365 def test_wpas_ap_disable(dev):
366     """wpa_supplicant AP mode - DISABLE_NETWORK"""
367     id = dev[0].add_network()
368     dev[0].set_network(id, "mode", "2")
369     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
370     dev[0].set_network(id, "key_mgmt", "NONE")
371     dev[0].set_network(id, "scan_freq", "2412")
372     dev[0].select_network(id)
373
374     ev = dev[0].wait_event(["AP-ENABLED"])
375     if ev is None:
376         raise Exception("AP-ENABLED event not seen")
377     wait_ap_ready(dev[0])
378     dev[0].request("DISABLE_NETWORK %d" % id)
379     ev = dev[0].wait_event(["AP-DISABLED"])
380     if ev is None:
381         raise Exception("AP-DISABLED event not seen")
382     dev[0].wait_disconnected()
383
384 def test_wpas_ap_acs(dev):
385     """wpa_supplicant AP mode - ACS"""
386     res = dev[0].get_capability("acs")
387     if res is None or "ACS" not in res:
388         raise HwsimSkip("ACS not supported")
389
390     id = dev[0].add_network()
391     dev[0].set_network(id, "mode", "2")
392     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
393     dev[0].set_network(id, "key_mgmt", "NONE")
394     dev[0].set_network(id, "frequency", "2417")
395     dev[0].set_network(id, "scan_freq", "2417")
396     dev[0].set_network(id, "acs", "1")
397     dev[0].select_network(id)
398     wait_ap_ready(dev[0])
399
400     # ACS prefers channels 1, 6, 11
401     freq = dev[0].get_status_field('freq')
402     if freq == "2417":
403         raise Exception("Unexpected operating channel selected")
404
405     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq)
406
407 @remote_compatible
408 def test_wpas_ap_and_assoc_req_p2p_ie(dev):
409     """wpa_supplicant AP mode - unexpected P2P IE in Association Request"""
410     try:
411         _test_wpas_ap_and_assoc_req_p2p_ie(dev)
412     finally:
413         dev[1].request("VENDOR_ELEM_REMOVE 13 *")
414         dev[0].request("P2P_SET disabled 0")
415
416 def _test_wpas_ap_and_assoc_req_p2p_ie(dev):
417     dev[0].request("P2P_SET disabled 1")
418     id = dev[0].add_network()
419     dev[0].set_network(id, "mode", "2")
420     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
421     dev[0].set_network(id, "key_mgmt", "NONE")
422     dev[0].set_network(id, "frequency", "2412")
423     dev[0].set_network(id, "scan_freq", "2412")
424     dev[0].select_network(id)
425     wait_ap_ready(dev[0])
426
427     dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09")
428     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
429     dev[1].request("DISCONNECT")
430     dev[1].wait_disconnected()
431
432     dev[0].request("DISCONNECT")
433     dev[0].wait_disconnected()
434
435 @remote_compatible
436 def test_wpas_ap_open_ht_disabled(dev):
437     """wpa_supplicant AP mode - open network and HT disabled"""
438     id = dev[0].add_network()
439     dev[0].set_network(id, "mode", "2")
440     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
441     dev[0].set_network(id, "key_mgmt", "NONE")
442     dev[0].set_network(id, "frequency", "2412")
443     dev[0].set_network(id, "scan_freq", "2412")
444     dev[0].set_network(id, "disable_ht", "1")
445     dev[0].select_network(id)
446     wait_ap_ready(dev[0])
447
448     dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
449     hwsim_utils.test_connectivity(dev[0], dev[1])
450
451 def test_wpas_ap_failures(dev):
452     """wpa_supplicant AP mode - failures"""
453     # No SSID configured for AP mode
454     id = dev[0].add_network()
455     dev[0].set_network(id, "mode", "2")
456     dev[0].set_network(id, "key_mgmt", "NONE")
457     dev[0].set_network(id, "frequency", "2412")
458     dev[0].set_network(id, "scan_freq", "2412")
459     dev[0].select_network(id)
460     ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED" ], timeout=0.1)
461     if ev is not None:
462         raise Exception("Unexpected connection event")
463     dev[0].request("REMOVE_NETWORK all")
464
465     # Invalid pbss value(2) for AP mode
466     dev[0].dump_monitor()
467     id = dev[0].add_network()
468     dev[0].set_network(id, "mode", "2")
469     dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
470     dev[0].set_network(id, "key_mgmt", "NONE")
471     dev[0].set_network(id, "frequency", "2412")
472     dev[0].set_network(id, "scan_freq", "2412")
473     dev[0].set_network(id, "pbss", "2")
474     dev[0].select_network(id)
475     ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
476                              "CTRL-EVENT-DISCONNECTED" ], timeout=0.1)
477     if ev is not None and "CTRL-EVENT-CONNECTED" in ev:
478         raise Exception("Unexpected connection event(2)")
479     dev[0].request("REMOVE_NETWORK all")
480
481 def test_wpas_ap_oom(dev):
482     """wpa_supplicant AP mode - OOM"""
483     id = dev[0].add_network()
484     dev[0].set_network(id, "mode", "2")
485     dev[0].set_network_quoted(id, "ssid", "wpas-ap")
486     dev[0].set_network_quoted(id, "psk", "1234567890")
487     dev[0].set_network(id, "frequency", "2412")
488     dev[0].set_network(id, "scan_freq", "2412")
489     with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
490         dev[0].select_network(id)
491         dev[0].wait_disconnected()
492     dev[0].request("REMOVE_NETWORK all")
493
494     id = dev[0].add_network()
495     dev[0].set_network(id, "mode", "2")
496     dev[0].set_network_quoted(id, "ssid", "wpas-ap")
497     dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
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     id = dev[0].add_network()
506     dev[0].set_network(id, "mode", "2")
507     dev[0].set_network_quoted(id, "ssid", "wpas-ap")
508     dev[0].set_network(id, "key_mgmt", "NONE")
509     dev[0].set_network_quoted(id, "wep_key0", "hello")
510     dev[0].set_network(id, "frequency", "2412")
511     dev[0].set_network(id, "scan_freq", "2412")
512     with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
513         dev[0].select_network(id)
514         dev[0].wait_disconnected()
515     dev[0].request("REMOVE_NETWORK all")
516
517     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
518     wpas.interface_add("wlan5")
519     wpas.request("SET manufacturer test")
520     wpas.request("SET model_name test")
521     wpas.request("SET model_number test")
522     wpas.request("SET serial_number test")
523     wpas.request("SET serial_number test")
524     wpas.request("SET serial_number test")
525     wpas.request("SET ap_vendor_elements dd0411223301")
526     id = wpas.add_network()
527     wpas.set_network(id, "mode", "2")
528     wpas.set_network_quoted(id, "ssid", "wpas-ap")
529     wpas.set_network(id, "key_mgmt", "NONE")
530     wpas.set_network(id, "frequency", "2412")
531     wpas.set_network(id, "scan_freq", "2412")
532
533     for i in range(5):
534         with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"):
535             wpas.select_network(id)
536             ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
537                                      "CTRL-EVENT-DISCONNECTED" ], timeout=1)
538         wpas.request("DISCONNECT")
539         wpas.wait_disconnected()
540
541 def test_wpas_ap_params(dev):
542     """wpa_supplicant AP mode - parameters"""
543     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
544     wpas.interface_add("wlan5")
545     wpas.request("SET manufacturer test")
546     wpas.request("SET model_name test")
547     wpas.request("SET model_number test")
548     wpas.request("SET serial_number test")
549     wpas.request("SET serial_number test")
550     wpas.request("SET serial_number test")
551     wpas.request("SET ap_vendor_elements dd0411223301")
552     id = wpas.add_network()
553     wpas.set_network(id, "mode", "2")
554     wpas.set_network_quoted(id, "ssid", "wpas-ap")
555     wpas.set_network(id, "key_mgmt", "NONE")
556     wpas.set_network(id, "frequency", "2412")
557     wpas.set_network(id, "scan_freq", "2412")
558     wpas.select_network(id)
559     wpas.wait_connected()
560     wpas.request("DISCONNECT")
561     wpas.wait_disconnected()
562
563     wpas.request("SET beacon_int 200 3")
564     wpas.request("SET dtim_period 3")
565     wpas.select_network(id)
566     wpas.wait_connected()
567     wpas.request("DISCONNECT")
568     wpas.wait_disconnected()
569
570     wpas.set_network(id, "beacon_int", "300")
571     wpas.set_network(id, "dtim_period", "2")
572     wpas.select_network(id)
573     wpas.wait_connected()
574     if "---- AP ----" not in wpas.request("PMKSA"):
575         raise Exception("AP section missing from PMKSA output")
576     if "OK" not in wpas.request("PMKSA_FLUSH"):
577         raise Exception("PMKSA_FLUSH failed")
578     wpas.request("DISCONNECT")
579     wpas.wait_disconnected()