summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2020-07-08 21:43:55 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2020-07-09 14:47:07 +0200
commitca3d0a8f0637a6c860a445a2900d500d32894e02 (patch)
treedb4f6d4c4cbb8ba44e099976ca0db104b5384634
parent341111ff315f69363a4aec1081303733fcabe969 (diff)
downloadNetworkManager-bg/initrd-dhcp6-rh1854323.tar.gz
initrd: generate ipv6.method=auto for ip=dhcp6bg/initrd-dhcp6-rh1854323
When a 'ip=auto6' option is passed to kernel, the old dracut network module only sets accept_ra in kernel and wait for the address to appear. Instead, with a 'ip=dhcp6' option it starts 'dhclient -6', leaving accept_ra to the initial value (that is already 1). So 'ip=dhcp6' in practice does kernel IPv6 autoconf and DHCPv6 at the same time, without honoring the 'Managed' flag of the router advertisement. It seems that the only reason to have distinct 'auto6' and 'dhcp6' options was that network module did not support starting DHCPv6 only when necessary based on the M flag of the RA; so the user had to specify if DHCPv6 was needed or not. Given that 1) NM is smarter and can start DHCPv6 only when needed by RA; 2) DHCPv6 alone only gets a /128 address without a prefix route and so it's not useful; then it makes sense to generate a connection with 'ipv6.method=auto' for both 'ip=auto6' and 'ip=dhcp6'. https://bugzilla.redhat.com/show_bug.cgi?id=1854323 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/571
-rw-r--r--src/initrd/nmi-cmdline-reader.c12
-rw-r--r--src/initrd/tests/test-cmdline-reader.c4
2 files changed, 3 insertions, 13 deletions
diff --git a/src/initrd/nmi-cmdline-reader.c b/src/initrd/nmi-cmdline-reader.c
index b5fbf8305c..17f9e1dfd2 100644
--- a/src/initrd/nmi-cmdline-reader.c
+++ b/src/initrd/nmi-cmdline-reader.c
@@ -485,17 +485,7 @@ reader_parse_ip (Reader *reader, const char *sysfs_dir, char *argument)
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
NULL);
}
- } else if (nm_streq0 (kind, "dhcp6")) {
- g_object_set (s_ip6,
- NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_DHCP,
- NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
- NULL);
- if (nm_setting_ip_config_get_num_addresses (s_ip4) == 0) {
- g_object_set (s_ip4,
- NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
- NULL);
- }
- } else if (nm_streq0 (kind, "auto6")) {
+ } else if (NM_IN_STRSET (kind, "auto6", "dhcp6")) {
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
NULL);
diff --git a/src/initrd/tests/test-cmdline-reader.c b/src/initrd/tests/test-cmdline-reader.c
index c3e55998c6..04594c48be 100644
--- a/src/initrd/tests/test-cmdline-reader.c
+++ b/src/initrd/tests/test-cmdline-reader.c
@@ -138,7 +138,7 @@ test_if_dhcp6 (void)
s_ip6 = nm_connection_get_setting_ip6_config (connection);
g_assert (s_ip6);
- g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DHCP);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
g_assert (!nm_setting_ip_config_get_ignore_auto_dns (s_ip6));
}
@@ -963,7 +963,7 @@ test_team (void)
s_ip6 = nm_connection_get_setting_ip6_config (connection);
g_assert (s_ip6);
- g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DHCP);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
g_assert (!nm_setting_ip_config_get_ignore_auto_dns (s_ip6));
g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip6), ==, 0);
g_assert (!nm_setting_ip_config_get_gateway (s_ip6));