8b8a1864ff
Pass the full apdev to the add_ap() function instead of just ifname. This allows us to handle also remote hosts while we can check apdev['hostname'], apdev['port']. This step (1) converts the cases where apdev[#]['ifname'] was used as the argument to hostapd.add_ap(). Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
155 lines
6 KiB
Python
155 lines
6 KiB
Python
# hostapd and out-of-memory error paths
|
|
# Copyright (c) 2015, Jouni Malinen
|
|
#
|
|
# This software may be distributed under the terms of the BSD license.
|
|
# See README for more details.
|
|
|
|
import logging
|
|
logger = logging.getLogger()
|
|
import time
|
|
|
|
import hostapd
|
|
from utils import HwsimSkip
|
|
|
|
def hostapd_oom_loop(apdev, params, start_func="main"):
|
|
hapd = hostapd.add_ap(apdev[0], { "ssid": "ctrl" })
|
|
hapd_global = hostapd.HostapdGlobal()
|
|
|
|
count = 0
|
|
for i in range(1, 1000):
|
|
if "OK" not in hapd.request("TEST_ALLOC_FAIL %d:%s" % (i, start_func)):
|
|
raise HwsimSkip("TEST_ALLOC_FAIL not supported")
|
|
try:
|
|
hostapd.add_ap(apdev[1], params, timeout=2.5)
|
|
logger.info("Iteration %d - success" % i)
|
|
hapd_global.remove(apdev[1]['ifname'])
|
|
|
|
state = hapd.request('GET_ALLOC_FAIL')
|
|
logger.info("GET_ALLOC_FAIL: " + state)
|
|
hapd.request("TEST_ALLOC_FAIL 0:")
|
|
if i < 3:
|
|
raise Exception("AP setup succeeded during out-of-memory")
|
|
if state.startswith('0:'):
|
|
count = 0
|
|
else:
|
|
count += 1
|
|
if count == 5:
|
|
break
|
|
except Exception, e:
|
|
logger.info("Iteration %d - %s" % (i, str(e)))
|
|
|
|
def test_hostapd_oom_open(dev, apdev):
|
|
"""hostapd failing to setup open mode due to OOM"""
|
|
params = { "ssid": "open" }
|
|
hostapd_oom_loop(apdev, params)
|
|
|
|
def test_hostapd_oom_wpa2_psk(dev, apdev):
|
|
"""hostapd failing to setup WPA2-PSK mode due to OOM"""
|
|
params = hostapd.wpa2_params(ssid="test", passphrase="12345678")
|
|
params['wpa_psk_file'] = 'hostapd.wpa_psk'
|
|
hostapd_oom_loop(apdev, params)
|
|
|
|
def test_hostapd_oom_wpa2_eap(dev, apdev):
|
|
"""hostapd failing to setup WPA2-EAP mode due to OOM"""
|
|
params = hostapd.wpa2_eap_params(ssid="test")
|
|
params['acct_server_addr'] = "127.0.0.1"
|
|
params['acct_server_port'] = "1813"
|
|
params['acct_server_shared_secret'] = "radius"
|
|
hostapd_oom_loop(apdev, params)
|
|
|
|
def test_hostapd_oom_wpa2_eap_radius(dev, apdev):
|
|
"""hostapd failing to setup WPA2-EAP mode due to OOM in RADIUS"""
|
|
params = hostapd.wpa2_eap_params(ssid="test")
|
|
params['acct_server_addr'] = "127.0.0.1"
|
|
params['acct_server_port'] = "1813"
|
|
params['acct_server_shared_secret'] = "radius"
|
|
hostapd_oom_loop(apdev, params, start_func="accounting_init")
|
|
|
|
def test_hostapd_oom_wpa2_psk_connect(dev, apdev):
|
|
"""hostapd failing during WPA2-PSK mode connection due to OOM"""
|
|
params = hostapd.wpa2_params(ssid="test-wpa2-psk", passphrase="12345678")
|
|
hapd = hostapd.add_ap(apdev[0], params)
|
|
|
|
dev[0].request("SCAN_INTERVAL 1")
|
|
count = 0
|
|
for i in range(1, 1000):
|
|
logger.info("Iteration %d" % i)
|
|
if "OK" not in hapd.request("TEST_ALLOC_FAIL %d:main" % i):
|
|
raise HwsimSkip("TEST_ALLOC_FAIL not supported")
|
|
id = dev[0].connect("test-wpa2-psk", psk="12345678",
|
|
scan_freq="2412", wait_connect=False)
|
|
ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
|
|
"CTRL-EVENT-SSID-TEMP-DISABLED"], timeout=5)
|
|
if ev is None:
|
|
logger.info("Timeout while waiting for connection in iteration %d" % i)
|
|
dev[0].request("REMOVE_NETWORK all")
|
|
time.sleep(0.1)
|
|
else:
|
|
if "CTRL-EVENT-SSID-TEMP-DISABLED" in ev:
|
|
logger.info("Re-select to avoid long wait for temp disavle")
|
|
dev[0].select_network(id)
|
|
dev[0].wait_connected()
|
|
dev[0].request("REMOVE_NETWORK all")
|
|
dev[0].wait_disconnected()
|
|
for i in range(3):
|
|
dev[i].dump_monitor()
|
|
hapd.dump_monitor()
|
|
|
|
state = hapd.request('GET_ALLOC_FAIL')
|
|
logger.info("GET_ALLOC_FAIL: " + state)
|
|
hapd.request("TEST_ALLOC_FAIL 0:")
|
|
if state.startswith('0:'):
|
|
count = 0
|
|
else:
|
|
count += 1
|
|
if count == 5:
|
|
break
|
|
dev[0].request("SCAN_INTERVAL 5")
|
|
|
|
def test_hostapd_oom_wpa2_eap_connect(dev, apdev, params):
|
|
"""hostapd failing during WPA2-EAP mode connection due to OOM"""
|
|
if not params['long']:
|
|
raise HwsimSkip("Skip test case with long duration due to --long not specified")
|
|
params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
|
|
params['acct_server_addr'] = "127.0.0.1"
|
|
params['acct_server_port'] = "1813"
|
|
params['acct_server_shared_secret'] = "radius"
|
|
hapd = hostapd.add_ap(apdev[0], params)
|
|
|
|
dev[0].request("SCAN_INTERVAL 1")
|
|
count = 0
|
|
for i in range(1, 1000):
|
|
logger.info("Iteration %d" % i)
|
|
if "OK" not in hapd.request("TEST_ALLOC_FAIL %d:main" % i):
|
|
raise HwsimSkip("TEST_ALLOC_FAIL not supported")
|
|
id = dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP",
|
|
eap="GPSK", identity="gpsk user",
|
|
password="abcdefghijklmnop0123456789abcdef",
|
|
scan_freq="2412", wait_connect=False)
|
|
ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
|
|
"CTRL-EVENT-SSID-TEMP-DISABLED"], timeout=5)
|
|
if ev is None:
|
|
logger.info("Timeout while waiting for connection in iteration %d" % i)
|
|
dev[0].request("REMOVE_NETWORK all")
|
|
time.sleep(0.1)
|
|
else:
|
|
if "CTRL-EVENT-SSID-TEMP-DISABLED" in ev:
|
|
logger.info("Re-select to avoid long wait for temp disavle")
|
|
dev[0].select_network(id)
|
|
dev[0].wait_connected()
|
|
dev[0].request("REMOVE_NETWORK all")
|
|
dev[0].wait_disconnected()
|
|
for i in range(3):
|
|
dev[i].dump_monitor()
|
|
hapd.dump_monitor()
|
|
|
|
state = hapd.request('GET_ALLOC_FAIL')
|
|
logger.info("GET_ALLOC_FAIL: " + state)
|
|
hapd.request("TEST_ALLOC_FAIL 0:")
|
|
if state.startswith('0:'):
|
|
count = 0
|
|
else:
|
|
count += 1
|
|
if count == 5:
|
|
break
|
|
dev[0].request("SCAN_INTERVAL 5")
|