initrd: unset dhcp options for static profiles
Makes it so that DHCP properties (`dhcp-timeout`, `dhcp-hostname`) are unset when they are deemed unnecessary. Unit tests have also been updated to account for this change. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1276 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1695
This commit is contained in:
@@ -1275,6 +1275,38 @@ static void
|
|||||||
_normalize_conn(gpointer key, gpointer value, gpointer user_data)
|
_normalize_conn(gpointer key, gpointer value, gpointer user_data)
|
||||||
{
|
{
|
||||||
NMConnection *connection = value;
|
NMConnection *connection = value;
|
||||||
|
NMSettingIPConfig *s_ip4 = NULL, *s_ip6 = NULL;
|
||||||
|
|
||||||
|
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||||
|
if (s_ip4) {
|
||||||
|
const char *method = nm_setting_ip_config_get_method(s_ip4);
|
||||||
|
|
||||||
|
if (!nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
|
||||||
|
g_object_set(s_ip4,
|
||||||
|
NM_SETTING_IP_CONFIG_DHCP_HOSTNAME,
|
||||||
|
NULL,
|
||||||
|
NM_SETTING_IP_CONFIG_DHCP_TIMEOUT,
|
||||||
|
NULL,
|
||||||
|
NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
||||||
|
if (s_ip6) {
|
||||||
|
const char *method = nm_setting_ip_config_get_method(s_ip6);
|
||||||
|
|
||||||
|
if (!nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
|
||||||
|
&& !nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
|
||||||
|
g_object_set(s_ip6,
|
||||||
|
NM_SETTING_IP_CONFIG_DHCP_HOSTNAME,
|
||||||
|
NULL,
|
||||||
|
NM_SETTING_IP_CONFIG_DHCP_TIMEOUT,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nm_connection_normalize(connection, NULL, NULL, NULL);
|
nm_connection_normalize(connection, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
@@ -399,6 +399,7 @@ test_if_auto_with_mtu_and_mac(void)
|
|||||||
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
|
||||||
==,
|
==,
|
||||||
NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
|
NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL);
|
||||||
g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
|
g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
|
||||||
|
|
||||||
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
||||||
@@ -451,7 +452,7 @@ test_if_ip4_manual(void)
|
|||||||
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "192.0.2.2");
|
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "192.0.2.2");
|
||||||
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24);
|
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24);
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.0.2.1");
|
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.0.2.1");
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname0.example.com");
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL);
|
||||||
g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ==, -1);
|
g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ==, -1);
|
||||||
|
|
||||||
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
||||||
@@ -459,6 +460,7 @@ test_if_ip4_manual(void)
|
|||||||
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
||||||
==,
|
==,
|
||||||
NM_SETTING_IP6_CONFIG_METHOD_DISABLED);
|
NM_SETTING_IP6_CONFIG_METHOD_DISABLED);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL);
|
||||||
g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
|
g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
|
||||||
g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1);
|
g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1);
|
||||||
|
|
||||||
@@ -480,7 +482,7 @@ test_if_ip4_manual(void)
|
|||||||
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "203.0.113.2");
|
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "203.0.113.2");
|
||||||
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 26);
|
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 26);
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "203.0.113.1");
|
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "203.0.113.1");
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname1.example.com");
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL);
|
||||||
|
|
||||||
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
||||||
g_assert(s_ip6);
|
g_assert(s_ip6);
|
||||||
@@ -488,6 +490,59 @@ test_if_ip4_manual(void)
|
|||||||
g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
|
g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_if_ip4_auto(void)
|
||||||
|
{
|
||||||
|
gs_unref_hashtable GHashTable *connections = NULL;
|
||||||
|
const char *const *ARGV = NM_MAKE_STRV("ip=172.25.1.1::172.25.1.2:24:"
|
||||||
|
"myhostname:eth0:dhcp",
|
||||||
|
"rd.net.timeout.dhcp=10");
|
||||||
|
NMConnection *connection;
|
||||||
|
NMSettingConnection *s_con;
|
||||||
|
NMSettingIPConfig *s_ip4;
|
||||||
|
NMSettingIPConfig *s_ip6;
|
||||||
|
NMIPAddress *ip_addr;
|
||||||
|
gs_free char *hostname = NULL;
|
||||||
|
gint64 carrier_timeout_sec = 0;
|
||||||
|
|
||||||
|
connections = _parse(ARGV, &hostname, &carrier_timeout_sec);
|
||||||
|
g_assert_cmpint(g_hash_table_size(connections), ==, 1);
|
||||||
|
g_assert_cmpstr(hostname, ==, "myhostname");
|
||||||
|
g_assert_cmpint(carrier_timeout_sec, ==, 0);
|
||||||
|
|
||||||
|
connection = g_hash_table_lookup(connections, "eth0");
|
||||||
|
nmtst_assert_connection_verifies_without_normalization(connection);
|
||||||
|
g_assert_cmpstr(nm_connection_get_id(connection), ==, "eth0");
|
||||||
|
|
||||||
|
s_con = nm_connection_get_setting_connection(connection);
|
||||||
|
g_assert(s_con);
|
||||||
|
g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), ==, -1);
|
||||||
|
|
||||||
|
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||||
|
g_assert(s_ip4);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
|
||||||
|
g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
|
||||||
|
g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 0);
|
||||||
|
g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip4), ==, 0);
|
||||||
|
g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1);
|
||||||
|
g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip4), ==, 10);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "172.25.1.2");
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "myhostname");
|
||||||
|
|
||||||
|
ip_addr = nm_setting_ip_config_get_address(s_ip4, 0);
|
||||||
|
g_assert(ip_addr);
|
||||||
|
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "172.25.1.1");
|
||||||
|
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24);
|
||||||
|
|
||||||
|
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_AUTO);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "myhostname");
|
||||||
|
g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
|
||||||
|
g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip6), ==, 10);
|
||||||
|
g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_if_ip4_manual_no_dev(void)
|
test_if_ip4_manual_no_dev(void)
|
||||||
{
|
{
|
||||||
@@ -535,6 +590,7 @@ test_if_ip6_manual(void)
|
|||||||
const char *const *ARGV = NM_MAKE_STRV("ip=[2001:0db8::02]/64::[2001:0db8::01]::"
|
const char *const *ARGV = NM_MAKE_STRV("ip=[2001:0db8::02]/64::[2001:0db8::01]::"
|
||||||
"hostname0.example.com:eth4::[2001:0db8::53]");
|
"hostname0.example.com:eth4::[2001:0db8::53]");
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
NMSettingIPConfig *s_ip4;
|
||||||
NMSettingIPConfig *s_ip6;
|
NMSettingIPConfig *s_ip6;
|
||||||
NMIPAddress *ip_addr;
|
NMIPAddress *ip_addr;
|
||||||
gs_free char *hostname = NULL;
|
gs_free char *hostname = NULL;
|
||||||
@@ -549,6 +605,11 @@ test_if_ip6_manual(void)
|
|||||||
nmtst_assert_connection_verifies_without_normalization(connection);
|
nmtst_assert_connection_verifies_without_normalization(connection);
|
||||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "eth4");
|
g_assert_cmpstr(nm_connection_get_id(connection), ==, "eth4");
|
||||||
|
|
||||||
|
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||||
|
g_assert(s_ip4);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname0.example.com");
|
||||||
|
|
||||||
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
||||||
g_assert(s_ip6);
|
g_assert(s_ip6);
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
||||||
@@ -564,7 +625,7 @@ test_if_ip6_manual(void)
|
|||||||
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::2");
|
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::2");
|
||||||
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64);
|
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64);
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1");
|
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1");
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "hostname0.example.com");
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -616,6 +677,7 @@ test_if_mac_ifname(void)
|
|||||||
const char *const *ARGV = NM_MAKE_STRV("ip=[2001:0db8::42]/64::[2001:0db8::01]::"
|
const char *const *ARGV = NM_MAKE_STRV("ip=[2001:0db8::42]/64::[2001:0db8::01]::"
|
||||||
"hostname0:00-11-22-33-44-55::[2001:0db8::53]");
|
"hostname0:00-11-22-33-44-55::[2001:0db8::53]");
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
NMSettingIPConfig *s_ip4;
|
||||||
NMSettingIPConfig *s_ip6;
|
NMSettingIPConfig *s_ip6;
|
||||||
NMSettingWired *s_wired;
|
NMSettingWired *s_wired;
|
||||||
NMIPAddress *ip_addr;
|
NMIPAddress *ip_addr;
|
||||||
@@ -636,6 +698,11 @@ test_if_mac_ifname(void)
|
|||||||
g_assert(s_wired);
|
g_assert(s_wired);
|
||||||
g_assert_cmpstr(nm_setting_wired_get_mac_address(s_wired), ==, "00:11:22:33:44:55");
|
g_assert_cmpstr(nm_setting_wired_get_mac_address(s_wired), ==, "00:11:22:33:44:55");
|
||||||
|
|
||||||
|
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||||
|
g_assert(s_ip4);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname0");
|
||||||
|
|
||||||
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
s_ip6 = nm_connection_get_setting_ip6_config(connection);
|
||||||
g_assert(s_ip6);
|
g_assert(s_ip6);
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
||||||
@@ -646,12 +713,13 @@ test_if_mac_ifname(void)
|
|||||||
g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 0), ==, "2001:db8::53");
|
g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 0), ==, "2001:db8::53");
|
||||||
g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip6), ==, 0);
|
g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip6), ==, 0);
|
||||||
g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip6), ==, 1);
|
g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip6), ==, 1);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1");
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL);
|
||||||
|
|
||||||
ip_addr = nm_setting_ip_config_get_address(s_ip6, 0);
|
ip_addr = nm_setting_ip_config_get_address(s_ip6, 0);
|
||||||
g_assert(ip_addr);
|
g_assert(ip_addr);
|
||||||
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::42");
|
g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::42");
|
||||||
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64);
|
g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64);
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1");
|
|
||||||
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "hostname0");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1040,6 +1108,7 @@ test_bond_ip(void)
|
|||||||
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
|
||||||
==,
|
==,
|
||||||
NM_SETTING_IP6_CONFIG_METHOD_DISABLED);
|
NM_SETTING_IP6_CONFIG_METHOD_DISABLED);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL);
|
||||||
g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip6));
|
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_cmpint(nm_setting_ip_config_get_num_dns(s_ip6), ==, 0);
|
||||||
g_assert(!nm_setting_ip_config_get_gateway(s_ip6));
|
g_assert(!nm_setting_ip_config_get_gateway(s_ip6));
|
||||||
@@ -1403,6 +1472,7 @@ test_team(void)
|
|||||||
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
|
g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
|
||||||
==,
|
==,
|
||||||
NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
|
NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
|
||||||
|
g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL);
|
||||||
g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
|
g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
|
||||||
g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 0);
|
g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 0);
|
||||||
g_assert(!nm_setting_ip_config_get_gateway(s_ip4));
|
g_assert(!nm_setting_ip_config_get_gateway(s_ip4));
|
||||||
@@ -2551,6 +2621,7 @@ main(int argc, char **argv)
|
|||||||
g_test_add_func("/initrd/cmdline/if_dhcp6", test_if_dhcp6);
|
g_test_add_func("/initrd/cmdline/if_dhcp6", test_if_dhcp6);
|
||||||
g_test_add_func("/initrd/cmdline/if_auto_with_mtu_and_mac", test_if_auto_with_mtu_and_mac);
|
g_test_add_func("/initrd/cmdline/if_auto_with_mtu_and_mac", test_if_auto_with_mtu_and_mac);
|
||||||
g_test_add_func("/initrd/cmdline/if_ip4_manual", test_if_ip4_manual);
|
g_test_add_func("/initrd/cmdline/if_ip4_manual", test_if_ip4_manual);
|
||||||
|
g_test_add_func("/initrd/cmdline/if_ip4_auto", test_if_ip4_auto);
|
||||||
g_test_add_func("/initrd/cmdline/if_ip4_manual_no_dev", test_if_ip4_manual_no_dev);
|
g_test_add_func("/initrd/cmdline/if_ip4_manual_no_dev", test_if_ip4_manual_no_dev);
|
||||||
g_test_add_func("/initrd/cmdline/if_ip6_manual", test_if_ip6_manual);
|
g_test_add_func("/initrd/cmdline/if_ip6_manual", test_if_ip6_manual);
|
||||||
g_test_add_func("/initrd/cmdline/if_mac_ifname", test_if_mac_ifname);
|
g_test_add_func("/initrd/cmdline/if_mac_ifname", test_if_mac_ifname);
|
||||||
|
Reference in New Issue
Block a user