mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
domain_conf: Expose virDomainStorageNetworkParseHost
An upcoming patch wants to reuse XML parsing of both unix and tcp network host descriptions in the context of setting up a backup NBD server. Make that easier by refactoring the existing parser. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
9d458bd913
commit
94bbe3da4f
@ -7517,23 +7517,21 @@ virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
int
|
||||||
virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
|
virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
|
||||||
virStorageNetHostDefPtr *hosts,
|
virStorageNetHostDefPtr host)
|
||||||
size_t *nhosts)
|
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
virStorageNetHostDef host;
|
|
||||||
VIR_AUTOFREE(char *) transport = NULL;
|
VIR_AUTOFREE(char *) transport = NULL;
|
||||||
VIR_AUTOFREE(char *) port = NULL;
|
VIR_AUTOFREE(char *) port = NULL;
|
||||||
|
|
||||||
memset(&host, 0, sizeof(host));
|
memset(host, 0, sizeof(*host));
|
||||||
host.transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
host->transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||||
|
|
||||||
/* transport can be tcp (default), unix or rdma. */
|
/* transport can be tcp (default), unix or rdma. */
|
||||||
if ((transport = virXMLPropString(hostnode, "transport"))) {
|
if ((transport = virXMLPropString(hostnode, "transport"))) {
|
||||||
host.transport = virStorageNetHostTransportTypeFromString(transport);
|
host->transport = virStorageNetHostTransportTypeFromString(transport);
|
||||||
if (host.transport < 0) {
|
if (host->transport < 0) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("unknown protocol transport type '%s'"),
|
_("unknown protocol transport type '%s'"),
|
||||||
transport);
|
transport);
|
||||||
@ -7541,17 +7539,17 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
host.socket = virXMLPropString(hostnode, "socket");
|
host->socket = virXMLPropString(hostnode, "socket");
|
||||||
|
|
||||||
if (host.transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
if (host->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
||||||
host.socket == NULL) {
|
host->socket == NULL) {
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("missing socket for unix transport"));
|
_("missing socket for unix transport"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (host.transport != VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
if (host->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
||||||
host.socket != NULL) {
|
host->socket != NULL) {
|
||||||
virReportError(VIR_ERR_XML_ERROR,
|
virReportError(VIR_ERR_XML_ERROR,
|
||||||
_("transport '%s' does not support "
|
_("transport '%s' does not support "
|
||||||
"socket attribute"),
|
"socket attribute"),
|
||||||
@ -7559,26 +7557,24 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (host.transport != VIR_STORAGE_NET_HOST_TRANS_UNIX) {
|
if (host->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX) {
|
||||||
if (!(host.name = virXMLPropString(hostnode, "name"))) {
|
if (!(host->name = virXMLPropString(hostnode, "name"))) {
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("missing name for host"));
|
_("missing name for host"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((port = virXMLPropString(hostnode, "port"))) {
|
if ((port = virXMLPropString(hostnode, "port"))) {
|
||||||
if (virStringParsePort(port, &host.port) < 0)
|
if (virStringParsePort(port, &host->port) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VIR_APPEND_ELEMENT(*hosts, *nhosts, host) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virStorageNetHostDefClear(&host);
|
if (ret < 0)
|
||||||
|
virStorageNetHostDefClear(host);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7593,9 +7589,14 @@ virDomainStorageNetworkParseHosts(xmlNodePtr node,
|
|||||||
for (child = node->children; child; child = child->next) {
|
for (child = node->children; child; child = child->next) {
|
||||||
if (child->type == XML_ELEMENT_NODE &&
|
if (child->type == XML_ELEMENT_NODE &&
|
||||||
virXMLNodeNameEqual(child, "host")) {
|
virXMLNodeNameEqual(child, "host")) {
|
||||||
|
virStorageNetHostDef host;
|
||||||
|
|
||||||
if (virDomainStorageNetworkParseHost(child, hosts, nhosts) < 0)
|
if (virDomainStorageNetworkParseHost(child, &host) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
if (VIR_APPEND_ELEMENT(*hosts, *nhosts, host) < 0) {
|
||||||
|
virStorageNetHostDefClear(&host);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3273,6 +3273,8 @@ int virDomainDiskInsert(virDomainDefPtr def,
|
|||||||
ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_RETURN_CHECK;
|
||||||
void virDomainDiskInsertPreAlloced(virDomainDefPtr def,
|
void virDomainDiskInsertPreAlloced(virDomainDefPtr def,
|
||||||
virDomainDiskDefPtr disk);
|
virDomainDiskDefPtr disk);
|
||||||
|
int virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
|
||||||
|
virStorageNetHostDefPtr host);
|
||||||
int virDomainDiskDefAssignAddress(virDomainXMLOptionPtr xmlopt,
|
int virDomainDiskDefAssignAddress(virDomainXMLOptionPtr xmlopt,
|
||||||
virDomainDiskDefPtr def,
|
virDomainDiskDefPtr def,
|
||||||
const virDomainDef *vmdef);
|
const virDomainDef *vmdef);
|
||||||
|
@ -562,6 +562,7 @@ virDomainStateReasonFromString;
|
|||||||
virDomainStateReasonToString;
|
virDomainStateReasonToString;
|
||||||
virDomainStateTypeFromString;
|
virDomainStateTypeFromString;
|
||||||
virDomainStateTypeToString;
|
virDomainStateTypeToString;
|
||||||
|
virDomainStorageNetworkParseHost;
|
||||||
virDomainStorageSourceFormat;
|
virDomainStorageSourceFormat;
|
||||||
virDomainStorageSourceParse;
|
virDomainStorageSourceParse;
|
||||||
virDomainTaintTypeFromString;
|
virDomainTaintTypeFromString;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user