]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_oce.py
2 # Copyright (c) 2016, Intel Deutschland GmbH
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
8 logger
= logging
.getLogger()
12 from hwsim_utils
import set_rx_rssi
, reset_rx_rssi
15 from datetime
import datetime
16 from utils
import HwsimSkip
18 def check_set_tx_power(dev
, apdev
):
19 hapd
= hostapd
.add_ap(apdev
[0], {'ssid': 'check_tx_power'})
20 set_rx_rssi(hapd
, -50)
22 dev
[0].scan(freq
=2412)
23 ev
= dev
[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 2)
25 res
= dev
[0].request("SCAN_RESULTS")
27 raise HwsimSkip('set_rx_rssi not supported')
31 dev
[0].scan(freq
=2412)
32 ev
= dev
[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 2)
34 res
= dev
[0].request("SCAN_RESULTS")
36 raise HwsimSkip('set_rx_rssi not supported')
38 def run_rssi_based_assoc_rej_timeout(dev
, apdev
, params
):
41 ap_params
= {'ssid': "test-RSSI-ar-to",
42 'rssi_reject_assoc_rssi': '-45',
43 'rssi_reject_assoc_timeout': str(rssi_retry_to
)}
45 logger
.info("Set APs RSSI rejection threshold to -45 dBm, retry timeout: " +
47 hapd
= hostapd
.add_ap(apdev
[0], ap_params
)
49 logger
.info("Set STAs TX RSSI to -50")
50 set_rx_rssi(dev
[0], -50)
52 logger
.info("STA is trying to connect")
53 dev
[0].connect("test-RSSI-ar-to", key_mgmt
="NONE", scan_freq
="2412",
56 ev
= dev
[0].wait_event(['CTRL-EVENT-ASSOC-REJECT'], 2)
58 raise Exception("Association not rejected")
59 if 'status_code=34' not in ev
:
60 raise Exception("STA assoc request was not rejected with status code 34: " + ev
)
61 t_rej
= datetime
.now()
63 # Set the scan interval to make dev[0] look for connections
64 if 'OK' not in dev
[0].request("SCAN_INTERVAL 1"):
65 raise Exception("Failed to set scan interval")
67 logger
.info("Validate that STA did not connect or sent assoc request within retry timeout")
68 ev
= dev
[0].wait_event(['CTRL-EVENT-CONNECTED', 'CTRL-EVENT-ASSOC-REJECT'],
72 if ((t_ev
- t_rej
).total_seconds() < rssi_retry_to
):
73 raise Exception("STA sent assoc request within retry timeout")
75 if 'CTRL-EVENT-CONNECTED' in ev
:
76 raise Exception("STA connected with low RSSI")
79 raise Exception("STA didn't send association request after retry timeout!")
81 def test_rssi_based_assoc_rej_timeout(dev
, apdev
, params
):
82 """RSSI-based association rejection: no assoc request during retry timeout"""
83 check_set_tx_power(dev
, apdev
)
85 run_rssi_based_assoc_rej_timeout(dev
, apdev
, params
)
88 dev
[0].request("SCAN_INTERVAL 5")
90 def run_rssi_based_assoc_rej_good_rssi(dev
, apdev
):
91 ap_params
= {'ssid': "test-RSSI-ar-to",
92 'rssi_reject_assoc_rssi': '-45',
93 'rssi_reject_assoc_timeout': '60'}
95 logger
.info("Set APs RSSI rejection threshold to -45 dBm")
96 hapd
= hostapd
.add_ap(apdev
[0], ap_params
)
98 logger
.info("Set STAs TX RSSI to -45")
99 set_rx_rssi(dev
[0], -45)
101 logger
.info("STA is trying to connect")
102 dev
[0].connect("test-RSSI-ar-to", key_mgmt
="NONE", scan_freq
="2412")
104 def test_rssi_based_assoc_rej_good_rssi(dev
, apdev
):
105 """RSSI-based association rejection: STA with RSSI above the threshold connects"""
106 check_set_tx_power(dev
, apdev
)
108 run_rssi_based_assoc_rej_good_rssi(dev
, apdev
)
110 reset_rx_rssi(dev
[0])
112 def run_rssi_based_assoc_rssi_change(dev
, hapd
):
113 logger
.info("Set STAs and APs TX RSSI to -50")
114 set_rx_rssi(dev
[0], -50)
115 set_rx_rssi(hapd
, -50)
117 # Set the scan interval to make dev[0] look for connections
118 if 'OK' not in dev
[0].request("SCAN_INTERVAL 1"):
119 raise Exception("Failed to set scan interval")
121 logger
.info("STA is trying to connect")
122 dev
[0].connect("test-RSSI-ar-to", key_mgmt
="NONE", scan_freq
="2412",
126 dev
[0].wait_completed(2)
128 logger
.info("STA didn't connect after 2 seconds.")
130 raise Exception("STA connected with low RSSI")
132 logger
.info("Set STAs and APs TX RSSI to -40dBm, validate that STA connects")
133 set_rx_rssi(dev
[0], -40)
134 set_rx_rssi(hapd
, -40)
136 dev
[0].wait_completed(2)
138 def test_rssi_based_assoc_rssi_change(dev
, apdev
):
139 """RSSI-based association rejection: connect after improving RSSI"""
140 check_set_tx_power(dev
, apdev
)
142 ap_params
= {'ssid': "test-RSSI-ar-to",
143 'rssi_reject_assoc_rssi': '-45',
144 'rssi_reject_assoc_timeout': '60'}
146 logger
.info("Set APs RSSI rejection threshold to -45 dBm, retry timeout: 60")
147 hapd
= hostapd
.add_ap(apdev
[0], ap_params
)
149 run_rssi_based_assoc_rssi_change(dev
, hapd
)
151 reset_rx_rssi(dev
[0])
153 dev
[0].request("SCAN_INTERVAL 5")
155 def test_oce_ap(dev
, apdev
):
158 passphrase
= 'qwertyuiop'
159 params
= hostapd
.wpa2_params(ssid
=ssid
, passphrase
=passphrase
)
160 params
['ieee80211w'] = "1"
163 hapd
= hostapd
.add_ap(apdev
[0], params
)
164 dev
[0].connect(ssid
, psk
=passphrase
, ieee80211w
="1", scan_freq
="2412")