diff --git a/tests/hwsim/hwsim_utils.py b/tests/hwsim/hwsim_utils.py index 8e9f5e7de..6f662f5ff 100644 --- a/tests/hwsim/hwsim_utils.py +++ b/tests/hwsim/hwsim_utils.py @@ -1,15 +1,16 @@ # hwsim testing utilities -# Copyright (c) 2013, Jouni Malinen +# Copyright (c) 2013-2014, Jouni Malinen # # This software may be distributed under the terms of the BSD license. # See README for more details. import os import subprocess +import time import logging logger = logging.getLogger() -def test_connectivity(ifname1, ifname2, dscp=None, tos=None): +def test_connectivity(ifname1, ifname2, dscp=None, tos=None, max_tries=1): if os.path.isfile("../../mac80211_hwsim/tools/hwsim_test"): hwsim_test = "../../mac80211_hwsim/tools/hwsim_test" else: @@ -24,13 +25,20 @@ def test_connectivity(ifname1, ifname2, dscp=None, tos=None): elif tos: cmd.append('-t') cmd.append(str(tos)) - try: - s = subprocess.check_output(cmd) - logger.debug(s) - except subprocess.CalledProcessError, e: - logger.info("hwsim failed: " + str(e.returncode)) - logger.info(e.output) - raise + success = False + for i in range(0, max_tries): + try: + s = subprocess.check_output(cmd) + logger.debug(s) + success = True + break + except subprocess.CalledProcessError, e: + logger.info("hwsim failed: " + str(e.returncode)) + logger.info(e.output) + if i + 1 < max_tries: + time.sleep(1) + if not success: + raise Exception("hwsim_test failed") def test_connectivity_p2p(dev1, dev2, dscp=None, tos=None): ifname1 = dev1.group_ifname if dev1.group_ifname else dev1.ifname diff --git a/tests/hwsim/test_ap_params.py b/tests/hwsim/test_ap_params.py index af085064d..54c8532c8 100644 --- a/tests/hwsim/test_ap_params.py +++ b/tests/hwsim/test_ap_params.py @@ -103,3 +103,24 @@ def test_ap_acl_deny(dev, apdev): ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1) if ev is not None: raise Exception("Unexpected association") + +def test_ap_wds_sta(dev, apdev): + """WPA2-PSK AP with STA using 4addr mode""" + ssid = "test-wpa2-psk" + passphrase = 'qwertyuiop' + params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase) + params['wds_sta'] = "1" + params['wds_bridge'] = "wds-br0" + hostapd.add_ap(apdev[0]['ifname'], params) + + try: + subprocess.call(['sudo', 'brctl', 'addbr', 'wds-br0']) + subprocess.call(['sudo', 'brctl', 'setfd', 'wds-br0', '0']) + subprocess.call(['sudo', 'ip', 'link', 'set', 'dev', 'wds-br0', 'up']) + subprocess.call(['sudo', 'iw', dev[0].ifname, 'set', '4addr', 'on']) + dev[0].connect(ssid, psk=passphrase, scan_freq="2412") + hwsim_utils.test_connectivity(dev[0].ifname, "wds-br0", max_tries=15) + finally: + subprocess.call(['sudo', 'iw', dev[0].ifname, 'set', '4addr', 'off']) + subprocess.call(['sudo', 'ip', 'link', 'set', 'dev', 'wds-br0', 'down']) + subprocess.call(['sudo', 'brctl', 'delbr', 'wds-br0'])