]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
tests: Multi-AP association
authorJouni Malinen <jouni@codeaurora.org>
Thu, 20 Dec 2018 10:41:00 +0000 (12:41 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 20 Dec 2018 10:43:43 +0000 (12:43 +0200)
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
tests/hwsim/test_multi_ap.py [new file with mode: 0644]
tests/hwsim/wpasupplicant.py

diff --git a/tests/hwsim/test_multi_ap.py b/tests/hwsim/test_multi_ap.py
new file mode 100644 (file)
index 0000000..709382d
--- /dev/null
@@ -0,0 +1,73 @@
+# Test cases for Multi-AP
+# Copyright (c) 2018, The Linux Foundation
+#
+# This software may be distributed under the terms of the BSD license.
+# See README for more details.
+
+import hostapd
+
+def test_multi_ap_association(dev, apdev):
+    """Multi-AP association in backhaul BSS"""
+    run_multi_ap_association(dev, apdev, 1)
+    dev[1].connect("multi-ap", psk="12345678", scan_freq="2412",
+                   wait_connect=False)
+    ev = dev[1].wait_event([ "CTRL-EVENT-DISCONNECTED",
+                             "CTRL-EVENT-CONNECTED",
+                             "CTRL-EVENT-ASSOC-REJECT" ],
+                           timeout=5)
+    dev[1].request("DISCONNECT")
+    if ev is None:
+        raise Exception("Connection result not reported")
+    if "CTRL-EVENT-ASSOC-REJECT" not in ev:
+        raise Exception("Association rejection not reported")
+    if "status_code=12" not in ev:
+        raise Exception("Unexpected association status code: " + ev)
+
+def test_multi_ap_association_shared_bss(dev, apdev):
+    """Multi-AP association in backhaul BSS (with fronthaul BSS enabled)"""
+    run_multi_ap_association(dev, apdev, 3)
+    dev[1].connect("multi-ap", psk="12345678", scan_freq="2412")
+
+def run_multi_ap_association(dev, apdev, multi_ap):
+    params = hostapd.wpa2_params(ssid="multi-ap", passphrase="12345678")
+    params["multi_ap"] = str(multi_ap)
+    hapd = hostapd.add_ap(apdev[0], params)
+
+    dev[0].connect("multi-ap", psk="12345678", multi_ap_backhaul_sta="1",
+                   scan_freq="2412")
+
+def test_multi_ap_disabled_on_ap(dev, apdev):
+    """Multi-AP association attempt when disabled on AP"""
+    params = hostapd.wpa2_params(ssid="multi-ap", passphrase="12345678")
+    hapd = hostapd.add_ap(apdev[0], params)
+
+    dev[0].connect("multi-ap", psk="12345678", multi_ap_backhaul_sta="1",
+                   scan_freq="2412", wait_connect=False)
+    ev = dev[0].wait_event([ "CTRL-EVENT-DISCONNECTED",
+                             "CTRL-EVENT-CONNECTED" ],
+                           timeout=5)
+    dev[0].request("DISCONNECT")
+    if ev is None:
+        raise Exception("Connection result not reported")
+    if "CTRL-EVENT-DISCONNECTED" not in ev:
+        raise Exception("Unexpected connection result")
+
+def test_multi_ap_fronthaul_on_ap(dev, apdev):
+    """Multi-AP association attempt when only fronthaul BSS on AP"""
+    params = hostapd.wpa2_params(ssid="multi-ap", passphrase="12345678")
+    params["multi_ap"] = "2"
+    hapd = hostapd.add_ap(apdev[0], params)
+
+    dev[0].connect("multi-ap", psk="12345678", multi_ap_backhaul_sta="1",
+                   scan_freq="2412", wait_connect=False)
+    ev = dev[0].wait_event([ "CTRL-EVENT-DISCONNECTED",
+                             "CTRL-EVENT-CONNECTED",
+                             "CTRL-EVENT-ASSOC-REJECT" ],
+                           timeout=5)
+    dev[0].request("DISCONNECT")
+    if ev is None:
+        raise Exception("Connection result not reported")
+    if "CTRL-EVENT-ASSOC-REJECT" not in ev:
+        raise Exception("Association rejection not reported")
+    if "status_code=12" not in ev:
+        raise Exception("Unexpected association status code: " + ev)
index f96863f6ac919813ffb33f25e5617c31aa35c412..1064d2c16f84563bfe8771d3a144cce15d88ce41 100644 (file)
@@ -1031,7 +1031,8 @@ class WpaSupplicant:
                        "dpp_csign", "dpp_csign_expiry",
                        "dpp_netaccesskey", "dpp_netaccesskey_expiry",
                        "group_mgmt", "owe_group",
-                       "roaming_consortium_selection", "ocv" ]
+                       "roaming_consortium_selection", "ocv",
+                       "multi_ap_backhaul_sta" ]
         for field in not_quoted:
             if field in kwargs and kwargs[field]:
                 self.set_network(id, field, kwargs[field])