From: Adrian Freihofer <[email protected]> QemuRunner needs use_slirp=True to parse the guest IP address from the hostfwd=tcp: entry in the QEMU command line rather than from the TAP-style ip= kernel argument. QemuRunner is constructed before the runqemuparams are known, so use_slirp defaults to False.
Set self.runner.use_slirp = True in QemuTarget.start() when 'slirp' appears in runqemuparams, before calling the runner. This is the earliest point at which runqemuparams is available and is the natural place to propagate mode flags to the already-constructed runner. Signed-off-by: Adrian Freihofer <[email protected]> --- meta/lib/oeqa/targetcontrol.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py index fa6b43bb35..1deea2e5ce 100644 --- a/meta/lib/oeqa/targetcontrol.py +++ b/meta/lib/oeqa/targetcontrol.py @@ -24,6 +24,7 @@ class BaseTarget(object, metaclass=ABCMeta): def __init__(self, d, logger): self.connection = None self.ip = None + self.port = None self.server_ip = None self.datetime = d.getVar('DATETIME') self.testdir = d.getVar("TEST_LOG_DIR") @@ -163,6 +164,8 @@ class QemuTarget(BaseTarget): super(QemuTarget, self).deploy() def start(self, params=None, ssh=True, extra_bootparams='', runqemuparams='', launch_cmd='', discard_writes=True): + if 'slirp' in runqemuparams.split(): + self.runner.use_slirp = True if launch_cmd: start = self.runner.launch(get_ip=ssh, launch_cmd=launch_cmd, qemuparams=params) else: @@ -171,8 +174,16 @@ class QemuTarget(BaseTarget): if start: if ssh: self.ip = self.runner.ip + self.port = None + if self.runner.use_slirp: + # In slirp mode the runner's ip is "host:port" + ip_port = self.runner.ip.split(':') + if len(ip_port) == 2: + self.ip, self.port = ip_port + else: + self.logger.error("Could not get host machine port to connect qemu with slirp, ssh will not be able to connect to qemu with slirp") self.server_ip = self.runner.server_ip - self.connection = SSHControl(ip=self.ip, logfile=self.sshlog) + self.connection = SSHControl(ip=self.ip, logfile=self.sshlog, port=self.port) else: self.stop() if os.path.exists(self.qemulog): @@ -192,13 +203,21 @@ class QemuTarget(BaseTarget): self.loggerhandler.close() self.connection = None self.ip = None + self.port = None self.server_ip = None def restart(self, params=None): if self.runner.restart(params): self.ip = self.runner.ip + self.port = None + if self.runner.use_slirp: + ip_port = self.runner.ip.split(':') + if len(ip_port) == 2: + self.ip, self.port = ip_port + else: + self.logger.error("Could not get host machine port to connect qemu with slirp, ssh will not be able to connect to qemu with slirp") self.server_ip = self.runner.server_ip - self.connection = SSHControl(ip=self.ip, logfile=self.sshlog) + self.connection = SSHControl(ip=self.ip, logfile=self.sshlog, port=self.port) else: raise RuntimeError("%s - FAILED to re-start qemu - check the task log and the boot log" % self.pn) -- 2.55.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#244700): https://lists.openembedded.org/g/openembedded-core/message/244700 Mute This Topic: https://lists.openembedded.org/mt/121005235/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
