blob: 1d13d3b6eb81aacaeb0e978f2ed5252619a69cb6 [file] [log] [blame]
# Copyright (c) 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Interface to RF Switch over SSH tunnel.
This helper will help with communicating to a RF Switch which is behind
a firewall and can be accessed through a SSH tunnel. Please make sure you
can login to SSH Tunnel machine without a password by configuring the ssh
pub keys.
/|
/ |
/ |
| |
+---------+ | | +--------+ +--------+
| | | | | | | |
| Test +-----| -------+ SSH +------+ RF |
| Machine | | | | Tunnel | | Switch |
| | | | | | | |
+---------+ | | +--------+ +--------+
| /
| /
|/
Firewall
"""
import contextlib
from autotest_lib.server.cros.network.rf_switch import rf_switch
from autotest_lib.server.cros.network.rf_switch import scpi
from autotest_lib.server.cros.network.rf_switch import scpi_ssh_tunnel
class RfSwitchSshTunnel(scpi_ssh_tunnel.ScpiSshTunnel, rf_switch.RfSwitch):
"""RF Switch handler over ssh tunnel."""
def __init__(self,
host,
proxy_host,
proxy_username,
port=scpi_ssh_tunnel.ScpiSshTunnel.SCPI_PORT,
proxy_port=None):
"""
RF Switch with a proxy server.
@param host: Hostname or IP address of RF Switch
@param proxy_host: Hostname or IP address of SSH tunnel device
@param proxy_username: Username for SSH tunnel device
@param port: SCPI port on device (default 5025)
@param proxy_port: port number to bind for SSH tunnel
"""
self.host = host
self.port = port
self.proxy_host = proxy_host
self.proxy_username = proxy_username
self.proxy_port = proxy_port
scpi_ssh_tunnel.ScpiSshTunnel.__init__(
self,
host=self.host,
port=self.port,
proxy_host=self.proxy_host,
proxy_username=self.proxy_username,
proxy_port=self.proxy_port)
@contextlib.contextmanager
def RfSwitchSshTunnelSession(host,
proxy_host,
proxy_username,
port=scpi.Scpi.SCPI_PORT,
proxy_port=None):
"""Start a RF Switch with ssh tunnel session and close it when done.
RF Switch with a proxy server.
@param host: Hostname or IP address of RF Switch
@param proxy_host: Hostname or IP address of SSH tunnel device
@param proxy_username: Username for SSH tunnel device
@param port: SCPI port on device (default 5025)
@param proxy_port: port number to bind for SSH tunnel
@yields: an instance of InteractiveSsh
"""
session = RfSwitchSshTunnel(host=host,
proxy_host=proxy_host,
proxy_username=proxy_username,
port=port,
proxy_port=proxy_port)
try:
yield session
finally:
session.close()