/*
* network_conf.c: network XML handling
*
- * Copyright (C) 2006-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2014 Red Hat, Inc.
* Copyright (C) 2006-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
"kvm",
"vfio")
+VIR_ENUM_IMPL(virNetworkDNSForwardPlainNames,
+ VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_LAST,
+ "default",
+ "yes",
+ "no")
+
virNetworkObjPtr virNetworkFindByUUID(virNetworkObjListPtr nets,
const unsigned char *uuid)
{
forwardPlainNames = virXPathString("string(./@forwardPlainNames)", ctxt);
if (forwardPlainNames) {
- if (STREQ(forwardPlainNames, "yes")) {
- def->forwardPlainNames = true;
- } else if (STRNEQ(forwardPlainNames, "no")) {
+ def->forwardPlainNames
+ = virNetworkDNSForwardPlainNamesTypeFromString(forwardPlainNames);
+ if (def->forwardPlainNames <= 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid dns forwardPlainNames setting '%s' "
"in network '%s'"),
virNetworkDNSDefFormat(virBufferPtr buf,
const virNetworkDNSDef *def)
{
- int result = 0;
size_t i, j;
if (!(def->forwardPlainNames || def->forwarders || def->nhosts ||
def->nsrvs || def->ntxts))
- goto out;
+ return 0;
virBufferAddLit(buf, "<dns");
if (def->forwardPlainNames) {
- virBufferAddLit(buf, " forwardPlainNames='yes'");
+ const char *fwd = virNetworkDNSForwardPlainNamesTypeToString(def->forwardPlainNames);
+
+ if (!fwd) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Unknown forwardPlainNames type %d in network"),
+ def->forwardPlainNames);
+ return -1;
+ }
+ virBufferAsprintf(buf, " forwardPlainNames='%s'", fwd);
if (!(def->forwarders || def->nhosts || def->nsrvs || def->ntxts)) {
virBufferAddLit(buf, "/>\n");
- goto out;
+ return 0;
}
}
}
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</dns>\n");
-out:
- return result;
+ return 0;
}
static int
/*
* network_conf.h: network XML handling
*
- * Copyright (C) 2006-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2014 Red Hat, Inc.
* Copyright (C) 2006-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
char **names;
};
+/* If forwardPlainNames is 0 (default), that is equivalent to "yes",
+ * but won't be encoded in newly formatted XML.
+ */
+typedef enum {
+ VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_DEFAULT = 0, /* silent "yes" */
+ VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_YES,
+ VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_NO,
+
+ VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_LAST,
+} virNetworkDNSForwardPlainNamesType;
+
+VIR_ENUM_DECL(virNetworkDNSForwardPlainNames)
+
typedef struct _virNetworkDNSDef virNetworkDNSDef;
typedef virNetworkDNSDef *virNetworkDNSDefPtr;
struct _virNetworkDNSDef {
- bool forwardPlainNames;
+ int forwardPlainNames; /* enum virNetworkDNSForwardPlainNamesType */
size_t ntxts;
virNetworkDNSTxtDefPtr txts;
size_t nhosts;