]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
tests: DFS channel bandwidth downgrade from VHT80 to VHT40
authorJouni Malinen <jouni@codeaurora.org>
Tue, 3 Mar 2020 16:36:10 +0000 (18:36 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 3 Mar 2020 16:58:08 +0000 (18:58 +0200)
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
tests/hwsim/test_dfs.py
tests/hwsim/vm/parallel-vm.py

index a10d32b87811e005cd2278a73369a5f7fb33978a..2b7fc4a855a8f6c7aa317a7d84511b891a9e0875 100644 (file)
@@ -28,7 +28,8 @@ def wait_dfs_event(hapd, event, timeout):
 
 def start_dfs_ap(ap, ssid="dfs", ht=True, ht40=False,
                  ht40minus=False, vht80=False, vht20=False, chanlist=None,
-                 channel=None, country="FI", rrm_beacon_report=False):
+                 channel=None, country="FI", rrm_beacon_report=False,
+                 chan100=False):
     ifname = ap['ifname']
     logger.info("Starting AP " + ifname + " on DFS channel")
     hapd = hostapd.add_ap(ap, {}, no_enable=True)
@@ -37,7 +38,10 @@ def start_dfs_ap(ap, ssid="dfs", ht=True, ht40=False,
     hapd.set("ieee80211d", "1")
     hapd.set("ieee80211h", "1")
     hapd.set("hw_mode", "a")
-    hapd.set("channel", "52")
+    if chan100:
+        hapd.set("channel", "100")
+    else:
+        hapd.set("channel", "52")
     if not ht:
         hapd.set("ieee80211n", "0")
     if ht40:
@@ -48,7 +52,10 @@ def start_dfs_ap(ap, ssid="dfs", ht=True, ht40=False,
     if vht80:
         hapd.set("ieee80211ac", "1")
         hapd.set("vht_oper_chwidth", "1")
-        hapd.set("vht_oper_centr_freq_seg0_idx", "58")
+        if chan100:
+            hapd.set("vht_oper_centr_freq_seg0_idx", "106")
+        else:
+            hapd.set("vht_oper_centr_freq_seg0_idx", "58")
     if vht20:
         hapd.set("ieee80211ac", "1")
         hapd.set("vht_oper_chwidth", "0")
@@ -526,3 +533,78 @@ def test_dfs_rrm(dev, apdev, params):
             raise Exception("Beacon report response not received")
     finally:
         clear_regdom(hapd, dev)
+
+def test_dfs_radar_vht80_downgrade(dev, apdev, params):
+    """DFS channel bandwidth downgrade from VHT80 to VHT40 [long]"""
+    if not params['long']:
+        raise HwsimSkip("Skip test case with long duration due to --long not specified")
+    try:
+        # Start with 80 MHz channel 100 (5500 MHz) to find a radar
+        hapd = None
+        hapd = start_dfs_ap(apdev[0], chanlist="100-140",
+                            ht40=True, vht80=True, chan100=True)
+        time.sleep(1)
+        dfs_simulate_radar(hapd)
+
+        ev = wait_dfs_event(hapd, "DFS-CAC-COMPLETED", 5)
+        if ev is None:
+            raise Exception("Timeout on DFS aborted event")
+        if "success=0 freq=5500" not in ev:
+            raise Exception("Unexpected DFS aborted event contents: " + ev)
+
+        ev = wait_dfs_event(hapd, "DFS-RADAR-DETECTED", 5)
+        if "freq=5500" not in ev:
+            raise Exception("Unexpected DFS radar detection freq: " + ev)
+
+        # The only other available 80 MHz channel in the chanlist is
+        # 116 (5580 MHz), so that will be selected next.
+        ev = wait_dfs_event(hapd, "DFS-NEW-CHANNEL", 5)
+        if "freq=5580 chan=116 sec_chan=1" not in ev:
+            raise Exception("Unexpected DFS new freq: " + ev)
+
+        ev = wait_dfs_event(hapd, None, 5)
+        if "DFS-CAC-START" not in ev:
+            raise Exception("Unexpected DFS event: " + ev)
+        if "freq=5580" not in ev:
+            raise Exception("Unexpected DFS CAC freq: " + ev)
+
+        time.sleep(1)
+        dfs_simulate_radar(hapd)
+        ev = wait_dfs_event(hapd, "DFS-CAC-COMPLETED", 5)
+        if ev is None:
+            raise Exception("Timeout on DFS aborted event (2)")
+        if "success=0 freq=5580" not in ev:
+            raise Exception("Unexpected DFS aborted event (2) contents: " + ev)
+
+        ev = wait_dfs_event(hapd, "DFS-RADAR-DETECTED", 5)
+        if "freq=5580" not in ev:
+            raise Exception("Unexpected DFS radar detection (2) freq: " + ev)
+
+        # No more 80 MHz channels are available, so have to downgrade to 40 MHz
+        # channels and the only remaining one is channel 132 (5660 MHz).
+        ev = wait_dfs_event(hapd, "DFS-NEW-CHANNEL", 5)
+        if "freq=5660 chan=132 sec_chan=1" not in ev:
+            raise Exception("Unexpected DFS new freq (2): " + ev)
+
+        ev = wait_dfs_event(hapd, None, 5)
+        if "DFS-CAC-START" not in ev:
+            raise Exception("Unexpected DFS event: " + ev)
+        if "freq=5660" not in ev:
+            raise Exception("Unexpected DFS CAC freq (2): " + ev)
+
+        ev = wait_dfs_event(hapd, "DFS-CAC-COMPLETED", 70)
+        if "success=1" not in ev:
+            raise Exception("CAC failed")
+        if "freq=5660" not in ev:
+            raise Exception("Unexpected DFS freq result: " + ev)
+
+        ev = wait_dfs_event(hapd, None, 5)
+        if "AP-ENABLED" not in ev:
+            raise Exception("Unexpected DFS event: " + ev)
+        dev[0].connect("dfs", key_mgmt="NONE", scan_freq="5660")
+        dev[0].wait_regdom(country_ie=True)
+        sig = dev[0].request("SIGNAL_POLL").splitlines()
+        if "FREQUENCY=5660" not in sig or "WIDTH=40 MHz" not in sig:
+            raise Exception("Unexpected SIGNAL_POLL value: " + str(sig))
+    finally:
+        clear_regdom(hapd, dev)
index 714b8746cfe7fdd0a7f0b69f87f91110b4d3d75c..3dd09584f8bcdb91756fbadf1eb542a3e81d329d 100755 (executable)
@@ -58,6 +58,7 @@ long_tests = ["ap_roam_open",
               "dfs",
               "dfs_ht40_minus",
               "dfs_etsi",
+              "dfs_radar_vht80_downgrade",
               "ap_acs_dfs",
               "grpform_cred_ready_timeout",
               "hostapd_oom_wpa2_eap_connect",