diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 8803143d98..e59938cb56 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -1,7 +1,7 @@
/*
* 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
@@ -66,6 +66,12 @@ VIR_ENUM_IMPL(virNetworkForwardDriverName,
"kvm",
"vfio")
+VIR_ENUM_IMPL(virNetworkDNSForwardPlainNames,
+ VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_LAST,
+ "default",
+ "yes",
+ "no")
+
virNetworkObjPtr virNetworkFindByUUID(virNetworkObjListPtr nets,
const unsigned char *uuid)
{
@@ -1053,9 +1059,9 @@ virNetworkDNSDefParseXML(const char *networkName,
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'"),
@@ -2295,19 +2301,26 @@ static int
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, "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;
}
}
@@ -2363,8 +2376,7 @@ virNetworkDNSDefFormat(virBufferPtr buf,
}
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "\n");
-out:
- return result;
+ return 0;
}
static int
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index e3ef2851d2..b84762a765 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -1,7 +1,7 @@
/*
* 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
@@ -112,10 +112,23 @@ struct _virNetworkDNSHostDef {
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;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 43f2ae274e..c8b167bd29 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -725,7 +725,8 @@ networkDnsmasqConfContents(virNetworkObjPtr network,
network->def->domain);
}
- if (!network->def->dns.forwardPlainNames) {
+ if (network->def->dns.forwardPlainNames
+ == VIR_NETWORK_DNS_FORWARD_PLAIN_NAMES_NO) {
virBufferAddLit(&configbuf, "domain-needed\n");
/* need to specify local=// whether or not a domain is
* specified, unless the config says we should forward "plain"
diff --git a/tests/networkxml2confdata/dhcp6-nat-network.conf b/tests/networkxml2confdata/dhcp6-nat-network.conf
index 050f3dbecc..f270a4372d 100644
--- a/tests/networkxml2confdata/dhcp6-nat-network.conf
+++ b/tests/networkxml2confdata/dhcp6-nat-network.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr0
diff --git a/tests/networkxml2confdata/dhcp6-network.conf b/tests/networkxml2confdata/dhcp6-network.conf
index 92ea2a4caa..f0a9660975 100644
--- a/tests/networkxml2confdata/dhcp6-network.conf
+++ b/tests/networkxml2confdata/dhcp6-network.conf
@@ -7,8 +7,6 @@
strict-order
domain=mynet
expand-hosts
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr0
diff --git a/tests/networkxml2confdata/dhcp6host-routed-network.conf b/tests/networkxml2confdata/dhcp6host-routed-network.conf
index f8f05c24c3..ad6db36dfc 100644
--- a/tests/networkxml2confdata/dhcp6host-routed-network.conf
+++ b/tests/networkxml2confdata/dhcp6host-routed-network.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr1
diff --git a/tests/networkxml2confdata/isolated-network.conf b/tests/networkxml2confdata/isolated-network.conf
index f8997bda58..6ba34ae56e 100644
--- a/tests/networkxml2confdata/isolated-network.conf
+++ b/tests/networkxml2confdata/isolated-network.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-interfaces
listen-address=192.168.152.1
diff --git a/tests/networkxml2confdata/nat-network-dns-forwarders.conf b/tests/networkxml2confdata/nat-network-dns-forwarders.conf
index 5f95f77b02..8bf3b9c360 100644
--- a/tests/networkxml2confdata/nat-network-dns-forwarders.conf
+++ b/tests/networkxml2confdata/nat-network-dns-forwarders.conf
@@ -8,8 +8,6 @@ strict-order
no-resolv
server=8.8.8.8
server=8.8.4.4
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr0
diff --git a/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.conf b/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.conf
index 1e9b59c512..ce4dd6f5c4 100644
--- a/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.conf
+++ b/tests/networkxml2confdata/nat-network-dns-srv-record-minimal.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-interfaces
listen-address=192.168.122.1
diff --git a/tests/networkxml2confdata/nat-network-dns-srv-record.conf b/tests/networkxml2confdata/nat-network-dns-srv-record.conf
index 53d044a40c..b47cbe7d32 100644
--- a/tests/networkxml2confdata/nat-network-dns-srv-record.conf
+++ b/tests/networkxml2confdata/nat-network-dns-srv-record.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr0
diff --git a/tests/networkxml2confdata/nat-network-dns-txt-record.conf b/tests/networkxml2confdata/nat-network-dns-txt-record.conf
index 921cae1607..ff53f4e4f7 100644
--- a/tests/networkxml2confdata/nat-network-dns-txt-record.conf
+++ b/tests/networkxml2confdata/nat-network-dns-txt-record.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr0
diff --git a/tests/networkxml2confdata/nat-network.conf b/tests/networkxml2confdata/nat-network.conf
index beb714b134..ced4123a96 100644
--- a/tests/networkxml2confdata/nat-network.conf
+++ b/tests/networkxml2confdata/nat-network.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr0
diff --git a/tests/networkxml2confdata/netboot-network.conf b/tests/networkxml2confdata/netboot-network.conf
index ce33176e15..8ea1f67de9 100644
--- a/tests/networkxml2confdata/netboot-network.conf
+++ b/tests/networkxml2confdata/netboot-network.conf
@@ -7,8 +7,6 @@
strict-order
domain=example.com
expand-hosts
-domain-needed
-local=//
except-interface=lo
bind-interfaces
listen-address=192.168.122.1
diff --git a/tests/networkxml2confdata/netboot-proxy-network.conf b/tests/networkxml2confdata/netboot-proxy-network.conf
index f4d3880210..4774a92dd6 100644
--- a/tests/networkxml2confdata/netboot-proxy-network.conf
+++ b/tests/networkxml2confdata/netboot-proxy-network.conf
@@ -7,8 +7,6 @@
strict-order
domain=example.com
expand-hosts
-domain-needed
-local=//
except-interface=lo
bind-interfaces
listen-address=192.168.122.1
diff --git a/tests/networkxml2confdata/routed-network.conf b/tests/networkxml2confdata/routed-network.conf
index 62ffd7a29a..970aa3cd35 100644
--- a/tests/networkxml2confdata/routed-network.conf
+++ b/tests/networkxml2confdata/routed-network.conf
@@ -5,8 +5,6 @@
##
## dnsmasq conf file created by libvirt
strict-order
-domain-needed
-local=//
except-interface=lo
bind-dynamic
interface=virbr1
diff --git a/tests/networkxml2xmlout/nat-network-dns-hosts.xml b/tests/networkxml2xmlout/nat-network-dns-hosts.xml
index a2f46da8c1..17e269710b 100644
--- a/tests/networkxml2xmlout/nat-network-dns-hosts.xml
+++ b/tests/networkxml2xmlout/nat-network-dns-hosts.xml
@@ -5,7 +5,7 @@
-
+
host
gateway
diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml
index 6554c07f32..5464d90ab9 100644
--- a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml
+++ b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml
@@ -5,7 +5,7 @@
-
+
pudding
diff --git a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml
index bc9e4193fb..ee2d773729 100644
--- a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml
+++ b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml
@@ -5,6 +5,7 @@
+