Blame SOURCES/1007-initrd-multiconnect-single-for-manual-ip-rh1915493.patch

964b59
From eba6e2d5f34bea51064cb6f0303255acf3196abf Mon Sep 17 00:00:00 2001
964b59
From: Beniamino Galvani <bgalvani@redhat.com>
964b59
Date: Wed, 10 Mar 2021 09:18:59 +0100
964b59
Subject: [PATCH 1/2] initrd: fix may-fail for IPv6
964b59
964b59
(cherry picked from commit 5f736465249fd16115120f022aa0eb5ddf0b2bfc)
964b59
(cherry picked from commit 1bf1a902beea3a1b9505cf8c9177d74cfea859b3)
964b59
---
964b59
 src/core/initrd/nmi-cmdline-reader.c | 2 +-
964b59
 1 file changed, 1 insertion(+), 1 deletion(-)
964b59
964b59
diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c
964b59
index e3ecc7d969..6d3b2b7dda 100644
964b59
--- a/src/core/initrd/nmi-cmdline-reader.c
964b59
+++ b/src/core/initrd/nmi-cmdline-reader.c
964b59
@@ -599,7 +599,7 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument)
964b59
                          NULL);
964b59
         }
964b59
     } else if (NM_IN_STRSET(kind, "auto6", "dhcp6")) {
964b59
-        g_object_set(s_ip4, NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE, NULL);
964b59
+        g_object_set(s_ip6, NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE, NULL);
964b59
         if (nm_setting_ip_config_get_num_addresses(s_ip4) == 0) {
964b59
             g_object_set(s_ip4,
964b59
                          NM_SETTING_IP_CONFIG_METHOD,
964b59
-- 
964b59
2.29.2
964b59
964b59
From 118d46a3122ac35b0e4447c976f77a4ccdbdea33 Mon Sep 17 00:00:00 2001
964b59
From: Beniamino Galvani <bgalvani@redhat.com>
964b59
Date: Thu, 11 Mar 2021 09:15:37 +0100
964b59
Subject: [PATCH 2/2] initrd: set multi-connect=single for connections with
964b59
 static IP
964b59
964b59
We don't want to have multiple devices up with the same static IP. Set
964b59
multi-connect=single.
964b59
964b59
https://bugzilla.redhat.com/show_bug.cgi?id=1915493
964b59
(cherry picked from commit c27626a0ce4da8438503d764815542927def6dce)
964b59
(cherry picked from commit fafefc71f826643ce8279f6a88f97d03f92e8422)
964b59
---
964b59
 src/core/initrd/nmi-cmdline-reader.c        | 12 +++++-
964b59
 src/core/initrd/tests/test-cmdline-reader.c | 42 +++++++++++++++++++++
964b59
 2 files changed, 52 insertions(+), 2 deletions(-)
964b59
964b59
diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c
964b59
index 6d3b2b7dda..eae75847ee 100644
964b59
--- a/src/core/initrd/nmi-cmdline-reader.c
964b59
+++ b/src/core/initrd/nmi-cmdline-reader.c
964b59
@@ -393,8 +393,9 @@ reader_read_all_connections_from_fw(Reader *reader, const char *sysfs_dir)
964b59
 static void
964b59
 reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument)
964b59
 {
964b59
-    NMConnection *     connection;
964b59
-    NMSettingIPConfig *s_ip4 = NULL, *s_ip6 = NULL;
964b59
+    NMConnection *       connection;
964b59
+    NMSettingConnection *s_con;
964b59
+    NMSettingIPConfig *  s_ip4 = NULL, *s_ip6 = NULL;
964b59
     gs_unref_hashtable GHashTable *ibft = NULL;
964b59
     const char *                   tmp;
964b59
     const char *                   tmp2;
964b59
@@ -495,6 +496,7 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument)
964b59
 
964b59
     g_hash_table_add(reader->explicit_ip_connections, g_object_ref(connection));
964b59
 
964b59
+    s_con = nm_connection_get_setting_connection(connection);
964b59
     s_ip4 = nm_connection_get_setting_ip4_config(connection);
964b59
     s_ip6 = nm_connection_get_setting_ip6_config(connection);
964b59
 
964b59
@@ -544,6 +546,12 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument)
964b59
             nm_assert_not_reached();
964b59
 
964b59
         if (address) {
964b59
+            /* We don't want to have multiple devices up with the
964b59
+             * same static address. */
964b59
+            g_object_set(s_con,
964b59
+                         NM_SETTING_CONNECTION_MULTI_CONNECT,
964b59
+                         NM_CONNECTION_MULTI_CONNECT_SINGLE,
964b59
+                         NULL);
964b59
             switch (client_ip_family) {
964b59
             case AF_INET:
964b59
                 g_object_set(s_ip4,
964b59
diff --git a/src/core/initrd/tests/test-cmdline-reader.c b/src/core/initrd/tests/test-cmdline-reader.c
964b59
index ba072e7933..187d61c9dc 100644
964b59
--- a/src/core/initrd/tests/test-cmdline-reader.c
964b59
+++ b/src/core/initrd/tests/test-cmdline-reader.c
964b59
@@ -455,6 +455,47 @@ test_if_ip4_manual(void)
964b59
     g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
964b59
 }
964b59
 
964b59
+static void
964b59
+test_if_ip4_manual_no_dev(void)
964b59
+{
964b59
+    gs_unref_hashtable GHashTable *connections = NULL;
964b59
+    const char *const *            ARGV        = NM_MAKE_STRV("ip=192.0.2.2::192.0.2.1:24:::");
964b59
+    NMConnection *                 connection;
964b59
+    NMSettingConnection *          s_con;
964b59
+    NMSettingIPConfig *            s_ip4;
964b59
+    NMSettingIPConfig *            s_ip6;
964b59
+    NMIPAddress *                  ip_addr;
964b59
+
964b59
+    connection = _parse_con(ARGV, "default_connection");
964b59
+    g_assert_cmpstr(nm_connection_get_id(connection), ==, "Wired Connection");
964b59
+
964b59
+    s_con = nm_connection_get_setting_connection(connection);
964b59
+    g_assert(s_con);
964b59
+    g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), ==, -1);
964b59
+    g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
964b59
+                    ==,
964b59
+                    NM_CONNECTION_MULTI_CONNECT_SINGLE);
964b59
+
964b59
+    s_ip4 = nm_connection_get_setting_ip4_config(connection);
964b59
+    g_assert(s_ip4);
964b59
+    g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
964b59
+                    ==,
964b59
+                    NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
964b59
+    g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
964b59
+    g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip4), ==, 0);
964b59
+    g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1);
964b59
+    ip_addr = nm_setting_ip_config_get_address(s_ip4, 0);
964b59
+    g_assert(ip_addr);
964b59
+    g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "192.0.2.2");
964b59
+    g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24);
964b59
+    g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.0.2.1");
964b59
+
964b59
+    s_ip6 = nm_connection_get_setting_ip6_config(connection);
964b59
+    g_assert(s_ip6);
964b59
+    g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
964b59
+    g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
964b59
+}
964b59
+
964b59
 static void
964b59
 test_if_ip6_manual(void)
964b59
 {
964b59
@@ -2165,6 +2206,7 @@ main(int argc, char **argv)
964b59
     g_test_add_func("/initrd/cmdline/if_dhcp6", test_if_dhcp6);
964b59
     g_test_add_func("/initrd/cmdline/if_auto_with_mtu_and_mac", test_if_auto_with_mtu_and_mac);
964b59
     g_test_add_func("/initrd/cmdline/if_ip4_manual", test_if_ip4_manual);
964b59
+    g_test_add_func("/initrd/cmdline/if_ip4_manual_no_dev", test_if_ip4_manual_no_dev);
964b59
     g_test_add_func("/initrd/cmdline/if_ip6_manual", test_if_ip6_manual);
964b59
     g_test_add_func("/initrd/cmdline/if_mac_ifname", test_if_mac_ifname);
964b59
     g_test_add_func("/initrd/cmdline/if_off", test_if_off);
964b59
-- 
964b59
2.29.2
964b59