1 # P2P channel selection test cases
2 # Copyright (c) 2014, Jouni Malinen <j@w1.fi>
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
8 logger = logging.getLogger()
15 from tshark import run_tshark
16 from wpasupplicant import WpaSupplicant
17 from hwsim import HWSimRadio
18 from test_p2p_grpform import go_neg_pin_authorized
19 from test_p2p_grpform import check_grpform_results
20 from test_p2p_grpform import remove_group
21 from test_p2p_grpform import go_neg_pbc
22 from test_p2p_autogo import autogo
24 def set_country(country, dev=None):
25 subprocess.call(['sudo', 'iw', 'reg', 'set', country])
29 ev = dev.wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=15)
31 raise Exception("No regdom change event seen")
32 if "type=COUNTRY alpha2=" + country in ev:
34 raise Exception("No matching regdom event seen for set_country(%s)" % country)
36 def test_p2p_channel_5ghz(dev):
37 """P2P group formation with 5 GHz preference"""
39 set_country("US", dev[0])
40 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
41 r_dev=dev[1], r_intent=0,
43 check_grpform_results(i_res, r_res)
44 freq = int(i_res['freq'])
46 raise Exception("Unexpected channel %d MHz - did not follow 5 GHz preference" % freq)
47 remove_group(dev[0], dev[1])
50 dev[1].flush_scan_cache()
52 def test_p2p_channel_5ghz_no_vht(dev):
53 """P2P group formation with 5 GHz preference when VHT channels are disallowed"""
55 set_country("US", dev[0])
56 dev[0].request("P2P_SET disallow_freq 5180-5240")
57 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
58 r_dev=dev[1], r_intent=0,
60 check_grpform_results(i_res, r_res)
61 freq = int(i_res['freq'])
63 raise Exception("Unexpected channel %d MHz - did not follow 5 GHz preference" % freq)
64 remove_group(dev[0], dev[1])
67 dev[0].request("P2P_SET disallow_freq ")
68 dev[1].flush_scan_cache()
70 def test_p2p_channel_random_social(dev):
71 """P2P group formation with 5 GHz preference but all 5 GHz channels disabled"""
73 set_country("US", dev[0])
74 dev[0].request("SET p2p_oper_channel 11")
75 dev[0].request("P2P_SET disallow_freq 5000-6000,2462")
76 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
77 r_dev=dev[1], r_intent=0,
79 check_grpform_results(i_res, r_res)
80 freq = int(i_res['freq'])
81 if freq not in [ 2412, 2437, 2462 ]:
82 raise Exception("Unexpected channel %d MHz - did not pick random social channel" % freq)
83 remove_group(dev[0], dev[1])
86 dev[0].request("P2P_SET disallow_freq ")
87 dev[1].flush_scan_cache()
89 def test_p2p_channel_random(dev):
90 """P2P group formation with 5 GHz preference but all 5 GHz channels and all social channels disabled"""
92 set_country("US", dev[0])
93 dev[0].request("SET p2p_oper_channel 11")
94 dev[0].request("P2P_SET disallow_freq 5000-6000,2412,2437,2462")
95 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
96 r_dev=dev[1], r_intent=0,
98 check_grpform_results(i_res, r_res)
99 freq = int(i_res['freq'])
100 if freq > 2500 or freq in [ 2412, 2437, 2462 ]:
101 raise Exception("Unexpected channel %d MHz" % freq)
102 remove_group(dev[0], dev[1])
105 dev[0].request("P2P_SET disallow_freq ")
106 dev[1].flush_scan_cache()
108 def test_p2p_channel_random_social_with_op_class_change(dev, apdev, params):
109 """P2P group formation using random social channel with oper class change needed"""
111 set_country("US", dev[0])
112 logger.info("Start group on 5 GHz")
113 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
114 r_dev=dev[1], r_intent=0,
116 check_grpform_results(i_res, r_res)
117 freq = int(i_res['freq'])
119 raise Exception("Unexpected channel %d MHz - did not pick 5 GHz preference" % freq)
120 remove_group(dev[0], dev[1])
122 logger.info("Disable 5 GHz and try to re-start group based on 5 GHz preference")
123 dev[0].request("SET p2p_oper_reg_class 115")
124 dev[0].request("SET p2p_oper_channel 36")
125 dev[0].request("P2P_SET disallow_freq 5000-6000")
126 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
127 r_dev=dev[1], r_intent=0,
129 check_grpform_results(i_res, r_res)
130 freq = int(i_res['freq'])
131 if freq not in [ 2412, 2437, 2462 ]:
132 raise Exception("Unexpected channel %d MHz - did not pick random social channel" % freq)
133 remove_group(dev[0], dev[1])
135 out = run_tshark(os.path.join(params['logdir'], "hwsim0.pcapng"),
136 "wifi_p2p.public_action.subtype == 0")
139 for l in out.splitlines():
140 if "Operating Channel:" not in l:
144 raise Exception("Could not find GO Negotiation Request")
145 if "Operating Class 81" not in last:
146 raise Exception("Unexpected operating class: " + last.strip())
149 dev[0].request("P2P_SET disallow_freq ")
150 dev[0].request("SET p2p_oper_reg_class 0")
151 dev[0].request("SET p2p_oper_channel 0")
152 dev[1].flush_scan_cache()
154 def test_p2p_channel_avoid(dev):
155 """P2P and avoid frequencies driver event"""
157 set_country("US", dev[0])
158 if "OK" not in dev[0].request("DRIVER_EVENT AVOID_FREQUENCIES 5000-6000,2412,2437,2462"):
159 raise Exception("Could not simulate driver event")
160 ev = dev[0].wait_event(["CTRL-EVENT-AVOID-FREQ"], timeout=10)
162 raise Exception("No CTRL-EVENT-AVOID-FREQ event")
163 [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
164 r_dev=dev[1], r_intent=0,
166 check_grpform_results(i_res, r_res)
167 freq = int(i_res['freq'])
168 if freq > 2500 or freq in [ 2412, 2437, 2462 ]:
169 raise Exception("Unexpected channel %d MHz" % freq)
171 if "OK" not in dev[0].request("DRIVER_EVENT AVOID_FREQUENCIES"):
172 raise Exception("Could not simulate driver event(2)")
173 ev = dev[0].wait_event(["CTRL-EVENT-AVOID-FREQ"], timeout=10)
175 raise Exception("No CTRL-EVENT-AVOID-FREQ event")
176 ev = dev[0].wait_event(["P2P-REMOVE-AND-REFORM-GROUP"], timeout=1)
178 raise Exception("Unexpected P2P-REMOVE-AND-REFORM-GROUP event")
180 if "OK" not in dev[0].request("DRIVER_EVENT AVOID_FREQUENCIES " + str(freq)):
181 raise Exception("Could not simulate driver event(3)")
182 ev = dev[0].wait_event(["CTRL-EVENT-AVOID-FREQ"], timeout=10)
184 raise Exception("No CTRL-EVENT-AVOID-FREQ event")
185 ev = dev[0].wait_event(["P2P-REMOVE-AND-REFORM-GROUP"], timeout=10)
187 raise Exception("No P2P-REMOVE-AND-REFORM-GROUP event")
190 dev[0].request("DRIVER_EVENT AVOID_FREQUENCIES")
191 dev[1].flush_scan_cache()
193 def test_autogo_following_bss(dev, apdev):
194 """P2P autonomous GO operate on the same channel as station interface"""
195 if dev[0].get_mcc() > 1:
196 logger.info("test mode: MCC")
198 dev[0].request("SET p2p_no_group_iface 0")
200 channels = { 3 : "2422", 5 : "2432", 9 : "2452" }
202 hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid" : 'ap-test',
203 "channel" : str(key) })
204 dev[0].connect("ap-test", key_mgmt="NONE",
205 scan_freq=str(channels[key]))
206 res_go = autogo(dev[0])
207 if res_go['freq'] != channels[key]:
208 raise Exception("Group operation channel is not the same as on connected station interface")
209 hwsim_utils.test_connectivity(dev[0], hapd)
210 dev[0].remove_group(res_go['ifname'])
212 def test_go_neg_with_bss_connected(dev, apdev):
213 """P2P channel selection: GO negotiation when station interface is connected"""
215 dev[0].flush_scan_cache()
216 dev[1].flush_scan_cache()
217 dev[0].request("SET p2p_no_group_iface 0")
219 hapd = hostapd.add_ap(apdev[0]['ifname'],
220 { "ssid": 'bss-2.4ghz', "channel": '5' })
221 dev[0].connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2432")
223 [i_res, r_res] = go_neg_pbc(i_dev=dev[0], i_intent=10, r_dev=dev[1],
225 check_grpform_results(i_res, r_res)
226 if i_res['role'] != "GO":
227 raise Exception("GO not selected according to go_intent")
228 if i_res['freq'] != "2432":
229 raise Exception("Group formed on a different frequency than BSS")
230 hwsim_utils.test_connectivity(dev[0], hapd)
231 dev[0].remove_group(i_res['ifname'])
233 if dev[0].get_mcc() > 1:
234 logger.info("Skip as-client case due to MCC being enabled")
238 [i_res2, r_res2] = go_neg_pbc(i_dev=dev[0], i_intent=1, r_dev=dev[1],
240 check_grpform_results(i_res2, r_res2)
241 if i_res2['role'] != "client":
242 raise Exception("GO not selected according to go_intent")
243 if i_res2['freq'] != "2432":
244 raise Exception("Group formed on a different frequency than BSS")
245 hwsim_utils.test_connectivity(dev[0], hapd)
246 dev[1].remove_group(r_res['ifname'])
247 dev[0].wait_go_ending_session()
248 dev[0].request("DISCONNECT")
250 dev[0].flush_scan_cache()
251 dev[1].flush_scan_cache()
253 def test_autogo_with_bss_on_disallowed_chan(dev, apdev):
254 """P2P channel selection: Autonomous GO with BSS on a disallowed channel"""
256 with HWSimRadio(n_channels=2) as (radio, iface):
257 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
258 wpas.interface_add(iface)
260 wpas.request("SET p2p_no_group_iface 0")
262 if wpas.get_mcc() < 2:
263 raise Exception("New radio does not support MCC")
266 hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": 'bss-2.4ghz',
268 wpas.request("P2P_SET disallow_freq 2412")
269 wpas.connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2412")
271 if res['freq'] == "2412":
272 raise Exception("GO set on a disallowed channel")
273 hwsim_utils.test_connectivity(wpas, hapd)
275 wpas.request("P2P_SET disallow_freq ")
277 def test_go_neg_with_bss_on_disallowed_chan(dev, apdev):
278 """P2P channel selection: GO negotiation with station interface on a disallowed channel"""
280 with HWSimRadio(n_channels=2) as (radio, iface):
281 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
282 wpas.interface_add(iface)
284 wpas.request("SET p2p_no_group_iface 0")
286 if wpas.get_mcc() < 2:
287 raise Exception("New radio does not support MCC")
290 hapd = hostapd.add_ap(apdev[0]['ifname'],
291 { "ssid": 'bss-2.4ghz', "channel": '1' })
292 # make sure PBC overlap from old test cases is not maintained
293 dev[1].flush_scan_cache()
294 wpas.connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2412")
295 wpas.request("P2P_SET disallow_freq 2412")
298 [i_res, r_res] = go_neg_pbc(i_dev=wpas, i_intent=10, r_dev=dev[1],
300 check_grpform_results(i_res, r_res)
301 if i_res['role'] != "GO":
302 raise Exception("GO not selected according to go_intent")
303 if i_res['freq'] == "2412":
304 raise Exception("Group formed on a disallowed channel")
305 hwsim_utils.test_connectivity(wpas, hapd)
306 wpas.remove_group(i_res['ifname'])
307 dev[1].wait_go_ending_session()
308 dev[1].flush_scan_cache()
311 dev[1].dump_monitor()
314 [i_res2, r_res2] = go_neg_pbc(i_dev=wpas, i_intent=1, r_dev=dev[1],
316 check_grpform_results(i_res2, r_res2)
317 if i_res2['role'] != "client":
318 raise Exception("GO not selected according to go_intent")
319 if i_res2['freq'] == "2412":
320 raise Exception("Group formed on a disallowed channel")
321 hwsim_utils.test_connectivity(wpas, hapd)
322 dev[1].remove_group(r_res2['ifname'])
323 wpas.wait_go_ending_session()
324 ev = dev[1].wait_global_event(["P2P-GROUP-REMOVED"], timeout=5)
326 raise Exception("Group removal not indicated")
327 wpas.request("DISCONNECT")
330 wpas.request("P2P_SET disallow_freq ")
332 def test_autogo_force_diff_channel(dev, apdev):
333 """P2P autonomous GO and station interface operate on different channels"""
334 with HWSimRadio(n_channels=2) as (radio, iface):
335 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
336 wpas.interface_add(iface)
338 if wpas.get_mcc() < 2:
339 raise Exception("New radio does not support MCC")
341 wpas.request("SET p2p_no_group_iface 0")
343 hapd = hostapd.add_ap(apdev[0]['ifname'],
344 {"ssid" : 'ap-test', "channel" : '1'})
345 wpas.connect("ap-test", key_mgmt = "NONE", scan_freq = "2412")
346 channels = { 2 : 2417, 5 : 2432, 9 : 2452 }
348 res_go = autogo(wpas, channels[key])
349 hwsim_utils.test_connectivity(wpas, hapd)
350 if int(res_go['freq']) == 2412:
351 raise Exception("Group operation channel is: 2412 excepted: " + res_go['freq'])
352 wpas.remove_group(res_go['ifname'])
354 def test_go_neg_forced_freq_diff_than_bss_freq(dev, apdev):
355 """P2P channel selection: GO negotiation with forced freq different than station interface"""
356 with HWSimRadio(n_channels=2) as (radio, iface):
357 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
358 wpas.interface_add(iface)
360 if wpas.get_mcc() < 2:
361 raise Exception("New radio does not support MCC")
363 # Clear possible PBC session overlap from previous test case
364 dev[1].flush_scan_cache()
366 wpas.request("SET p2p_no_group_iface 0")
368 hapd = hostapd.add_ap(apdev[0]['ifname'],
369 { "country_code": 'US',
370 "ssid": 'bss-5ghz', "hw_mode": 'a',
372 wpas.connect("bss-5ghz", key_mgmt="NONE", scan_freq="5200")
374 # GO and peer force the same freq, different than BSS freq,
376 [i_res, r_res] = go_neg_pbc(i_dev=dev[1], i_intent=1, i_freq=5180,
377 r_dev=wpas, r_intent=14, r_freq=5180)
378 check_grpform_results(i_res, r_res)
379 if i_res['freq'] != "5180":
380 raise Exception("P2P group formed on unexpected frequency: " + i_res['freq'])
381 if r_res['role'] != "GO":
382 raise Exception("GO not selected according to go_intent")
383 hwsim_utils.test_connectivity(wpas, hapd)
384 wpas.remove_group(r_res['ifname'])
385 dev[1].wait_go_ending_session()
386 dev[1].flush_scan_cache()
388 # GO and peer force the same freq, different than BSS freq, wpas to
390 [i_res2, r_res2] = go_neg_pbc(i_dev=dev[1], i_intent=14, i_freq=2422,
391 r_dev=wpas, r_intent=1, r_freq=2422)
392 check_grpform_results(i_res2, r_res2)
393 if i_res2['freq'] != "2422":
394 raise Exception("P2P group formed on unexpected frequency: " + i_res2['freq'])
395 if r_res2['role'] != "client":
396 raise Exception("GO not selected according to go_intent")
397 hwsim_utils.test_connectivity(wpas, hapd)
399 wpas.request("DISCONNECT")
400 hapd.request("DISABLE")
401 subprocess.call(['iw', 'reg', 'set', '00'])
402 wpas.flush_scan_cache()
404 def test_go_pref_chan_bss_on_diff_chan(dev, apdev):
405 """P2P channel selection: Station on different channel than GO configured pref channel"""
407 dev[0].request("SET p2p_no_group_iface 0")
410 hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": 'bss-2.4ghz',
412 dev[0].request("SET p2p_pref_chan 81:2")
413 dev[0].connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2412")
415 if res['freq'] != "2412":
416 raise Exception("GO channel did not follow BSS")
417 hwsim_utils.test_connectivity(dev[0], hapd)
419 dev[0].request("SET p2p_pref_chan ")
421 def test_go_pref_chan_bss_on_disallowed_chan(dev, apdev):
422 """P2P channel selection: Station interface on different channel than GO configured pref channel, and station channel is disallowed"""
423 with HWSimRadio(n_channels=2) as (radio, iface):
424 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
425 wpas.interface_add(iface)
427 if wpas.get_mcc() < 2:
428 raise Exception("New radio does not support MCC")
430 wpas.request("SET p2p_no_group_iface 0")
433 hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": 'bss-2.4ghz',
435 wpas.request("P2P_SET disallow_freq 2412")
436 wpas.request("SET p2p_pref_chan 81:2")
437 wpas.connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2412")
439 if res2['freq'] != "2417":
440 raise Exception("GO channel did not follow pref_chan configuration")
441 hwsim_utils.test_connectivity(wpas, hapd)
443 wpas.request("P2P_SET disallow_freq ")
444 wpas.request("SET p2p_pref_chan ")
446 def test_no_go_freq(dev, apdev):
447 """P2P channel selection: no GO freq"""
449 dev[0].request("SET p2p_no_go_freq 2412")
450 # dev[0] as client, channel 1 is ok
451 [i_res, r_res] = go_neg_pbc(i_dev=dev[0], i_intent=1,
452 r_dev=dev[1], r_intent=14, r_freq=2412)
453 check_grpform_results(i_res, r_res)
454 if i_res['freq'] != "2412":
455 raise Exception("P2P group not formed on forced freq")
457 dev[1].remove_group(r_res['ifname'])
458 dev[0].wait_go_ending_session()
459 dev[0].flush_scan_cache()
462 # dev[0] as GO, channel 1 is not allowed
464 dev[0].request("SET p2p_no_go_freq 2412")
465 [i_res2, r_res2] = go_neg_pbc(i_dev=dev[0], i_intent=14,
466 r_dev=dev[1], r_intent=1, r_freq=2412)
467 check_grpform_results(i_res2, r_res2)
472 raise Exception("GO set on a disallowed freq")
474 dev[0].request("SET p2p_no_go_freq ")
476 def test_go_neg_peers_force_diff_freq(dev, apdev):
477 """P2P channel selection when peers for different frequency"""
479 [i_res2, r_res2] = go_neg_pbc(i_dev=dev[0], i_intent=14, i_freq=5180,
480 r_dev=dev[1], r_intent=0, r_freq=5200)
483 raise Exception("Unexpected group formation success")
485 def test_autogo_random_channel(dev, apdev):
486 """P2P channel selection: GO instantiated on random channel 1, 6, 11"""
488 go_freqs = ["2412", "2437", "2462"]
489 for i in range(0, 20):
490 result = autogo(dev[0])
491 if result['freq'] not in go_freqs:
492 raise Exception("Unexpected frequency selected: " + result['freq'])
493 if result['freq'] not in freqs:
494 freqs.append(result['freq'])
497 dev[0].remove_group(result['ifname'])
499 raise Exception("GO created 20 times and not all social channels were selected. freqs not selected: " + str(list(set(go_freqs) - set(freqs))))
501 def test_p2p_autogo_pref_chan_disallowed(dev, apdev):
502 """P2P channel selection: GO preferred channels are disallowed"""
504 dev[0].request("SET p2p_pref_chan 81:1,81:3,81:6,81:9,81:11")
505 dev[0].request("P2P_SET disallow_freq 2412,2422,2437,2452,2462")
506 for i in range(0, 5):
508 if res['freq'] in [ "2412", "2422", "2437", "2452", "2462" ]:
509 raise Exception("GO channel is disallowed")
510 dev[0].remove_group(res['ifname'])
512 dev[0].request("P2P_SET disallow_freq ")
513 dev[0].request("SET p2p_pref_chan ")
515 def test_p2p_autogo_pref_chan_not_in_regulatory(dev, apdev):
516 """P2P channel selection: GO preferred channel not allowed in the regulatory rules"""
518 set_country("US", dev[0])
519 dev[0].request("SET p2p_pref_chan 124:149")
520 res = autogo(dev[0], persistent=True)
521 if res['freq'] != "5745":
522 raise Exception("Unexpected channel selected: " + res['freq'])
523 dev[0].remove_group(res['ifname'])
525 netw = dev[0].list_networks()
527 raise Exception("Unexpected number of network blocks: " + str(netw))
530 set_country("DE", dev[0])
531 res = autogo(dev[0], persistent=id)
532 if res['freq'] == "5745":
533 raise Exception("Unexpected channel selected(2): " + res['freq'])
534 dev[0].remove_group(res['ifname'])
536 dev[0].request("SET p2p_pref_chan ")
539 def run_autogo(dev, param):
540 if "OK" not in dev.global_request("P2P_GROUP_ADD " + param):
541 raise Exception("P2P_GROUP_ADD failed: " + param)
542 ev = dev.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
544 raise Exception("GO start up timed out")
545 res = dev.group_form_result(ev)
549 def _test_autogo_ht_vht(dev):
550 res = run_autogo(dev[0], "ht40")
552 res = run_autogo(dev[0], "vht")
554 res = run_autogo(dev[0], "freq=2")
555 freq = int(res['freq'])
556 if freq < 2412 or freq > 2462:
557 raise Exception("Unexpected freq=2 channel: " + str(freq))
559 res = run_autogo(dev[0], "freq=5")
560 freq = int(res['freq'])
561 if freq < 5000 or freq >= 6000:
562 raise Exception("Unexpected freq=5 channel: " + str(freq))
564 res = run_autogo(dev[0], "freq=5 ht40 vht")
565 logger.info(str(res))
566 freq = int(res['freq'])
567 if freq < 5000 or freq >= 6000:
568 raise Exception("Unexpected freq=5 ht40 vht channel: " + str(freq))
570 def test_autogo_ht_vht(dev):
571 """P2P autonomous GO with HT/VHT parameters"""
573 set_country("US", dev[0])
574 _test_autogo_ht_vht(dev)
578 def test_p2p_listen_chan_optimize(dev, apdev):
579 """P2P listen channel optimization"""
580 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
581 wpas.interface_add("wlan5")
582 addr5 = wpas.p2p_dev_addr()
584 if "OK" not in wpas.request("SET p2p_optimize_listen_chan 1"):
585 raise Exception("Failed to set p2p_optimize_listen_chan")
587 if not dev[0].discover_peer(addr5):
588 raise Exception("Could not discover peer")
589 peer = dev[0].get_peer(addr5)
590 lfreq = peer['listen_freq']
592 dev[0].p2p_stop_find()
594 channel = "1" if lfreq != '2412' else "6"
595 freq = "2412" if lfreq != '2412' else "2437"
596 params = { "ssid": "test-open", "channel": channel }
597 hapd = hostapd.add_ap(apdev[0]['ifname'], params)
599 id = wpas.connect("test-open", key_mgmt="NONE", scan_freq=freq)
602 if "OK" not in dev[0].request("P2P_FLUSH"):
603 raise Exception("P2P_FLUSH failed")
604 if not dev[0].discover_peer(addr5):
605 raise Exception("Could not discover peer")
606 peer = dev[0].get_peer(addr5)
607 lfreq2 = peer['listen_freq']
609 raise Exception("Listen channel did not change")
611 raise Exception("Listen channel not on AP's operating channel")
613 dev[0].p2p_stop_find()
615 wpas.request("DISCONNECT")
616 wpas.wait_disconnected()
618 # for larger coverage, cover case of current channel matching
619 wpas.select_network(id)
620 wpas.wait_connected()
621 wpas.request("DISCONNECT")
622 wpas.wait_disconnected()
624 lchannel = "1" if channel != "1" else "6"
625 lfreq3 = "2412" if channel != "1" else "2437"
626 if "OK" not in wpas.request("P2P_SET listen_channel " + lchannel):
627 raise Exception("Failed to set listen channel")
629 wpas.select_network(id)
630 wpas.wait_connected()
633 if "OK" not in dev[0].request("P2P_FLUSH"):
634 raise Exception("P2P_FLUSH failed")
635 if not dev[0].discover_peer(addr5):
636 raise Exception("Could not discover peer")
637 peer = dev[0].get_peer(addr5)
638 lfreq4 = peer['listen_freq']
640 raise Exception("Unexpected Listen channel after configuration")
642 dev[0].p2p_stop_find()
644 wpas.request("SET p2p_optimize_listen_chan 0")