From f77dde9b7e6498c24348587fa9dc85950459b3f2 Mon Sep 17 00:00:00 2001 From: Arthur Sengileyev Date: Mon, 14 Apr 2025 23:34:10 +0300 Subject: [PATCH] Allow drivers to negotiate transport independent of hostagent Hostagent will agree to whatever driver returns as a transport via BaseDriver interface. Signed-off-by: Arthur Sengileyev --- pkg/hostagent/hostagent.go | 26 ++++++-------------------- pkg/qemu/qemu_driver.go | 7 +++++++ pkg/vz/vz_driver_darwin.go | 2 ++ pkg/wsl2/wsl_driver_windows.go | 7 +++++++ 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/pkg/hostagent/hostagent.go b/pkg/hostagent/hostagent.go index 248e76bd882..5c5c4e62e15 100644 --- a/pkg/hostagent/hostagent.go +++ b/pkg/hostagent/hostagent.go @@ -123,20 +123,13 @@ func New(instName string, stdout io.Writer, signalCh chan os.Signal, opts ...Opt } } - vSockPort := 0 - virtioPort := "" - if *inst.Config.VMType == limayaml.VZ { - vSockPort = 2222 - } else if *inst.Config.VMType == limayaml.WSL2 { - port, err := freeport.VSock() - if err != nil { - logrus.WithError(err).Error("failed to get free VSock port") - } - vSockPort = port - } else if *inst.Config.VMType == limayaml.QEMU { - // virtserialport doesn't seem to work reliably: https://github.com/lima-vm/lima/issues/2064 - virtioPort = "" // filenames.VirtioPort + baseDriver := driver.BaseDriver{ + Instance: inst, + SSHLocalPort: sshLocalPort, } + limaDriver := driverutil.CreateTargetDriverInstance(&baseDriver) + vSockPort := baseDriver.VSockPort + virtioPort := baseDriver.VirtioPort if err := cidata.GenerateCloudConfig(inst.Dir, instName, inst.Config); err != nil { return nil, err @@ -196,13 +189,6 @@ func New(instName string, stdout io.Writer, signalCh chan os.Signal, opts ...Opt limayaml.FillPortForwardDefaults(&rule, inst.Dir, inst.Config.User, inst.Param) rules = append(rules, rule) - limaDriver := driverutil.CreateTargetDriverInstance(&driver.BaseDriver{ - Instance: inst, - SSHLocalPort: sshLocalPort, - VSockPort: vSockPort, - VirtioPort: virtioPort, - }) - a := &HostAgent{ instConfig: inst.Config, sshLocalPort: sshLocalPort, diff --git a/pkg/qemu/qemu_driver.go b/pkg/qemu/qemu_driver.go index d29602e5e21..d4bab373605 100644 --- a/pkg/qemu/qemu_driver.go +++ b/pkg/qemu/qemu_driver.go @@ -41,6 +41,13 @@ type LimaQemuDriver struct { } func New(driver *driver.BaseDriver) *LimaQemuDriver { + driver.VSockPort = 0 + driver.VirtioPort = filenames.VirtioPort + // virtserialport doesn't seem to work reliably: https://github.com/lima-vm/lima/issues/2064 + // but on Windows default Unix socket forwarding is not available + if runtime.GOOS != "windows" { + driver.VirtioPort = "" + } return &LimaQemuDriver{ BaseDriver: driver, } diff --git a/pkg/vz/vz_driver_darwin.go b/pkg/vz/vz_driver_darwin.go index ef50a10af4a..e084bdcfb7a 100644 --- a/pkg/vz/vz_driver_darwin.go +++ b/pkg/vz/vz_driver_darwin.go @@ -72,6 +72,8 @@ type LimaVzDriver struct { } func New(driver *driver.BaseDriver) *LimaVzDriver { + driver.VSockPort = 2222 + driver.VirtioPort = "" return &LimaVzDriver{ BaseDriver: driver, } diff --git a/pkg/wsl2/wsl_driver_windows.go b/pkg/wsl2/wsl_driver_windows.go index 5adcb5ed8ff..318f80b3819 100644 --- a/pkg/wsl2/wsl_driver_windows.go +++ b/pkg/wsl2/wsl_driver_windows.go @@ -12,6 +12,7 @@ import ( "github.com/Microsoft/go-winio" "github.com/Microsoft/go-winio/pkg/guid" "github.com/lima-vm/lima/pkg/driver" + "github.com/lima-vm/lima/pkg/freeport" "github.com/lima-vm/lima/pkg/limayaml" "github.com/lima-vm/lima/pkg/reflectutil" "github.com/lima-vm/lima/pkg/store" @@ -49,6 +50,12 @@ type LimaWslDriver struct { } func New(driver *driver.BaseDriver) *LimaWslDriver { + port, err := freeport.VSock() + if err != nil { + logrus.WithError(err).Error("failed to get free VSock port") + } + driver.VSockPort = port + driver.VirtioPort = "" return &LimaWslDriver{ BaseDriver: driver, }