Hi On Wed, May 11, 2016 at 5:08 PM, Pavel Hrdina <phrdina@xxxxxxxxxx> wrote: > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > --- > docs/formatdomain.html.in | 2 +- > src/conf/domain_conf.c | 33 +++-- > src/qemu/qemu_command.c | 157 +++++++++++---------- > src/qemu/qemu_migration.c | 50 ++++--- > .../qemuxml2argv-graphics-spice-auto-socket.args | 20 +++ > .../qemuxml2argv-graphics-spice-auto-socket.xml | 30 ++++ > .../qemuxml2argv-graphics-spice-socket.args | 20 +++ > .../qemuxml2argv-graphics-spice-socket.xml | 30 ++++ > tests/qemuxml2argvtest.c | 6 + > .../qemuxml2xmlout-graphics-spice-auto-socket.xml | 35 +++++ > .../qemuxml2xmlout-graphics-spice-socket.xml | 35 +++++ > tests/qemuxml2xmltest.c | 2 + > 12 files changed, 313 insertions(+), 107 deletions(-) > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.xml > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.xml > create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-auto-socket.xml > create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-socket.xml > > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index f67076d..8f3e17f 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -5365,7 +5365,7 @@ qemu-kvm -net nic,model=? /dev/null > This listen type tells a graphics server to listen on unix socket. > Attribute <code>socket</code> contains a path to unix socket. If this > attribute is omitted libvirt will generate this path for you. > - Supported by graphics type <code>vnc</code>. > + Supported by graphics type <code>vnc</code> and <code>spice</code>. > </p> > <p> > For <code>vnc</code> graphics be backward compatible > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index fd071e1..86b211c 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -10810,7 +10810,8 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDefPtr def, > def->type = typeVal; > > if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET && > - graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) { > + graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC && > + graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > _("listen type 'socket' is not available for " > "graphics type '%s'"), graphicsType); > @@ -21589,19 +21590,29 @@ virDomainGraphicsDefFormat(virBufferPtr buf, > break; > > case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: > - if (glisten->port) > - virBufferAsprintf(buf, " port='%d'", > - glisten->port); > + switch (glisten->type) { > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: > + if (glisten->port) > + virBufferAsprintf(buf, " port='%d'", > + glisten->port); > > - if (glisten->tlsPort) > - virBufferAsprintf(buf, " tlsPort='%d'", > - glisten->tlsPort); > + if (glisten->tlsPort) > + virBufferAsprintf(buf, " tlsPort='%d'", > + glisten->tlsPort); > > - virBufferAsprintf(buf, " autoport='%s'", > - glisten->autoport ? "yes" : "no"); > + virBufferAsprintf(buf, " autoport='%s'", > + glisten->autoport ? "yes" : "no"); > > - if (glisten->address && !glisten->fromConfig) > - virBufferAsprintf(buf, " listen='%s'", glisten->address); > + if (glisten->address && !glisten->fromConfig) > + virBufferAsprintf(buf, " listen='%s'", glisten->address); > + break; > + > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: > + break; > + } > > if (def->data.spice.keymap) > virBufferEscapeString(buf, " keymap='%s'", > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 13df7cb..b911076 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -7538,6 +7538,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, > int ret; > int defaultMode = graphics->data.spice.defaultMode; > size_t i; > + bool useTLS = false; > > if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > @@ -7551,69 +7552,91 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, > goto error; > } > > - if (glisten->port > 0) > - virBufferAsprintf(&opt, "port=%u,", glisten->port); > - > - if (glisten->tlsPort > 0) { > - if (!cfg->spiceTLS) { > + switch (glisten->type) { > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: > + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_UNIX)) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("spice TLS port set in XML configuration," > - " but TLS is disabled in qemu.conf")); > + _("unix socket for spice graphics are not supported " > + "with this QEMU")); > goto error; > } > - virBufferAsprintf(&opt, "tls-port=%u,", glisten->tlsPort); > - } > + virBufferAsprintf(&opt, "unix,addr=%s,", glisten->socket); > + break; > > - if (cfg->spiceSASL) { > - virBufferAddLit(&opt, "sasl,"); > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: > > - if (cfg->spiceSASLdir) > - virCommandAddEnvPair(cmd, "SASL_CONF_PATH", > - cfg->spiceSASLdir); > + if (glisten->port > 0) > + virBufferAsprintf(&opt, "port=%u,", glisten->port); > > - /* TODO: Support ACLs later */ > - } > + if (glisten->tlsPort > 0) { > + if (!cfg->spiceTLS) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("spice TLS port set in XML configuration," > + " but TLS is disabled in qemu.conf")); > + goto error; > + } > + virBufferAsprintf(&opt, "tls-port=%u,", glisten->tlsPort); > + useTLS = true; > + } > > - if (glisten->port > 0 || glisten->tlsPort > 0) { > + if (cfg->spiceSASL) { > + virBufferAddLit(&opt, "sasl,"); > > - switch (glisten->type) { > - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: > - listenAddr = glisten->address; > - break; > + if (cfg->spiceSASLdir) > + virCommandAddEnvPair(cmd, "SASL_CONF_PATH", > + cfg->spiceSASLdir); > > - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: > - if (!glisten->network) > + /* TODO: Support ACLs later */ > + } > + > + if (glisten->port > 0 || glisten->tlsPort > 0) { > + > + switch (glisten->type) { > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: > + listenAddr = glisten->address; > break; > > - ret = networkGetNetworkAddress(glisten->network, &netAddr); > - if (ret <= -2) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > - "%s", _("network-based listen not possible, " > - "network driver not present")); > - goto error; > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: > + if (!glisten->network) > + break; > + > + ret = networkGetNetworkAddress(glisten->network, &netAddr); > + if (ret <= -2) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + "%s", _("network-based listen not possible, " > + "network driver not present")); > + goto error; > + } > + if (ret < 0) > + goto error; > + > + listenAddr = netAddr; > + /* store the address we found in the <graphics> element so it will > + * show up in status. */ > + if (VIR_STRDUP(glisten->address, listenAddr) < 0) > + goto error; > + break; > + > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: > + break; > } > - if (ret < 0) > - goto error; > > - listenAddr = netAddr; > - /* store the address we found in the <graphics> element so it will > - * show up in status. */ > - if (VIR_STRDUP(glisten->address, listenAddr) < 0) > - goto error; > - break; > + if (!listenAddr) > + listenAddr = cfg->spiceListen; > + if (listenAddr) > + virBufferAsprintf(&opt, "addr=%s,", listenAddr); > > - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: > - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: > - case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: > - break; > + VIR_FREE(netAddr); > } > > - if (!listenAddr) > - listenAddr = cfg->spiceListen; > - if (listenAddr) > - virBufferAsprintf(&opt, "addr=%s,", listenAddr); > + break; > > - VIR_FREE(netAddr); > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: > + break; > } > > if (graphics->data.spice.mousemode) { > @@ -7636,11 +7659,17 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, > !cfg->spicePassword) > virBufferAddLit(&opt, "disable-ticketing,"); > > - if (glisten->tlsPort > 0) > + if (useTLS) > virBufferAsprintf(&opt, "x509-dir=%s,", cfg->spiceTLSx509certdir); > > switch (defaultMode) { > case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE: > + if (!useTLS) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("spice defaultMode secure requested in XML " > + "configuration, but TLS is not available")); > + goto error; > + } I am not quite sure about the simpification you have made to defaultMode checks. Why not put it in a previous seperate patch to make this more clear? > virBufferAddLit(&opt, "tls-channel=default,"); > break; > case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE: > @@ -7654,10 +7683,10 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, > for (i = 0; i < VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST; i++) { > switch (graphics->data.spice.channels[i]) { > case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE: > - if (glisten->tlsPort <= 0) { > + if (!useTLS) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("spice secure channels set in XML configuration, " > - "but TLS port is not provided")); > + _("spice secure channels set in XML " > + "configuration, but TLS is not available")); > goto error; > } > virBufferAsprintf(&opt, "tls-channel=%s,", > @@ -7665,40 +7694,12 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, > break; > > case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE: > - if (glisten->port <= 0) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("spice insecure channels set in XML " > - "configuration, but plain port is not provided")); > - goto error; > - } > virBufferAsprintf(&opt, "plaintext-channel=%s,", > virDomainGraphicsSpiceChannelNameTypeToString(i)); > break; > > case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY: > - switch (defaultMode) { > - case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE: > - if (glisten->tlsPort <= 0) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("spice defaultMode secure requested in XML " > - "configuration but TLS port not provided")); > - goto error; > - } > - break; > - > - case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE: > - if (glisten->port <= 0) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("spice defaultMode insecure requested in XML " > - "configuration but plain port not provided")); > - goto error; > - } > - break; > - > - case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY: > - /* don't care */ > break; > - } > } > } > > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c > index 6440cf1..9970be4 100644 > --- a/src/qemu/qemu_migration.c > +++ b/src/qemu/qemu_migration.c > @@ -315,23 +315,16 @@ qemuDomainExtractTLSSubject(const char *certdir) > > static qemuMigrationCookieGraphicsPtr > qemuMigrationCookieGraphicsSpiceAlloc(virQEMUDriverPtr driver, > - virDomainGraphicsDefPtr def) > + virDomainGraphicsListenDefPtr glisten) > { > qemuMigrationCookieGraphicsPtr mig = NULL; > const char *listenAddr; > - virDomainGraphicsListenDefPtr glisten = virDomainGraphicsGetListen(def, 0); > virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); > > if (VIR_ALLOC(mig) < 0) > goto error; > > - if (!glisten) { > - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > - _("missing listen element")); > - goto error; > - } > - > - mig->type = def->type; > + mig->type = VIR_DOMAIN_GRAPHICS_TYPE_SPICE; > mig->port = glisten->port; > if (cfg->spiceTLS) > mig->tlsPort = glisten->tlsPort; > @@ -458,14 +451,37 @@ qemuMigrationCookieAddGraphics(qemuMigrationCookiePtr mig, > } > > for (i = 0; i < dom->def->ngraphics; i++) { > - if (dom->def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { > - if (!(mig->graphics = > - qemuMigrationCookieGraphicsSpiceAlloc(driver, > - dom->def->graphics[i]))) > - return -1; > - mig->flags |= QEMU_MIGRATION_COOKIE_GRAPHICS; > - break; > - } > + if (dom->def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { > + virDomainGraphicsListenDefPtr glisten = > + virDomainGraphicsGetListen(dom->def->graphics[i], 0); > + > + if (!glisten) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("missing listen element")); > + return -1; > + } > + > + switch (glisten->type) { > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK: > + /* Seamless migration is supported only for listen types > + * 'address and 'network'. */ > + if (!(mig->graphics = > + qemuMigrationCookieGraphicsSpiceAlloc(driver, glisten))) > + return -1; > + mig->flags |= QEMU_MIGRATION_COOKIE_GRAPHICS; > + break; > + > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE: > + case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST: > + break; > + } > + > + /* Seamless migration is supported only for one graphics. */ > + if (mig->graphics) > + break; > + } > } > > return 0; > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args > new file mode 100644 > index 0000000..61335b0 > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.args > @@ -0,0 +1,20 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/home/test \ > +USER=test \ > +LOGNAME=test \ > +QEMU_AUDIO_DRV=spice \ > +/usr/bin/qemu \ > +-name QEMUGuest1 \ > +-S \ > +-M pc \ > +-m 214 \ > +-smp 1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-nodefaults \ > +-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ > +-no-acpi \ > +-boot c \ > +-usb \ > +-spice unix,addr=/tmp/lib/domain--1-QEMUGuest1/spice.sock \ > +-vga cirrus > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.xml > new file mode 100644 > index 0000000..acb325a > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-auto-socket.xml > @@ -0,0 +1,30 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>219100</memory> > + <currentMemory unit='KiB'>219100</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu</emulator> > + <controller type='usb' index='0'/> > + <controller type='ide' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <graphics type='spice'> > + <listen type='socket'/> > + </graphics> > + <video> > + <model type='cirrus' vram='16384' heads='1'/> > + </video> > + <memballoon model='none'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args > new file mode 100644 > index 0000000..26d0671 > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.args > @@ -0,0 +1,20 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/home/test \ > +USER=test \ > +LOGNAME=test \ > +QEMU_AUDIO_DRV=spice \ > +/usr/bin/qemu \ > +-name QEMUGuest1 \ > +-S \ > +-M pc \ > +-m 214 \ > +-smp 1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-nodefaults \ > +-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ > +-no-acpi \ > +-boot c \ > +-usb \ > +-spice unix,addr=/tmp/spice.sock \ > +-vga cirrus > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.xml > new file mode 100644 > index 0000000..13bbef1 > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-socket.xml > @@ -0,0 +1,30 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>219100</memory> > + <currentMemory unit='KiB'>219100</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu</emulator> > + <controller type='usb' index='0'/> > + <controller type='ide' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <graphics type='spice'> > + <listen type='socket' socket='/tmp/spice.sock'/> > + </graphics> > + <video> > + <model type='cirrus' vram='16384' heads='1'/> > + </video> > + <memballoon model='none'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c > index 43deebd..4bf5249 100644 > --- a/tests/qemuxml2argvtest.c > +++ b/tests/qemuxml2argvtest.c > @@ -941,6 +941,12 @@ mymain(void) > QEMU_CAPS_DEVICE_QXL_VGA, > QEMU_CAPS_DEVICE_QXL, > QEMU_CAPS_SPICE_FILE_XFER_DISABLE); > + DO_TEST("graphics-spice-socket", > + QEMU_CAPS_SPICE, > + QEMU_CAPS_SPICE_UNIX); > + DO_TEST("graphics-spice-auto-socket", > + QEMU_CAPS_SPICE, > + QEMU_CAPS_SPICE_UNIX); > > DO_TEST("input-usbmouse", NONE); > DO_TEST("input-usbtablet", NONE); > diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-auto-socket.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-auto-socket.xml > new file mode 100644 > index 0000000..931ec0f > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-auto-socket.xml > @@ -0,0 +1,35 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>219100</memory> > + <currentMemory unit='KiB'>219100</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu</emulator> > + <controller type='usb' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> > + </controller> > + <controller type='ide' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> > + </controller> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <graphics type='spice'> > + <listen type='socket'/> > + </graphics> > + <video> > + <model type='cirrus' vram='16384' heads='1' primary='yes'/> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> > + </video> > + <memballoon model='none'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-socket.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-socket.xml > new file mode 100644 > index 0000000..dd672ed > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-socket.xml > @@ -0,0 +1,35 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>219100</memory> > + <currentMemory unit='KiB'>219100</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu</emulator> > + <controller type='usb' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> > + </controller> > + <controller type='ide' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> > + </controller> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <graphics type='spice'> > + <listen type='socket' socket='/tmp/spice.sock'/> > + </graphics> > + <video> > + <model type='cirrus' vram='16384' heads='1' primary='yes'/> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> > + </video> > + <memballoon model='none'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c > index b67d687..172fbf9 100644 > --- a/tests/qemuxml2xmltest.c > +++ b/tests/qemuxml2xmltest.c > @@ -441,6 +441,8 @@ mymain(void) > DO_TEST("graphics-spice"); > DO_TEST("graphics-spice-compression"); > DO_TEST("graphics-spice-qxl-vga"); > + DO_TEST("graphics-spice-socket"); > + DO_TEST("graphics-spice-auto-socket"); > DO_TEST("nographics-vga"); > DO_TEST("input-usbmouse"); > DO_TEST("input-usbtablet"); > -- > 2.8.2 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list Other than that, looks good -- Marc-André Lureau -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list