mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
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:
parent
8e91a400cf
commit
9cd0fe69cd
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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");
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<qemuCaps>
|
||||
<flag name='vnc-colon'/>
|
||||
<flag name='no-reboot'/>
|
||||
<flag name='drive'/>
|
||||
<flag name='name'/>
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user