From e0651b1db7705940981dd5d3b37b43126690e914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Tue, 23 Apr 2019 19:48:45 +0200 Subject: [PATCH] Use the newer -netdev option instead of -net vlan The "vlan" is no longer supported in Qemu version 3.0 and beyond, but the -netdev already works with Qemu 2.x so make it the default. Provide an option, just in case someone needs the old parameter... (As usual, probably that means nobody except for old RHEL releases) --- drivers/qemu/qemu.go | 59 ++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/drivers/qemu/qemu.go b/drivers/qemu/qemu.go index 82513fe..02e48db 100644 --- a/drivers/qemu/qemu.go +++ b/drivers/qemu/qemu.go @@ -42,6 +42,7 @@ type Driver struct { Program string Display bool DisplayType string + NetVlan bool Nographic bool VirtioDrives bool Network string @@ -95,6 +96,10 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { Name: "qemu-display-type", Usage: "Select type of display", }, + mcnflag.BoolFlag{ + Name: "qemu-net-vlan", + Usage: "Use -net vlan instead of -netdev", + }, mcnflag.BoolFlag{ Name: "qemu-nographic", Usage: "Use -nographic instead of -display none", @@ -200,6 +205,7 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.Program = flags.String("qemu-program") d.Display = flags.Bool("qemu-display") d.DisplayType = flags.String("qemu-display-type") + d.NetVlan = flags.Bool("qemu-net-vlan") d.Nographic = flags.Bool("qemu-nographic") d.VirtioDrives = flags.Bool("qemu-virtio-drives") d.Network = flags.String("qemu-network") @@ -454,23 +460,44 @@ func (d *Driver) Start() error { "-pidfile", d.pidfilePath(), ) - if d.Network == "user" { - startCmd = append(startCmd, - "-net", "nic,vlan=0,model=virtio", - "-net", fmt.Sprintf("user,vlan=0,hostfwd=tcp::%d-:22,hostname=%s", d.SSHPort, d.GetMachineName()), - ) - } else if d.Network == "tap" { - startCmd = append(startCmd, - "-net", "nic,vlan=0,model=virtio", - "-net", fmt.Sprintf("tap,vlan=0,ifname=%s,script=no,downscript=no", d.NetworkInterface), - ) - } else if d.Network == "bridge" { - startCmd = append(startCmd, - "-net", "nic,vlan=0,model=virtio", - "-net", fmt.Sprintf("bridge,vlan=0,br=%s", d.NetworkBridge), - ) + if d.NetVlan { + if d.Network == "user" { + startCmd = append(startCmd, + "-net", "nic,vlan=0,model=virtio", + "-net", fmt.Sprintf("user,vlan=0,hostfwd=tcp::%d-:22,hostname=%s", d.SSHPort, d.GetMachineName()), + ) + } else if d.Network == "tap" { + startCmd = append(startCmd, + "-net", "nic,vlan=0,model=virtio", + "-net", fmt.Sprintf("tap,vlan=0,ifname=%s,script=no,downscript=no", d.NetworkInterface), + ) + } else if d.Network == "bridge" { + startCmd = append(startCmd, + "-net", "nic,vlan=0,model=virtio", + "-net", fmt.Sprintf("bridge,vlan=0,br=%s", d.NetworkBridge), + ) + } else { + log.Errorf("Unknown network: %s", d.Network) + } } else { - log.Errorf("Unknown network: %s", d.Network) + if d.Network == "user" { + startCmd = append(startCmd, + "-device", "virtio-net,netdev=n0", + "-netdev", fmt.Sprintf("user,id=n0,hostfwd=tcp::%d-:22,hostname=%s", d.SSHPort, d.GetMachineName()), + ) + } else if d.Network == "tap" { + startCmd = append(startCmd, + "-device", "virtio-net,netdev=n0", + "-netdev", fmt.Sprintf("tap,id=n0,ifname=%s,script=no,downscript=no", d.NetworkInterface), + ) + } else if d.Network == "bridge" { + startCmd = append(startCmd, + "-device", "virtio-net,netdev=n0", + "-netdev", fmt.Sprintf("bridge,id=n0,br=%s", d.NetworkBridge), + ) + } else { + log.Errorf("Unknown network: %s", d.Network) + } } startCmd = append(startCmd, "-daemonize")