From: Taoyu Li Date: Tue, 12 Mar 2024 02:38:28 +0000 (+0900) Subject: Respect IPV6_PREFERRED_ONLY flag on DHS_NONE state X-Git-Tag: v10.0.7~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=faa3f54eba5dd572946461242039959cd9f723eb;p=thirdparty%2Fdhcpcd.git Respect IPV6_PREFERRED_ONLY flag on DHS_NONE state Current IPv6_PREFERRED_ONLY (option 108) handling code is only effective when current state is DHS_DISCOVER and DHS_REBOOT. However, when we receive multiple ACKs upon our REQUEST, the first ACK will trigger the use_v6only code path and dhcp_drop() us into DHS_NONE state, as a result the option 108 on the second ACK won't be handled correctly and we'll bind to the lease instead. This patch fixes the issue by adding DHS_NONE as a state to respect option 108 as well. --- diff --git a/src/dhcp.c b/src/dhcp.c index 581a9faa..275c0c4b 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -3207,8 +3207,8 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len, if (has_option_mask(ifo->requestmask, DHO_IPV6_PREFERRED_ONLY)) { if (get_option_uint32(ifp->ctx, &v6only_time, bootp, bootp_len, - DHO_IPV6_PREFERRED_ONLY) == 0 && - (state->state == DHS_DISCOVER || state->state == DHS_REBOOT)) + DHO_IPV6_PREFERRED_ONLY) == 0 && (state->state == DHS_DISCOVER || + state->state == DHS_REBOOT || state->state == DHS_NONE)) { char v6msg[128];