Signed-off-by: Shi Lei <shi_lei(a)massclouds.com>
---
src/conf/network_conf.c | 178 +-----------------------------------
src/conf/network_conf.h | 16 ++--
src/network/bridge_driver.c | 2 +-
3 files changed, 14 insertions(+), 182 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 4c0751f..db2b75f 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -174,32 +174,6 @@ virNetworkIPDefClear(virNetworkIPDefPtr def)
}
-static void
-virNetworkDNSDefClear(virNetworkDNSDefPtr def)
-{
- if (def->forwarders) {
- while (def->nfwds)
- virNetworkDNSForwarderClear(&def->forwarders[--def->nfwds]);
- VIR_FREE(def->forwarders);
- }
- if (def->txts) {
- while (def->ntxts)
- virNetworkDNSTxtDefClear(&def->txts[--def->ntxts]);
- VIR_FREE(def->txts);
- }
- if (def->hosts) {
- while (def->nhosts)
- virNetworkDNSHostDefClear(&def->hosts[--def->nhosts]);
- VIR_FREE(def->hosts);
- }
- if (def->srvs) {
- while (def->nsrvs)
- virNetworkDNSSrvDefClear(&def->srvs[--def->nsrvs]);
- VIR_FREE(def->srvs);
- }
-}
-
-
static void
virNetworkForwardDefClear(virNetworkForwardDefPtr def)
{
@@ -900,7 +874,7 @@ virNetworkDNSForwarderParseXMLHook(xmlNodePtr node G_GNUC_UNUSED,
}
-static int
+int
virNetworkDNSDefParseXMLHook(xmlNodePtr node G_GNUC_UNUSED,
virNetworkDNSDefPtr def,
const char *networkName,
@@ -924,148 +898,6 @@ virNetworkDNSDefParseXMLHook(xmlNodePtr node G_GNUC_UNUSED,
}
-static int
-virNetworkDNSDefParseXML(const char *networkName,
- xmlNodePtr node,
- xmlXPathContextPtr ctxt,
- virNetworkDNSDefPtr def)
-{
- xmlNodePtr *hostNodes = NULL;
- xmlNodePtr *srvNodes = NULL;
- xmlNodePtr *txtNodes = NULL;
- xmlNodePtr *fwdNodes = NULL;
- char *forwardPlainNames = NULL;
- char *enable = NULL;
- int nhosts, nsrvs, ntxts, nfwds;
- size_t i;
- int ret = -1;
- VIR_XPATH_NODE_AUTORESTORE(ctxt);
-
- ctxt->node = node;
-
- enable = virXPathString("string(./@enable)", ctxt);
- if (enable) {
- def->enable = virTristateBoolTypeFromString(enable);
- if (def->enable <= 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("Invalid dns enable setting '%s' "
- "in network '%s'"),
- enable, networkName);
- goto cleanup;
- }
- }
-
- forwardPlainNames = virXPathString("string(./@forwardPlainNames)", ctxt);
- if (forwardPlainNames) {
- def->forwardPlainNames = virTristateBoolTypeFromString(forwardPlainNames);
- if (def->forwardPlainNames <= 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("Invalid dns forwardPlainNames setting '%s'
"
- "in network '%s'"),
- forwardPlainNames, networkName);
- goto cleanup;
- }
- }
-
- nfwds = virXPathNodeSet("./forwarder", ctxt, &fwdNodes);
- if (nfwds < 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("invalid <forwarder> element found in <dns> of
network %s"),
- networkName);
- goto cleanup;
- }
- if (nfwds > 0) {
- if (VIR_ALLOC_N(def->forwarders, nfwds) < 0)
- goto cleanup;
-
- for (i = 0; i < nfwds; i++) {
- if (virNetworkDNSForwarderParseXML(fwdNodes[i],
- &def->forwarders[i],
- networkName,
- NULL) < 0)
- goto cleanup;
-
- def->nfwds++;
- }
- }
-
- nhosts = virXPathNodeSet("./host", ctxt, &hostNodes);
- if (nhosts < 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("invalid <host> element found in <dns> of
network %s"),
- networkName);
- goto cleanup;
- }
- if (nhosts > 0) {
- if (VIR_ALLOC_N(def->hosts, nhosts) < 0)
- goto cleanup;
-
- for (i = 0; i < nhosts; i++) {
- if (virNetworkDNSHostDefParseXML(hostNodes[i],
&def->hosts[def->nhosts],
- networkName, NULL) < 0) {
- goto cleanup;
- }
- def->nhosts++;
- }
- }
-
- nsrvs = virXPathNodeSet("./srv", ctxt, &srvNodes);
- if (nsrvs < 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("invalid <srv> element found in <dns> of
network %s"),
- networkName);
- goto cleanup;
- }
- if (nsrvs > 0) {
- if (VIR_ALLOC_N(def->srvs, nsrvs) < 0)
- goto cleanup;
-
- for (i = 0; i < nsrvs; i++) {
- if (virNetworkDNSSrvDefParseXML(srvNodes[i],
&def->srvs[def->nsrvs],
- networkName, NULL) < 0) {
- goto cleanup;
- }
- def->nsrvs++;
- }
- }
-
- ntxts = virXPathNodeSet("./txt", ctxt, &txtNodes);
- if (ntxts < 0) {
- virReportError(VIR_ERR_XML_ERROR,
- _("invalid <txt> element found in <dns> of
network %s"),
- networkName);
- goto cleanup;
- }
- if (ntxts > 0) {
- if (VIR_ALLOC_N(def->txts, ntxts) < 0)
- goto cleanup;
-
- for (i = 0; i < ntxts; i++) {
- if (virNetworkDNSTxtDefParseXML(txtNodes[i],
&def->txts[def->ntxts],
- networkName, NULL) < 0)
- goto cleanup;
-
- def->ntxts++;
- }
- }
-
- if (virNetworkDNSDefParseXMLHook(node, def, networkName, NULL,
- enable, forwardPlainNames,
- ntxts, nhosts, nsrvs, nfwds) < 0)
- goto cleanup;
-
- ret = 0;
- cleanup:
- VIR_FREE(enable);
- VIR_FREE(forwardPlainNames);
- VIR_FREE(fwdNodes);
- VIR_FREE(hostNodes);
- VIR_FREE(srvNodes);
- VIR_FREE(txtNodes);
- return ret;
-}
-
-
static int
virNetworkIPDefParseXML(const char *networkName,
xmlNodePtr node,
@@ -1852,7 +1684,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
dnsNode = virXPathNode("./dns", ctxt);
if (dnsNode != NULL &&
- virNetworkDNSDefParseXML(def->name, dnsNode, ctxt, &def->dns) < 0)
{
++ virNetworkDNSDefParseXML(dnsNode, &def->dns, def->name, NULL) < 0)
{
goto error;
}
@@ -2198,7 +2030,7 @@ virNetworkDNSDefFormat(virBufferPtr buf,
{
size_t i;
- if (!(def->enable || def->forwardPlainNames || def->nfwds || def->nhosts
||
+ if (!(def->enable || def->forwardPlainNames || def->nforwarders ||
def->nhosts ||
def->nsrvs || def->ntxts))
return 0;
@@ -2225,7 +2057,7 @@ virNetworkDNSDefFormat(virBufferPtr buf,
}
virBufferAsprintf(buf, " forwardPlainNames='%s'", fwd);
}
- if (!(def->nfwds || def->nhosts || def->nsrvs || def->ntxts)) {
+ if (!(def->nforwarders || def->nhosts || def->nsrvs || def->ntxts)) {
virBufferAddLit(buf, "/>\n");
return 0;
}
@@ -2233,7 +2065,7 @@ virNetworkDNSDefFormat(virBufferPtr buf,
virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
- for (i = 0; i < def->nfwds; i++) {
+ for (i = 0; i < def->nforwarders; i++) {
if (virNetworkDNSForwarderFormatBuf(buf, "forwarder",
&def->forwarders[i], NULL) < 0)
return -1;
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 1313c3e..462d97d 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -165,17 +165,17 @@ struct _virNetworkDNSForwarder { /* genparse:withhook, genformat
*/
typedef struct _virNetworkDNSDef virNetworkDNSDef;
typedef virNetworkDNSDef *virNetworkDNSDefPtr;
-struct _virNetworkDNSDef {
- int enable; /* enum virTristateBool */
- int forwardPlainNames; /* enum virTristateBool */
+struct _virNetworkDNSDef { /* genparse:withhook */
+ virTristateBool enable; /* xmlattr */
+ virTristateBool forwardPlainNames; /* xmlattr */
size_t ntxts;
- virNetworkDNSTxtDefPtr txts;
+ virNetworkDNSTxtDefPtr txts; /* xmlelem, array */
size_t nhosts;
- virNetworkDNSHostDefPtr hosts;
+ virNetworkDNSHostDefPtr hosts; /* xmlelem, array */
size_t nsrvs;
- virNetworkDNSSrvDefPtr srvs;
- size_t nfwds;
- virNetworkDNSForwarderPtr forwarders;
+ virNetworkDNSSrvDefPtr srvs; /* xmlelem, array */
+ size_t nforwarders;
+ virNetworkDNSForwarderPtr forwarders; /* xmlelem, array */
};
typedef struct _virNetworkIPDef virNetworkIPDef;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 47d5d95..6e09174 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -1139,7 +1139,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj,
*/
bool addNoResolv = false;
- for (i = 0; i < def->dns.nfwds; i++) {
+ for (i = 0; i < def->dns.nforwarders; i++) {
virNetworkDNSForwarderPtr fwd = &def->dns.forwarders[i];
virBufferAddLit(&configbuf, "server=");
--
2.17.1