From a00076113b9c7a68f6e2294e15fccb8e4be044ef Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 4 Sep 2023 23:40:14 +0900 Subject: [PATCH] sd-dhcp-server: store lifetime and friends in usec_t --- src/libsystemd-network/dhcp-server-internal.h | 5 ++-- src/libsystemd-network/sd-dhcp-server.c | 26 +++++++------------ src/network/networkd-dhcp-server.c | 6 ++--- src/systemd/sd-dhcp-server.h | 4 +-- 4 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/libsystemd-network/dhcp-server-internal.h b/src/libsystemd-network/dhcp-server-internal.h index 16b92545685..a2dae1cd4a8 100644 --- a/src/libsystemd-network/dhcp-server-internal.h +++ b/src/libsystemd-network/dhcp-server-internal.h @@ -81,7 +81,8 @@ struct sd_dhcp_server { Hashmap *static_leases_by_client_id; Hashmap *static_leases_by_address; - uint32_t max_lease_time, default_lease_time; + usec_t max_lease_time; + usec_t default_lease_time; sd_dhcp_server_callback_t callback; void *callback_userdata; @@ -101,7 +102,7 @@ typedef struct DHCPRequest { size_t max_optlen; be32_t server_id; be32_t requested_ip; - uint32_t lifetime; + usec_t lifetime; const uint8_t *agent_info_option; char *hostname; } DHCPRequest; diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c index a9bb7657d1a..a917406ceca 100644 --- a/src/libsystemd-network/sd-dhcp-server.c +++ b/src/libsystemd-network/sd-dhcp-server.c @@ -206,8 +206,8 @@ int sd_dhcp_server_new(sd_dhcp_server **ret, int ifindex) { .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); @@ -589,7 +589,7 @@ static int server_send_offer_or_ack( 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); @@ -735,7 +735,7 @@ static int parse_request(uint8_t code, uint8_t len, const void *option, void *us 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: @@ -844,7 +844,7 @@ static int ensure_sane_request(sd_dhcp_server *server, DHCPRequest *req, DHCPMes 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; @@ -997,7 +997,7 @@ static int server_ack_request(sd_dhcp_server *server, DHCPRequest *req, DHCPLeas 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); @@ -1487,24 +1487,18 @@ int sd_dhcp_server_set_timezone(sd_dhcp_server *server, const char *tz) { 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( diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c index 0857311d5ea..dacbb7e129b 100644 --- a/src/network/networkd-dhcp-server.c +++ b/src/network/networkd-dhcp-server.c @@ -391,15 +391,13 @@ static int dhcp4_server_configure(Link *link) { 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"); } diff --git a/src/systemd/sd-dhcp-server.h b/src/systemd/sd-dhcp-server.h index e361c62a9cb..64d95258fd6 100644 --- a/src/systemd/sd-dhcp-server.h +++ b/src/systemd/sd-dhcp-server.h @@ -82,8 +82,8 @@ int sd_dhcp_server_add_option(sd_dhcp_server *server, sd_dhcp_option *v); 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); -- 2.47.3