Chromium Code Reviews| Index: tools/telemetry/telemetry/core/forwarders/android_forwarder.py |
| diff --git a/tools/telemetry/telemetry/core/forwarders/android_forwarder.py b/tools/telemetry/telemetry/core/forwarders/android_forwarder.py |
| index f2f09d3ac51259d0baaf4af6448a513793178167..af30c1bfb7c2069dd4e6ec552c7175bf090c7d50 100644 |
| --- a/tools/telemetry/telemetry/core/forwarders/android_forwarder.py |
| +++ b/tools/telemetry/telemetry/core/forwarders/android_forwarder.py |
| @@ -78,6 +78,7 @@ class AndroidRndisForwarder(forwarders.Forwarder): |
| self._RedirectPorts(port_pairs) |
| if port_pairs.dns: |
| self._OverrideDns() |
| + self._OverrideRoutingPolicy() |
| # TODO(tonyg): Verify that each port can connect to host. |
| @property |
| @@ -86,6 +87,7 @@ class AndroidRndisForwarder(forwarders.Forwarder): |
| def Close(self): |
| self._SetDns(*self._original_dns) |
| + self._RestoreRoutingPolicy() |
| super(AndroidRndisForwarder, self).Close() |
| def _RedirectPorts(self, port_pairs): |
| @@ -128,10 +130,10 @@ class AndroidRndisForwarder(forwarders.Forwarder): |
| self._adb.device().SetProp('net.dnschange', int(dnschange) + 1) |
| # Since commit 8b47b3601f82f299bb8c135af0639b72b67230e6 to frameworks/base |
| # the net.dns1 properties have been replaced with explicit commands for netd |
| - self._adb.RunShellCommand('ndc netd resolver setifdns %s %s %s' % |
| + self._adb.RunShellCommand('netd resolver setifdns %s %s %s' % |
| (iface, dns1, dns2)) |
| # TODO(szym): if we know the package UID, we could setifaceforuidrange |
| - self._adb.RunShellCommand('ndc netd resolver setdefaultif %s' % iface) |
| + self._adb.RunShellCommand('netd resolver setdefaultif %s' % iface) |
| def _GetCurrentDns(self): |
| """Returns current gateway, dns1, and dns2.""" |
| @@ -144,6 +146,21 @@ class AndroidRndisForwarder(forwarders.Forwarder): |
| self._adb.device().GetProp('net.dns2'), |
| ) |
| + def _OverrideRoutingPolicy(self): |
| + """Override any routing policy that could prevent |
| + packets from reaching the rndis interface |
| + """ |
| + policies = self._device.RunShellCommand('ip rule') |
|
marja
2014/08/27 11:08:19
This seems pretty broken: self._device does not ex
|
| + if len(policies) > 1 and not ('lookup main' in policies[1]): |
| + self._device.RunShellCommand('ip rule add prio 1 from all table main') |
| + self._device.RunShellCommand('ip route flush cache') |
| + |
| + def _RestoreRoutingPolicy(self): |
| + policies = self._adb.RunShellCommand('ip rule') |
| + if len(policies) > 1 and re.match("^1:.*lookup main", policies[1]): |
| + self._adb.RunShellCommand('ip rule del prio 1') |
| + self._adb.RunShellCommand('ip route flush cache') |
| + |
| class AndroidRndisConfigurator(object): |
| """Configures a linux host to connect to an android device via RNDIS. |