From f76814757ddbaf7f54d8828661b5978f066dea25 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 10 Apr 2024 14:52:57 +0900 Subject: [PATCH] network/ndisc: split out ndisc_redirect_verify_sender() No functional change, preparation for later commits. --- src/network/networkd-ndisc.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index b215fb4c1d0..c2c15c48e8f 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -510,18 +510,14 @@ static int ndisc_redirect_drop_conflict(Link *link, sd_ndisc_redirect *rd) { return ndisc_remove_redirect_route(link, existing); } -static int ndisc_redirect_handler(Link *link, sd_ndisc_redirect *rd) { +static int ndisc_redirect_verify_sender(Link *link, sd_ndisc_redirect *rd) { struct in6_addr router, sender; usec_t lifetime_usec, now_usec; int r; assert(link); - assert(link->network); assert(rd); - if (!link->network->ndisc_use_redirect) - return 0; - /* Ignore all Redirect messages from non-default router. */ if (!link->ndisc_default_router) @@ -546,10 +542,23 @@ static int ndisc_redirect_handler(Link *link, sd_ndisc_redirect *rd) { if (r < 0) return r; - if (!in6_addr_equal(&sender, &router)) - return 0; /* The redirect message is sent from a non-default router. */ + /* The sender must be the default router. */ + return in6_addr_equal(&sender, &router); +} + +static int ndisc_redirect_handler(Link *link, sd_ndisc_redirect *rd) { + int r; + + assert(link); + assert(link->network); + assert(rd); - /* OK, the Redirect message is sent from the current default router. */ + if (!link->network->ndisc_use_redirect) + return 0; + + r = ndisc_redirect_verify_sender(link, rd); + if (r <= 0) + return r; /* First, drop conflicting redirect route, if exists. */ r = ndisc_redirect_drop_conflict(link, rd); -- 2.47.3