dev[0].dump_monitor()
logger.info("Roam to AP2")
- dev[0].scan(freq="2412")
+ # It can take some time for the second AP to become ready to reply to Probe
+ # Request frames especially under heavy CPU load, so allow couple of rounds
+ # of scanning to avoid reporting errors incorrectly just because of scans
+ # not having seen the target AP.
+ for i in range(0, 10):
+ dev[0].scan(freq="2412")
+ if dev[0].get_bss(bssid2) is not None:
+ break
+ logger.info("Scan again to find target AP")
dev[0].request("ROAM " + bssid2)
ev = dev[0].wait_event(["CTRL-EVENT-EAP-SUCCESS"], timeout=10)
if ev is None:
hostapd.add_ap(apdev[1]['ifname'], params)
dev[2].scan(freq="2412")
bss = dev[2].get_bss(apdev[0]['bssid'])
- if len(bss) == 0:
+ if bss is None or len(bss) == 0:
raise Exception("Missing BSS data")
bss = dev[2].get_bss(apdev[1]['bssid'])
- if len(bss) != 0:
+ if bss and len(bss) != 0:
raise Exception("Unexpected BSS data")
dev[2].request("SET bssid_filter ")
dev[2].scan(freq="2412")
bss = dev[2].get_bss(apdev[0]['bssid'])
- if len(bss) == 0:
+ if bss is None or len(bss) == 0:
raise Exception("Missing BSS data")
bss = dev[2].get_bss(apdev[1]['bssid'])
- if len(bss) == 0:
+ if bss is None or len(bss) == 0:
raise Exception("Missing BSS data(2)")
res = dev[2].request("SCAN_RESULTS").splitlines()
if "test" not in res[1] or "test" not in res[2]:
def get_bss(self, bssid):
res = self.request("BSS " + bssid)
+ if "FAIL" in res:
+ return None
lines = res.splitlines()
vals = dict()
for l in lines:
[name,value] = l.split('=', 1)
vals[name] = value
+ if len(vals) == 0:
+ return None
return vals
def get_pmksa(self, bssid):