mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
conf: move TCP chardev source parsing to separate function
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
9ed225e910
commit
40b0f40b54
@ -10927,6 +10927,52 @@ virDomainChrSourceDefParseMode(xmlNodePtr source)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
virDomainChrSourceDefParseTCP(virDomainChrSourceDefPtr def,
|
||||||
|
xmlNodePtr source,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
int mode;
|
||||||
|
char *tmp = NULL;
|
||||||
|
int tmpVal;
|
||||||
|
|
||||||
|
if ((mode = virDomainChrSourceDefParseMode(source)) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
def->data.tcp.listen = mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND;
|
||||||
|
def->data.tcp.host = virXMLPropString(source, "host");
|
||||||
|
def->data.tcp.service = virXMLPropString(source, "service");
|
||||||
|
|
||||||
|
if ((tmp = virXMLPropString(source, "tls"))) {
|
||||||
|
if ((def->data.tcp.haveTLS = virTristateBoolTypeFromString(tmp)) <= 0) {
|
||||||
|
virReportError(VIR_ERR_XML_ERROR,
|
||||||
|
_("unknown chardev 'tls' setting '%s'"),
|
||||||
|
tmp);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
VIR_FREE(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((flags & VIR_DOMAIN_DEF_PARSE_STATUS) &&
|
||||||
|
(tmp = virXMLPropString(source, "tlsFromConfig"))) {
|
||||||
|
if (virStrToLong_i(tmp, NULL, 10, &tmpVal) < 0) {
|
||||||
|
virReportError(VIR_ERR_XML_ERROR,
|
||||||
|
_("Invalid tlsFromConfig value: %s"),
|
||||||
|
tmp);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
def->data.tcp.tlsFromConfig = !!tmpVal;
|
||||||
|
VIR_FREE(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
VIR_FREE(tmp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDomainChrSourceDefParseProtocol(virDomainChrSourceDefPtr def,
|
virDomainChrSourceDefParseProtocol(virDomainChrSourceDefPtr def,
|
||||||
xmlNodePtr protocol)
|
xmlNodePtr protocol)
|
||||||
@ -10999,8 +11045,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
|
|||||||
char *master = NULL;
|
char *master = NULL;
|
||||||
char *slave = NULL;
|
char *slave = NULL;
|
||||||
char *append = NULL;
|
char *append = NULL;
|
||||||
char *haveTLS = NULL;
|
|
||||||
char *tlsFromConfig = NULL;
|
|
||||||
bool logParsed = false;
|
bool logParsed = false;
|
||||||
bool protocolParsed = false;
|
bool protocolParsed = false;
|
||||||
int sourceParsed = 0;
|
int sourceParsed = 0;
|
||||||
@ -11026,11 +11070,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
|
|||||||
}
|
}
|
||||||
sourceParsed++;
|
sourceParsed++;
|
||||||
|
|
||||||
if (!haveTLS)
|
|
||||||
haveTLS = virXMLPropString(cur, "tls");
|
|
||||||
if (!tlsFromConfig)
|
|
||||||
tlsFromConfig = virXMLPropString(cur, "tlsFromConfig");
|
|
||||||
|
|
||||||
switch ((virDomainChrType) def->type) {
|
switch ((virDomainChrType) def->type) {
|
||||||
case VIR_DOMAIN_CHR_TYPE_FILE:
|
case VIR_DOMAIN_CHR_TYPE_FILE:
|
||||||
case VIR_DOMAIN_CHR_TYPE_PTY:
|
case VIR_DOMAIN_CHR_TYPE_PTY:
|
||||||
@ -11052,7 +11091,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_CHR_TYPE_UDP:
|
case VIR_DOMAIN_CHR_TYPE_UDP:
|
||||||
case VIR_DOMAIN_CHR_TYPE_TCP:
|
|
||||||
if ((mode = virDomainChrSourceDefParseMode(cur)) < 0)
|
if ((mode = virDomainChrSourceDefParseMode(cur)) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT) {
|
if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT) {
|
||||||
@ -11066,7 +11104,11 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
|
|||||||
if (!bindService)
|
if (!bindService)
|
||||||
bindService = virXMLPropString(cur, "service");
|
bindService = virXMLPropString(cur, "service");
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_CHR_TYPE_TCP:
|
||||||
|
if (virDomainChrSourceDefParseTCP(def, cur, flags) < 0)
|
||||||
|
goto error;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_CHR_TYPE_SPICEPORT:
|
case VIR_DOMAIN_CHR_TYPE_SPICEPORT:
|
||||||
@ -11176,63 +11218,16 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_CHR_TYPE_TCP:
|
case VIR_DOMAIN_CHR_TYPE_TCP:
|
||||||
if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT) {
|
if (!def->data.tcp.host) {
|
||||||
if (!connectHost) {
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
_("Missing source host attribute for char device"));
|
||||||
_("Missing source host attribute for char device"));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!connectService) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
||||||
_("Missing source service attribute for char device"));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
def->data.tcp.host = connectHost;
|
|
||||||
connectHost = NULL;
|
|
||||||
def->data.tcp.service = connectService;
|
|
||||||
connectService = NULL;
|
|
||||||
def->data.tcp.listen = false;
|
|
||||||
} else if (mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND) {
|
|
||||||
if (!bindHost) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
||||||
_("Missing source host attribute for char device"));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bindService) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
||||||
_("Missing source service attribute for char device"));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
def->data.tcp.host = bindHost;
|
|
||||||
bindHost = NULL;
|
|
||||||
def->data.tcp.service = bindService;
|
|
||||||
bindService = NULL;
|
|
||||||
def->data.tcp.listen = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (haveTLS &&
|
|
||||||
(def->data.tcp.haveTLS =
|
|
||||||
virTristateBoolTypeFromString(haveTLS)) <= 0) {
|
|
||||||
virReportError(VIR_ERR_XML_ERROR,
|
|
||||||
_("unknown chardev 'tls' setting '%s'"),
|
|
||||||
haveTLS);
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tlsFromConfig &&
|
if (!def->data.tcp.service) {
|
||||||
flags & VIR_DOMAIN_DEF_PARSE_STATUS) {
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
int tmp;
|
_("Missing source service attribute for char device"));
|
||||||
if (virStrToLong_i(tlsFromConfig, NULL, 10, &tmp) < 0) {
|
goto error;
|
||||||
virReportError(VIR_ERR_XML_ERROR,
|
|
||||||
_("Invalid tlsFromConfig value: %s"),
|
|
||||||
tlsFromConfig);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
def->data.tcp.tlsFromConfig = !!tmp;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -11296,8 +11291,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
|
|||||||
VIR_FREE(path);
|
VIR_FREE(path);
|
||||||
VIR_FREE(channel);
|
VIR_FREE(channel);
|
||||||
VIR_FREE(append);
|
VIR_FREE(append);
|
||||||
VIR_FREE(haveTLS);
|
|
||||||
VIR_FREE(tlsFromConfig);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user