summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-12-09 20:25:12 +0900
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-12-09 15:06:20 +0100
commitb55093ce8884ee4fc72f28c6fd5e39897e921e21 (patch)
tree959e7bf66cb6459b7a6a0faf289352481a358fce
parent93485626a10467630a018e6542b37e278ddb009e (diff)
downloadsystemd-b55093ce8884ee4fc72f28c6fd5e39897e921e21.tar.gz
network: dhcp: make IPServiceType= accept "none" to disable tos in the outgoing packet
Fixes #9874.
-rw-r--r--man/systemd.network.xml7
-rw-r--r--src/network/networkd-dhcp4.c15
2 files changed, 16 insertions, 6 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 6f152c9e14..f263c2c0b2 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -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>
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index b8efb76858..81faf48448 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -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;
}