From faa3f54eba5dd572946461242039959cd9f723eb Mon Sep 17 00:00:00 2001 From: Taoyu Li Date: Tue, 12 Mar 2024 11:38:28 +0900 Subject: [PATCH] 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. --- src/dhcp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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]; -- 2.47.2