]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: dhcp: make IPServiceType= accept "none" to disable tos in the outgoing packet
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 9 Dec 2021 11:25:12 +0000 (20:25 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 9 Dec 2021 14:06:20 +0000 (15:06 +0100)
Fixes #9874.

man/systemd.network.xml
src/network/networkd-dhcp4.c

index 6f152c9e141cfa276588b89908a17bf4c842614e..f263c2c0b28d0599dfda0206443c9fd2af849f36 100644 (file)
@@ -1550,8 +1550,11 @@ Table=1234</programlisting></para>
         <varlistentry>
           <term><varname>IPServiceType=</varname></term>
           <listitem>
-            <para>Takes string; <literal>CS6</literal> or <literal>CS4</literal>. Used to set IP
-            service type to CS6 (network control) or CS4 (Realtime). Defaults to CS6.</para>
+            <para>Takes one of the special values <literal>none</literal>, <literal>CS6</literal>, or
+            <literal>CS4</literal>. When <literal>none</literal> no IP sevice type is set to the packet
+            sent from the DHCPv4 client. When <literal>CS6</literal> (network control) or
+            <literal>CS4</literal> (realtime), the corresponding service type will be set. Defaults to
+            <literal>CS6</literal>.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
index b8efb76858938bfe63d14b1f1f9adeb5bf1fac8a..81faf48448c5cb157e3691439ce473c337cde294 100644 (file)
@@ -1704,17 +1704,24 @@ int config_parse_dhcp_ip_service_type(
                 void *data,
                 void *userdata) {
 
+        int *tos = data;
+
         assert(filename);
         assert(lvalue);
         assert(rvalue);
+        assert(data);
 
-        if (streq(rvalue, "CS4"))
-                *((int *)data) = IPTOS_CLASS_CS4;
+        if (isempty(rvalue))
+                *tos = -1; /* use sd_dhcp_client's default (currently, CS6). */
+        else if (streq(rvalue, "none"))
+                *tos = 0;
+        else if (streq(rvalue, "CS4"))
+                *tos = IPTOS_CLASS_CS4;
         else if (streq(rvalue, "CS6"))
-                *((int *)data) = IPTOS_CLASS_CS6;
+                *tos = IPTOS_CLASS_CS6;
         else
                 log_syntax(unit, LOG_WARNING, filename, line, 0,
-                           "Failed to parse IPServiceType type '%s', ignoring.", rvalue);
+                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
 
         return 0;
 }