From c98c0ba4c5262d101475a3f9d05bb1b649c79708 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 28 Mar 2024 13:13:20 +0900 Subject: [PATCH 1/3] network/ndisc: NDisc Route option with 0 prefixlength is valid Fixes #31606. --- src/network/networkd-ndisc.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 61d591a2af..264ecff34d 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -877,11 +877,6 @@ static int ndisc_router_process_route(Link *link, sd_ndisc_router *rt) { if (r < 0) return log_link_warning_errno(link, r, "Failed to get route prefix length: %m"); - if (in6_addr_is_null(&dst) && prefixlen == 0) { - log_link_debug(link, "Route prefix is ::/0, ignoring"); - return 0; - } - if (in6_prefix_is_filtered(&dst, prefixlen, link->network->ndisc_allow_listed_route_prefix, link->network->ndisc_deny_listed_route_prefix)) { From b3ea82afbe66312ecba2c6ac76e335b24b71d4e4 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 28 Mar 2024 13:22:06 +0900 Subject: [PATCH 2/3] network/ndisc: remove routes if lifetime is zero Fixes #31979. --- src/network/networkd-ndisc.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 264ecff34d..249103b703 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -920,9 +920,15 @@ static int ndisc_router_process_route(Link *link, sd_ndisc_router *rt) { route->dst_prefixlen = prefixlen; route->lifetime_usec = lifetime_usec; - r = ndisc_request_route(route, link, rt); - if (r < 0) - return log_link_warning_errno(link, r, "Could not request additional route: %m"); + if (lifetime_usec != 0) { + r = ndisc_request_route(route, link, rt); + if (r < 0) + return log_link_warning_errno(link, r, "Could not request additional route: %m"); + } else { + r = ndisc_remove_route(route, link); + if (r < 0) + return log_link_warning_errno(link, r, "Could not remove additional route with zero lifetime: %m"); + } return 0; } From 12a9241bf2e4cc60e3fa35de9d9b777a27a64a22 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 28 Mar 2024 13:25:50 +0900 Subject: [PATCH 3/3] network/radv: allow to announce prefix and route information with zero lifetime Setting zero lifetime for prefix or route information option is valid, and is used for announcing the prefix or route is invalidated. Fixes #26239. --- src/network/networkd-radv.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 7fd97e7206..82c62dad81 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -816,12 +816,6 @@ static int prefix_section_verify(Prefix *p) { p->assign = false; } - if (p->valid_lifetime == 0) - return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: The valid lifetime of prefix cannot be zero. " - "Ignoring [IPv6Prefix] section from line %u.", - p->section->filename, p->section->line); - if (p->preferred_lifetime > p->valid_lifetime) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "%s: The preferred lifetime %s is longer than the valid lifetime %s. " @@ -854,12 +848,6 @@ static int route_prefix_section_verify(RoutePrefix *p) { "Valid range is 0…128. Ignoring [IPv6RoutePrefix] section from line %u.", p->section->filename, p->prefixlen, p->section->line); - if (p->lifetime == 0) - return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: The lifetime of route cannot be zero. " - "Ignoring [IPv6RoutePrefix] section from line %u.", - p->section->filename, p->section->line); - return 0; }