[libvirt/f16] Rebased to version 0.9.6.1 Various stream fixes and improvements (bz 743900) Fix state syncing when
Cole Robinson
crobinso at fedoraproject.org
Fri Jun 15 21:29:12 UTC 2012
commit 21b5b71da6aedc8d11da0d207275a666d53a3f62
Author: Cole Robinson <crobinso at redhat.com>
Date: Fri Jun 15 17:29:11 2012 -0400
Rebased to version 0.9.6.1
Various stream fixes and improvements (bz 743900)
Fix state syncing when xen domain shuts down (bz 746007)
Don't show <console> for xen dom0 (bz 752271)
Fix selinux denial on /usr/libexec/pt_chown from LXC (bz 785411)
Don't flood LXC log file (bz 785431)
Fix several double close bugs (bz 827127)
Fix PCI assignment for USB2.0 controllers (bz 822160)
libvirt-add-default-spice-channel.patch | 184 ++++++++++++++++++
libvirt-add-usbredir-spice-channel.patch | 196 ++++++++++++++++++++
libvirt-emit-spice-events.patch | 136 ++++++++++++++
...qemu-replace-deprecated-fedora-13-machine.patch | 156 ++++++++++++++++
libvirt.spec | 87 ++++-----
sources | 2 +-
6 files changed, 709 insertions(+), 52 deletions(-)
---
diff --git a/libvirt-add-default-spice-channel.patch b/libvirt-add-default-spice-channel.patch
new file mode 100644
index 0000000..5ac6966
--- /dev/null
+++ b/libvirt-add-default-spice-channel.patch
@@ -0,0 +1,184 @@
+From a9311c363defcba7479fdabfb4862bcf851a6b7c Mon Sep 17 00:00:00 2001
+From: Alon Levy <alevy at redhat.com>
+Date: Tue, 8 May 2012 20:42:44 +0300
+Subject: [PATCH] domain_conf: add "default" to list of valid spice channels
+
+qemu's behavior in this case is to change the spice server behavior to
+require secure connection to any channel not otherwise specified as
+being in plaintext mode. libvirt doesn't currently allow requesting this
+(via plaintext-channel=<channel name>).
+
+RHBZ: 819499
+
+Signed-off-by: Alon Levy <alevy at redhat.com>
+(cherry picked from commit ba97e4edc6aa439a4f1e70855cf4503181efdb7f)
+
+Conflicts:
+
+ src/conf/domain_conf.c
+Signed-off-by: Cole Robinson <crobinso at redhat.com>
+---
+ docs/formatdomain.html.in | 7 +++++++
+ docs/schemas/domaincommon.rng | 9 +++++++++
+ src/conf/domain_conf.c | 20 ++++++++++++++++++++
+ src/conf/domain_conf.h | 1 +
+ src/qemu/qemu_command.c | 13 +++++++++++++
+ .../qemuxml2argv-graphics-spice.args | 2 +-
+ .../qemuxml2argv-graphics-spice.xml | 2 +-
+ 7 files changed, 52 insertions(+), 2 deletions(-)
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index d082697..db5fa9b 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -2308,6 +2308,13 @@ qemu-kvm -net nic,model=? /dev/null
+ <span class="since">Since 0.9.3</span>
+ NB, this may not be supported by all hypervisors.
+ <span class="since">"spice" since 0.8.6</span>.
++ The <code>defaultMode</code> attribute sets the default channel
++ security policy, valid values are <code>secure</code>,
++ <code>insecure</code> and the default <code>any</code>
++ (which is secure if possible, but falls back to insecure
++ rather than erroring out if no secure path is
++ available). <span class="since">"defaultMode" since
++ 0.9.12</span>.
+ </p>
+ <p>
+ When SPICE has both a normal and TLS secured TCP port
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index fe81c26..0d6edc8 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -1388,6 +1388,15 @@
+ </choice>
+ </attribute>
+ </optional>
++ <optional>
++ <attribute name="defaultMode">
++ <choice>
++ <value>any</value>
++ <value>secure</value>
++ <value>insecure</value>
++ </choice>
++ </attribute>
++ </optional>
+ <interleave>
+ <ref name="listenElements"/>
+ <zeroOrMore>
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 9cc1644..963768e 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -4689,6 +4689,8 @@ virDomainGraphicsDefParseXML(xmlNodePtr node,
+ char *port = virXMLPropString(node, "port");
+ char *tlsPort;
+ char *autoport;
++ char *defaultMode;
++ int defaultModeVal;
+
+ if (port) {
+ if (virStrToLong_i(port, NULL, 10, &def->data.spice.port) < 0) {
+@@ -4726,6 +4728,20 @@ virDomainGraphicsDefParseXML(xmlNodePtr node,
+ VIR_FREE(autoport);
+ }
+
++ def->data.spice.defaultMode = VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY;
++
++ if ((defaultMode = virXMLPropString(node, "defaultMode")) != NULL) {
++ if ((defaultModeVal = virDomainGraphicsSpiceChannelModeTypeFromString(defaultMode)) < 0) {
++ virDomainReportError(VIR_ERR_INTERNAL_ERROR,
++ _("unknown default spice channel mode %s"),
++ defaultMode);
++ VIR_FREE(defaultMode);
++ goto error;
++ }
++ def->data.spice.defaultMode = defaultModeVal;
++ VIR_FREE(defaultMode);
++ }
++
+ def->data.spice.keymap = virXMLPropString(node, "keymap");
+
+ if (virDomainGraphicsAuthDefParseXML(node, &def->data.spice.auth,
+@@ -10311,6 +10327,10 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
+ virBufferEscapeString(buf, " keymap='%s'",
+ def->data.spice.keymap);
+
++ if (def->data.spice.defaultMode != VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY)
++ virBufferAsprintf(buf, " defaultMode='%s'",
++ virDomainGraphicsSpiceChannelModeTypeToString(def->data.spice.defaultMode));
++
+ virDomainGraphicsAuthDefFormatAttr(buf, &def->data.spice.auth, flags);
+ break;
+
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index d40fda6..f6df0ea 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -921,6 +921,7 @@ struct _virDomainGraphicsDef {
+ virDomainGraphicsAuthDef auth;
+ unsigned int autoport :1;
+ int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST];
++ int defaultMode; /* enum virDomainGraphicsSpiceChannelMode */
+ int image;
+ int jpeg;
+ int zlib;
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 366913b..ee192d3 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -4720,6 +4720,7 @@ qemuBuildCommandLine(virConnectPtr conn,
+ const char *listenAddr = NULL;
+ char *netAddr = NULL;
+ int ret;
++ int defaultMode = def->graphics[0]->data.spice.defaultMode;
+
+ if (!qemuCapsGet(qemuCaps, QEMU_CAPS_SPICE)) {
+ qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+@@ -4781,6 +4782,18 @@ qemuBuildCommandLine(virConnectPtr conn,
+ virBufferAsprintf(&opt, ",x509-dir=%s",
+ driver->spiceTLSx509certdir);
+
++ switch (defaultMode) {
++ case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE:
++ virBufferAsprintf(&opt, ",tls-channel=default");
++ break;
++ case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE:
++ virBufferAsprintf(&opt, ",plaintext-channel=default");
++ break;
++ case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY:
++ /* nothing */
++ break;
++ }
++
+ for (i = 0 ; i < VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST ; i++) {
+ int mode = def->graphics[0]->data.spice.channels[i];
+ switch (mode) {
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args
+index c9fdb99..698e39c 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args
+@@ -2,7 +2,7 @@ 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 -hda \
+ /dev/HostVG/QEMUGuest1 -usb -spice port=5903,tls-port=5904,addr=127.0.0.1,\
+-x509-dir=/etc/pki/libvirt-spice,tls-channel=main,plaintext-channel=inputs,\
++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.vram_size=18874368 -device qxl,id=video1,vram_size=33554432,bus=pci.0,addr=0x4 \
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml
+index 5313b3a..29f20ab 100644
+--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml
+@@ -21,7 +21,7 @@
+ </disk>
+ <controller type='ide' index='0'/>
+ <input type='mouse' bus='ps2'/>
+- <graphics type='spice' port='5903' tlsPort='5904' autoport='no' listen='127.0.0.1'>
++ <graphics type='spice' port='5903' tlsPort='5904' autoport='no' listen='127.0.0.1' defaultMode='secure'>
+ <listen type='address' address='127.0.0.1'/>
+ <channel name='main' mode='secure'/>
+ <channel name='inputs' mode='insecure'/>
+--
+1.7.7.6
+
diff --git a/libvirt-add-usbredir-spice-channel.patch b/libvirt-add-usbredir-spice-channel.patch
new file mode 100644
index 0000000..5d3fa9d
--- /dev/null
+++ b/libvirt-add-usbredir-spice-channel.patch
@@ -0,0 +1,196 @@
+From b8c86d80df4ba6c682f05974892f5d7ab8f317a9 Mon Sep 17 00:00:00 2001
+From: Alon Levy <alevy at redhat.com>
+Date: Tue, 8 May 2012 16:00:28 +0300
+Subject: [PATCH] domain_conf: add "usbredir" to list of valid spice channels
+
+Add "usbredir" channel to list of recognized spice channels.
+
+RHBZ: 819498
+
+Signed-off-by: Alon Levy <alevy at redhat.com>
+(cherry picked from commit 4e78ffb63489071c4100678ed88d3111284555e8)
+Signed-off-by: Cole Robinson <crobinso at redhat.com>
+---
+ docs/formatdomain.html.in | 8 ++-
+ docs/schemas/domaincommon.rng | 1 +
+ src/conf/domain_conf.c | 3 +-
+ src/conf/domain_conf.h | 1 +
+ .../qemuxml2argv-graphics-spice-usb-redir.args | 16 ++++++
+ .../qemuxml2argv-graphics-spice-usb-redir.xml | 53 ++++++++++++++++++++
+ tests/qemuxml2argvtest.c | 6 ++
+ 7 files changed, 84 insertions(+), 4 deletions(-)
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args
+ create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml
+
+diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
+index 390476d..d082697 100644
+--- a/docs/formatdomain.html.in
++++ b/docs/formatdomain.html.in
+@@ -2317,9 +2317,11 @@ qemu-kvm -net nic,model=? /dev/null
+ main <graphics> element. Valid channel names
+ include <code>main</code>, <code>display</code>,
+ <code>inputs</code>, <code>cursor</code>,
+- <code>playback</code>, <code>record</code>;
+- and <span class="since">since
+- 0.8.8</span>: <code>smartcard</code>.
++ <code>playback</code>, <code>record</code>
++ (all <span class="since"> since 0.8.6</span>);
++ <code>smartcard</code> (<span class="since">since
++ 0.8.8</span>); and <code>usbredir</code>
++ (<span class="since">since 0.9.12</span>).
+ </p>
+ <pre>
+ <graphics type='spice' port='-1' tlsPort='-1' autoport='yes'>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index 9f8d292..fe81c26 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -1401,6 +1401,7 @@
+ <value>playback</value>
+ <value>record</value>
+ <value>smartcard</value>
++ <value>usbredir</value>
+ </choice>
+ </attribute>
+ <attribute name="mode">
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 2f9da71..9cc1644 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -389,7 +389,8 @@ VIR_ENUM_IMPL(virDomainGraphicsSpiceChannelName,
+ "cursor",
+ "playback",
+ "record",
+- "smartcard");
++ "smartcard",
++ "usbredir");
+
+ VIR_ENUM_IMPL(virDomainGraphicsSpiceChannelMode,
+ VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_LAST,
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index f2cd8eb..d40fda6 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -797,6 +797,7 @@ enum virDomainGraphicsSpiceChannelName {
+ VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_PLAYBACK,
+ VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_RECORD,
+ VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_SMARTCARD,
++ VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_USBREDIR,
+
+ VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST
+ };
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args
+new file mode 100644
+index 0000000..35e51a7
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args
+@@ -0,0 +1,16 @@
++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 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
++-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \
++-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \
++-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \
++-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \
++-spice port=5903,tls-port=5904,addr=127.0.0.1,\
++x509-dir=/etc/pki/libvirt-spice,tls-channel=main,plaintext-channel=inputs,\
++tls-channel=usbredir,\
++image-compression=auto_glz,jpeg-wan-compression=auto,zlib-glz-wan-compression=auto,\
++playback-compression=on,streaming-video=filter,disable-copy-paste \
++-vga cirrus \
++-chardev socket,id=charredir0,host=localhost,port=4000 \
++-device usb-redir,chardev=charredir0,id=redir0 \
++-chardev spicevmc,id=charredir1,name=usbredir \
++-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \
++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml
+new file mode 100644
+index 0000000..1dc23bd
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml
+@@ -0,0 +1,53 @@
++<domain type='qemu'>
++ <name>QEMUGuest1</name>
++ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
++ <memory unit='KiB'>219136</memory>
++ <currentMemory unit='KiB'>219136</currentMemory>
++ <vcpu>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>
++ <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'/>
++ <channel name='usbredir' mode='secure'/>
++ <image compression='auto_glz'/>
++ <jpeg compression='auto'/>
++ <zlib compression='auto'/>
++ <playback compression='on'/>
++ <streaming mode='filter'/>
++ <clipboard copypaste='no'/>
++ </graphics>
++ <controller type='usb' index='0' model='ich9-ehci1'>
++ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
++ </controller>
++ <controller type='usb' index='0' model='ich9-uhci1'>
++ <master startport='0'/>
++ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
++ </controller>
++ <controller type='usb' index='0' model='ich9-uhci2'>
++ <master startport='2'/>
++ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
++ </controller>
++ <controller type='usb' index='0' model='ich9-uhci3'>
++ <master startport='4'/>
++ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
++ </controller>
++ <redirdev bus='usb' type='tcp'>
++ <source mode='connect' host='localhost' service='4000'/>
++ <protocol type='raw'/>
++ </redirdev>
++ <redirdev bus='usb' type='spicevmc'>
++ <address type='usb' bus='0' port='4'/>
++ </redirdev>
++ <memballoon model='virtio'/>
++ </devices>
++</domain>
+diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
+index 1dc6a01..d5475c5 100644
+--- a/tests/qemuxml2argvtest.c
++++ b/tests/qemuxml2argvtest.c
+@@ -405,6 +405,12 @@ mymain(void)
+ QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
+ QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
+ QEMU_CAPS_DEVICE_QXL_VGA);
++ DO_TEST("graphics-spice-usb-redir", false,
++ QEMU_CAPS_VGA, QEMU_CAPS_SPICE,
++ QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
++ QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
++ QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
++ QEMU_CAPS_CHARDEV_SPICEVMC);
+
+ DO_TEST("input-usbmouse", false, NONE);
+ DO_TEST("input-usbtablet", false, NONE);
+--
+1.7.7.6
+
+diff -rup libvirt-0.9.6.1/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml foo/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml
+--- libvirt-0.9.6.1/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml 2012-06-15 17:10:09.086979189 -0400
++++ foo/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml 2012-06-15 17:21:08.788770706 -0400
+@@ -1,8 +1,8 @@
+ <domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+- <memory unit='KiB'>219136</memory>
+- <currentMemory unit='KiB'>219136</currentMemory>
++ <memory>219136</memory>
++ <currentMemory>219136</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
diff --git a/libvirt-emit-spice-events.patch b/libvirt-emit-spice-events.patch
new file mode 100644
index 0000000..ec50f2d
--- /dev/null
+++ b/libvirt-emit-spice-events.patch
@@ -0,0 +1,136 @@
+From 57f08fb47b0938a9e8969b857380926fa6966ca8 Mon Sep 17 00:00:00 2001
+From: Laine Stump <laine at laine.org>
+Date: Wed, 14 Mar 2012 01:41:35 -0400
+Subject: [PATCH] Emit graphics events when a SPICE client
+ connects/disconnects
+
+Wire up the domain graphics event notifications for SPICE. Adapted
+from a RHEL-only patch written by Dan Berrange that used custom
+__com.redhat_SPICE events - equivalent events are now available in
+upstream QEMU (including a SPICE_CONNECTED event, which was missing in
+the __COM.redhat_SPICE version).
+
+* src/qemu/qemu_monitor_json.c: Wire up SPICE graphics events
+(cherry picked from commit 89ae6a5a30bd91cfb2365544f9dd2e6c2a36ecca)
+
+Signed-off-by: Cole Robinson <crobinso at redhat.com>
+---
+ src/qemu/qemu_monitor_json.c | 56 +++++++++++++++++++++++++++++++++++++++---
+ 1 files changed, 52 insertions(+), 4 deletions(-)
+
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index e38c2ed..d4a3b7b 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -57,6 +57,9 @@ static void qemuMonitorJSONHandleVNCConnect(qemuMonitorPtr mon, virJSONValuePtr
+ static void qemuMonitorJSONHandleVNCInitialize(qemuMonitorPtr mon, virJSONValuePtr data);
+ static void qemuMonitorJSONHandleVNCDisconnect(qemuMonitorPtr mon, virJSONValuePtr data);
+ static void qemuMonitorJSONHandleBlockJob(qemuMonitorPtr mon, virJSONValuePtr data);
++static void qemuMonitorJSONHandleSPICEConnect(qemuMonitorPtr mon, virJSONValuePtr data);
++static void qemuMonitorJSONHandleSPICEInitialize(qemuMonitorPtr mon, virJSONValuePtr data);
++static void qemuMonitorJSONHandleSPICEDisconnect(qemuMonitorPtr mon, virJSONValuePtr data);
+
+ struct {
+ const char *type;
+@@ -73,6 +76,9 @@ struct {
+ { "VNC_INITIALIZED", qemuMonitorJSONHandleVNCInitialize, },
+ { "VNC_DISCONNECTED", qemuMonitorJSONHandleVNCDisconnect, },
+ { "BLOCK_JOB_COMPLETED", qemuMonitorJSONHandleBlockJob, },
++ { "SPICE_CONNECTED", qemuMonitorJSONHandleSPICEConnect, },
++ { "SPICE_INITIALIZED", qemuMonitorJSONHandleSPICEInitialize, },
++ { "SPICE_DISCONNECTED", qemuMonitorJSONHandleSPICEDisconnect, },
+ };
+
+
+@@ -617,7 +623,7 @@ VIR_ENUM_DECL(qemuMonitorGraphicsAddressFamily)
+ VIR_ENUM_IMPL(qemuMonitorGraphicsAddressFamily, VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV6 + 1,
+ "ipv4", "ipv6");
+
+-static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, int phase)
++static void qemuMonitorJSONHandleGraphics(qemuMonitorPtr mon, virJSONValuePtr data, int phase)
+ {
+ const char *localNode, *localService, *localFamily;
+ const char *remoteNode, *remoteService, *remoteFamily;
+@@ -636,14 +642,38 @@ static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, i
+ }
+
+ authScheme = virJSONValueObjectGetString(server, "auth");
++ if (!authScheme) {
++ VIR_WARN("missing auth scheme in graphics event");
++ return;
++ }
+
+ localFamily = virJSONValueObjectGetString(server, "family");
++ if (!localFamily) {
++ VIR_WARN("missing local address family in graphics event");
++ return;
++ }
+ localNode = virJSONValueObjectGetString(server, "host");
++ if (!localNode) {
++ VIR_WARN("missing local hostname in graphics event");
++ return;
++ }
+ localService = virJSONValueObjectGetString(server, "service");
++ if (!localService)
++ localService = ""; /* Spice has multiple ports, so this isn't provided */
+
+ remoteFamily = virJSONValueObjectGetString(client, "family");
++ if (!remoteFamily) {
++ VIR_WARN("missing remote address family in graphics event");
++ return;
++ }
+ remoteNode = virJSONValueObjectGetString(client, "host");
++ if (!remoteNode) {
++ VIR_WARN("missing remote hostname in graphics event");
++ return;
++ }
+ remoteService = virJSONValueObjectGetString(client, "service");
++ if (!remoteService)
++ remoteService = ""; /* Spice has multiple ports, so this isn't provided */
+
+ saslUsername = virJSONValueObjectGetString(client, "sasl_username");
+ x509dname = virJSONValueObjectGetString(client, "x509_dname");
+@@ -665,19 +695,37 @@ static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, i
+
+ static void qemuMonitorJSONHandleVNCConnect(qemuMonitorPtr mon, virJSONValuePtr data)
+ {
+- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT);
++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT);
+ }
+
+
+ static void qemuMonitorJSONHandleVNCInitialize(qemuMonitorPtr mon, virJSONValuePtr data)
+ {
+- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE);
++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE);
+ }
+
+
+ static void qemuMonitorJSONHandleVNCDisconnect(qemuMonitorPtr mon, virJSONValuePtr data)
+ {
+- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT);
++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT);
++}
++
++
++static void qemuMonitorJSONHandleSPICEConnect(qemuMonitorPtr mon, virJSONValuePtr data)
++{
++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT);
++}
++
++
++static void qemuMonitorJSONHandleSPICEInitialize(qemuMonitorPtr mon, virJSONValuePtr data)
++{
++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE);
++}
++
++
++static void qemuMonitorJSONHandleSPICEDisconnect(qemuMonitorPtr mon, virJSONValuePtr data)
++{
++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT);
+ }
+
+ static void qemuMonitorJSONHandleBlockJob(qemuMonitorPtr mon, virJSONValuePtr data)
+--
+1.7.7.6
+
diff --git a/libvirt-qemu-replace-deprecated-fedora-13-machine.patch b/libvirt-qemu-replace-deprecated-fedora-13-machine.patch
new file mode 100644
index 0000000..4562df7
--- /dev/null
+++ b/libvirt-qemu-replace-deprecated-fedora-13-machine.patch
@@ -0,0 +1,156 @@
+From eaf056bf995558ecf6620ce031287f3aa81b66de Mon Sep 17 00:00:00 2001
+From: Laine Stump <laine at laine.org>
+Date: Tue, 6 Dec 2011 12:47:28 -0500
+Subject: [PATCH 1/2] qemu: replace deprecated fedora-13 machine type with
+ pc-0.14
+
+This addresses https://bugzilla.redhat.com/show_bug.cgi?id=754772 .
+It should only be applied to Fedora builds of libvirt, F15 and
+later, so there is no upstream equivalent patch.
+
+Background:
+
+During the lifetime of Fedora 13, some features were backported into
+the F13 build of qemu-kvm from upstream. These features were part of
+the functionality of machine type "pc-0.13" in upstream qemu-kvm, so a
+special "fedora-13" machine type was created for the F13 qemu-kvm.
+Since "fedora-13" became the new "canonical machine type", all new
+domains created with F13 libvirt tools by default contained that
+machine type in their configuration file.
+
+In Fedora 14, a patch was made to qemu to treat the fedora-13 machine
+type as equivalent to "pc-0.13". When Fedora 15 was released, this was
+inadvertently changed to make it equivalent to "pc-0.14".
+
+With the release of Fedora 16, qemu-kvm initially removed support for
+this machine type, which caused failure of many guest configurations
+to start. qemu-kvm subsequently re-added the patch to support
+fedora-13 (as equivalent to pc-0.14), but with the promise that they
+could remove it with the release of Fedora 17. (see
+https://bugzilla.redhat.com/show_bug.cgi?id=748218 ).
+
+Solution:
+
+In order to create a repeat of the recent problems, prior to F17
+existing guest configurations need to be updated to change fedora-13
+to pc-0.14 (which has been determined to be equivalent for all
+practical purposes in both F15 and F16). That's what this patch does:
+
+1) Each time libvirtd is started, it calls virDomainLoadAllConfigs()
+which calls virDomainLoadConfig(); this function has been modified to
+check for os.machine == "fedora-13", and change it to "pc-0.14" then
+write the updated config back to disk.
+
+2) Also, any other time a domain definition is parsed, the parsed
+version in memory is changed to turn "fedora-13" into "pc-0.14". This
+handles domains that had been saved to disk prior to the upgrade, and
+are subsequently restarted.
+
+3) Finally, whenever a domain definition is formatted into a string,
+any occurrence of fedora-13 is replaced with pc-0.14 *directly in the
+virDomainDef* (to avoid multiple warning messages for the same object
+when it's formatted multiple times). This should deal with those cases
+where a domain was running at the time of upgrade, and is later
+saved/snapshotted.
+
+I had considered doing this with some sed commands in the specfile,
+but that wouldn't do anything to help the xml saved in image files.
+
+(Also, one of the xml tests was using the machine type "fedora-13",
+and since that machine type is treated specially by the rest of this
+patch, it was failing. That has been changed in a separate patch,
+which must be applied with this patch, and which *is* also upstream).
+---
+ src/conf/domain_conf.c | 62 +++++++++++++++++++++++++++++++++++++++++++++--
+ 1 files changed, 59 insertions(+), 3 deletions(-)
+
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 318f523..7906bb8 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -7500,7 +7500,25 @@ virDomainDefPtr virDomainDefParseString(virCapsPtr caps,
+ unsigned int expectedVirtTypes,
+ unsigned int flags)
+ {
+- return virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags);
++ virDomainDefPtr def
++ = virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags);
++
++ /* Fedora-specific HACK - treat fedora-13 and pc-0.14 as equivalent.
++ * This handles the case of domains that had been saved to an image file
++ * prior to upgrade (save or snapshot), then restarted/reverted.
++ */
++ if (def && STREQ_NULLABLE(def->os.machine, "fedora-13")) {
++ VIR_FREE(def->os.machine);
++ if (!(def->os.machine = strdup("pc-0.14"))) {
++ virReportOOMError();
++ virDomainDefFree(def);
++ def = NULL;
++ } else {
++ VIR_WARN("Replacing deprecated 'fedora-13' machine type "
++ "with equivalent 'pc-0.14' in domain %s xml", def->name);
++ }
++ }
++ return def;
+ }
+
+ virDomainDefPtr virDomainDefParseFile(virCapsPtr caps,
+@@ -10648,8 +10666,30 @@ virDomainDefFormatInternal(virDomainDefPtr def,
+ virBufferAddLit(buf, " <type");
+ if (def->os.arch)
+ virBufferAsprintf(buf, " arch='%s'", def->os.arch);
+- if (def->os.machine)
+- virBufferAsprintf(buf, " machine='%s'", def->os.machine);
++ if (def->os.machine) {
++ /* Fedora-specific HACK - replace "fedora-13" with "pc-0.14"
++ * (in the original DomainDef as well as in the xml output).
++ * This will catch XML being written to save/migration images
++ * of domains that were running when libvirtd was restarted at
++ * the time of upgrade.
++ */
++ if (STREQ_NULLABLE(def->os.machine, "fedora-13")) {
++ virBufferAddLit(buf, " machine='pc-0.14'");
++ VIR_WARN("substituting machine type 'fedora-13' with 'pc-0.14' "
++ "in domain %s", def->name);
++ /* It's not exactly nice to modify the source object,
++ * but sometimes virDomainFormat is called > 100 times for the
++ * same object, which would result in far too many warning logs.
++ */
++ VIR_FREE(def->os.machine);
++ if (!(def->os.machine = strdup("pc-0.14"))) {
++ virReportOOMError();
++ goto cleanup;
++ }
++ } else {
++ virBufferAsprintf(buf, " machine='%s'", def->os.machine);
++ }
++ }
+ /*
+ * HACK: For xen driver we previously used bogus 'linux' as the
+ * os type for paravirt, whereas capabilities declare it to
+@@ -11100,6 +11140,22 @@ static virDomainObjPtr virDomainLoadConfig(virCapsPtr caps,
+ VIR_DOMAIN_XML_INACTIVE)))
+ goto error;
+
++ /* Fedora-specific HACK - replace "fedora-13" with "pc-0.14".
++ * This updates all config files at the first restart of libvirt
++ * after upgrade.
++ */
++ if (STREQ_NULLABLE(def->os.machine, "fedora-13")) {
++ VIR_FREE(def->os.machine);
++ if (!(def->os.machine = strdup("pc-0.14"))) {
++ virReportOOMError();
++ goto error;
++ }
++ VIR_WARN("Replacing deprecated 'fedora-13' machine type "
++ "with equivalent 'pc-0.14' in domain %s configuration file", name);
++ if (virDomainSaveConfig(configDir, def) < 0)
++ goto error;
++ }
++
+ if ((autostartLink = virDomainConfigFile(autostartDir, name)) == NULL)
+ goto error;
+
+--
+1.7.7.4
+
diff --git a/libvirt.spec b/libvirt.spec
index f2b5742..dc62050 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -242,40 +242,27 @@
Summary: Library providing a simple virtualization API
Name: libvirt
-Version: 0.9.6
-Release: 6%{?dist}%{?extra_release}
+Version: 0.9.6.1
+Release: 1%{?dist}%{?extra_release}
License: LGPLv2+
Group: Development/Libraries
-Source: http://libvirt.org/sources/libvirt-%{version}.tar.gz
-Patch1: %{name}-%{version}-spec-F15-still-uses-cgconfig.patch
-Patch2: %{name}-%{version}-qemu-make-PCI-multifunction-support-more-manual.patch
-Patch3:%{name}-%{version}-logging-Do-not-log-timestamp-through-syslog.patch
-Patch4:%{name}-%{version}-logging-Add-date-to-log-timestamp.patch
-Patch5:%{name}-%{version}-Add-internal-APIs-for-dealing-with-time.patch
-Patch6:%{name}-%{version}-Make-logging-async-signal-safe-wrt-time-stamp-genera.patch
-Patch7:%{name}-%{version}-Remove-time-APIs-from-src-util-util.h.patch
-Patch8:%{name}-%{version}-spec-mark-directories-in-var-run-as-ghosts.patch
-Patch9:%{name}-%{version}-Fix-incorrect-symbols-for-virtime.h-module-breaking-.patch
-Patch10:%{name}-%{version}-spec-add-dmidecode-as-prereq.patch
-Patch11:%{name}-%{version}-spec-don-t-use-chkconfig-list.patch
-Patch12:%{name}-%{version}-spec-fix-logic-bug-in-deciding-to-turn-on-cgconfig.patch
-Patch13:%{name}-%{version}-network-don-t-add-iptables-rules-for-externally-mana.patch
-Patch14:%{name}-%{version}-test-replace-deprecated-fedora-13-machine.patch
-Patch15:%{name}-%{version}-qemu-replace-deprecated-fedora-13-machine.patch
-Patch16:%{name}-%{version}-spec-make-it-easier-to-autoreconf-when-building-rpm.patch
-Patch17:%{name}-%{version}-Avoid-crash-in-shunloadtest.patch
-# Fix crash when migrating many guests with vdsm (bz 785789)
-Patch18: %{name}-large-migrate-crash.patch
-# Fix libvirtd hang in vmware guest (bz 796451)
-Patch19: %{name}-dmidecode-hang.patch
-# Don't start HAL in init script (bz 789234)
-Patch20: %{name}-no-init-hal-start.patch
-# Fix storage lookup errors with empty lvm pool (bz 782261)
-Patch21: %{name}-empty-lvm-hang.patch
-# Fix test failures with new gnutls
-Patch22: %{name}-gnutls-test-failures.patch
-# Fix typo in chkconfig commandline for specfile
-Patch23: %{name}-%{version}-specfile-fix-typo-in-chkconfig-commandline.patch
+
+%if %(echo %{version} | grep -o \\. | wc -l) == 3
+%define mainturl stable_updates/
+%endif
+Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
+# Replace fedora-13->pc-0.14 to prep for qemu removal (bz 754772)
+# keep: keeping this for the lifetime of F17, gone for newer releases
+Patch1: %{name}-qemu-replace-deprecated-fedora-13-machine.patch
+# Emit spice graphics events (bz 784813)
+# keep: F16 feature backport that won't hit 0.9.6 maint
+Patch2: %{name}-emit-spice-events.patch
+# Add usbredir spice channel (bz 821469)
+# keep: fedora feature backport that won't hit 0.9.11 maint
+Patch3: %{name}-add-usbredir-spice-channel.patch
+# Add default spice channel (bz 821474)
+# keep: fedora feature backport that won't hit 0.9.11 maint
+Patch4: %{name}-add-default-spice-channel.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
URL: http://libvirt.org/
@@ -600,25 +587,6 @@ of recent versions of Linux (and other OSes).
%patch2 -p1
%patch3 -p1
%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
-%patch11 -p1
-%patch12 -p1
-%patch13 -p1
-%patch14 -p1
-%patch15 -p1
-%patch16 -p1
-%patch17 -p1
-%patch18 -p1
-%patch19 -p1
-%patch20 -p1
-%patch21 -p1
-%patch22 -p1
-%patch23 -p1
%build
%if ! %{with_xen}
@@ -1202,6 +1170,10 @@ fi
%doc %{_datadir}/gtk-doc/html/libvirt/*.png
%doc %{_datadir}/gtk-doc/html/libvirt/*.css
+%dir %{_datadir}/libvirt/api/
+%{_datadir}/libvirt/api/libvirt-api.xml
+%{_datadir}/libvirt/api/libvirt-qemu-api.xml
+
%doc docs/*.html docs/html docs/*.gif
%doc docs/libvirt-api.xml
%doc examples/hellolibvirt
@@ -1227,6 +1199,19 @@ fi
%endif
%changelog
+* Fri Jun 15 2012 Cole Robinson <crobinso at redhat.com> - 0.9.6.1-1
+- Rebased to version 0.9.6.1
+- Emit spice graphics events (bz 784813)
+- Add usbredir spice channel (bz 821469)
+- Add default spice channel (bz 821474)
+- Various stream fixes and improvements (bz 743900)
+- Fix state syncing when xen domain shuts down (bz 746007)
+- Don't show <console> for xen dom0 (bz 752271)
+- Fix selinux denial on /usr/libexec/pt_chown from LXC (bz 785411)
+- Don't flood LXC log file (bz 785431)
+- Fix several double close bugs (bz 827127)
+- Fix PCI assignment for USB2.0 controllers (bz 822160)
+
* Fri Mar 30 2012 Osier Yang <jyang at redhat.com> - 0.9.6-6
- fix typo in chkconfig commandline for specfile - Bug 786890
diff --git a/sources b/sources
index 55185f3..01bbca0 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b74df374b524d00a22a6c89cfc23099f libvirt-0.9.6.tar.gz
+546e1ff724a4e9f37cdae4917d396e21 libvirt-0.9.6.1.tar.gz
More information about the scm-commits
mailing list