Signed-off-by: Shi Lei <shi_lei(a)massclouds.com>
---
src/conf/network_conf.c | 83 +++--------------------------------------
src/conf/network_conf.h | 17 +++++----
2 files changed, 15 insertions(+), 85 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 20128af0..cb2f3163 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -183,16 +183,6 @@ virNetworkDNSHostDefClear(virNetworkDNSHostDef *def)
}
-static void
-virNetworkDNSSrvDefClear(virNetworkDNSSrvDef *def)
-{
- VIR_FREE(def->domain);
- VIR_FREE(def->service);
- VIR_FREE(def->protocol);
- VIR_FREE(def->target);
-}
-
-
static void
virNetworkDNSForwarderClear(virNetworkDNSForwarder *def)
{
@@ -767,7 +757,7 @@ virNetworkDNSHostDefParseXML(const char *networkName,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" \
"_-+/*"
-static int
+int
virNetworkDNSSrvDefParseHook(xmlNodePtr node G_GNUC_UNUSED,
virNetworkDNSSrvDef *def,
const char *networkName,
@@ -874,69 +864,6 @@ virNetworkDNSSrvDefParseHook(xmlNodePtr node G_GNUC_UNUSED,
}
-static int
-virNetworkDNSSrvDefParseXML(const char *networkName,
- xmlNodePtr node,
- xmlXPathContextPtr ctxt G_GNUC_UNUSED,
- virNetworkDNSSrvDef *def,
- bool partialOkay)
-{
- g_autofree char *portStr = NULL;
- g_autofree char *priorityStr = NULL;
- g_autofree char *weightStr = NULL;
-
- def->service = virXMLPropString(node, "service");
- def->protocol = virXMLPropString(node, "protocol");
-
- /* Following attributes are optional */
- def->domain = virXMLPropString(node, "domain");
- def->target = virXMLPropString(node, "target");
-
- portStr = virXMLPropString(node, "port");
- if (portStr) {
- if (virStrToLong_uip(portStr, NULL, 0, &def->port) < 0) {
- virReportError(VIR_ERR_XML_DETAIL,
- _("invalid DNS SRV port attribute "
- "for service '%s' in network
'%s'"),
- def->service, networkName);
- goto error;
- }
- }
-
- priorityStr = virXMLPropString(node, "priority");
- if (priorityStr) {
- if (virStrToLong_uip(priorityStr, NULL, 0, &def->priority) < 0) {
- virReportError(VIR_ERR_XML_DETAIL,
- _("Invalid DNS SRV priority attribute "
- "for service '%s' in network
'%s'"),
- def->service, networkName);
- goto error;
- }
- }
-
- weightStr = virXMLPropString(node, "weight");
- if (weightStr) {
- if (virStrToLong_uip(weightStr, NULL, 0, &def->weight) < 0) {
- virReportError(VIR_ERR_XML_DETAIL,
- _("invalid DNS SRV weight attribute "
- "for service '%s' in network
'%s'"),
- def->service, networkName);
- goto error;
- }
- }
-
- if (virNetworkDNSSrvDefParseHook(node, def, networkName, def, &partialOkay,
- portStr, priorityStr, weightStr) < 0)
- goto error;
-
- return 0;
-
- error:
- virNetworkDNSSrvDefClear(def);
- return -1;
-}
-
-
int
virNetworkDNSTxtDefParseHook(xmlNodePtr node G_GNUC_UNUSED,
virNetworkDNSTxtDef *def,
@@ -1082,8 +1009,8 @@ virNetworkDNSDefParseXML(const char *networkName,
def->srvs = g_new0(virNetworkDNSSrvDef, nsrvs);
for (i = 0; i < nsrvs; i++) {
- if (virNetworkDNSSrvDefParseXML(networkName, srvNodes[i], ctxt,
- &def->srvs[def->nsrvs], false) <
0) {
+ if (virNetworkDNSSrvDefParseXML(srvNodes[i],
&def->srvs[def->nsrvs],
+ networkName, def, NULL) < 0) {
return -1;
}
def->nsrvs++;
@@ -3553,6 +3480,7 @@ virNetworkDefUpdateDNSSrv(virNetworkDef *def,
bool isAdd = (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST ||
command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST);
int foundCt = 0;
+ bool notAdd;
memset(&srv, 0, sizeof(srv));
@@ -3566,7 +3494,8 @@ virNetworkDefUpdateDNSSrv(virNetworkDef *def,
if (virNetworkDefUpdateCheckElementName(def, ctxt->node, "srv") < 0)
goto cleanup;
- if (virNetworkDNSSrvDefParseXML(def->name, ctxt->node, ctxt, &srv, !isAdd)
< 0)
+ notAdd = !isAdd;
+ if (virNetworkDNSSrvDefParseXML(ctxt->node, &srv, def->name, def,
¬Add) < 0)
goto cleanup;
for (i = 0; i < dns->nsrvs; i++) {
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index a4c83b46..a58d8953 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -131,14 +131,14 @@ struct _virNetworkDNSTxtDef { /* genparse, genformat */
};
typedef struct _virNetworkDNSSrvDef virNetworkDNSSrvDef;
-struct _virNetworkDNSSrvDef {
- char *domain;
- char *service;
- char *protocol;
- char *target;
- unsigned int port;
- unsigned int priority;
- unsigned int weight;
+struct _virNetworkDNSSrvDef { /* genparse */
+ char *service; /* xmlattr */
+ char *protocol; /* xmlattr */
+ char *domain; /* xmlattr */
+ char *target; /* xmlattr */
+ unsigned int port; /* xmlattr */
+ unsigned int priority; /* xmlattr */
+ unsigned int weight; /* xmlattr */
};
typedef struct _virNetworkDNSHostDef virNetworkDNSHostDef;
@@ -429,5 +429,6 @@ virNetworkDefUpdateSection(virNetworkDef *def,
VIR_ENUM_DECL(virNetworkTaint);
+#define ENABLE_VIR_NETWORK_DNSSRV_DEF_PARSE_HOOK
#define ENABLE_VIR_NETWORK_DNSTXT_DEF_PARSE_HOOK
#include "network_conf.generated.h"
--
2.25.1