]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Respect IPV6_PREFERRED_ONLY flag on DHS_NONE state
authorTaoyu Li <taoyl@google.com>
Tue, 12 Mar 2024 02:38:28 +0000 (11:38 +0900)
committerRoy Marples <roy@marples.name>
Tue, 2 Apr 2024 09:07:39 +0000 (10:07 +0100)
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

index 581a9faab0c82796647ba3a621761e826a9c9bc3..275c0c4b8c0a24f34a9e5825f786f480e1f05e72 100644 (file)
@@ -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];