mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-12 08:58:20 +03:00
network/dhcp4: accept local subnet routes from DHCP
RFC3442 specifies option 121 (Classless Static Routes) that allow a DHCP server to push arbitrary routes to a client. It has a Local Subnet Routes section expliciting the behavior of routes with a null (0.0.0.0) gateway. Such routes are to be installed on the interface with a Link scope, to mark them as directly available on the link without any gateway. Networkd currently drops those routes, which is against the RFC, as Linux has proper support for such routes. Fixes: 7f20627 ("network: dhcp4: ignore gateway in static routes if destination is link-local or in the same network") (cherry picked from commit 1d84a3c7792a8910b05904937c703307ca19740f) (cherry picked from commit b0f514ba567a1f6321f6b7f1ded038f8090c70f0) (cherry picked from commit ee6475d31815fe3e012d48ef7302a5d73e3a8a5d)
This commit is contained in:
parent
18440f9b91
commit
1568716193
@ -381,15 +381,18 @@ static int dhcp4_request_route_auto(
|
||||
route->gw = IN_ADDR_NULL;
|
||||
route->prefsrc.in = address;
|
||||
|
||||
} else {
|
||||
if (in4_addr_is_null(gw)) {
|
||||
log_link_debug(link, "DHCP: requested route destination "IPV4_ADDRESS_FMT_STR"/%u is not in the assigned network "
|
||||
IPV4_ADDRESS_FMT_STR"/%u, but no gateway is specified, ignoring.",
|
||||
IPV4_ADDRESS_FMT_VAL(route->dst.in), route->dst_prefixlen,
|
||||
IPV4_ADDRESS_FMT_VAL(prefix), prefixlen);
|
||||
return 0;
|
||||
}
|
||||
} else if (in4_addr_is_null(gw)) {
|
||||
log_link_debug(link, "DHCP: requested route destination "IPV4_ADDRESS_FMT_STR"/%u is not in the assigned network "
|
||||
IPV4_ADDRESS_FMT_STR"/%u, but no gateway is specified, using 'link' scope.",
|
||||
IPV4_ADDRESS_FMT_VAL(route->dst.in), route->dst_prefixlen,
|
||||
IPV4_ADDRESS_FMT_VAL(prefix), prefixlen);
|
||||
|
||||
route->scope = RT_SCOPE_LINK;
|
||||
route->gw_family = AF_UNSPEC;
|
||||
route->gw = IN_ADDR_NULL;
|
||||
route->prefsrc.in = address;
|
||||
|
||||
} else {
|
||||
r = dhcp4_request_route_to_gateway(link, gw);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
Loading…
x
Reference in New Issue
Block a user