From 3858db5b77c738915ebd119fca130647c5f68bac Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Sun, 5 May 2024 22:17:37 +0200 Subject: [PATCH] qemudriver: add support for netdev option in `add_port_forward` In case there are more `user` network interfaces defined, allow to specific the netdev. If omitted, an empty string is passed and the behaviour is like before. This is useful for testing OpenWrt inside a QEMU instance, since OpenWrt expects by default a LAN interface on eth0 and a WAN interface (with uplink) on eth1. Previously the port forward would always be added to eth1, which doesn't support SSH due to firewall policies. By adding the netdev to the forward function, the SSHDriver works as expected. Signed-off-by: Paul Spooren --- CHANGES.rst | 4 ++++ labgrid/driver/qemudriver.py | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 25e699250..e90648f6d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -14,6 +14,10 @@ New Features in 24.0 used to pass additional options for the disk directly to QEMU - labgrid-client now has a ``write-files`` subcommand to copy files onto mass storage devices. +- The `QEMUDriver` now supports a ``netdev`` argumet which can be added to the + ``tadd_port_forward`` in case there are more than one network interfaces + defined. + Bug fixes in 24.0 ~~~~~~~~~~~~~~~~~ diff --git a/labgrid/driver/qemudriver.py b/labgrid/driver/qemudriver.py index c151125d9..3b0d7160c 100644 --- a/labgrid/driver/qemudriver.py +++ b/labgrid/driver/qemudriver.py @@ -310,15 +310,15 @@ def monitor_command(self, command, arguments={}): "Can't use monitor command on non-running target") return self.qmp.execute(command, arguments) - def _add_port_forward(self, proto, local_address, local_port, remote_address, remote_port): + def _add_port_forward(self, proto, local_address, local_port, remote_address, remote_port, netdev): self.monitor_command( "human-monitor-command", - {"command-line": f"hostfwd_add {proto}:{local_address}:{local_port}-{remote_address}:{remote_port}"}, + {"command-line": f"hostfwd_add {netdev} {proto}:{local_address}:{local_port}-{remote_address}:{remote_port}" }, ) - def add_port_forward(self, proto, local_address, local_port, remote_address, remote_port): - self._add_port_forward(proto, local_address, local_port, remote_address, remote_port) - self._forwarded_ports[(proto, local_address, local_port)] = (proto, local_address, local_port, remote_address, remote_port) + def add_port_forward(self, proto, local_address, local_port, remote_address, remote_port, netdev=""): + self._add_port_forward(proto, local_address, local_port, remote_address, remote_port, netdev) + self._forwarded_ports[(proto, local_address, local_port)] = (proto, local_address, local_port, remote_address, remote_port, netdev) def remove_port_forward(self, proto, local_address, local_port): del self._forwarded_ports[(proto, local_address, local_port)]