On Fri, Apr 09, 2021 at 10:28:21AM +0200, Martijn van Duren wrote:
> On Fri, 2021-04-09 at 09:47 +0200, Florian Obser wrote:
> > On Fri, Apr 09, 2021 at 09:41:24AM +0200, Florian Obser wrote:
> > > I think it would be better (and less ugly) to treat invalid values as
> > > if they had not been set. Could you pull the two checks up before
> > > if(renewal_time == 0) and do something like this:
> > >
> > > if (renewal_time >= rebinding_time) {
> > > log_warn(...)
> > > renewal_time = 0;
> > > }
> > > if (rebinding_time >= lease_time) {
> > > log_warn(...)
> > > rebinding_time = 0;
> > > }
> > >
> >
> > It might even be better to ignore both values if at least one is
> > invalid.
> >
> > if (renewal_time >= rebinding_time || rebinding_time >= lease_time) {
> > ...
> >
> > Since you are in there and have a device that causes trouble could you
> > give this a bit of thought? I'm currently swamped with other things
> > and won't have time until the evening.
> >
> Using your latter suggestion would loose information on what grounds the
> times are reset. If someone wants to do some proper work on their server
> side this is useful information. My diff below still works for me and
You took me too literally, what you have below is what I meant.
OK florian
> shows full information while still resetting both. I also changed the
> printf statement a little, since this reads a little better to me, but
> don´t mind changing it back if you feel strong about it.
>
> Since the lease time here is 24 hours I haven´t tested this yet with
> a renewal.
>
> Index: engine.c
> ===================================================================
> RCS file: /cvs/src/sbin/dhcpleased/engine.c,v
> retrieving revision 1.11
> diff -u -p -r1.11 engine.c
> --- engine.c 22 Mar 2021 15:34:07 -0000 1.11
> +++ engine.c 9 Apr 2021 08:26:37 -0000
> @@ -972,23 +972,24 @@ parse_dhcp(struct dhcpleased_iface *ifac
> }
>
> /* RFC 2131 4.4.5 */
> + /* Ignore invalid T1/T2 options */
> + if (renewal_time >= rebinding_time) {
> + log_warnx("%s: renewal_time(%u) >= rebinding_time(%u) "
> + "from %s: using defaults",
> + __func__, renewal_time, rebinding_time, from);
> + renewal_time = rebinding_time = 0;
> + } else if (rebinding_time >= lease_time) {
> + log_warnx("%s: rebinding_time(%u) >= lease_time(%u) "
> + "from %s: using defaults",
> + __func__, rebinding_time, lease_time, from);
> + renewal_time = rebinding_time = 0;
> + }
> +
> if(renewal_time == 0)
> renewal_time = lease_time / 2;
> if (rebinding_time == 0)
> rebinding_time = lease_time - (lease_time / 8);
>
> - if (renewal_time >= rebinding_time) {
> - log_warnx("%s: renewal_time >= rebinding_time "
> - "(%u >= %u) from %s", __func__, renewal_time,
> - rebinding_time, from);
> - return;
> - }
> - if (rebinding_time >= lease_time) {
> - log_warnx("%s: rebinding_time >= lease_time"
> - "(%u >= %u) from %s", __func__, rebinding_time,
> - lease_time, from);
> - return;
> - }
> clock_gettime(CLOCK_MONOTONIC, &iface->request_time);
> iface->server_identifier.s_addr = server_identifier.s_addr;
> iface->requested_ip.s_addr = dhcp_hdr->yiaddr.s_addr;
>
>
--
I'm not entirely sure you are real.