Signed-off-by: Shi Lei <shi_lei(a)massclouds.com>
---
docs/schemas/network.rng | 7 +++--
po/POTFILES.in | 1 +
src/conf/network_conf.c | 66 +++++-----------------------------------
3 files changed, 13 insertions(+), 61 deletions(-)
diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng
index ee4487e..c902f7e 100644
--- a/docs/schemas/network.rng
+++ b/docs/schemas/network.rng
@@ -337,14 +337,17 @@
"structure": {"output":
"src/conf/network_conf"},
"clearfunc": {"output":
"src/conf/network_conf"},
"parsefunc": {
- "args.noctxt": true,
+ "output": "src/conf/network_conf",
"args.instname": true,
"post": true,
"args": [
{"name": "partialOkay", "type":
"Bool"}
]
},
- "members": [{"id": "hostname",
"name": "name"}]
+ "members": [
+ {"id": "ip", "opt": true},
+ {"id": "hostname", "name":
"name", "opt": true}
+ ]
} -->
<element name="host">
<attribute name="ip"><ref
name="ipAddr"/></attribute>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 2358b01..5e2985a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,6 +3,7 @@
@BUILDDIR(a)/src/access/viraccessapicheckqemu.c
@BUILDDIR(a)/src/admin/admin_client.h
@BUILDDIR(a)/src/admin/admin_server_dispatch_stubs.h
+@BUILDDIR(a)/src/conf/network_conf.generated.c
@BUILDDIR(a)/src/remote/remote_client_bodies.h
@BUILDDIR(a)/src/remote/remote_daemon_dispatch_stubs.h
@SRCDIR(a)/rng2c/directive.py
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index d9f2252..6f0722a 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -560,9 +560,10 @@ virNetworkDHCPDefParseXML(const char *networkName,
}
-static int
+int
virNetworkDNSHostDefParseXMLPost(xmlNodePtr curnode G_GNUC_UNUSED,
virNetworkDNSHostDefPtr def,
+ xmlXPathContextPtr ctxt G_GNUC_UNUSED,
const char *networkName,
bool partialOkay,
const char *ipStr,
@@ -593,61 +594,6 @@ virNetworkDNSHostDefParseXMLPost(xmlNodePtr curnode G_GNUC_UNUSED,
}
-/* virNetworkDNSHostDefParseXML will be replaced by generated namesake */
-static int
-virNetworkDNSHostDefParseXML(const char *networkName,
- xmlNodePtr node,
- virNetworkDNSHostDefPtr def,
- bool partialOkay)
-{
- xmlNodePtr cur;
- char *ip;
-
- ip = virXMLPropString(node, "ip");
- if (ip && (virSocketAddrParse(&def->ip, ip, AF_UNSPEC) < 0)) {
- virReportError(VIR_ERR_XML_DETAIL,
- _("Invalid IP address in network '%s' DNS HOST
record"),
- networkName);
- VIR_FREE(ip);
- goto error;
- }
-
- cur = node->children;
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE &&
- virXMLNodeNameEqual(cur, "hostname")) {
- if (cur->children != NULL) {
- char *name = (char *) xmlNodeGetContent(cur);
-
- if (!name) {
- virReportError(VIR_ERR_XML_DETAIL,
- _("Missing hostname in network '%s' DNS
HOST record"),
- networkName);
- goto error;
- }
- if (VIR_APPEND_ELEMENT(def->names, def->nnames, name) < 0) {
- VIR_FREE(name);
- goto error;
- }
- }
- }
- cur = cur->next;
- }
-
- if (virNetworkDNSHostDefParseXMLPost(node, def, networkName,
- partialOkay, ip, def->nnames) < 0)
- goto error;
-
- VIR_FREE(ip);
- return 0;
-
- error:
- VIR_FREE(ip);
- virNetworkDNSHostDefClear(def);
- return -1;
-}
-
-
/* This includes all characters used in the names of current
* /etc/services and /etc/protocols files (on Fedora 20), except ".",
* which we can't allow because it would conflict with the use of "."
@@ -907,8 +853,10 @@ virNetworkDNSDefParseXML(const char *networkName,
goto cleanup;
for (i = 0; i < nhosts; i++) {
- if (virNetworkDNSHostDefParseXML(networkName, hostNodes[i],
- &def->hosts[def->nhosts], false)
< 0) {
+ if (virNetworkDNSHostDefParseXML(hostNodes[i],
+ &def->hosts[def->nhosts],
+ ctxt,
+ networkName, false) < 0) {
goto cleanup;
}
def->nhosts++;
@@ -3373,7 +3321,7 @@ virNetworkDefUpdateDNSHost(virNetworkDefPtr def,
if (virNetworkDefUpdateCheckElementName(def, ctxt->node, "host") <
0)
goto cleanup;
- if (virNetworkDNSHostDefParseXML(def->name, ctxt->node, &host, !isAdd) <
0)
+ if (virNetworkDNSHostDefParseXML(ctxt->node, &host, ctxt, def->name,
!isAdd) < 0)
goto cleanup;
for (i = 0; i < dns->nhosts; i++) {
--
2.17.1