The hosts file was created in the network definition function. This
patch moves the place the file is being created to the point where
dnsmasq is being started.
---
src/network/bridge_driver.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 43a5540..976c132 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -846,6 +846,8 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
char *pidfile = NULL;
int ret = -1;
dnsmasqContext *dctx = NULL;
+ virNetworkIpDefPtr ipdef;
+ int i;
if (!virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, 0)) {
/* no IPv6 addresses, so we don't need to run radvd */
@@ -886,6 +888,18 @@ networkStartDhcpDaemon(virNetworkObjPtr network)
if (ret < 0)
goto cleanup;
+ /* populate dnsmasq hosts file */
+ for (i = 0; (ipdef = virNetworkDefGetIpByIndex(network->def, AF_UNSPEC, i)); i++)
{
+ if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET) &&
+ (ipdef->nranges || ipdef->nhosts)) {
+ if (networkBuildDnsmasqHostsfile(dctx, ipdef,
+ network->def->dns) < 0)
+ goto cleanup;
+
+ break;
+ }
+ }
+
ret = dnsmasqSave(dctx);
if (ret < 0)
goto cleanup;
@@ -2724,7 +2738,6 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char
*xml) {
virNetworkObjPtr network = NULL;
virNetworkPtr ret = NULL;
int ii;
- dnsmasqContext* dctx = NULL;
networkDriverLock(driver);
@@ -2781,21 +2794,12 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char
*xml) {
goto cleanup;
}
- if (ipv4def) {
- dctx = dnsmasqContextNew(def->name, DNSMASQ_STATE_DIR);
- if (dctx == NULL ||
- networkBuildDnsmasqHostsfile(dctx, ipv4def, def->dns) < 0 ||
- dnsmasqSave(dctx) < 0)
- goto cleanup;
- }
-
VIR_INFO("Defining network '%s'", def->name);
ret = virGetNetwork(conn, def->name, def->uuid);
cleanup:
if (freeDef)
virNetworkDefFree(def);
- dnsmasqContextFree(dctx);
if (network)
virNetworkObjUnlock(network);
networkDriverUnlock(driver);
--
1.7.12.4