Keep the valid_until assignment parameter in sync with the leasetime assigned to the DHCP client when handling DHCP request message. This guarantees the contents of the ubus dhcp ipv4leases valid parameter is in sync with the client leasetime
Signed-off-by: Hans Dedecker <dedec...@gmail.com> --- src/dhcpv4.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 8469038..618475f 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -618,6 +618,8 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface, } memcpy(a->hwaddr, mac, sizeof(a->hwaddr)); memcpy(a->hostname, hostname, hostlen); + // Don't consider new assignment as infinite + a->valid_until = now; assigned = dhcpv4_assign(iface, a, raddr); } @@ -642,10 +644,11 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface, leasetime = iface->dhcpv4_leasetime; } - // Was only a discover; mark binding for removal - if (assigned && a->valid_until < now) { - a->valid_until = ((msg == DHCPV4_MSG_DISCOVER) ? now : ((leasetime == UINT32_MAX) ? - 0 : (time_t)(now + leasetime))); + if (assigned) { + if (!INFINITE_VALID(a->valid_until)) + // Was only a discover; mark binding for removal + a->valid_until = ((msg == DHCPV4_MSG_DISCOVER) ? now : ((leasetime == UINT32_MAX) ? + 0 : (time_t)(now + leasetime))); } else if (!assigned && a) { // Cleanup failed assignment free(a); a = NULL; -- 1.9.1 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev