1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-02 10:51:20 +03:00

networkd: route - allow routes without a gateway

For IPv6, the kernel returns EINVAL if a route is added with the
RTA_GATEWAY attribute set to in6addr_any (::). A route without a
gateway is useful in some situations, such as layer 3 tunneling
(sit, gre, etc.).

This patch prevents the RTA_GATEWAY attribute from being added
when route.in_addr is ip6addr_any (::).
This commit is contained in:
Gavin Li 2014-11-24 15:51:31 -08:00 committed by Zbigniew Jędrzejewski-Szmek
parent bedd083aae
commit 59580681f5

View File

@ -118,6 +118,7 @@ int route_drop(Route *route, Link *link,
return r;
}
if (!in_addr_is_null(route->family, &route->in_addr)) {
if (route->family == AF_INET)
r = sd_rtnl_message_append_in_addr(req, RTA_GATEWAY, &route->in_addr.in);
else if (route->family == AF_INET6)
@ -126,6 +127,7 @@ int route_drop(Route *route, Link *link,
log_error("Could not append RTA_GATEWAY attribute: %s", strerror(-r));
return r;
}
}
if (route->dst_prefixlen) {
if (route->family == AF_INET)
@ -203,6 +205,7 @@ int route_configure(Route *route, Link *link,
return r;
}
if (!in_addr_is_null(route->family, &route->in_addr)) {
if (route->family == AF_INET)
r = sd_rtnl_message_append_in_addr(req, RTA_GATEWAY, &route->in_addr.in);
else if (route->family == AF_INET6)
@ -211,6 +214,7 @@ int route_configure(Route *route, Link *link,
log_error("Could not append RTA_GATEWAY attribute: %s", strerror(-r));
return r;
}
}
if (route->dst_prefixlen) {
if (route->family == AF_INET)