[libvirt] [PATCH] bridge: Fix static-only DHCP configuration

Daniel Veillard veillard at redhat.com
Thu Sep 9 15:13:28 UTC 2010


On Thu, Sep 09, 2010 at 04:07:16PM +0200, Jiri Denemark wrote:
> For static-only DHCP, i.e. with no <range> but at least one <host>
> element within <dhcp> element, we have to add "--dhcp-range IP,static"
> option to dnsmasq to actually enable the service. Without this option,
> dnsmasq will not respond to DHCP requests.
> ---
>  src/network/bridge_driver.c |   26 +++++++++++++++++++++++---
>  1 files changed, 23 insertions(+), 3 deletions(-)
> 
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index d6d3068..01d2171 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -394,6 +394,16 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
>      int nbleases = 0;
>      char *pidfileArg;
>      char buf[1024];
> +    unsigned int ranges;
> +
> +    /*
> +     * For static-only DHCP, i.e. with no range but at least one host element,
> +     * we have to add a special --dhcp-range option to enable the service in
> +     * dnsmasq.
> +     */
> +    ranges = network->def->nranges;
> +    if (!ranges && network->def->nhosts)
> +        ranges = 1;
>  
>      /*
>       * NB, be careful about syntax for dnsmasq options in long format
> @@ -424,11 +434,11 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
>          /*2 + *//* --interface virbr0 */
>          2 + /* --except-interface lo */
>          2 + /* --listen-address 10.0.0.1 */
> -        (2 * network->def->nranges) + /* --dhcp-range 10.0.0.2,10.0.0.254 */
> +        (2 * ranges) + /* --dhcp-range 10.0.0.2,10.0.0.254 */
>          /* --dhcp-lease-max=xxx if needed */
>          (network->def->nranges ? 1 : 0) +
>          /* --dhcp-no-override if needed */
> -        (network->def->nranges ? 1 : 0) +
> +        (ranges ? 1 : 0) +
>          /* --dhcp-hostsfile=/var/lib/dnsmasq/$NAME.hostsfile */
>          (network->def->nhosts > 0 ? 1 : 0) +
>          /* --enable-tftp --tftp-root /srv/tftp */
> @@ -496,12 +506,22 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
>          nbleases += network->def->ranges[r].size;
>      }
>  
> +    if (!network->def->nranges && network->def->nhosts) {
> +        snprintf(buf, sizeof(buf), "%s,static",
> +                 network->def->ipAddress);
> +
> +        APPEND_ARG(*argv, i++, "--dhcp-range");
> +        APPEND_ARG(*argv, i++, buf);
> +    }
> +
>      if (network->def->nranges > 0) {
>          snprintf(buf, sizeof(buf), "--dhcp-lease-max=%d", nbleases);
>          APPEND_ARG(*argv, i++, buf);
> -        APPEND_ARG(*argv, i++, "--dhcp-no-override");
>      }
>  
> +    if (ranges)
> +        APPEND_ARG(*argv, i++, "--dhcp-no-override");
> +
>      if (network->def->nhosts > 0) {
>          dnsmasqContext *dctx = dnsmasqContextNew(network->def->name, DNSMASQ_STATE_DIR);
>          char *hostsfileArg;

ACK, looks fine,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list