On Tue, Dec 15, 2009 at 03:14:42PM +0000, Daniel P. Berrange wrote: > The current character device syntax uses either > > -serial tty,path=/dev/ttyS2 > > Or > > -chardev tty,id=serial0,path=/dev/ttyS2 -serial chardev:serial0 > > With the new -device support, we now prefer > > -chardev file,id=serial0,path=/tmp/serial.log -device isa-serial,chardev=serial0 > > This patch changes the existing -chardev syntax to use this new > scheme, and fallbacks to the old plain -serial syntax for old > QEMU. > > The monitor device changes to > > -chardev socket,id=monitor,path=/tmp/test-monitor,server,nowait -mon chardev=monitor > > In addition, this patch adds --nodefaults, which kills off the > default serial, parallel, vga and nic devices. THis avoids the > need for us to explicitly turn each off > --- > src/qemu/qemu_conf.c | 74 +++++++++++++------- > src/qemu/qemu_conf.h | 1 + > .../qemuxml2argv-channel-guestfwd.args | 2 +- > .../qemuxml2argv-console-compat-chardev.args | 2 +- > .../qemuxml2argv-parallel-tcp-chardev.args | 2 +- > .../qemuxml2argv-serial-dev-chardev.args | 2 +- > .../qemuxml2argv-serial-file-chardev.args | 2 +- > .../qemuxml2argv-serial-many-chardev.args | 2 +- > .../qemuxml2argv-serial-pty-chardev.args | 2 +- > .../qemuxml2argv-serial-tcp-chardev.args | 2 +- > .../qemuxml2argv-serial-tcp-telnet-chardev.args | 2 +- > .../qemuxml2argv-serial-udp-chardev.args | 2 +- > .../qemuxml2argv-serial-unix-chardev.args | 2 +- > .../qemuxml2argv-serial-vc-chardev.args | 2 +- > tests/qemuxml2argvtest.c | 26 ++++---- > 15 files changed, 74 insertions(+), 51 deletions(-) > > diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c > index 61e719d..16e8d2c 100644 > --- a/src/qemu/qemu_conf.c > +++ b/src/qemu/qemu_conf.c > @@ -909,6 +909,8 @@ static unsigned int qemudComputeCmdFlags(const char *help, > flags |= QEMUD_CMD_FLAG_MEM_PATH; > if (strstr(help, "-chardev")) > flags |= QEMUD_CMD_FLAG_CHARDEV; > + if (strstr(help, "-device")) > + flags |= QEMUD_CMD_FLAG_DEVICE; hum ... shouldn't we look for a space of some sort after the option strings, to make sure we match the right string. Not specific to this but might be safer. > if (version >= 9000) > flags |= QEMUD_CMD_FLAG_VNC_COLON; > @@ -1945,6 +1947,9 @@ int qemudBuildCommandLine(virConnectPtr conn, > if (!def->graphics) > ADD_ARG_LIT("-nographic"); > > + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) > + ADD_ARG_LIT("-nodefaults"); > + > if (monitor_chr) { > virBuffer buf = VIR_BUFFER_INITIALIZER; > > @@ -1959,26 +1964,32 @@ int qemudBuildCommandLine(virConnectPtr conn, > ADD_ARG_LIT("-chardev"); > ADD_ARG(virBufferContentAndReset(&buf)); > > - if (monitor_json) > - virBufferAddLit(&buf, "control,"); > + virBufferAddLit(&buf, "chardev=monitor"); > > - virBufferAddLit(&buf, "chardev:monitor"); > - } > + if (virBufferError(&buf)) { > + virBufferFreeAndReset(&buf); > + goto no_memory; > + } > > - else { > + ADD_ARG_LIT("-mon"); > + if (monitor_json) > + ADD_ARG_LIT("chardev=monitor,mode=control"); > + else > + ADD_ARG_LIT("chardev=monitor,mode=readline"); > + } else { > if (monitor_json) > virBufferAddLit(&buf, "control,"); > > qemudBuildCommandLineChrDevStr(monitor_chr, &buf); > - } > > - if (virBufferError(&buf)) { > - virBufferFreeAndReset(&buf); > - goto no_memory; > - } > + if (virBufferError(&buf)) { > + virBufferFreeAndReset(&buf); > + goto no_memory; > + } > > - ADD_ARG_LIT("-monitor"); > - ADD_ARG_LIT(virBufferContentAndReset(&buf)); > + ADD_ARG_LIT("-monitor"); > + ADD_ARG(virBufferContentAndReset(&buf)); > + } > } > > if (def->localtime) > @@ -2172,8 +2183,11 @@ int qemudBuildCommandLine(virConnectPtr conn, > } > > if (!def->nnets) { > - ADD_ARG_LIT("-net"); > - ADD_ARG_LIT("none"); > + /* If we have -device, then we set -nodefault alrady */ > + if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { > + ADD_ARG_LIT("-net"); > + ADD_ARG_LIT("none"); > + } > } else { > for (i = 0 ; i < def->nnets ; i++) { > virDomainNetDefPtr net = def->nets[i]; > @@ -2232,15 +2246,19 @@ int qemudBuildCommandLine(virConnectPtr conn, > } > > if (!def->nserials) { > - ADD_ARG_LIT("-serial"); > - ADD_ARG_LIT("none"); > + /* If we have -device, then we set -nodefault alrady */ > + if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { > + ADD_ARG_LIT("-serial"); > + ADD_ARG_LIT("none"); > + } > } else { > for (i = 0 ; i < def->nserials ; i++) { > virBuffer buf = VIR_BUFFER_INITIALIZER; > virDomainChrDefPtr serial = def->serials[i]; > > - /* Use -chardev if it's available */ > - if (qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) { > + /* Use -chardev with -device if they are available */ > + if ((qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) && > + (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { > char id[16]; > > if (snprintf(id, sizeof(id), "serial%i", i) > sizeof(id)) > @@ -2255,13 +2273,13 @@ int qemudBuildCommandLine(virConnectPtr conn, > ADD_ARG_LIT("-chardev"); > ADD_ARG(virBufferContentAndReset(&buf)); > > - virBufferVSprintf(&buf, "chardev:%s", id); > + virBufferVSprintf(&buf, "isa-serial,chardev=%s", id); > if (virBufferError(&buf)) { > virBufferFreeAndReset(&buf); > goto no_memory; > } > > - ADD_ARG_LIT("-serial"); > + ADD_ARG_LIT("-device"); > ADD_ARG(virBufferContentAndReset(&buf)); > } > > @@ -2279,15 +2297,19 @@ int qemudBuildCommandLine(virConnectPtr conn, > } > > if (!def->nparallels) { > - ADD_ARG_LIT("-parallel"); > - ADD_ARG_LIT("none"); > + /* If we have -device, then we set -nodefault alrady */ > + if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { > + ADD_ARG_LIT("-parallel"); > + ADD_ARG_LIT("none"); > + } > } else { > for (i = 0 ; i < def->nparallels ; i++) { > virBuffer buf = VIR_BUFFER_INITIALIZER; > virDomainChrDefPtr parallel = def->parallels[i]; > > - /* Use -chardev if it's available */ > - if (qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) { > + /* Use -chardev with -device if they are available */ > + if ((qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) && > + (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { > char id[16]; > > if (snprintf(id, sizeof(id), "parallel%i", i) > sizeof(id)) > @@ -2302,13 +2324,13 @@ int qemudBuildCommandLine(virConnectPtr conn, > ADD_ARG_LIT("-chardev"); > ADD_ARG(virBufferContentAndReset(&buf)); > > - virBufferVSprintf(&buf, "chardev:%s", id); > + virBufferVSprintf(&buf, "isa-parallel,chardev=%s", id); > if (virBufferError(&buf)) { > virBufferFreeAndReset(&buf); > goto no_memory; > } > > - ADD_ARG_LIT("-parallel"); > + ADD_ARG_LIT("-device"); > ADD_ARG(virBufferContentAndReset(&buf)); > } > > diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h > index cd59d4c..840b749 100644 > --- a/src/qemu/qemu_conf.h > +++ b/src/qemu/qemu_conf.h > @@ -76,6 +76,7 @@ enum qemud_cmd_flags { > QEMUD_CMD_FLAG_ENABLE_KVM = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */ > QEMUD_CMD_FLAG_0_12 = (1 << 24), > QEMUD_CMD_FLAG_MONITOR_JSON = QEMUD_CMD_FLAG_0_12, /* JSON mode for monitor */ > + QEMUD_CMD_FLAG_DEVICE = (1 << 25), /* Is the new -chardev arg available */ > }; > > /* Main driver state */ I'm starting to worry about exhausting the enum size ... we are getting close, and something allowing for the continuous expansion of QEmu options will be needed soon ! ACK Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list