.netmask = htobe32(INADDR_ANY),
.ifindex = ifindex,
.bind_to_interface = true,
- .default_lease_time = DIV_ROUND_UP(DHCP_DEFAULT_LEASE_TIME_USEC, USEC_PER_SEC),
- .max_lease_time = DIV_ROUND_UP(DHCP_MAX_LEASE_TIME_USEC, USEC_PER_SEC),
+ .default_lease_time = DHCP_DEFAULT_LEASE_TIME_USEC,
+ .max_lease_time = DHCP_MAX_LEASE_TIME_USEC,
};
*ret = TAKE_PTR(server);
packet->dhcp.yiaddr = address;
packet->dhcp.siaddr = server->boot_server_address.s_addr;
- lease_time = htobe32(req->lifetime);
+ lease_time = usec_to_be32_sec(req->lifetime);
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME, 4,
&lease_time);
switch (code) {
case SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME:
if (len == 4)
- req->lifetime = unaligned_read_be32(option);
+ req->lifetime = unaligned_be32_sec_to_usec(option, /* max_as_infinity = */ true);
break;
case SD_DHCP_OPTION_REQUESTED_IP_ADDRESS:
req->max_optlen = DHCP_MIN_OPTIONS_SIZE;
if (req->lifetime <= 0)
- req->lifetime = MAX(1ULL, server->default_lease_time);
+ req->lifetime = MAX(USEC_PER_SEC, server->default_lease_time);
if (server->max_lease_time > 0 && req->lifetime > server->max_lease_time)
req->lifetime = server->max_lease_time;
if (r < 0)
return r;
- expiration = usec_add(req->lifetime * USEC_PER_SEC, time_now);
+ expiration = usec_add(req->lifetime, time_now);
if (existing_lease) {
assert(existing_lease->server);
return 1;
}
-int sd_dhcp_server_set_max_lease_time(sd_dhcp_server *server, uint32_t t) {
+int sd_dhcp_server_set_max_lease_time(sd_dhcp_server *server, uint64_t t) {
assert_return(server, -EINVAL);
- if (t == server->max_lease_time)
- return 0;
-
server->max_lease_time = t;
- return 1;
+ return 0;
}
-int sd_dhcp_server_set_default_lease_time(sd_dhcp_server *server, uint32_t t) {
+int sd_dhcp_server_set_default_lease_time(sd_dhcp_server *server, uint64_t t) {
assert_return(server, -EINVAL);
- if (t == server->default_lease_time)
- return 0;
-
server->default_lease_time = t;
- return 1;
+ return 0;
}
int sd_dhcp_server_set_servers(
return log_link_error_errno(link, r, "Failed to configure address pool for DHCPv4 server instance: %m");
if (link->network->dhcp_server_max_lease_time_usec > 0) {
- r = sd_dhcp_server_set_max_lease_time(link->dhcp_server,
- DIV_ROUND_UP(link->network->dhcp_server_max_lease_time_usec, USEC_PER_SEC));
+ r = sd_dhcp_server_set_max_lease_time(link->dhcp_server, link->network->dhcp_server_max_lease_time_usec);
if (r < 0)
return log_link_error_errno(link, r, "Failed to set maximum lease time for DHCPv4 server instance: %m");
}
if (link->network->dhcp_server_default_lease_time_usec > 0) {
- r = sd_dhcp_server_set_default_lease_time(link->dhcp_server,
- DIV_ROUND_UP(link->network->dhcp_server_default_lease_time_usec, USEC_PER_SEC));
+ r = sd_dhcp_server_set_default_lease_time(link->dhcp_server, link->network->dhcp_server_default_lease_time_usec);
if (r < 0)
return log_link_error_errno(link, r, "Failed to set default lease time for DHCPv4 server instance: %m");
}
int sd_dhcp_server_add_vendor_option(sd_dhcp_server *server, sd_dhcp_option *v);
int sd_dhcp_server_set_static_lease(sd_dhcp_server *server, const struct in_addr *address, uint8_t *client_id, size_t client_id_size);
-int sd_dhcp_server_set_max_lease_time(sd_dhcp_server *server, uint32_t t);
-int sd_dhcp_server_set_default_lease_time(sd_dhcp_server *server, uint32_t t);
+int sd_dhcp_server_set_max_lease_time(sd_dhcp_server *server, uint64_t t);
+int sd_dhcp_server_set_default_lease_time(sd_dhcp_server *server, uint64_t t);
int sd_dhcp_server_forcerenew(sd_dhcp_server *server);