qemu: assume -vnc arg always takes a ':'

As of QEMU 0.9.0 the -vnc option accepts a ':' to separate port
from listen address, so the QEMU driver can assume that support
for listen addresses is always available.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2015-11-05 11:56:47 +00:00
parent 8e91a400cf
commit 9cd0fe69cd
16 changed files with 75 additions and 106 deletions

View File

@ -1229,9 +1229,6 @@ virQEMUCapsComputeCmdFlags(const char *help,
strstr(help, "sockets="))
virQEMUCapsSet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY);
if (version >= 9000)
virQEMUCapsSet(qemuCaps, QEMU_CAPS_VNC_COLON);
if (is_kvm && (version >= 10000 || kvm_version >= 74))
virQEMUCapsSet(qemuCaps, QEMU_CAPS_VNET_HDR);
@ -3219,7 +3216,6 @@ static qemuMonitorCallbacks callbacks = {
static void
virQEMUCapsInitQMPBasic(virQEMUCapsPtr qemuCaps)
{
virQEMUCapsSet(qemuCaps, QEMU_CAPS_VNC_COLON);
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_REBOOT);
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DRIVE);
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NAME);

View File

@ -47,7 +47,7 @@
typedef enum {
/* 0 */
X_QEMU_CAPS_KQEMU, /* Whether KQEMU is compiled in */
QEMU_CAPS_VNC_COLON, /* VNC takes or address + display */
X_QEMU_CAPS_VNC_COLON, /* VNC takes or address + display */
QEMU_CAPS_NO_REBOOT, /* Is the -no-reboot flag available */
QEMU_CAPS_DRIVE, /* Is the new -drive arg available */
QEMU_CAPS_DRIVE_BOOT, /* Does -drive support boot=on */

View File

@ -8210,97 +8210,90 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
goto error;
}
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_COLON)) {
switch (virDomainGraphicsListenGetType(graphics, 0)) {
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
listenAddr = virDomainGraphicsListenGetAddress(graphics, 0);
switch (virDomainGraphicsListenGetType(graphics, 0)) {
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
listenAddr = virDomainGraphicsListenGetAddress(graphics, 0);
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
listenNetwork = virDomainGraphicsListenGetNetwork(graphics, 0);
if (!listenNetwork)
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
listenNetwork = virDomainGraphicsListenGetNetwork(graphics, 0);
if (!listenNetwork)
break;
ret = networkGetNetworkAddress(listenNetwork, &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 (virDomainGraphicsListenSetAddress(graphics, 0,
listenAddr, -1, false) < 0)
goto error;
break;
}
if (!listenAddr)
listenAddr = cfg->vncListen;
escapeAddr = strchr(listenAddr, ':') != NULL;
if (escapeAddr)
virBufferAsprintf(&opt, "[%s]", listenAddr);
else
virBufferAdd(&opt, listenAddr, -1);
virBufferAsprintf(&opt, ":%d",
graphics->data.vnc.port - 5900);
VIR_FREE(netAddr);
} else {
virBufferAsprintf(&opt, "%d",
graphics->data.vnc.port - 5900);
}
}
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_COLON)) {
if (!graphics->data.vnc.socket &&
graphics->data.vnc.websocket) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_WEBSOCKET)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("VNC WebSockets are not supported "
"with this QEMU binary"));
goto error;
}
virBufferAsprintf(&opt, ",websocket=%d", graphics->data.vnc.websocket);
}
if (graphics->data.vnc.sharePolicy) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_SHARE_POLICY)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("vnc display sharing policy is not "
"supported with this QEMU"));
ret = networkGetNetworkAddress(listenNetwork, &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;
virBufferAsprintf(&opt, ",share=%s",
virDomainGraphicsVNCSharePolicyTypeToString(
listenAddr = netAddr;
/* store the address we found in the <graphics> element so it
* will show up in status. */
if (virDomainGraphicsListenSetAddress(graphics, 0,
listenAddr, -1, false) < 0)
goto error;
break;
}
if (!listenAddr)
listenAddr = cfg->vncListen;
escapeAddr = strchr(listenAddr, ':') != NULL;
if (escapeAddr)
virBufferAsprintf(&opt, "[%s]", listenAddr);
else
virBufferAdd(&opt, listenAddr, -1);
virBufferAsprintf(&opt, ":%d",
graphics->data.vnc.port - 5900);
VIR_FREE(netAddr);
}
if (!graphics->data.vnc.socket &&
graphics->data.vnc.websocket) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_WEBSOCKET)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("VNC WebSockets are not supported "
"with this QEMU binary"));
goto error;
}
virBufferAsprintf(&opt, ",websocket=%d", graphics->data.vnc.websocket);
}
if (graphics->data.vnc.sharePolicy) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC_SHARE_POLICY)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("vnc display sharing policy is not "
"supported with this QEMU"));
goto error;
}
virBufferAsprintf(&opt, ",share=%s",
virDomainGraphicsVNCSharePolicyTypeToString(
graphics->data.vnc.sharePolicy));
}
}
if (graphics->data.vnc.auth.passwd || cfg->vncPassword)
virBufferAddLit(&opt, ",password");
if (graphics->data.vnc.auth.passwd || cfg->vncPassword)
virBufferAddLit(&opt, ",password");
if (cfg->vncTLS) {
virBufferAddLit(&opt, ",tls");
if (cfg->vncTLSx509verify)
virBufferAsprintf(&opt, ",x509verify=%s", cfg->vncTLSx509certdir);
else
virBufferAsprintf(&opt, ",x509=%s", cfg->vncTLSx509certdir);
}
if (cfg->vncTLS) {
virBufferAddLit(&opt, ",tls");
if (cfg->vncTLSx509verify)
virBufferAsprintf(&opt, ",x509verify=%s", cfg->vncTLSx509certdir);
else
virBufferAsprintf(&opt, ",x509=%s", cfg->vncTLSx509certdir);
}
if (cfg->vncSASL) {
virBufferAddLit(&opt, ",sasl");
if (cfg->vncSASL) {
virBufferAddLit(&opt, ",sasl");
if (cfg->vncSASLdir)
virCommandAddEnvPair(cmd, "SASL_CONF_PATH", cfg->vncSASLdir);
if (cfg->vncSASLdir)
virCommandAddEnvPair(cmd, "SASL_CONF_PATH", cfg->vncSASLdir);
/* TODO: Support ACLs later */
}
/* TODO: Support ACLs later */
}
virCommandAddArg(cmd, "-vnc");

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -1,5 +1,4 @@
<qemuCaps>
<flag name='vnc-colon'/>
<flag name='no-reboot'/>
<flag name='drive'/>
<flag name='name'/>

