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.
<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>
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) {
[Route]
Destination=149.10.124.64
-Scope=link
[Route]
Gateway=149.10.124.64
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')