diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-01-13 21:42:28 +0900 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2022-01-13 22:46:52 +0000 |
commit | 902bbdc4b60269f456a1cea81f4c0f1c0f7a6d8a (patch) | |
tree | e2354391e8c4da91ea8009d34579418b67fb4979 | |
parent | fad7ad2b8b28d0e4595697a36f654c936ca4ad4d (diff) | |
download | systemd-902bbdc4b60269f456a1cea81f4c0f1c0f7a6d8a.tar.gz |
network: use scope link for direct unicast routes by default
Strictly speaking, this breaks the backward compatibility, but I guess
in most cases people already sets Scope=link for such routes.
This behavior matches with how 'ip route' command adds such route by
default.
Prompted by https://twitter.com/jplitza/status/1480500562391179270.
-rw-r--r-- | man/systemd.network.xml | 6 | ||||
-rw-r--r-- | src/network/networkd-route.c | 6 | ||||
-rw-r--r-- | test/test-network/conf/25-route-static.network | 1 | ||||
-rwxr-xr-x | test/test-network/systemd-networkd-tests.py | 6 |
4 files changed, 12 insertions, 7 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 197e0dad1d..93c10b7755 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1547,9 +1547,9 @@ Table=1234</programlisting></para> <para>For IPv4 route, defaults to <literal>host</literal> if <varname>Type=</varname> is <literal>local</literal> or <literal>nat</literal>, and <literal>link</literal> if - <varname>Type=</varname> is <literal>broadcast</literal>, <literal>multicast</literal>, or - <literal>anycast</literal>. In other cases, defaults to <literal>global</literal>. The value - is not used for IPv6.</para> + <varname>Type=</varname> is <literal>broadcast</literal>, <literal>multicast</literal>, + <literal>anycast</literal>, or direct <literal>unicast</literal> routes. In other cases, + defaults to <literal>global</literal>. The value is not used for IPv6.</para> </listitem> </varlistentry> diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index f0697a66af..00e64978d4 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -2846,6 +2846,12 @@ static int route_section_verify(Route *route, Network *network) { route->scope = RT_SCOPE_HOST; else if (IN_SET(route->type, RTN_BROADCAST, RTN_ANYCAST, RTN_MULTICAST)) route->scope = RT_SCOPE_LINK; + else if (IN_SET(route->type, RTN_UNICAST, RTN_UNSPEC) && + !route->gateway_from_dhcp_or_ra && + !in_addr_is_set(route->gw_family, &route->gw) && + ordered_set_isempty(route->multipath_routes) && + route->nexthop_id == 0) + route->scope = RT_SCOPE_LINK; } if (route->scope != RT_SCOPE_UNIVERSE && route->family == AF_INET6) { diff --git a/test/test-network/conf/25-route-static.network b/test/test-network/conf/25-route-static.network index 8f242bd1fe..6aa3ec66dc 100644 --- a/test/test-network/conf/25-route-static.network +++ b/test/test-network/conf/25-route-static.network @@ -24,7 +24,6 @@ Gateway=fe80::222:4dff:ff:ff:ff:ff [Route] Destination=149.10.124.64 -Scope=link [Route] Gateway=149.10.124.64 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 5613398757..2207f36245 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -2542,9 +2542,9 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): self.assertIn('149.10.124.48/28 proto kernel scope link src 149.10.124.58', output) self.assertIn('149.10.124.64 proto static scope link', output) self.assertIn('169.254.0.0/16 proto static scope link metric 2048', output) - self.assertIn('192.168.1.1 proto static initcwnd 20', output) - self.assertIn('192.168.1.2 proto static initrwnd 30', output) - self.assertIn('192.168.1.3 proto static advmss 30', output) + self.assertIn('192.168.1.1 proto static scope link initcwnd 20', output) + self.assertIn('192.168.1.2 proto static scope link initrwnd 30', output) + self.assertIn('192.168.1.3 proto static scope link advmss 30', output) self.assertIn('multicast 149.10.123.4 proto static', output) print('### ip -4 route show dev dummy98 default') |