BUG REPORT: -net tap,fd=X does not work correctly in kvm-86

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We are doing work with libvirt 0.6.3 through which we have started
virtual machines.  Using the same "create" command with the same
storage, the same everything else this configuration works with both
kvm-84 and kvm-85.  When I built a fresh version of kvm-86 this
stopped working with an error:

qemu: invalid parameter '15' in 'fd=15,script=,vlan=0,ifname=vnet0'

The full execve() being used in this case by libvirtd is:

execve("/usr/bin/kvm", ["/usr/bin/kvm", "-S", "-M", "pc", "-m", "512",
"-smp", "1", "-name", "ubuntu-vm", "-uuid",
"2100444e-4f16-f9f4-a6df-b6cac95c55b5", "-monitor", "pty", "-pidfile",
"/var/run/libvirt/qemu//ubuntu-vm.pid", "-boot", "c", "-drive",
"file=/dev/disk/by-path/ip-192.168.50.3:3260-iscsi-iqn.1986-03.com.sun:02:3985d229-59f7-e8a6-ff10-e0a68cf3567f-lun-0,if=virtio,index=0,boot=on",
"-drive", "file=,if=virtio,media=cdrom,index=2", "-net",
"nic,macaddr=54:52:00:27:36:cd,vlan=0,model=virtio", "-net",
"tap,fd=15,script=,vlan=0,ifname=vnet0", "-serial", "pty",
"-parallel", "none", "-usb", "-vnc", "127.0.0.1:0", "-k", "en-us"],
[/* 5 vars */]) = 0

I took a quick look at the code and found this section which changed
between kvm-85 and kvm-86:

--- kvm-85/kvm/net.c    2009-04-21 02:57:31.000000000 -0700
+++ kvm-86/net.c        2009-05-19 09:29:02.000000000 -0700
@@ -1887,13 +2100,24 @@
         int fd;
         vlan->nb_host_devs++;
         if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
+            if (check_params(fd_params, p) < 0) {
+                fprintf(stderr, "qemu: invalid parameter '%s' in '%s'\n",
+                        buf, p);
+                return -1;
+            }
             fd = strtol(buf, NULL, 0);
             fcntl(fd, F_SETFL, O_NONBLOCK);
-            ret = -1;
-                if (net_tap_fd_init(vlan, device, name, fd,
-                                    tap_probe_vnet_hdr(fd)))
-                ret = 0;
+                net_tap_fd_init(vlan, device, name, fd,
tap_probe_vnet_hdr(fd));
+            ret = 0;
         } else {
+            static const char * const tap_params[] = {
+                "vlan", "name", "ifname", "script", "downscript", NULL
+            };
+            if (check_params(tap_params, p) < 0) {
+                fprintf(stderr, "qemu: invalid parameter '%s' in '%s'\n",
+                        buf, p);
+                return -1;
+            }
             if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) {
                 ifname[0] = '\0';
             }


When I comment out the check:

+            if (check_params(fd_params, p) < 0) {
+                fprintf(stderr, "qemu: invalid parameter '%s' in '%s'\n",
+                        buf, p);
+                return -1;
+            }

after the first get_param_value this command line works again (though
it seems the networking may not).

Thanks,
Josh

--
Josh Wilsdon
LayerBoom Systems
joshw@xxxxxxxxxxxxx
http://layerboom.com
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux