/bin/wifi: Trigger ifplugd for Frenzy in client mode.
Because the Frenzy interface never goes down, ifplugd can't react to
it, meaning run-dhclient never happens for wlan0 in client mode.
Having /bin/wifi poke ifplugd.action when starting a client resolves
this.
BUG=28726532
Change-Id: I7e7caff6df68b6ce6623f53002d60a0c63d19d52
diff --git a/wifi/quantenna.py b/wifi/quantenna.py
index 54b0262..4c6c162 100755
--- a/wifi/quantenna.py
+++ b/wifi/quantenna.py
@@ -39,6 +39,11 @@
stderr=subprocess.STDOUT).strip()
+def _ifplugd_action(*args):
+ return subprocess.check_output(['/etc/ifplugd/ifplugd.action'] + list(args),
+ stderr=subprocess.STDOUT).strip()
+
+
def info_parsed(interface):
"""Fake version of iw.info_parsed."""
wifiinfo_filename = os.path.join(WIFIINFO_PATH, interface)
@@ -122,6 +127,12 @@
else:
raise utils.BinWifiException('wpa_supplicant failed to connect')
+ try:
+ _ifplugd_action(interface, 'up')
+ except subprocess.CalledProcessError:
+ utils.log('Failed to call ifplugd.action. %s may not get an IP address.'
+ % interface)
+
return True
diff --git a/wifi/quantenna_test.py b/wifi/quantenna_test.py
index 0b6975f..b2f70ce 100755
--- a/wifi/quantenna_test.py
+++ b/wifi/quantenna_test.py
@@ -14,6 +14,7 @@
calls = []
+ifplugd_action_calls = []
def fake_qcsapi(*args):
@@ -50,6 +51,7 @@
def set_fakes(interface='wlan1'):
del calls[:]
+ del ifplugd_action_calls[:]
bridge_interfaces.clear()
os.environ['WIFI_PSK'] = 'wifi_psk'
os.environ['WIFI_CLIENT_PSK'] = 'wifi_client_psk'
@@ -57,6 +59,7 @@
quantenna._get_mac_address = lambda _: '00:11:22:33:44:55'
quantenna._qcsapi = fake_qcsapi
quantenna._brctl = fake_brctl
+ quantenna._ifplugd_action = lambda *args: ifplugd_action_calls.append(args)
def matching_calls_indices(accept):
@@ -131,6 +134,9 @@
wvtest.WVPASSLT(sp, i[0])
wvtest.WVPASSLT(i[-1], calls.index(['rfenable', '1']))
+ # We shouldn't touch ifplugd in AP mode.
+ wvtest.WVPASSEQ(len(ifplugd_action_calls), 0)
+
# Run set_wifi again in client mode with new options.
opt.channel = '147'
opt.ssid = 'TEST_SSID2'
@@ -177,6 +183,10 @@
wvtest.WVPASSLT(rim, i[0])
wvtest.WVPASSLT(i[-1], calls.index(['apply_security_config', 'wifi0']))
+ # We should have called ipflugd.action after setclient.
+ wvtest.WVPASSEQ(len(ifplugd_action_calls), 1)
+ wvtest.WVPASSEQ(ifplugd_action_calls[0], ('wlan1', 'up'))
+
# Make sure subsequent equivalent calls don't fail despite the redundant
# bridge changes.
wvtest.WVPASS(quantenna.set_client_wifi(opt))