View File

@ -152,7 +152,6 @@ mymain(void)
DO_TEST_FULL(name, version, is_kvm, kvm_version, VIR_ERR_OK, __VA_ARGS__)
DO_TEST("qemu-0.12.1", 12001, 0, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_NAME,
@ -188,7 +187,6 @@ mymain(void)
QEMU_CAPS_CPU_HOST,
QEMU_CAPS_VNC);
DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_DRIVE_BOOT,
@ -251,7 +249,6 @@ mymain(void)
QEMU_CAPS_DEVICE_E1000,
QEMU_CAPS_DEVICE_VIRTIO_NET);
DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_DRIVE_BOOT,
@ -294,7 +291,6 @@ mymain(void)
QEMU_CAPS_CPU_HOST,
QEMU_CAPS_VNC);
DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_DRIVE_BOOT,
@ -369,7 +365,6 @@ mymain(void)
QEMU_CAPS_DEVICE_E1000,
QEMU_CAPS_DEVICE_VIRTIO_NET);
DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_NAME,
@ -439,7 +434,6 @@ mymain(void)
QEMU_CAPS_DEVICE_E1000,
QEMU_CAPS_DEVICE_VIRTIO_NET);
DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_NAME,
@ -517,7 +511,6 @@ mymain(void)
QEMU_CAPS_DEVICE_E1000,
QEMU_CAPS_DEVICE_VIRTIO_NET);
DO_TEST("qemu-1.0", 1000000, 0, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_NAME,
@ -610,7 +603,6 @@ mymain(void)
QEMU_CAPS_DEVICE_E1000,
QEMU_CAPS_DEVICE_VIRTIO_NET);
DO_TEST("qemu-1.1.0", 1001000, 0, 0,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_DRIVE,
QEMU_CAPS_NAME,

View File

@ -292,7 +292,6 @@ static int testCompareXMLToArgvFiles(const char *xml,
monitor_chr.data.nix.listen = true;
virQEMUCapsSetList(extraFlags,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_NO_ACPI,
QEMU_CAPS_LAST);

View File

@ -114,7 +114,6 @@ static const char testStatusXMLPrefix[] =
" <vcpu pid='3803519'/>\n"
" </vcpus>\n"
" <qemuCaps>\n"
" <flag name='vnc-colon'/>\n"
" <flag name='no-reboot'/>\n"
" <flag name='drive'/>\n"
" <flag name='name'/>\n"

View File

@ -86,7 +86,6 @@ static int testCompareXMLToArgvFiles(const char *xml,
goto fail;
virQEMUCapsSetList(extraFlags,
QEMU_CAPS_VNC_COLON,
QEMU_CAPS_NO_REBOOT,
QEMU_CAPS_NO_ACPI,
QEMU_CAPS_LAST);