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
[email protected]
http://layerboom.com
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html