From b33c14b342e5c2abeeee91c852ef2032327cb355 Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Mon, 9 May 2016 15:50:54 +0200 Subject: [PATCH] graphics: make address attribute for listen type='address' optional We support omitting listen attribute of graphics element so we should also support omitting address attribute of listen element. This patch also updates libvirt to always add a listen element into domain XML except for VNC graphics if socket attribute is specified. Signed-off-by: Pavel Hrdina --- docs/formatdomain.html.in | 32 +++++++++++-------- docs/schemas/domaincommon.rng | 8 +++-- src/conf/domain_conf.c | 3 +- src/qemu/qemu_process.c | 16 ++++++---- src/vbox/vbox_common.c | 6 ++-- src/vmx/vmx.c | 8 ++--- src/xenconfig/xen_common.c | 12 ++++--- src/xenconfig/xen_sxpr.c | 6 ++-- src/xenconfig/xen_xl.c | 3 +- .../generic-graphics-vnc-manual-port.xml | 4 ++- .../generic-graphics-vnc-minimal.xml | 4 ++- .../qemuxml2xmlout-graphics-spice-timeout.xml | 4 ++- .../qemuxml2xmlout-interface-server.xml | 4 ++- .../qemuxml2xmlout-net-bandwidth.xml | 4 ++- .../qemuxml2xmlout-net-bandwidth2.xml | 4 ++- ...muxml2xmlout-video-virtio-gpu-spice-gl.xml | 1 + tests/sexpr2xmldata/sexpr2xml-curmem.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-fv-autoport.xml | 4 ++- .../sexpr2xml-fv-empty-kernel.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-force-hpet.xml | 4 ++- .../sexpr2xml-fv-force-nohpet.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-localtime.xml | 4 ++- .../sexpr2xml-fv-net-netfront.xml | 4 ++- .../sexpr2xml-fv-parallel-tcp.xml | 4 ++- .../sexpr2xml-fv-serial-dev-2-ports.xml | 4 ++- .../sexpr2xml-fv-serial-dev-2nd-port.xml | 4 ++- .../sexpr2xml-fv-serial-file.xml | 4 ++- .../sexpr2xml-fv-serial-null.xml | 4 ++- .../sexpr2xml-fv-serial-pipe.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-serial-pty.xml | 4 ++- .../sexpr2xml-fv-serial-stdio.xml | 4 ++- .../sexpr2xml-fv-serial-tcp-telnet.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-serial-udp.xml | 4 ++- .../sexpr2xml-fv-serial-unix.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-sound-all.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-fv-sound.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml | 4 ++- .../sexpr2xmldata/sexpr2xml-fv-usbtablet.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-fv-utc.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-fv-v2.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-fv.xml | 4 ++- .../sexpr2xml-no-source-cdrom.xml | 4 ++- .../sexpr2xml-pv-vfb-type-crash.xml | 4 ++- tests/sexpr2xmldata/sexpr2xml-vif-rate.xml | 4 ++- tests/vmx2xmldata/vmx2xml-graphics-vnc.xml | 4 ++- tests/xmconfigdata/test-no-source-cdrom.xml | 4 ++- tests/xmconfigdata/test-pci-devs.xml | 4 ++- 48 files changed, 168 insertions(+), 79 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 58b8cb6077..fd2dd339c7 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -5126,11 +5126,10 @@ qemu-kvm -net nic,model=? /dev/null the TCP port number (with -1 as legacy syntax indicating that it should be auto-allocated). The autoport attribute is the new preferred syntax for indicating auto-allocation of the TCP - port to use. The listen attribute is an IP address - for the server to listen on. The passwd attribute - provides a VNC password in clear text. The keymap - attribute specifies the keymap to use. It is possible to set - a limit on the validity of the password by giving an timestamp + port to use. The passwd attribute provides a VNC + password in clear text. The keymap attribute specifies + the keymap to use. It is possible to set a limit on the validity of + the password by giving an timestamp passwdValidTo='2010-04-09T15:51:00' assumed to be in UTC. The connected attribute allows control of connected client during password changes. VNC accepts @@ -5168,14 +5167,12 @@ qemu-kvm -net nic,model=? /dev/null should be auto-allocated), while tlsPort gives an alternative secure port number. The autoport attribute is the new preferred syntax for indicating - auto-allocation of needed port numbers. The listen - attribute is an IP address for the server to listen on. - The passwd attribute provides a SPICE password in - clear text. The keymap attribute specifies the keymap - to use. It is possible to set a limit on the validity of - the password by giving an timestamp - passwdValidTo='2010-04-09T15:51:00' assumed to be in - UTC. + auto-allocation of needed port numbers. The passwd + attribute provides a SPICE password in clear text. The + keymap attribute specifies the keymap to use. It is + possible to set a limit on the validity of the password by giving + an timestamp passwdValidTo='2010-04-09T15:51:00' + assumed to be in UTC.

