network/ndisc: split out ndisc_redirect_verify_sender()

No functional change, preparation for later commits.
This commit is contained in:
Yu Watanabe 2024-04-10 14:52:57 +09:00
parent d9688518ff
commit f76814757d

View file

@ -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);
}
/* OK, the Redirect message is sent from the current default router. */
static int ndisc_redirect_handler(Link *link, sd_ndisc_redirect *rd) {
int r;
assert(link);
assert(link->network);
assert(rd);
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);