[PATCH 0/2] Include lease time option into DHCP settings
Daniel P. Berrangé
berrange at redhat.com
Mon Apr 20 09:16:57 UTC 2020
On Sun, Apr 19, 2020 at 12:16:39AM -0400, Laine Stump wrote:
> On 4/17/20 12:00 PM, Daniel P. Berrangé wrote:
> > On Wed, Apr 15, 2020 at 01:25:37PM -0300, Julio Faracco wrote:
> > > I resubmitted this series because our team needs to hack dnsmasq
> > > settings to change lease time. This feature would be so important to
> > > us to avoid workarounds.
> > >
> > > It is based on Alberto's patch from 2017. But personally I don't like
> > > this approach.
> > > IMHO, it would be nice to have specific attributes to configure lease time.
> > > For example:
> > > <range ... leasetime="10m"/>
> > > <host ... leasetime="20m"/>
> > It is generally considered bad practice to have an XML attribute
> > value which then has to be parsed again to extract information.
> >
> > For this reason, libvirt will use two attrbutes, one of the
> > value and one for the units (with some sensible default
> > units if not specified), even though this is admittedly
> > more verbose.
> >
> > I agree it would be useful to have lease time per-host, as well
> > as globally though, and IIRC one of the original versions of
> > this patch did support that.
>
>
> The name of the original contributor that you (Julio) referenced in your
> cover letter sounded familiar, and I tried to find the original BZ for this
> when I saw your patches on the list, but I failed (bugzilla kept timing out
> on a *very* basic search term - this seems to happen to 80% of my queries
> these days...) But then it passed by in mail when Dan was cleaning up all
> the upstream libvirt BZes and moving them to gitlab :-), so just so everyone
> has all the background info:
>
>
> https://bugzilla.redhat.com/show_bug.cgi?id=913446
>
>
> I also found the other similar patch from Nehal J Wani from around the same
> time:
>
>
> https://www.redhat.com/archives/libvir-list/2016-September/msg01063.html
>
>
> Without talking about the specifics of either patch, my recollection of the
> discussion from that time was that both contributors were trying to use a
> leasetime setting to solve a problem that it wouldn't have solved - their
> issue was that if a guest was turned off during the time when its lease
> expired, then when the guest was subsequently restarted it would end up with
> a different IP address. Of course setting a longer lease expiry would only
> delay the problem, not eliminate it. Further discussion revealed that if
> libvirt would just set the "dhcp-authoritative" option in the dnsmasq
> config, then dnsmasq would attempt to reissue the same IP to a guest even if
> its lease had already expired - Martin Wilck made this change to libvirt in
> commit 4ac20b3ae4, which seemed to satisfy the people who had thought they
> needed to modify the dhcp lease time, and so neither of the lease time
> patches was pushed upstream.
>
>
> The reason I bring up this old history is just as a cautionary tale that
> sometimes what you think you need isn't really what you actually need :-)
>
>
> (Recently Cole added the dnsmasq private namespace to the <network> XML, but
> that is only useful to add an entire option line, and can't do what you
> need, which is adding an extra option to every dhcp-host and dhcp-range
> line; there unfortunately is no standalone dnsmasq option to specify a
> global lease time)
>
>
> >
> > We could do one of
> >
> > <ip address="192.168.122.1" netmask="255.255.255.0">
> > <dhcp>
> > <range start="192.168.122.2" end="192.168.122.254" lease="12" units="hours"/>
> > <host id="0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66" ip="2001:db8:ca2:2:3::2" lease="30" units="mins"/>
> > </dhcp>
> > </ip>
> >
> > or
> >
> > <ip address="192.168.122.1" netmask="255.255.255.0">
> > <dhcp>
> > <range start="192.168.122.2" end="192.168.122.254" leasetime="12" leaseunits="hours"/>
> > <host id="0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66" ip="2001:db8:ca2:2:3::2" leasetime="30" leaseunits="mins"/>
> > </dhcp>
> > </ip>
> >
> > or
> >
> > <ip address="192.168.122.1" netmask="255.255.255.0">
> > <dhcp>
> > <range start="192.168.122.2" end="192.168.122.254">
> > <lease expiry="12" units="hours"/>
> > </range>
> > <host id="0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66" ip="2001:db8:ca2:2:3::2">
> > <lease expiry="30" units="mins"/>
> > </host>
> > </dhcp>
> > </ip>
>
>
> Nehal's patch had used this syntax:
>
>
> <leasetime units='hours'>12</leasetime>
>
>
> based on (I guess) the syntax of libvirt's <memory> element:
>
>
> <memory unit='KiB'>524288</memory>
>
>
> I don't have a preference for any of them, just thought I would point out
> existing usage in libvirt that has a value/units combination.
Annoyingly it seems we used "units" and "unit", though "unit" wins by
a large margin over "units"
I guess I have a slight preference for the last option, with the use of
the child-element, as it is the cleanest XML design, even if it is slightly
more verbose.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list