[libvirt] [PATCH] add a nodnsmasq option for networks

Serge Hallyn serge.hallyn at ubuntu.com
Thu Dec 3 06:00:51 UTC 2015


Quoting Laine Stump (laine at laine.org):
> On 12/02/2015 02:50 PM, Serge Hallyn wrote:
> >Some people want to define a libvirt network but have dns served
> >by another daemon.  Libvirt used to support that, but hasn't for
> >several years.  Two long-open bugs on this are
> >
> >https://bugzilla.redhat.com/show_bug.cgi?id=636115
> >https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/584862
> >
> >I'm not certain whether we really want to support this, as another
> >option is to simply create the bridge with external tools and tell
> >libvirt vms to use that bridge.  However, if we do want to support
> >it, this patch provides that support.
> >
> >This patch allows an admin to set <nodnsmasq>true</nodnsmasq> in a
> >bridge definition to avoid having libvirt start a dnsmasq.
> 
> Actually someone asked about making an option for this a long time
> ago, and I made a suggestion on how to do it, but neither I nor the
> person who asked ever got around to doing it.
> 
> First, about your proposal: I think that allowing a user to
> completely disable everything done by dnsmasq (i.e. DHCP and DNS
> services) is something reasonable for us to support. The option that
> you've defined gets the job done, but it is specific to a backend
> implementation that uses dnsmasq, and we want to avoid that in case
> someone in the future makes a different implementation that uses
> something else for dhcp and/or dns
> 
> When there is no <dhcp> element in a network, the dhcp part of
> dnsmasq already isn't enabled (so dnsmasq isn't listening on the
> dhcp port), but the dns server is always enabled and listening on
> port 53. It makes sense that we should be able to disable the DNS
> server regardless of whether or not we are using dnsmasq's dhcp
> server. If both are disabled, then dnsmasq simply wouldn't be
> started (after it's not listening on any ports, so there's no point
> :-).
> 
> There is already a <dns> element in a network definition, so the
> logical place for the option that enables/disables DNS would be as
> an attribute to that element:
> 
>    <dns enable='no'/>

Yup, that does make more sense.  I can aim to send a patch along those
lines, but I'm particularly un-familiar with the xml parsing code so
if someone else wants to do it i won't feel my toes being stepped on :)

> So if there is no enable attribute (or if it is set to "yes"), DNS
> is turned on. If enable='no', then it is turned off. If dhcp is
> enabled for the network, then dnsmasq would still be started up for
> that, but would get the proper options so it didn't listen for DNS
> requests.
> 
> A couple notes:
> 
> * For backward compatibility, we have to have the default be that
> DNS is enabled.
> * yes/no is much more commonly used in libvirt's XML than
> true/false, so that is the preferred setting (there is an enum for
> that, virTristateBool, so you can use
> virTristateBoolType(To|From)String when parsing (be sure to reject
> if the return value of *FromString() is <= 0, so nobody can enter
> "enable='default'").

Ok, thanks

-serge




More information about the libvir-list mailing list