[libvirt] [PATCH 3/6] net: Move creation of dnsmasq hosts file to function starting dnsmasq

Peter Krempa pkrempa at redhat.com
Thu Oct 25 15:18:27 UTC 2012


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




More information about the libvir-list mailing list