| Index: server/site_wifitest.py
|
| diff --git a/server/site_wifitest.py b/server/site_wifitest.py
|
| index e05f303334b749fa3395df7f5d313fd017f42114..6ddcf0af67a0cd679c8fe35267f118a6f3b503f7 100644
|
| --- a/server/site_wifitest.py
|
| +++ b/server/site_wifitest.py
|
| @@ -9,6 +9,7 @@ from autotest_lib.server import site_bsd_router
|
| from autotest_lib.server import site_linux_router
|
| from autotest_lib.server import site_linux_server
|
| from autotest_lib.server import site_host_attributes
|
| +from autotest_lib.server import site_host_route
|
| from autotest_lib.server import site_eap_certs
|
| from autotest_lib.server import test
|
| from autotest_lib.client.common_lib import error
|
| @@ -154,6 +155,7 @@ class WiFiTest(object):
|
| self.__client_discover_commands(client)
|
| self.profile_save({})
|
| self.firewall_rules = []
|
| + self.host_route_args = {}
|
|
|
| # interface name on client
|
| self.client_wlanif = client.get('wlandev',
|
| @@ -177,6 +179,7 @@ class WiFiTest(object):
|
| self.profile_cleanup({})
|
| self.client_netdump_stop({})
|
| self.firewall_cleanup({})
|
| + self.host_route_cleanup({})
|
|
|
|
|
| def __must_be_installed(self, host, cmd):
|
| @@ -1230,6 +1233,11 @@ class WiFiTest(object):
|
| # Must get 'ca_certificate', 'client-certificate' and 'client-key'.
|
| cert_pathnames = params.get('files', {})
|
|
|
| + # Starting up the VPN client may cause the DUT's routing table (esp.
|
| + # the default route) to change. Set up a host route backwards so
|
| + # we don't lose our control connection in that event.
|
| + __add_host_route(self.client)
|
| +
|
| if self.vpn_kind is None:
|
| raise error.TestFail('No VPN kind specified for this test.')
|
| elif self.vpn_kind == 'openvpn':
|
| @@ -1268,6 +1276,32 @@ class WiFiTest(object):
|
| 'for VPN kind (%s)' % self.vpn_kind)
|
| self.vpn_kind = None
|
|
|
| + __del_host_route(self.client)
|
| +
|
| + def __add_host_route(self, host):
|
| + # What is the local address we use to get to the test host?
|
| + local_ip = site_host_route.LocalHostRoute(host.ip).route_info["src"]
|
| +
|
| + # How does the test host currently get to this local address?
|
| + host_route = site_host_route.RemoteHostRoute(host, local_ip).route_info
|
| +
|
| + # Flatten the returned dict into a single string
|
| + route_args = " ".join(" ".join(x) for x in host_route.iteritems())
|
| +
|
| + self.host_route_args[host.ip] = "%s %s" % (local_ip, route_args)
|
| + host.run("ip route add %s" % self.host_route_args[host.ip])
|
| +
|
| + def __del_host_route(self, host):
|
| + if host.ip not in self.host_route_args:
|
| + return
|
| +
|
| + host.run("ip route del %s" % self.host_route_args.pop(host.ip))
|
| +
|
| + def host_route_cleanup(self, params):
|
| + for host in (self.client, self.server, self.router):
|
| + self.__del_host_route(host)
|
| +
|
| +
|
| class HelperThread(threading.Thread):
|
| # Class that wraps a ping command in a thread so it can run in the bg.
|
| def __init__(self, client, cmd):
|
|
|