diff --git a/tests/hwsim/hostapd.py b/tests/hwsim/hostapd.py index a6d4cad7c..6d6d641d4 100644 --- a/tests/hwsim/hostapd.py +++ b/tests/hwsim/hostapd.py @@ -119,6 +119,7 @@ class HostapdGlobal: class Hostapd: def __init__(self, ifname, bssidx=0, hostname=None, port=8877): + self.hostname = hostname self.host = remotehost.Host(hostname, ifname) self.ifname = ifname if hostname is None: diff --git a/tests/hwsim/hwsim_utils.py b/tests/hwsim/hwsim_utils.py index 85f54a2ec..fd5f70cf5 100644 --- a/tests/hwsim/hwsim_utils.py +++ b/tests/hwsim/hwsim_utils.py @@ -25,6 +25,11 @@ def run_connectivity_test(dev1, dev2, tos, dev1group=False, dev2group=False, dev1.dump_monitor() dev2.dump_monitor() + if dev1.hostname is None and dev2.hostname is None: + broadcast_retry_c = 1 + else: + broadcast_retry_c = 10 + try: if config: cmd = "DATA_TEST_CONFIG 1" @@ -62,18 +67,25 @@ def run_connectivity_test(dev1, dev2, tos, dev1group=False, dev2group=False, raise Exception("Unexpected dev1->dev2 unicast data result") cmd = "DATA_TEST_TX ff:ff:ff:ff:ff:ff {} {}".format(addr1, tos) - if dev1group: - dev1.group_request(cmd) - else: - dev1.request(cmd) - if dev2group: - ev = dev2.wait_group_event(["DATA-TEST-RX"], timeout=timeout) - else: - ev = dev2.wait_event(["DATA-TEST-RX"], timeout=timeout) - if ev is None: - raise Exception("dev1->dev2 broadcast data delivery failed") - if "DATA-TEST-RX ff:ff:ff:ff:ff:ff {}".format(addr1) not in ev: - raise Exception("Unexpected dev1->dev2 broadcast data result") + for i in xrange(broadcast_retry_c): + try: + if dev1group: + dev1.group_request(cmd) + else: + dev1.request(cmd) + if dev2group: + ev = dev2.wait_group_event(["DATA-TEST-RX"], + timeout=timeout) + else: + ev = dev2.wait_event(["DATA-TEST-RX"], timeout=timeout) + if ev is None: + raise Exception("dev1->dev2 broadcast data delivery failed") + if "DATA-TEST-RX ff:ff:ff:ff:ff:ff {}".format(addr1) not in ev: + raise Exception("Unexpected dev1->dev2 broadcast data result") + break + except Exception as e: + if i == broadcast_retry_c - 1: + raise cmd = "DATA_TEST_TX {} {} {}".format(addr1, addr2, tos) if dev2group: @@ -90,18 +102,25 @@ def run_connectivity_test(dev1, dev2, tos, dev1group=False, dev2group=False, raise Exception("Unexpected dev2->dev1 unicast data result") cmd = "DATA_TEST_TX ff:ff:ff:ff:ff:ff {} {}".format(addr2, tos) - if dev2group: - dev2.group_request(cmd) - else: - dev2.request(cmd) - if dev1group: - ev = dev1.wait_group_event(["DATA-TEST-RX"], timeout=timeout) - else: - ev = dev1.wait_event(["DATA-TEST-RX"], timeout=timeout) - if ev is None: - raise Exception("dev2->dev1 broadcast data delivery failed") - if "DATA-TEST-RX ff:ff:ff:ff:ff:ff {}".format(addr2) not in ev: - raise Exception("Unexpected dev2->dev1 broadcast data result") + for i in xrange(broadcast_retry_c): + try: + if dev2group: + dev2.group_request(cmd) + else: + dev2.request(cmd) + if dev1group: + ev = dev1.wait_group_event(["DATA-TEST-RX"], + timeout=timeout) + else: + ev = dev1.wait_event(["DATA-TEST-RX"], timeout=timeout) + if ev is None: + raise Exception("dev2->dev1 broadcast data delivery failed") + if "DATA-TEST-RX ff:ff:ff:ff:ff:ff {}".format(addr2) not in ev: + raise Exception("Unexpected dev2->dev1 broadcast data result") + break + except Exception as e: + if i == broadcast_retry_c - 1: + raise finally: if config: if dev1group: