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
This commit is contained in:
Ján Tomko 2017-05-19 12:56:48 +02:00
parent 65bb16d9e8
commit 2277edb964
2 changed files with 21 additions and 3 deletions

View File

@ -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;

View File

@ -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";