diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-12-09 20:25:12 +0900 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-12-09 15:06:20 +0100 |
commit | b55093ce8884ee4fc72f28c6fd5e39897e921e21 (patch) | |
tree | 959e7bf66cb6459b7a6a0faf289352481a358fce | |
parent | 93485626a10467630a018e6542b37e278ddb009e (diff) | |
download | systemd-b55093ce8884ee4fc72f28c6fd5e39897e921e21.tar.gz |
network: dhcp: make IPServiceType= accept "none" to disable tos in the outgoing packet
Fixes #9874.
-rw-r--r-- | man/systemd.network.xml | 7 | ||||
-rw-r--r-- | src/network/networkd-dhcp4.c | 15 |
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; } |