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

Laine Stump laine at laine.org
Thu Oct 25 21:11:54 UTC 2012


On 10/25/2012 11:18 AM, Peter Krempa wrote:
> 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);

Makes sense to me. ACK.




More information about the libvir-list mailing list