tests: Automatic channel selection, HT scan, and DFS
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
b586054f95
commit
43d174b8e2
2 changed files with 56 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
||||||
# Test cases for automatic channel selection with hostapd
|
# Test cases for automatic channel selection with hostapd
|
||||||
# Copyright (c) 2013-2017, Jouni Malinen <j@w1.fi>
|
# Copyright (c) 2013-2018, Jouni Malinen <j@w1.fi>
|
||||||
#
|
#
|
||||||
# This software may be distributed under the terms of the BSD license.
|
# This software may be distributed under the terms of the BSD license.
|
||||||
# See README for more details.
|
# See README for more details.
|
||||||
|
@ -9,8 +9,9 @@ logger = logging.getLogger()
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import hostapd
|
import hostapd
|
||||||
from utils import skip_with_fips, alloc_fail, fail_test
|
from utils import skip_with_fips, alloc_fail, fail_test, HwsimSkip
|
||||||
from test_ap_ht import clear_scan_cache
|
from test_ap_ht import clear_scan_cache
|
||||||
|
from test_dfs import wait_dfs_event
|
||||||
|
|
||||||
def force_prev_ap_on_24g(ap):
|
def force_prev_ap_on_24g(ap):
|
||||||
# For now, make sure the last operating channel was on 2.4 GHz band to get
|
# For now, make sure the last operating channel was on 2.4 GHz band to get
|
||||||
|
@ -27,7 +28,7 @@ def force_prev_ap_on_5g(ap):
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
hostapd.remove_bss(ap)
|
hostapd.remove_bss(ap)
|
||||||
|
|
||||||
def wait_acs(hapd):
|
def wait_acs(hapd, return_after_acs=False):
|
||||||
ev = hapd.wait_event(["ACS-STARTED", "ACS-COMPLETED", "ACS-FAILED",
|
ev = hapd.wait_event(["ACS-STARTED", "ACS-COMPLETED", "ACS-FAILED",
|
||||||
"AP-ENABLED", "AP-DISABLED"], timeout=5)
|
"AP-ENABLED", "AP-DISABLED"], timeout=5)
|
||||||
if not ev:
|
if not ev:
|
||||||
|
@ -46,6 +47,9 @@ def wait_acs(hapd):
|
||||||
if "ACS-COMPLETED" not in ev:
|
if "ACS-COMPLETED" not in ev:
|
||||||
raise Exception("Unexpected ACS event: " + ev)
|
raise Exception("Unexpected ACS event: " + ev)
|
||||||
|
|
||||||
|
if return_after_acs:
|
||||||
|
return
|
||||||
|
|
||||||
ev = hapd.wait_event(["AP-ENABLED", "AP-DISABLED"], timeout=5)
|
ev = hapd.wait_event(["AP-ENABLED", "AP-DISABLED"], timeout=5)
|
||||||
if not ev:
|
if not ev:
|
||||||
raise Exception("AP setup timed out")
|
raise Exception("AP setup timed out")
|
||||||
|
@ -386,3 +390,51 @@ def test_ap_acs_errors(dev, apdev):
|
||||||
ev = hapd.wait_event(["AP-ENABLED", "AP-DISABLED"], timeout=10)
|
ev = hapd.wait_event(["AP-ENABLED", "AP-DISABLED"], timeout=10)
|
||||||
if not ev:
|
if not ev:
|
||||||
raise Exception("ACS start timed out")
|
raise Exception("ACS start timed out")
|
||||||
|
|
||||||
|
def test_ap_acs_dfs(dev, apdev, params):
|
||||||
|
"""Automatic channel selection, HT scan, and DFS [long]"""
|
||||||
|
if not params['long']:
|
||||||
|
raise HwsimSkip("Skip test case with long duration due to --long not specified")
|
||||||
|
try:
|
||||||
|
hapd = None
|
||||||
|
force_prev_ap_on_5g(apdev[0])
|
||||||
|
params = hostapd.wpa2_params(ssid="test-acs", passphrase="12345678")
|
||||||
|
params['hw_mode'] = 'a'
|
||||||
|
params['channel'] = '0'
|
||||||
|
params['ht_capab'] = '[HT40+]'
|
||||||
|
params['country_code'] = 'US'
|
||||||
|
params['ieee80211d'] = '1'
|
||||||
|
params['ieee80211h'] = '1'
|
||||||
|
params['acs_num_scans'] = '1'
|
||||||
|
params['chanlist'] = '52 56 60 64'
|
||||||
|
hapd = hostapd.add_ap(apdev[0], params, wait_enabled=False)
|
||||||
|
wait_acs(hapd, return_after_acs=True)
|
||||||
|
|
||||||
|
wait_dfs_event(hapd, "DFS-CAC-START", 5)
|
||||||
|
ev = wait_dfs_event(hapd, "DFS-CAC-COMPLETED", 70)
|
||||||
|
if "success=1" not in ev:
|
||||||
|
raise Exception("CAC failed")
|
||||||
|
|
||||||
|
ev = hapd.wait_event(["AP-ENABLED"], timeout=5)
|
||||||
|
if not ev:
|
||||||
|
raise Exception("AP setup timed out")
|
||||||
|
|
||||||
|
state = hapd.get_status_field("state")
|
||||||
|
if state != "ENABLED":
|
||||||
|
raise Exception("Unexpected interface state")
|
||||||
|
|
||||||
|
freq = int(hapd.get_status_field("freq"))
|
||||||
|
if freq not in [ 5260, 5280, 5300, 5320 ]:
|
||||||
|
raise Exception("Unexpected frequency: %d" % freq)
|
||||||
|
|
||||||
|
dev[0].connect("test-acs", psk="12345678", scan_freq=str(freq))
|
||||||
|
dev[0].wait_regdom(country_ie=True)
|
||||||
|
finally:
|
||||||
|
if hapd:
|
||||||
|
hapd.request("DISABLE")
|
||||||
|
dev[0].request("DISCONNECT")
|
||||||
|
dev[0].request("ABORT_SCAN")
|
||||||
|
dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=0.5)
|
||||||
|
hostapd.cmd_execute(apdev[0], ['iw', 'reg', 'set', '00'])
|
||||||
|
dev[0].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=0.5)
|
||||||
|
dev[0].flush_scan_cache()
|
||||||
|
|
|
@ -52,6 +52,7 @@ long_tests = [ "ap_roam_open",
|
||||||
"dfs",
|
"dfs",
|
||||||
"dfs_ht40_minus",
|
"dfs_ht40_minus",
|
||||||
"dfs_etsi",
|
"dfs_etsi",
|
||||||
|
"ap_acs_dfs",
|
||||||
"grpform_cred_ready_timeout",
|
"grpform_cred_ready_timeout",
|
||||||
"hostapd_oom_wpa2_eap_connect",
|
"hostapd_oom_wpa2_eap_connect",
|
||||||
"wpas_ap_dfs",
|
"wpas_ap_dfs",
|
||||||
|
|
Loading…
Add table
Reference in a new issue