From 3006241e434fd40be2d9bce264fc0f98905e8216 Mon Sep 17 00:00:00 2001 From: Mathy Vanhoef Date: Mon, 6 Aug 2018 15:46:42 -0400 Subject: [PATCH] tests: OCI validation in WNM-Sleep Exit frames (OCV) Signed-off-by: Mathy Vanhoef --- tests/hwsim/test_wnm.py | 135 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/tests/hwsim/test_wnm.py b/tests/hwsim/test_wnm.py index f19cc666d..9fc42ac74 100644 --- a/tests/hwsim/test_wnm.py +++ b/tests/hwsim/test_wnm.py @@ -14,7 +14,7 @@ import subprocess import hostapd from wpasupplicant import WpaSupplicant -from utils import alloc_fail, fail_test, wait_fail_trigger +from utils import alloc_fail, fail_test, wait_fail_trigger, HwsimSkip from wlantest import Wlantest from datetime import datetime @@ -280,6 +280,127 @@ def test_wnm_sleep_mode_rsn_pmf(dev, apdev): raise Exception("No connection event received from hostapd") check_wnm_sleep_mode_enter_exit(hapd, dev[0]) +@remote_compatible +def test_wnm_sleep_mode_rsn_ocv(dev, apdev): + """WNM Sleep Mode - RSN with OCV""" + params = hostapd.wpa2_params("test-wnm-rsn", "12345678") + params["wpa_key_mgmt"] = "WPA-PSK-SHA256" + params["ieee80211w"] = "2" + params["ocv"] = "1" + params["time_advertisement"] = "2" + params["time_zone"] = "EST5" + params["wnm_sleep_mode"] = "1" + params["bss_transition"] = "1" + try: + hapd = hostapd.add_ap(apdev[0], params) + except Exception, e: + if "Failed to set hostapd parameter ocv" in str(e): + raise HwsimSkip("OCV not supported") + raise + + Wlantest.setup(hapd) + wt = Wlantest() + wt.flush() + wt.add_passphrase("12345678") + + dev[0].connect("test-wnm-rsn", psk="12345678", ieee80211w="2", ocv="1", + key_mgmt="WPA-PSK-SHA256", proto="WPA2", scan_freq="2412") + ev = hapd.wait_event([ "AP-STA-CONNECTED" ], timeout=5) + if ev is None: + raise Exception("No connection event received from hostapd") + check_wnm_sleep_mode_enter_exit(hapd, dev[0]) + + # Check if OCV succeeded or failed + ev = dev[0].wait_event([ "OCV failed" ], timeout=1) + if ev is not None: + raise Exception("OCI verification failed: " + ev) + +@remote_compatible +def test_wnm_sleep_mode_rsn_badocv(dev, apdev): + """WNM Sleep Mode - RSN with OCV and bad OCI elements""" + ssid = "test-wnm-pmf" + params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678") + params["wpa_key_mgmt"] = "WPA-PSK-SHA256" + params["ieee80211w"] = "2" + params["ocv"] = "1" + params['wnm_sleep_mode'] = '1' + try: + hapd = hostapd.add_ap(apdev[0], params) + except Exception, e: + if "Failed to set hostapd parameter ocv" in str(e): + raise HwsimSkip("OCV not supported") + raise + bssid = apdev[0]['bssid'] + dev[0].connect(ssid, psk="12345678", key_mgmt="WPA-PSK-SHA256", ocv="1", + proto="WPA2", ieee80211w="2", scan_freq="2412") + dev[0].request("WNM_SLEEP enter") + time.sleep(0.1) + + msg = { 'fc': MGMT_SUBTYPE_ACTION << 4, + 'da': bssid, + 'sa': dev[0].own_addr(), + 'bssid': bssid } + + logger.debug("WNM Sleep Mode Request - Missing OCI element") + msg['payload'] = struct.pack("