From: Thomas Pedersen Date: Wed, 5 Feb 2020 07:13:49 +0000 (-0800) Subject: tests: Add basic power saving tests for ap_open X-Git-Tag: hostap_2_10~1825 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c67a0760333db170325bd72909e0aba22df653a;p=thirdparty%2Fhostap.git tests: Add basic power saving tests for ap_open ap_open_sta_ps checks whether a STA told its hardware to enter power save after enabling power save. ap_open_ps_mc_buf checks whether an AP properly buffers and releases multicast frames when a STA with PS active is associated. Signed-off-by: Thomas Pedersen --- diff --git a/tests/hwsim/test_ap_open.py b/tests/hwsim/test_ap_open.py index 0d83438c4..fd9919bb1 100644 --- a/tests/hwsim/test_ap_open.py +++ b/tests/hwsim/test_ap_open.py @@ -491,6 +491,80 @@ def test_ap_open_disconnect_in_ps(dev, apdev, params): if state != 2: raise Exception("Didn't observe TIM bit getting set and unset (state=%d)" % state) +def test_ap_open_sta_ps(dev, apdev): + """Station power save operation""" + hapd = hostapd.add_ap(apdev[0], {"ssid": "open"}) + dev[0].connect("open", key_mgmt="NONE", scan_freq="2412", + bg_scan_period="0") + hapd.wait_sta() + + time.sleep(0.2) + try: + dev[0].cmd_execute(['iw', 'dev', dev[0].ifname, + 'set', 'power_save', 'on']) + run_ap_open_sta_ps(dev, hapd) + finally: + dev[0].cmd_execute(['iw', 'dev', dev[0].ifname, + 'set', 'power_save', 'on']) + +def run_ap_open_sta_ps(dev, hapd): + hwsim_utils.test_connectivity(dev[0], hapd) + # Give time to enter PS + time.sleep(0.2) + + phyname = dev[0].get_driver_status_field("phyname") + hw_conf = '/sys/kernel/debug/ieee80211/' + phyname + '/hw_conf' + + try: + ok = False + for i in range(10): + with open(hw_conf, 'r') as f: + val = int(f.read()) + if val & 2: + ok = True + break + time.sleep(0.2) + + if not ok: + raise Exception("STA did not enter power save") + except FileNotFoundError: + raise HwsimSkip("Kernel does not support inspecting HW PS state") + +def test_ap_open_ps_mc_buf(dev, apdev, params): + """Multicast buffering with a station in power save""" + hapd = hostapd.add_ap(apdev[0], {"ssid": "open"}) + dev[0].connect("open", key_mgmt="NONE", scan_freq="2412", + bg_scan_period="0") + hapd.wait_sta() + + buffered_mcast = 0 + try: + dev[0].cmd_execute(['iw', 'dev', dev[0].ifname, + 'set', 'power_save', 'on']) + # Give time to enter PS + time.sleep(0.3) + + for i in range(10): + # Verify that multicast frames are released + hwsim_utils.run_multicast_connectivity_test(hapd, dev[0]) + + # Check frames were buffered until DTIM + out = run_tshark(os.path.join(params['logdir'], "hwsim0.pcapng"), + "wlan.fc.type_subtype == 0x0008", + ["wlan.tim.bmapctl.multicast"]) + for line in out.splitlines(): + buffered_mcast = int(line) + if buffered_mcast == 1: + break + if buffered_mcast == 1: + break + finally: + dev[0].cmd_execute(['iw', 'dev', dev[0].ifname, + 'set', 'power_save', 'off']) + + if buffered_mcast != 1: + raise Exception("AP did not buffer multicast frames") + @remote_compatible def test_ap_open_select_network(dev, apdev): """Open mode connection and SELECT_NETWORK to change network"""