From: Nicolas BESNARD Date: Tue, 14 May 2024 14:19:15 +0000 (+0200) Subject: dhcpv6: fix wrong retransmission of DHCPv6 Solicit X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=96017df54d8fd6ec1dbf877e4c62921f951a3bc4;p=project%2Fodhcp6c.git dhcpv6: fix wrong retransmission of DHCPv6 Solicit When the DHCPv6 client sends a DHCPv6 Solicit with both IA_NA and IA_PD options, and if the server replies with a status code = NoAddrsAvailable in the IA_NA option, then currently the DHCPv6 client sends a new Solicit with only the IA_PD option despite the fact that a prefix was sent by the server in the previous Advertise. This behavior is described in https://datatracker.ietf.org/doc/html/rfc7550#section-4.2 The client must handle the case of a server that does not offer both valid IA_NA and IA_PD options when both are requested, according to RFC 7550. It should not send a new Solicit, but a Request. The client should, however, ignore the Advertise message if none of the IA_NA and IA_PD options are offered by the server. Signed-off-by: Nicolas BESNARD Signed-off-by: Paul Donald Link: https://github.com/openwrt/odhcp6c/pull/106 Signed-off-by: Álvaro Fernández Rojas --- diff --git a/src/dhcpv6.c b/src/dhcpv6.c index 9b22a7d..50b6f7b 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -1744,7 +1744,7 @@ int dhcpv6_promote_server_cand(void) if (!cand_len) return -1; - if (cand->has_noaddravail && na_mode == IA_MODE_TRY) { + if (!cand->ia_pd_len && cand->has_noaddravail && na_mode == IA_MODE_TRY) { na_mode = IA_MODE_NONE; dhcpv6_retx[DHCPV6_MSG_SOLICIT].max_timeo = cand->sol_max_rt;