summary refs log tree commit diff
path: root/src/nm-initrd-generator
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2024-02-13 22:23:40 +0100
committerMichael Biebl <biebl@debian.org>2024-02-13 22:23:40 +0100
commit6681f77b757bbc42ce5c8868ee9142b7ebc8c059 (patch)
treef713e759b7c255ebeea83351f05dd466fd31422f /src/nm-initrd-generator
parent70e18d99b8e3e77bb37e218d7ac582130156f8ef (diff)
New upstream version 1.45.91 upstream/1.45.91
Diffstat (limited to 'src/nm-initrd-generator')
-rw-r--r--src/nm-initrd-generator/nmi-cmdline-reader.c16
-rw-r--r--src/nm-initrd-generator/tests/test-cmdline-reader.c28
2 files changed, 43 insertions, 1 deletions
diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c
index 7bb7e43e..1c35a905 100644
--- a/src/nm-initrd-generator/nmi-cmdline-reader.c
+++ b/src/nm-initrd-generator/nmi-cmdline-reader.c
@@ -39,6 +39,7 @@ typedef struct {
     gboolean ignore_auto_dns;
     int      dhcp_timeout;
     char    *dhcp4_vci;
+    char    *dhcp_dscp;
 
     gint64 carrier_timeout_sec;
 } Reader;
@@ -73,6 +74,7 @@ reader_destroy(Reader *reader, gboolean free_hash)
     nm_clear_g_free(&reader->hostname);
     g_hash_table_unref(reader->znet_ifnames);
     nm_clear_g_free(&reader->dhcp4_vci);
+    nm_clear_g_free(&reader->dhcp_dscp);
     nm_g_slice_free(reader);
     if (!free_hash)
         return g_steal_pointer(&hash);
@@ -122,6 +124,8 @@ reader_create_connection(Reader                  *reader,
                  reader->dhcp_timeout,
                  NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER,
                  reader->dhcp4_vci,
+                 NM_SETTING_IP_CONFIG_DHCP_DSCP,
+                 reader->dhcp_dscp,
                  NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT,
                  NMI_IP_REQUIRED_TIMEOUT_MSEC,
                  NULL);
@@ -1289,6 +1293,8 @@ _normalize_conn(gpointer key, gpointer value, gpointer user_data)
                          NULL,
                          NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER,
                          NULL,
+                         NM_SETTING_IP_CONFIG_DHCP_DSCP,
+                         NULL,
                          NULL);
         }
     }
@@ -1429,6 +1435,13 @@ nmi_cmdline_reader_parse(const char        *etc_connections_dir,
         } else if (nm_streq(tag, "rd.net.dhcp.vendor-class")) {
             if (nm_utils_validate_dhcp4_vendor_class_id(argument, NULL))
                 nm_strdup_reset(&reader->dhcp4_vci, argument);
+        } else if (nm_streq(tag, "rd.net.dhcp.dscp")) {
+            gs_free_error GError *error = NULL;
+
+            if (nm_utils_validate_dhcp_dscp(argument, &error))
+                nm_strdup_reset(&reader->dhcp_dscp, argument);
+            else
+                _LOGW(LOGD_CORE, "Ignoring 'rd.net.dhcp.dscp=%s': %s", argument, error->message);
         } else if (nm_streq(tag, "rd.net.timeout.carrier")) {
             reader->carrier_timeout_sec =
                 _nm_utils_ascii_str_to_int64(argument, 10, 0, G_MAXINT32, 0);
@@ -1491,8 +1504,9 @@ nmi_cmdline_reader_parse(const char        *etc_connections_dir,
         } else if (g_ascii_strcasecmp(tag, "BOOTIF") == 0) {
             nm_clear_g_free(&bootif_val);
             bootif_val = g_strdup(argument);
-        } else if (nm_streq(tag, "rd.ethtool"))
+        } else if (nm_streq(tag, "rd.ethtool")) {
             reader_parse_ethtool(reader, argument);
+        }
     }
 
     for (i = 0; i < reader->vlan_parents->len; i++) {
diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c
index 3dbbd4d5..fd663b6d 100644
--- a/src/nm-initrd-generator/tests/test-cmdline-reader.c
+++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c
@@ -2355,6 +2355,33 @@ test_dhcp_vendor_class_id(void)
 }
 
 static void
+test_dhcp_dscp(void)
+{
+    const char *const            *ARGV;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig            *s_ip4;
+
+    ARGV       = NM_MAKE_STRV("rd.net.dhcp.dscp=CS4", "ip=eno1:dhcp");
+    connection = _parse_con(ARGV, "eno1");
+    s_ip4      = NM_SETTING_IP_CONFIG(nm_connection_get_setting_ip4_config(connection));
+    g_assert_cmpstr(nm_setting_ip_config_get_dhcp_dscp(s_ip4), ==, "CS4");
+
+    g_clear_object(&connection);
+
+    ARGV       = NM_MAKE_STRV("rd.net.dhcp.dscp=CS0", "ip=eno1:dhcp");
+    connection = _parse_con(ARGV, "eno1");
+    s_ip4      = NM_SETTING_IP_CONFIG(nm_connection_get_setting_ip4_config(connection));
+    g_assert_cmpstr(nm_setting_ip_config_get_dhcp_dscp(s_ip4), ==, "CS0");
+
+    g_clear_object(&connection);
+
+    ARGV       = NM_MAKE_STRV("ip=eno1:dhcp");
+    connection = _parse_con(ARGV, "eno1");
+    s_ip4      = NM_SETTING_IP_CONFIG(nm_connection_get_setting_ip4_config(connection));
+    g_assert_cmpstr(nm_setting_ip_config_get_dhcp_dscp(s_ip4), ==, NULL);
+}
+
+static void
 test_infiniband_iface(void)
 {
     const char *const            *ARGV       = NM_MAKE_STRV("ip=ib1:dhcp");
@@ -2652,6 +2679,7 @@ main(int argc, char **argv)
     g_test_add_func("/initrd/cmdline/neednet/no_args", test_neednet_no_args);
     g_test_add_func("/initrd/cmdline/neednet/args", test_neednet_args);
     g_test_add_func("/initrd/cmdline/dhcp/vendor_class_id", test_dhcp_vendor_class_id);
+    g_test_add_func("/initrd/cmdline/dhcp/dscp", test_dhcp_dscp);
     g_test_add_func("/initrd/cmdline/infiniband/iface", test_infiniband_iface);
     g_test_add_func("/initrd/cmdline/infiniband/mac", test_infiniband_mac);
     g_test_add_func("/initrd/cmdline/infiniband/pkey", test_infiniband_pkey);