]> xenbits.xensource.com Git - 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)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 2 Nov 2012 12:28:40 +0000 (13:28 +0100)
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

index 6f9fcdadd22952b60fa567c11c8da175acce34ae..3b2b505147297311c986096f49808bc64400a1bb 100644 (file)
@@ -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;
@@ -2742,7 +2756,6 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) {
     virNetworkObjPtr network = NULL;
     virNetworkPtr ret = NULL;
     int ii;
-    dnsmasqContext* dctx = NULL;
 
     networkDriverLock(driver);
 
@@ -2799,21 +2812,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);