From 2277edb964731b7b2f80c371148f01848a03eacf Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Tomko?= Date: Fri, 19 May 2017 12:56:48 +0200 Subject: [PATCH] qemu: handle missing bind host/service on chardev hotplug On domain startup, bind host or bind service can be omitted and we will format a working command line. Extend this to hotplug as well and specify the service to QEMU even if the host is missing. https://bugzilla.redhat.com/show_bug.cgi?id=1452441 --- src/qemu/qemu_monitor_json.c | 13 ++++++++++--- tests/qemumonitorjsontest.c | 11 +++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 5ddc09ca63..65b1fbb8ee 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6435,6 +6435,8 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID, virJSONValuePtr data = NULL; virJSONValuePtr addr = NULL; const char *backend_type = NULL; + const char *host; + const char *port; char *tlsalias = NULL; bool telnet; @@ -6498,9 +6500,14 @@ qemuMonitorJSONAttachCharDevCommand(const char *chrID, virJSONValueObjectAppend(data, "remote", addr) < 0) goto cleanup; - if (chr->data.udp.bindHost) { - addr = qemuMonitorJSONBuildInetSocketAddress(chr->data.udp.bindHost, - chr->data.udp.bindService); + host = chr->data.udp.bindHost; + port = chr->data.udp.bindService; + if (host || port) { + if (!host) + host = ""; + if (!port) + port = ""; + addr = qemuMonitorJSONBuildInetSocketAddress(host, port); if (!addr || virJSONValueObjectAppend(data, "local", addr) < 0) goto cleanup; diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 6da27f7839..243f76469d 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -895,6 +895,17 @@ qemuMonitorJSONTestAttachChardev(virDomainXMLOptionPtr xmlopt) "'data':{'host':'localhost'," "'port':'4321'}}}}}"); + chr.data.udp.bindHost = NULL; + chr.data.udp.bindService = (char *) "4321"; + CHECK("udp", false, + "{'id':'alias'," + "'backend':{'type':'udp'," + "'data':{'remote':{'type':'inet'," + "'data':{'host':'example.com'," + "'port':'1234'}}," + "'local':{'type':'inet'," + "'data':{'host':''," + "'port':'4321'}}}}}"); memset(&chr, 0, sizeof(chr)); chr.type = VIR_DOMAIN_CHR_TYPE_UNIX; chr.data.nix.path = (char *) "/path/to/socket"; -- 2.47.2