Use communicate() to properly wait for the process to terminate.
Signed-off-by: Jouni Malinen <j@w1.fi>
def fst_clear_regdom():
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- if "country 00:" not in res:
+ out, err = cmd.communicate()
+ if "country 00:" not in out.decode():
subprocess.call(['iw', 'reg', 'set', '00'])
time.sleep(0.1)
cmd = subprocess.Popen(['../../hostapd/hlr_auc_gw',
'-m', fname, data],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode().strip()
- cmd.stdout.close()
+ out, err = cmd.communicate()
+ res = out.decode().strip()
logger.debug("hlr_auc_gw response: " + res)
socket.sendto(res.encode(), self.client_address)
cmd = subprocess.Popen(['../../hostapd/hlr_auc_gw',
'-D', fname, "FOO"],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode().strip()
- cmd.stdout.close()
+ out, err = cmd.communicate()
+ res = out.decode().strip()
logger.debug("hlr_auc_gw response: " + res)
try:
cmd = subprocess.Popen(['../../hostapd/hlr_auc_gw',
'-D', fname, data],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode().strip()
- cmd.stdout.close()
+ out, err = cmd.communicate()
+ res = out.decode().strip()
logger.debug("hlr_auc_gw response: " + res)
socket.sendto(res.encode(), self.client_address)
cmd = subprocess.Popen(['pgrep', '-nf', 'wpa_supplicant.*' + dev[0].ifname],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode().strip()
- cmd.stdout.close()
+ out, err = cmd.communicate()
+ res = out.decode().strip()
if res:
pid = int(res)
logger.info("wpa_supplicant PID %d" % pid)
def get_permanent_neighbors(ifname):
cmd = subprocess.Popen(['ip', 'nei'], stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
+ out, err = cmd.communicate()
+ res = out.decode()
return [line.strip() for line in res.splitlines() if "PERMANENT" in line and ifname in line]
def get_bridge_macs(ifname):
cmd = subprocess.Popen(['brctl', 'showmacs', ifname],
stdout=subprocess.PIPE)
- res = cmd.stdout.read()
- cmd.stdout.close()
- return res.decode()
+ out, err = cmd.communicate()
+ return out.decode()
def tshark_get_arp(cap, filter):
res = run_tshark(cap, filter,
time.sleep(1.1)
brcmd = subprocess.Popen(['brctl', 'show'], stdout=subprocess.PIPE)
- res = brcmd.stdout.read().decode()
- brcmd.stdout.close()
- logger.info("Bridge setup: " + res)
+ out, err = brcmd.communicate()
+ logger.info("Bridge setup: " + out.decode())
brcmd = subprocess.Popen(['brctl', 'showstp', 'ap-br0'],
stdout=subprocess.PIPE)
- res = brcmd.stdout.read().decode()
- brcmd.stdout.close()
- logger.info("Bridge showstp: " + res)
+ out, err = brcmd.communicate()
+ logger.info("Bridge showstp: " + out.decode())
addr0 = dev[0].p2p_interface_addr()
addr1 = dev[1].p2p_interface_addr()
if ebtables:
cmd = subprocess.Popen(['ebtables', '-L', '--Lc'],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ebtables results:\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ebtables results:\n" + out.decode())
# Verify that expected ARP messages were seen and no unexpected
# ARP messages were seen.
time.sleep(0.1)
brcmd = subprocess.Popen(['brctl', 'show'], stdout=subprocess.PIPE)
- res = brcmd.stdout.read().decode()
- brcmd.stdout.close()
- logger.info("Bridge setup: " + res)
+ out, err = brcmd.communicate()
+ logger.info("Bridge setup: " + out.decode())
brcmd = subprocess.Popen(['brctl', 'showstp', 'ap-br0'],
stdout=subprocess.PIPE)
- res = brcmd.stdout.read().decode()
- brcmd.stdout.close()
- logger.info("Bridge showstp: " + res)
+ out, err = brcmd.communicate()
+ logger.info("Bridge showstp: " + out.decode())
addr0 = dev[0].p2p_interface_addr()
addr1 = dev[1].p2p_interface_addr()
if ebtables:
cmd = subprocess.Popen(['ebtables', '-L', '--Lc'],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ebtables results:\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ebtables results:\n" + out.decode())
ns = tshark_get_ns(cap_dev0)
logger.info("dev0 seen NS: " + str(ns))
subprocess.check_call(['ip', 'link', 'set', 'dev', br_ifname, 'up'])
subprocess.check_call(['brctl', 'addif', br_ifname, ifname])
cmd = subprocess.Popen(['brctl', 'show'], stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
+ out, err = cmd.communicate()
+ res = out.decode()
finally:
subprocess.call(['brctl', 'delif', br_ifname, ifname])
subprocess.call(['ip', 'link', 'set', 'dev', br_ifname, 'down'])
for i in range(2):
cmd = subprocess.Popen(['iw', dev[0].ifname, 'station', 'dump'],
stdout=subprocess.PIPE)
- res = cmd.stdout.read()
- cmd.stdout.close()
- logger.info("Station dump on dev[%d]:\n%s" % (i, res.decode()))
+ out, err = cmd.communicate()
+ logger.info("Station dump on dev[%d]:\n%s" % (i, out.decode()))
except Exception as e:
if isinstance(e, Exception) and str(e) == "AP startup failed":
if not vht_supported():
for i in range(2):
cmd = subprocess.Popen(['iw', dev[0].ifname, 'station', 'dump'],
stdout=subprocess.PIPE)
- res = cmd.stdout.read()
- cmd.stdout.close()
- logger.info("Station dump on dev[%d]:\n%s" % (i, res.decode()))
+ out, err = cmd.communicate()
+ logger.info("Station dump on dev[%d]:\n%s" % (i, out.decode()))
except Exception as e:
if isinstance(e, Exception) and str(e) == "AP startup failed":
if not vht_supported():
ev = hapd.wait_event(["AP-ENABLED"], timeout=2)
if not ev:
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.readlines()
+ out, err = cmd.communicate()
+ reg = out.splitlines()
for r in reg:
if "5490" in r and "DFS" in r:
raise HwsimSkip("ZA regulatory rule did not have DFS requirement removed")
for i in range(2):
cmd = subprocess.Popen(['iw', dev[0].ifname, 'station', 'dump'],
stdout=subprocess.PIPE)
- res = cmd.stdout.read()
- cmd.stdout.close()
- logger.info("Station dump on dev[%d]:\n%s" % (i, res.decode()))
+ out, err = cmd.communicate()
+ logger.info("Station dump on dev[%d]:\n%s" % (i, out.decode()))
except Exception as e:
if isinstance(e, Exception) and str(e) == "AP startup failed":
if not vht_supported():
ev = hapd.wait_event(["AP-ENABLED"], timeout=2)
if not ev:
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.readlines()
+ out, err = cmd.communicate()
+ reg = out.splitlines()
for r in reg:
if b"5490" in r and b"DFS" in r:
raise HwsimSkip("ZA regulatory rule did not have DFS requirement removed")
ev = hapd.wait_event(["AP-ENABLED", "AP-DISABLED"], timeout=2)
if not ev:
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.readlines()
+ out, err = cmd.communicate()
+ reg = out.splitlines()
for r in reg:
if "5490" in r and "DFS" in r:
raise HwsimSkip("ZA regulatory rule did not have DFS requirement removed")
'type', '__ap']
proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
stdout=subprocess.PIPE, shell=False)
+ out, err = proc.communicate()
+ logger.debug("iw output: " + out.decode())
# Start hostapd
start_ap(params['prefix'], fname1 + " " + fname2)
def he_supported():
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.read().decode()
+ out, err = cmd.communicate()
+ reg = out.decode()
if "@ 80)" in reg or "@ 160)" in reg:
return True
return False
ev = hapd.wait_event(["AP-ENABLED"], timeout=2)
if not ev:
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.readlines()
+ out, err = cmd.communicate()
+ reg = out.splitlines()
for r in reg:
if b"5490" in r and b"DFS" in r:
raise HwsimSkip("ZA regulatory rule did not have DFS requirement removed")
ev = hapd.wait_event(["AP-ENABLED", "AP-DISABLED"], timeout=2)
if not ev:
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.readlines()
+ out, err = cmd.communicate()
+ reg = out.splitlines()
for r in reg:
if "5490" in r and "DFS" in r:
raise HwsimSkip("ZA regulatory rule did not have DFS requirement removed")
cmd = subprocess.Popen(["ip", "macsec", "show"],
stdout=subprocess.PIPE,
stderr=open('/dev/null', 'w'))
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip macsec:\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip macsec:\n" + out.decode())
def log_ip_link():
cmd = subprocess.Popen(["ip", "link", "show"],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip link:\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip link:\n" + out.decode())
def add_veth():
try:
cmd = subprocess.Popen(["ip", "macsec", "show"],
stdout=subprocess.PIPE,
stderr=open('/dev/null', 'w'))
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip macsec show:\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip macsec show:\n" + out.decode())
cmd = subprocess.Popen(["ip", "netns", "exec", "ns0",
"ip", "macsec", "show"],
stdout=subprocess.PIPE,
stderr=open('/dev/null', 'w'))
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip macsec show (ns0):\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip macsec show (ns0):\n" + out.decode())
cmd = subprocess.Popen(["ip", "netns", "exec", "ns1",
"ip", "macsec", "show"],
stdout=subprocess.PIPE,
stderr=open('/dev/null', 'w'))
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip macsec show (ns1):\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip macsec show (ns1):\n" + out.decode())
def log_ip_link_ns():
cmd = subprocess.Popen(["ip", "link", "show"],
stdout=subprocess.PIPE)
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip link:\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip link:\n" + out.decode())
cmd = subprocess.Popen(["ip", "netns", "exec", "ns0",
"ip", "link", "show"],
stdout=subprocess.PIPE,
stderr=open('/dev/null', 'w'))
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip link show (ns0):\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip link show (ns0):\n" + out.decode())
cmd = subprocess.Popen(["ip", "netns", "exec", "ns1",
"ip", "link", "show"],
stdout=subprocess.PIPE,
stderr=open('/dev/null', 'w'))
- res = cmd.stdout.read().decode()
- cmd.stdout.close()
- logger.info("ip link show (ns1):\n" + res)
+ out, err = cmd.communicate()
+ logger.info("ip link show (ns1):\n" + out.decode())
def write_conf(conffile, mka_priority=None):
with open(conffile, 'w') as f:
c = subprocess.Popen(['ip', 'netns', 'exec', 'ns0',
'ping', '-c', '2', '192.168.248.18'],
stdout=subprocess.PIPE)
- res = c.stdout.read().decode()
- c.stdout.close()
+ out, err = c.communicate()
+ res = out.decode()
logger.info("ping:\n" + res)
if "2 packets transmitted, 2 received" not in res:
raise Exception("ping did not work")
cmd = subprocess.Popen(["iw", "dev", dev[0].ifname, "get", "mesh_param",
"mesh_rssi_threshold"], stdout=subprocess.PIPE)
- mesh_rssi_threshold = int(cmd.stdout.read().decode().split(" ")[0])
+ out, err = cmd.communicate()
+ mesh_rssi_threshold = int(out.decode().split(" ")[0])
dev[0].mesh_group_remove()
check_mesh_group_removed(dev[0])
break
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.read()
+ out, err = cmd.communicate()
found = False
- for entry in reg.splitlines():
+ for entry in out.splitlines():
entry = entry.decode()
if "@ 160)" in entry and "DFS" not in entry:
found = True
def vht_supported():
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.read().decode()
+ out, err = cmd.communicate()
+ reg = out.decode()
if "@ 80)" in reg or "@ 160)" in reg:
return True
return False
def eht_320mhz_supported():
- cmd = subprocess.Popen(["iw", "reg", "get"],
- stdout=subprocess.PIPE)
cmd = subprocess.Popen(["iw", "reg", "get"], stdout=subprocess.PIPE)
- reg = cmd.stdout.read().decode()
+ out, err = cmd.communicate()
+ reg = out.decode()
if "@ 320)" in reg:
return True
return False
def he_6ghz_supported(freq=5975):
cmd = subprocess.Popen(["iw", "reg", "get"],
stdout=subprocess.PIPE)
- reg_rules = cmd.stdout.read().decode().splitlines()
+ out, err = cmd.communicate()
+ reg_rules = out.decode().splitlines()
for rule in reg_rules:
m = re.search(r"\s*\(\d+\s*-\s*\d+", rule)
if not m: