diff --git a/tests/hwsim/test_p2p_channel.py b/tests/hwsim/test_p2p_channel.py index d45604bbb..521c53ad6 100644 --- a/tests/hwsim/test_p2p_channel.py +++ b/tests/hwsim/test_p2p_channel.py @@ -574,3 +574,71 @@ def test_autogo_ht_vht(dev): _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")