From: Yu Watanabe Date: Sun, 6 Feb 2022 17:59:31 +0000 (+0900) Subject: sd-dhcp6-client: max_retransmit_count is only used when client is in DHCP6_STATE_REQUEST X-Git-Tag: v251-rc1~291^2~30 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=22ad018b5e75ad3114bb4849428301ca37c78f31;p=thirdparty%2Fsystemd.git sd-dhcp6-client: max_retransmit_count is only used when client is in DHCP6_STATE_REQUEST --- diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 95ec78d8283..c7aec08c7be 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -944,8 +944,7 @@ error: static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userdata) { sd_dhcp6_client *client = ASSERT_PTR(userdata); - usec_t time_now, init_retransmit_time = 0, max_retransmit_time = 0; - uint8_t max_retransmit_count = 0; + usec_t time_now, init_retransmit_time, max_retransmit_time; int r; assert(s); @@ -955,7 +954,6 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda case DHCP6_STATE_INFORMATION_REQUEST: init_retransmit_time = DHCP6_INF_TIMEOUT; max_retransmit_time = DHCP6_INF_MAX_RT; - break; case DHCP6_STATE_SOLICITATION: @@ -967,14 +965,17 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda init_retransmit_time = DHCP6_SOL_TIMEOUT; max_retransmit_time = DHCP6_SOL_MAX_RT; - break; case DHCP6_STATE_REQUEST: + + if (client->retransmit_count >= DHCP6_REQ_MAX_RC) { + client_stop(client, SD_DHCP6_CLIENT_EVENT_RETRANS_MAX); + return 0; + } + init_retransmit_time = DHCP6_REQ_TIMEOUT; max_retransmit_time = DHCP6_REQ_MAX_RT; - max_retransmit_count = DHCP6_REQ_MAX_RC; - break; case DHCP6_STATE_RENEW: @@ -984,7 +985,6 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda /* RFC 3315, section 18.1.3. says max retransmit duration will be the remaining time until T2. Instead of setting MRD, wait for T2 to trigger with the same end result */ - break; case DHCP6_STATE_REBIND: @@ -996,17 +996,10 @@ static int client_timeout_resend(sd_event_source *s, uint64_t usec, void *userda case DHCP6_STATE_STOPPED: case DHCP6_STATE_BOUND: - return 0; default: assert_not_reached(); } - if (max_retransmit_count > 0 && - client->retransmit_count >= max_retransmit_count) { - client_stop(client, SD_DHCP6_CLIENT_EVENT_RETRANS_MAX); - return 0; - } - r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now); if (r < 0) goto error;