123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- From 7488e0ade6dffb6df4c1fb6526a9f3ede0eb18ef Mon Sep 17 00:00:00 2001
- From: Jouni Malinen <[email protected]>
- Date: Thu, 20 Dec 2018 12:41:00 +0200
- Subject: [PATCH] tests: Multi-AP association
- Signed-off-by: Jouni Malinen <[email protected]>
- ---
- tests/hwsim/test_multi_ap.py | 73 ++++++++++++++++++++++++++++++++++++
- tests/hwsim/wpasupplicant.py | 3 +-
- 2 files changed, 75 insertions(+), 1 deletion(-)
- create mode 100644 tests/hwsim/test_multi_ap.py
- --- /dev/null
- +++ b/tests/hwsim/test_multi_ap.py
- @@ -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)
- --- a/tests/hwsim/wpasupplicant.py
- +++ b/tests/hwsim/wpasupplicant.py
- @@ -1031,7 +1031,8 @@ class WpaSupplicant:
- "dpp_csign", "dpp_csign_expiry",
- "dpp_netaccesskey", "dpp_netaccesskey_expiry",
- "group_mgmt", "owe_group",
- - "roaming_consortium_selection" ]
- + "roaming_consortium_selection", "multi_ap_backhaul_sta" ]
- +
- for field in not_quoted:
- if field in kwargs and kwargs[field]:
- self.set_network(id, field, kwargs[field])
|