summaryrefslogtreecommitdiff
path: root/src/core/dhcp/nm-dhcp-dhclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/dhcp/nm-dhcp-dhclient.c')
-rw-r--r--src/core/dhcp/nm-dhcp-dhclient.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/core/dhcp/nm-dhcp-dhclient.c b/src/core/dhcp/nm-dhcp-dhclient.c
index 35b2fb2ebd..4aab4b1efb 100644
--- a/src/core/dhcp/nm-dhcp-dhclient.c
+++ b/src/core/dhcp/nm-dhcp-dhclient.c
@@ -356,6 +356,7 @@ dhclient_start(NMDhcpClient *client,
gs_free char *preferred_leasefile_path = NULL;
int addr_family;
const NMDhcpClientConfig *client_config;
+ char pd_length_str[16];
g_return_val_if_fail(!priv->pid_file, FALSE);
client_config = nm_dhcp_client_get_config(client);
@@ -463,6 +464,17 @@ dhclient_start(NMDhcpClient *client,
if (mode_opt)
g_ptr_array_add(argv, (gpointer) mode_opt);
+
+ if (prefixes > 0 && client_config->v6.pd_hint_length > 0) {
+ if (!IN6_IS_ADDR_UNSPECIFIED(&client_config->v6.pd_hint_addr)) {
+ _LOGW("dhclient only supports a length as prefix delegation hint, not a prefix");
+ }
+
+ nm_sprintf_buf(pd_length_str, "%u", client_config->v6.pd_hint_length);
+ g_ptr_array_add(argv, "--prefix-len-hint");
+ g_ptr_array_add(argv, pd_length_str);
+ }
+
while (prefixes--)
g_ptr_array_add(argv, (gpointer) "-P");
}