The connected attribute allows control of connected @@ -5312,6 +5309,15 @@ qemu-kvm -net nic,model=? /dev/null or hostname (which will be resolved to an IP address via a DNS query) to listen on.

+

+ It is possible to omit the address attribute in order to + use an address from config files Since 1.3.5. +

+

+ The address attribute is duplicated as listen + attribute in graphics element for backward compatibility. + If both are provided they must be equal. +

network
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 8798001d7d..903fd7ebe6 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -2952,9 +2952,11 @@ address - - - + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b6f02677e7..0967e32366 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -10800,8 +10800,7 @@ virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def, if (STREQ_NULLABLE(newListen.address, "")) VIR_FREE(newListen.address); - if (newListen.address && - VIR_APPEND_ELEMENT(def->listens, def->nListens, newListen) < 0) + if (VIR_APPEND_ELEMENT(def->listens, def->nListens, newListen) < 0) goto error; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index eddf3a7b09..f4bf6c1663 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4394,7 +4394,7 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver, { virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); bool allocate = !(flags & VIR_QEMU_PROCESS_START_PRETEND); - size_t i; + size_t i, j; int ret = -1; if (allocate && qemuProcessGraphicsReservePorts(driver, vm) < 0) @@ -4426,12 +4426,16 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver, break; } - if (graphics->nListens == 0 && listenAddr) { - if (virDomainGraphicsListenAppendAddress(graphics, - listenAddr) < 0) - goto cleanup; + for (j = 0; j < graphics->nListens; j++) { + virDomainGraphicsListenDefPtr glisten = &graphics->listens[j]; - graphics->listens[0].fromConfig = true; + if (glisten->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS && + !glisten->address && listenAddr) { + if (VIR_STRDUP(glisten->address, listenAddr) < 0) + goto cleanup; + + glisten->fromConfig = true; + } } } diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index ed22724779..13c3fec98d 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3385,8 +3385,10 @@ vboxDumpDisplay(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine) VBOX_UTF16_FREE(netAddressUtf16); } - if (STRNEQ_NULLABLE(netAddressUtf8, "") && - virDomainGraphicsListenAppendAddress(graphics, netAddressUtf8) < 0) + if (netAddressUtf8 && STREQ(netAddressUtf8, "")) + VBOX_UTF8_FREE(netAddressUtf8); + + if (virDomainGraphicsListenAppendAddress(graphics, netAddressUtf8) < 0) goto cleanup; gVBoxAPI.UIVRDxServer.GetAllowMultiConnection(VRDxServer, &allowMultiConnection); diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 5e57c3902e..6505dd789f 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -1875,11 +1875,9 @@ virVMXParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def) goto failure; } - if (listenAddr) { - if (virDomainGraphicsListenAppendAddress(*def, listenAddr) < 0) - goto failure; - VIR_FREE(listenAddr); - } + if (virDomainGraphicsListenAppendAddress(*def, listenAddr) < 0) + goto failure; + VIR_FREE(listenAddr); if (port < 0) { VIR_WARN("VNC is enabled but VMX entry 'RemoteDisplay.vnc.port' " diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c index c6aee69254..c753fa8de0 100644 --- a/src/xenconfig/xen_common.c +++ b/src/xenconfig/xen_common.c @@ -594,8 +594,7 @@ xenParseVfb(virConfPtr conf, virDomainDefPtr def) if (xenConfigCopyStringOpt(conf, "vnclisten", &listenAddr) < 0) goto cleanup; - if (listenAddr && - virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) + if (virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto cleanup; VIR_FREE(listenAddr); @@ -664,8 +663,7 @@ xenParseVfb(virConfPtr conf, virDomainDefPtr def) if (STREQ(key + 10, "1")) graphics->data.vnc.autoport = true; } else if (STRPREFIX(key, "vnclisten=")) { - if (virDomainGraphicsListenAppendAddress(graphics, - key+10) < 0) + if (VIR_STRDUP(listenAddr, key+10) < 0) goto cleanup; } else if (STRPREFIX(key, "vncpasswd=")) { if (VIR_STRDUP(graphics->data.vnc.auth.passwd, key + 10) < 0) @@ -699,6 +697,12 @@ xenParseVfb(virConfPtr conf, virDomainDefPtr def) nextkey++; key = nextkey; } + if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) { + if (virDomainGraphicsListenAppendAddress(graphics, + listenAddr) < 0) + goto cleanup; + VIR_FREE(listenAddr); + } if (VIR_ALLOC_N(def->graphics, 1) < 0) goto cleanup; def->graphics[0] = graphics; diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c index d4aa5e99f0..8b5e06326d 100644 --- a/src/xenconfig/xen_sxpr.c +++ b/src/xenconfig/xen_sxpr.c @@ -867,8 +867,7 @@ xenParseSxprGraphicsOld(virDomainDefPtr def, graphics->data.vnc.autoport = true; graphics->data.vnc.port = port; - if (listenAddr && - virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) + if (virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto error; if (VIR_STRDUP(graphics->data.vnc.auth.passwd, vncPasswd) < 0) @@ -988,8 +987,7 @@ xenParseSxprGraphicsNew(virDomainDefPtr def, port += 5900; graphics->data.vnc.port = port; - if (listenAddr && - virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) + if (virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto error; if (VIR_STRDUP(graphics->data.vnc.auth.passwd, vncPasswd) < 0) diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index 889dd400fc..7d41e0504e 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -186,8 +186,7 @@ xenParseXLSpice(virConfPtr conf, virDomainDefPtr def) graphics->type = VIR_DOMAIN_GRAPHICS_TYPE_SPICE; if (xenConfigCopyStringOpt(conf, "spicehost", &listenAddr) < 0) goto cleanup; - if (listenAddr && - virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) + if (virDomainGraphicsListenAppendAddress(graphics, listenAddr) < 0) goto cleanup; VIR_FREE(listenAddr); diff --git a/tests/genericxml2xmloutdata/generic-graphics-vnc-manual-port.xml b/tests/genericxml2xmloutdata/generic-graphics-vnc-manual-port.xml index ac8c27960e..73010576f8 100644 --- a/tests/genericxml2xmloutdata/generic-graphics-vnc-manual-port.xml +++ b/tests/genericxml2xmloutdata/generic-graphics-vnc-manual-port.xml @@ -19,7 +19,9 @@ - + + + diff --git a/tests/genericxml2xmloutdata/generic-graphics-vnc-minimal.xml b/tests/genericxml2xmloutdata/generic-graphics-vnc-minimal.xml index ac8c27960e..73010576f8 100644 --- a/tests/genericxml2xmloutdata/generic-graphics-vnc-minimal.xml +++ b/tests/genericxml2xmloutdata/generic-graphics-vnc-minimal.xml @@ -19,7 +19,9 @@ - + + + diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml index 33b5465c5d..912b542843 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml @@ -77,7 +77,9 @@ - + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-interface-server.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-interface-server.xml index 9bc610bbe2..95b6e2df1a 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-interface-server.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-interface-server.xml @@ -119,7 +119,9 @@ - + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth.xml index b9c90159ff..1fb740b9d6 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth.xml @@ -63,7 +63,9 @@ - + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth2.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth2.xml index 411b409a2c..6464890ef0 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth2.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-net-bandwidth2.xml @@ -52,7 +52,9 @@ - + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-virtio-gpu-spice-gl.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-virtio-gpu-spice-gl.xml index 4b06e480ba..a6dddab562 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-virtio-gpu-spice-gl.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-virtio-gpu-spice-gl.xml @@ -30,6 +30,7 @@ +