On Jan 15, 2014, at 10:33 AM, Francesco Romani <fromani@xxxxxxxxxx> wrote: > > spice-server offers an API to disable file transfer messages > on the agent channel between the client and the guest. > This is supported in qemu through the disable-agent-file-xfer option. > > This patch exposes this option to libvirt. > Adds a new element 'filetransfer', with one property, > 'filetransfer', which accepts a boolean setting. > Default is enabled. Haven't reviewed the code but the commit message is wrong. The property is 'enable' from the schema change. > > Depends on the capability exported in the first patch of the series. > > Signed-off-by: Francesco Romani <fromani@xxxxxxxxxx> > --- > docs/formatdomain.html.in | 8 +++++ > docs/schemas/domaincommon.rng | 11 ++++++ > src/conf/domain_conf.c | 31 ++++++++++++++++- > src/conf/domain_conf.h | 10 ++++++ > src/libvirt_private.syms | 2 ++ > src/qemu/qemu_command.c | 9 +++++ > ...emuxml2argv-graphics-spice-agent-file-xfer.args | 9 +++++ > ...qemuxml2argv-graphics-spice-agent-file-xfer.xml | 40 ++++++++++++++++++++++ > .../qemuxml2argv-graphics-spice.args | 5 +-- > .../qemuxml2argv-graphics-spice.xml | 1 + > tests/qemuxml2argvtest.c | 9 ++++- > 11 files changed, 131 insertions(+), 4 deletions(-) > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.xml > > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index 68860ef..c11a7d3 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -4042,6 +4042,7 @@ qemu-kvm -net nic,model=? /dev/null > <streaming mode='filter'/> > <clipboard copypaste='no'/> > <mouse mode='client'/> > + <filetransfer enable='no'/> > </graphics></pre> > <p> > Spice supports variable compression settings for audio, > @@ -4081,6 +4082,13 @@ qemu-kvm -net nic,model=? /dev/null > <span class="since">since 0.9.11</span>. If no mode is > specified, the qemu default will be used (client mode). > </p> > + <p> > + File transfer functionality (via Spice agent) is set using the > + <code>filetransfer</code> element. > + It is enabled by default, and can be disabled by setting the > + <code>enable</code> property to <code>no</code> , > + since <span class="since">since 1.2.2</span>. > + </p> > </dd> > <dt><code>"rdp"</code></dt> > <dd> > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > index a69f6b6..9ddb772 100644 > --- a/docs/schemas/domaincommon.rng > +++ b/docs/schemas/domaincommon.rng > @@ -2474,6 +2474,17 @@ > <empty/> > </element> > </optional> > + <optional> > + <element name="filetransfer"> > + <attribute name="enable"> > + <choice> > + <value>yes</value> > + <value>no</value> > + </choice> > + </attribute> > + <empty/> > + </element> > + </optional> > </interleave> > </group> > <group> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index c1dd598..7d6c9ba 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -604,6 +604,12 @@ VIR_ENUM_IMPL(virDomainGraphicsSpiceClipboardCopypaste, > "yes", > "no"); > > +VIR_ENUM_IMPL(virDomainGraphicsSpiceAgentFileTransfer, > + VIR_DOMAIN_GRAPHICS_SPICE_AGENT_FILE_TRANSFER_LAST, > + "default", > + "yes", > + "no"); > + > VIR_ENUM_IMPL(virDomainHostdevMode, VIR_DOMAIN_HOSTDEV_MODE_LAST, > "subsystem", > "capabilities") > @@ -8519,6 +8525,26 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, > VIR_FREE(copypaste); > > def->data.spice.copypaste = copypasteVal; > + } else if (xmlStrEqual(cur->name, BAD_CAST "filetransfer")) { > + char *enable = virXMLPropString(cur, "enable"); > + int enableVal; > + > + if (!enable) { > + virReportError(VIR_ERR_XML_ERROR, "%s", > + _("spice filetransfer missing enable")); > + goto error; > + } > + > + if ((enableVal = > + virDomainGraphicsSpiceAgentFileTransferTypeFromString(enable)) <= 0) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("unknown enable value '%s'"), enable); > + VIR_FREE(enable); > + goto error; > + } > + VIR_FREE(enable); > + > + def->data.spice.filetransfer = enableVal; > } else if (xmlStrEqual(cur->name, BAD_CAST "mouse")) { > char *mode = virXMLPropString(cur, "mode"); > int modeVal; > @@ -16423,7 +16449,7 @@ virDomainGraphicsDefFormat(virBufferPtr buf, > if (!children && (def->data.spice.image || def->data.spice.jpeg || > def->data.spice.zlib || def->data.spice.playback || > def->data.spice.streaming || def->data.spice.copypaste || > - def->data.spice.mousemode)) { > + def->data.spice.mousemode || def->data.spice.filetransfer)) { > virBufferAddLit(buf, ">\n"); > children = true; > } > @@ -16448,6 +16474,9 @@ virDomainGraphicsDefFormat(virBufferPtr buf, > if (def->data.spice.copypaste) > virBufferAsprintf(buf, " <clipboard copypaste='%s'/>\n", > virDomainGraphicsSpiceClipboardCopypasteTypeToString(def->data.spice.copypaste)); > + if (def->data.spice.filetransfer) > + virBufferAsprintf(buf, " <filetransfer enable='%s'/>\n", > + virDomainGraphicsSpiceAgentFileTransferTypeToString(def->data.spice.filetransfer)); > } > > if (children) { > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 647d115..ce877fc 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -1461,6 +1461,14 @@ enum virDomainGraphicsSpiceClipboardCopypaste { > VIR_DOMAIN_GRAPHICS_SPICE_CLIPBOARD_COPYPASTE_LAST > }; > > +enum virDomainGraphicsSpiceAgentFileTransfer { > + VIR_DOMAIN_GRAPHICS_SPICE_AGENT_FILE_TRANSFER_DEFAULT = 0, > + VIR_DOMAIN_GRAPHICS_SPICE_AGENT_FILE_TRANSFER_YES, > + VIR_DOMAIN_GRAPHICS_SPICE_AGENT_FILE_TRANSFER_NO, > + > + VIR_DOMAIN_GRAPHICS_SPICE_AGENT_FILE_TRANSFER_LAST > +}; > + > enum virDomainGraphicsListenType { > VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE = 0, > VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS, > @@ -1531,6 +1539,7 @@ struct _virDomainGraphicsDef { > int playback; > int streaming; > int copypaste; > + int filetransfer; > } spice; > } data; > /* nListens, listens, and *port are only useful if type is vnc, > @@ -2693,6 +2702,7 @@ VIR_ENUM_DECL(virDomainInputBus) > VIR_ENUM_DECL(virDomainGraphics) > VIR_ENUM_DECL(virDomainGraphicsListen) > VIR_ENUM_DECL(virDomainGraphicsAuthConnected) > +VIR_ENUM_DECL(virDomainGraphicsSpiceAgentFileTransfer) > VIR_ENUM_DECL(virDomainGraphicsSpiceChannelName) > VIR_ENUM_DECL(virDomainGraphicsSpiceChannelMode) > VIR_ENUM_DECL(virDomainGraphicsSpiceImageCompression) > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 3b3de15..2a9b0b1 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -235,6 +235,8 @@ virDomainGraphicsListenGetType; > virDomainGraphicsListenSetAddress; > virDomainGraphicsListenSetNetwork; > virDomainGraphicsListenSetType; > +virDomainGraphicsSpiceAgentFileTransferTypeFromString; > +virDomainGraphicsSpiceAgentFileTransferTypeToString; > virDomainGraphicsSpiceChannelModeTypeFromString; > virDomainGraphicsSpiceChannelModeTypeToString; > virDomainGraphicsSpiceChannelNameTypeFromString; > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 81486df..96b8825 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -7393,6 +7393,15 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, > virDomainGraphicsSpiceStreamingModeTypeToString(graphics->data.spice.streaming)); > if (graphics->data.spice.copypaste == VIR_DOMAIN_GRAPHICS_SPICE_CLIPBOARD_COPYPASTE_NO) > virBufferAddLit(&opt, ",disable-copy-paste"); > + if (graphics->data.spice.filetransfer == VIR_DOMAIN_GRAPHICS_SPICE_AGENT_FILE_TRANSFER_NO) { > + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE)) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("This QEMU can't disable file transfers through spice")); > + goto error; > + } else { > + virBufferAddLit(&opt, ",disable-agent-file-xfer"); > + } > + } > > if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEAMLESS_MIGRATION)) { > /* If qemu supports seamless migration turn it > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args > new file mode 100644 > index 0000000..66f22bc > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.args > @@ -0,0 +1,9 @@ > +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \ > +/usr/bin/qemu -S -M pc -m 214 -smp 1 -nodefaults -monitor \ > +unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb -hda \ > +/dev/HostVG/QEMUGuest1 -spice port=5903,tls-port=5904,addr=127.0.0.1,\ > +x509-dir=/etc/pki/libvirt-spice,tls-channel=main,plaintext-channel=inputs,\ > +disable-agent-file-xfer -vga qxl -global qxl-vga.ram_size=67108864 \ > +-global qxl-vga.vram_size=33554432 \ > +-device qxl,id=video1,ram_size=67108864,vram_size=67108864,bus=pci.0,addr=0x4 \ > +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.xml > new file mode 100644 > index 0000000..3a3e366 > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-agent-file-xfer.xml > @@ -0,0 +1,40 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>219136</memory> > + <currentMemory unit='KiB'>219136</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> > + <disk type='block' device='disk'> > + <source dev='/dev/HostVG/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='usb' index='0'/> > + <controller type='ide' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <graphics type='spice' port='5903' tlsPort='5904' autoport='no' listen='127.0.0.1'> > + <listen type='address' address='127.0.0.1'/> > + <channel name='main' mode='secure'/> > + <channel name='inputs' mode='insecure'/> > + <filetransfer enable='no'/> > + </graphics> > + <video> > + <model type='qxl' ram='65536' vram='32768' heads='1'/> > + </video> > + <video> > + <model type='qxl' ram='65536' vram='65536' heads='1'/> > + </video> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args > index 7ddfa64..8430d9c 100644 > --- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args > @@ -6,7 +6,8 @@ x509-dir=/etc/pki/libvirt-spice,tls-channel=default,tls-channel=main,\ > plaintext-channel=inputs,\ > image-compression=auto_glz,jpeg-wan-compression=auto,\ > zlib-glz-wan-compression=auto,\ > -playback-compression=on,streaming-video=filter,disable-copy-paste -vga \ > -qxl -global qxl.ram_size=67108864 -global qxl.vram_size=18874368 \ > +playback-compression=on,streaming-video=filter,disable-copy-paste,\ > +disable-agent-file-xfer -vga qxl -global qxl.ram_size=67108864 \ > +-global qxl.vram_size=18874368 \ > -device qxl,id=video1,ram_size=67108864,vram_size=33554432,bus=pci.0,addr=0x4 \ > -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml > index b22fbcc..c2b5095 100644 > --- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml > +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml > @@ -33,6 +33,7 @@ > <playback compression='on'/> > <streaming mode='filter'/> > <clipboard copypaste='no'/> > + <filetransfer enable='no'/> > </graphics> > <video> > <model type='qxl' ram='65536' vram='18432' heads='1'/> > diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c > index b0cfa60..a25264e 100644 > --- a/tests/qemuxml2argvtest.c > +++ b/tests/qemuxml2argvtest.c > @@ -856,7 +856,8 @@ mymain(void) > DO_TEST("graphics-spice", > QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, > QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE, > - QEMU_CAPS_DEVICE_QXL); > + QEMU_CAPS_DEVICE_QXL, > + QEMU_CAPS_SPICE_FILE_XFER_DISABLE); > driver.config->spiceSASL = 1; > ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2")); > DO_TEST("graphics-spice-sasl", > @@ -890,6 +891,12 @@ mymain(void) > QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB, > QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR, > QEMU_CAPS_CHARDEV_SPICEVMC); > + DO_TEST("graphics-spice-agent-file-xfer", > + QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, > + QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE, > + QEMU_CAPS_DEVICE_QXL_VGA, > + QEMU_CAPS_DEVICE_QXL, > + QEMU_CAPS_SPICE_FILE_XFER_DISABLE); > > DO_TEST("input-usbmouse", NONE); > DO_TEST("input-usbtablet", NONE); > -- > 1.8.4.2 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list