_test_autogo_ht_vht(dev)
finally:
set_country("00")
+
+def test_p2p_listen_chan_optimize(dev, apdev):
+ """P2P listen channel optimization"""
+ wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
+ wpas.interface_add("wlan5")
+ addr5 = wpas.p2p_dev_addr()
+ try:
+ if "OK" not in wpas.request("SET p2p_optimize_listen_chan 1"):
+ raise Exception("Failed to set p2p_optimize_listen_chan")
+ wpas.p2p_listen()
+ if not dev[0].discover_peer(addr5):
+ raise Exception("Could not discover peer")
+ peer = dev[0].get_peer(addr5)
+ lfreq = peer['listen_freq']
+ wpas.p2p_stop_find()
+ dev[0].p2p_stop_find()
+
+ channel = "1" if lfreq != '2412' else "6"
+ freq = "2412" if lfreq != '2412' else "2437"
+ params = { "ssid": "test-open", "channel": channel }
+ hapd = hostapd.add_ap(apdev[0]['ifname'], params)
+
+ id = wpas.connect("test-open", key_mgmt="NONE", scan_freq=freq)
+ wpas.p2p_listen()
+
+ if "OK" not in dev[0].request("P2P_FLUSH"):
+ raise Exception("P2P_FLUSH failed")
+ if not dev[0].discover_peer(addr5):
+ raise Exception("Could not discover peer")
+ peer = dev[0].get_peer(addr5)
+ lfreq2 = peer['listen_freq']
+ if lfreq == lfreq2:
+ raise Exception("Listen channel did not change")
+ if lfreq2 != freq:
+ raise Exception("Listen channel not on AP's operating channel")
+ wpas.p2p_stop_find()
+ dev[0].p2p_stop_find()
+
+ wpas.request("DISCONNECT")
+ wpas.wait_disconnected()
+
+ # for larger coverage, cover case of current channel matching
+ wpas.select_network(id)
+ wpas.wait_connected()
+ wpas.request("DISCONNECT")
+ wpas.wait_disconnected()
+
+ lchannel = "1" if channel != "1" else "6"
+ lfreq3 = "2412" if channel != "1" else "2437"
+ if "OK" not in wpas.request("P2P_SET listen_channel " + lchannel):
+ raise Exception("Failed to set listen channel")
+
+ wpas.select_network(id)
+ wpas.wait_connected()
+ wpas.p2p_listen()
+
+ if "OK" not in dev[0].request("P2P_FLUSH"):
+ raise Exception("P2P_FLUSH failed")
+ if not dev[0].discover_peer(addr5):
+ raise Exception("Could not discover peer")
+ peer = dev[0].get_peer(addr5)
+ lfreq4 = peer['listen_freq']
+ if lfreq4 != lfreq3:
+ raise Exception("Unexpected Listen channel after configuration")
+ wpas.p2p_stop_find()
+ dev[0].p2p_stop_find()
+ finally:
+ wpas.request("SET p2p_optimize_listen_chan 0")