| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging | 5 import logging |
| 6 import os | 6 import os |
| 7 import re | 7 import re |
| 8 import socket | 8 import socket |
| 9 import struct | 9 import struct |
| 10 import subprocess | 10 import subprocess |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 if host_platform == 'linux': | 224 if host_platform == 'linux': |
| 225 return subprocess.check_output(['ip', 'addr']).splitlines() | 225 return subprocess.check_output(['ip', 'addr']).splitlines() |
| 226 if host_platform == 'mac': | 226 if host_platform == 'mac': |
| 227 return subprocess.check_output(['ifconfig']).splitlines() | 227 return subprocess.check_output(['ifconfig']).splitlines() |
| 228 raise NotImplementedError('Platform %s not supported!' % host_platform) | 228 raise NotImplementedError('Platform %s not supported!' % host_platform) |
| 229 | 229 |
| 230 def _FindHostRndisInterface(self): | 230 def _FindHostRndisInterface(self): |
| 231 """Returns the name of the host-side network interface.""" | 231 """Returns the name of the host-side network interface.""" |
| 232 interface_list = self._EnumerateHostInterfaces() | 232 interface_list = self._EnumerateHostInterfaces() |
| 233 ether_address = self._device.ReadFile( | 233 ether_address = self._device.ReadFile( |
| 234 '%s/f_rndis/ethaddr' % self._RNDIS_DEVICE)[0] | 234 '%s/f_rndis/ethaddr' % self._RNDIS_DEVICE).strip() |
| 235 interface_name = None | 235 interface_name = None |
| 236 for line in interface_list: | 236 for line in interface_list: |
| 237 if not line.startswith((' ', '\t')): | 237 if not line.startswith((' ', '\t')): |
| 238 interface_name = line.split(':')[-2].strip() | 238 interface_name = line.split(':')[-2].strip() |
| 239 elif ether_address in line: | 239 elif ether_address in line: |
| 240 return interface_name | 240 return interface_name |
| 241 | 241 |
| 242 def _WriteProtectedFile(self, file_path, contents): | 242 def _WriteProtectedFile(self, file_path, contents): |
| 243 subprocess.check_call( | 243 subprocess.check_call( |
| 244 ['/usr/bin/sudo', 'bash', '-c', | 244 ['/usr/bin/sudo', 'bash', '-c', |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 } | 315 } |
| 316 | 316 |
| 317 doit & | 317 doit & |
| 318 """ % {'dev': self._RNDIS_DEVICE, 'functions': 'rndis,adb', | 318 """ % {'dev': self._RNDIS_DEVICE, 'functions': 'rndis,adb', |
| 319 'prefix': script_prefix} | 319 'prefix': script_prefix} |
| 320 self._device.WriteFile('%s.sh' % script_prefix, script) | 320 self._device.WriteFile('%s.sh' % script_prefix, script) |
| 321 # TODO(szym): run via su -c if necessary. | 321 # TODO(szym): run via su -c if necessary. |
| 322 self._device.RunShellCommand('rm %s.log' % script_prefix) | 322 self._device.RunShellCommand('rm %s.log' % script_prefix) |
| 323 self._device.RunShellCommand('. %s.sh' % script_prefix) | 323 self._device.RunShellCommand('. %s.sh' % script_prefix) |
| 324 self._WaitForDevice() | 324 self._WaitForDevice() |
| 325 result = self._device.ReadFile('%s.log' % script_prefix) | 325 result = self._device.ReadFile('%s.log' % script_prefix).splitlines() |
| 326 assert any('DONE' in line for line in result), 'RNDIS script did not run!' | 326 assert any('DONE' in line for line in result), 'RNDIS script did not run!' |
| 327 | 327 |
| 328 def _CheckEnableRndis(self, force): | 328 def _CheckEnableRndis(self, force): |
| 329 """Enables the RNDIS network interface, retrying if necessary. | 329 """Enables the RNDIS network interface, retrying if necessary. |
| 330 Args: | 330 Args: |
| 331 force: Disable RNDIS first, even if it appears already enabled. | 331 force: Disable RNDIS first, even if it appears already enabled. |
| 332 Returns: | 332 Returns: |
| 333 device_iface: RNDIS interface name on the device | 333 device_iface: RNDIS interface name on the device |
| 334 host_iface: corresponding interface name on the host | 334 host_iface: corresponding interface name on the host |
| 335 """ | 335 """ |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 device_iface, host_iface = self._CheckEnableRndis(force) | 522 device_iface, host_iface = self._CheckEnableRndis(force) |
| 523 self._ConfigureNetwork(device_iface, host_iface) | 523 self._ConfigureNetwork(device_iface, host_iface) |
| 524 self.OverrideRoutingPolicy() | 524 self.OverrideRoutingPolicy() |
| 525 # Sometimes the first packet will wake up the connection. | 525 # Sometimes the first packet will wake up the connection. |
| 526 for _ in range(3): | 526 for _ in range(3): |
| 527 if self._TestConnectivity(): | 527 if self._TestConnectivity(): |
| 528 return | 528 return |
| 529 force = True | 529 force = True |
| 530 self.RestoreRoutingPolicy() | 530 self.RestoreRoutingPolicy() |
| 531 raise Exception('No connectivity, giving up.') | 531 raise Exception('No connectivity, giving up.') |
| OLD | NEW |