]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
net: Move creation of dnsmasq hosts file to function starting dnsmasq
authorPeter Krempa <pkrempa@redhat.com>
Thu, 25 Oct 2012 12:41:28 +0000 (14:41 +0200)
committerCole Robinson <crobinso@redhat.com>
Sun, 9 Dec 2012 21:21:18 +0000 (16:21 -0500)
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.
(cherry picked from commit 23ae3fe4256ba634babc6818b8cb7bbd3664a95a)

src/network/bridge_driver.c

index 7c393635189dfee16c20637a75efb4c28bb92747..97bc5611a90da55458c8b20381d18a6ad514aab8 100644 (file)
@@ -888,6 +888,8 @@ networkStartDhcpDaemon(struct network_driver *driver,
     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 */
@@ -931,6 +933,18 @@ networkStartDhcpDaemon(struct network_driver *driver,
     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;
@@ -2792,7 +2806,6 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) {
     virNetworkObjPtr network = NULL;
     virNetworkPtr ret = NULL;
     int ii;
-    dnsmasqContext* dctx = NULL;
 
     networkDriverLock(driver);
 
@@ -2849,21 +2862,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);