odhcp6c: 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.

References: PCF-1390
Signed-off-by: Matthias FRANCK <matthias.franck@softathome.com>
This commit is contained in:
Matthias FRANCK 2024-08-28 12:36:52 +02:00 committed by Petr Štetiar
parent cf259e640a
commit 25a72db05e
No known key found for this signature in database
GPG Key ID: 58EE120F30CC02D3

View File

@ -0,0 +1,13 @@
diff --git a/src/dhcpv6.c b/src/dhcpv6.c
index ca5957e..0b603f0 100644
--- a/src/dhcpv6.c
+++ b/src/dhcpv6.c
@@ -1664,7 +1664,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;