Skip to content

Commit f76236f

Browse files
committed
DHCP: Fix plugin leasetime
1 parent 57df611 commit f76236f

File tree

1 file changed

+11
-18
lines changed

1 file changed

+11
-18
lines changed

src/dhcp.c

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -785,34 +785,27 @@ dhcp_addoptions(struct bootp *bootp, uint8_t **p, const uint8_t *e,
785785
const struct dhcp_pool *pool, const char *msg, const struct bootp *req,
786786
size_t reqlen)
787787
{
788-
const uint8_t *opt;
789-
790788
DHCP_PUT_B(p, e, DHO_MESSAGETYPE, type);
791789
DHCP_PUT_U32(p, e, DHO_SERVERID, pool->dp_addr.s_addr);
792790
if (type == DHCP_OFFER || type == DHCP_ACK) {
793-
uint32_t u32, lease_time;
791+
struct timespec tv;
792+
uint32_t u32, lease_time, renew_time, rebind_time;
794793
struct plugin *plug;
795794
int n;
796795

797-
if (pool->dp_lease_time != 0)
798-
lease_time = pool->dp_lease_time;
799-
else
800-
lease_time = ctx->dhcp_lease_time;
796+
if (timespecisset(&lease->dl_leased)) {
797+
timespecsub(&lease->dl_expires, &lease->dl_leased, &tv);
798+
lease_time = (uint32_t)tv.tv_sec;
799+
renew_time = (uint32_t)(lease_time * T1);
800+
rebind_time = (uint32_t)(lease_time * T2);
801+
} else
802+
lease_time = renew_time = rebind_time = INFINITE_LIFETIME;
801803

802-
/* Allow the client to request a shorter leasetime
803-
* but not a longer one. */
804-
opt = dhcp_findoption(req, reqlen, DHO_LEASETIME);
805-
if (opt != NULL && opt[0] == sizeof(u32)) {
806-
memcpy(&u32, opt + 1, sizeof(u32));
807-
u32 = ntohl(u32);
808-
if (u32 < lease_time)
809-
lease_time = u32;
810-
}
811804
u32 = htonl(lease_time);
812805
DHCP_PUT_U32(p, e, DHO_LEASETIME, u32);
813-
u32 = htonl((uint32_t)(lease_time * T1));
806+
u32 = htonl(renew_time);
814807
DHCP_PUT_U32(p, e, DHO_RENEWALTIME, u32);
815-
u32 = htonl((uint32_t)(lease_time * T2));
808+
u32 = htonl(rebind_time);
816809
DHCP_PUT_U32(p, e, DHO_REBINDTIME, u32);
817810

818811
n = dhcp_addhostname(p, e, lease, req, reqlen);

0 commit comments

Comments
 (0)