Merge "conman: Replace 'iw scan' with 'wifi scan'." into wifitv
diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index 9d23934..ebf84c1 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -592,20 +592,22 @@
logging.info('Scanning on %s...', wifi.name)
wifi.last_wifi_scan_time = time.time()
subprocess.call(self.IFUP + [wifi.name])
- with_ie, without_ie = self._find_bssids(wifi.name)
+ # /bin/wifi takes a --band option but then finds the right interface for it,
+ # so it's okay to just pick the first band here.
+ with_ie, without_ie = self._find_bssids(wifi.bands[0])
logging.info('Done scanning on %s', wifi.name)
items = [(bss_info, 3) for bss_info in with_ie]
items += [(bss_info, 1) for bss_info in without_ie]
wifi.cycler = cycler.AgingPriorityCycler(cycle_length_s=30, items=items)
- def _find_bssids(self, wcli):
+ def _find_bssids(self, band):
def supports_autoprovisioning(oui, vendor_ie):
if oui not in GFIBER_OUIS:
return False
return vendor_ie.startswith(VENDOR_IE_FEATURE_ID_AUTOPROVISIONING)
- return iw.find_bssids(wcli, supports_autoprovisioning, False)
+ return iw.find_bssids(band, supports_autoprovisioning, False)
def _try_next_bssid(self, wifi):
"""Attempt to connect to the next BSSID in wifi's BSSID cycler.
diff --git a/conman/connection_manager_test.py b/conman/connection_manager_test.py
index 9e582e7..170b1fa 100755
--- a/conman/connection_manager_test.py
+++ b/conman/connection_manager_test.py
@@ -270,13 +270,13 @@
self.wifi_for_band(band).add_terminating_event()
# pylint: disable=unused-argument,protected-access
- def _find_bssids(self, wcli):
- # Only the 5 GHz scan finds anything.
- if wcli == 'wcli0' and self.scan_has_results:
+ def _find_bssids(self, band):
+ # Only wcli0 finds anything.
+ if band in self.interface_by_name('wcli0').bands and self.scan_has_results:
iw._scan = lambda interface: IW_SCAN_OUTPUT
else:
iw._scan = lambda interface: ''
- return super(ConnectionManager, self)._find_bssids(wcli)
+ return super(ConnectionManager, self)._find_bssids(band)
def _update_wlan_configuration(self, wlan_configuration):
wlan_configuration.command.insert(0, 'echo')
diff --git a/conman/iw.py b/conman/iw.py
index f751302..7b40a80 100755
--- a/conman/iw.py
+++ b/conman/iw.py
@@ -6,9 +6,9 @@
import subprocess
-def _scan(interface, **kwargs):
+def _scan(band, **kwargs):
try:
- return subprocess.check_output(('iw', 'dev', interface, 'scan'), **kwargs)
+ return subprocess.check_output(('wifi', 'scan', '-b', band), **kwargs)
except subprocess.CalledProcessError:
return ''
@@ -47,11 +47,11 @@
# TODO(rofrankel): waveguide also scans. Can we find a way to avoid two programs
# scanning in parallel?
-def scan_parsed(interface, **kwargs):
+def scan_parsed(band, **kwargs):
"""Return the parsed results of 'iw scan'."""
result = []
bss_info = None
- for line in _scan(interface, **kwargs).splitlines():
+ for line in _scan(band, **kwargs).splitlines():
line = line.strip()
match = re.match(_BSSID_RE, line)
if match:
@@ -81,11 +81,11 @@
return result
-def find_bssids(interface, vendor_ie_function, include_secure):
+def find_bssids(band, vendor_ie_function, include_secure):
"""Return information about interesting access points.
Args:
- interface: The wireless interface with which to scan.
+ band: The band on which to scan.
vendor_ie_function: A function that takes a vendor IE and returns a bool.
include_secure: Whether to exclude secure networks.
@@ -94,7 +94,7 @@
BSSIDs which have a vendor IE accepted by vendor_ie_function, and the second
list has those which don't.
"""
- parsed = scan_parsed(interface)
+ parsed = scan_parsed(band)
result_with_ie = set()
result_without_ie = set()