dhcp: fix requesting prefixes in stateless mode

According to RFC3315 section 15.12, Information-request messages can't
include a IA option (such as IA_NA or IA_PD).

When doing stateless DHCPv6, we start the client in the appropriate
mode to issue an Information-request message: with "-S" for dhclient or
calling sd_dhcp6_client_set_information_request(TRUE) for systemd.

However, if we need a prefix later, the client must be restarted to
ask the prefix. Currently both dhclient and systemd clients are still
configured to send an Information-request with prefixes. Fix that.

(cherry picked from commit 6ed95bd8e5)
This commit is contained in:
Beniamino Galvani 2021-02-01 18:02:37 +01:00
parent eacd1dacfa
commit cf6c9253f6
2 changed files with 11 additions and 2 deletions

View file

@ -437,6 +437,12 @@ dhclient_start(NMDhcpClient *client,
if (addr_family == AF_INET6) {
g_ptr_array_add(argv, (gpointer) "-6");
if (prefixes > 0 && nm_streq0(mode_opt, "-S")) {
/* -S is incompatible with -P, only use the latter */
mode_opt = NULL;
}
if (mode_opt)
g_ptr_array_add(argv, (gpointer) mode_opt);
while (prefixes--)

View file

@ -969,8 +969,11 @@ ip6_start(NMDhcpClient * client,
_LOGT("dhcp-client6: set %p", sd_client);
if (nm_dhcp_client_get_info_only(client))
sd_dhcp6_client_set_information_request(sd_client, 1);
if (nm_dhcp_client_get_info_only(client)) {
sd_dhcp6_client_set_address_request(sd_client, 0);
if (needed_prefixes == 0)
sd_dhcp6_client_set_information_request(sd_client, 1);
}
r = sd_dhcp6_client_set_iaid(sd_client, nm_dhcp_client_get_iaid(client));
if (r < 0) {