Date: Thu, 16 Apr 2026 19:38:01 +0000 From: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 4dc6522d57c7 - main - rtadvd(8): Set route info lifetime to 0 during shutdown Message-ID: <69e13a99.1894b.2cd6242f@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=4dc6522d57c748cdaddd8327909574360a3de517 commit 4dc6522d57c748cdaddd8327909574360a3de517 Author: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> AuthorDate: 2026-04-01 13:29:15 +0000 Commit: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> CommitDate: 2026-04-16 19:03:08 +0000 rtadvd(8): Set route info lifetime to 0 during shutdown RFC 4191 section 3.1: if the received route's lifetime is zero, the route is removed from the Routing Table if present. Also, do not tell route information option is unknown. PR: 263982 Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D55448 --- usr.sbin/rtadvd/config.c | 3 +++ usr.sbin/rtadvd/rtadvd.c | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/usr.sbin/rtadvd/config.c b/usr.sbin/rtadvd/config.c index 70fb2ed7dc28..8b7079c17822 100644 --- a/usr.sbin/rtadvd/config.c +++ b/usr.sbin/rtadvd/config.c @@ -1021,12 +1021,15 @@ getconfig_free_prf64: } else { struct rdnss *rdn; struct dnssl *dns; + struct rtinfo *rti; rai_old->rai_lifetime = 0; TAILQ_FOREACH(rdn, &rai_old->rai_rdnss, rd_next) rdn->rd_ltime = 0; TAILQ_FOREACH(dns, &rai_old->rai_dnssl, dn_next) dns->dn_ltime = 0; + TAILQ_FOREACH(rti, &rai_old->rai_route, rti_next) + rti->rti_ltime = 0; ifi->ifi_rainfo_trans = rai_old; ifi->ifi_state = IFI_STATE_TRANSITIVE; diff --git a/usr.sbin/rtadvd/rtadvd.c b/usr.sbin/rtadvd/rtadvd.c index 2e9bced7c00e..b772f78845d8 100644 --- a/usr.sbin/rtadvd/rtadvd.c +++ b/usr.sbin/rtadvd/rtadvd.c @@ -138,6 +138,7 @@ union nd_opt { #define NDOPT_FLAG_RDNSS (1 << 5) #define NDOPT_FLAG_DNSSL (1 << 6) #define NDOPT_FLAG_PREF64 (1 << 7) +#define NDOPT_FLAG_ROUTEINFO (1 << 8) static uint32_t ndopt_flags[] = { [ND_OPT_SOURCE_LINKADDR] = NDOPT_FLAG_SRCLINKADDR, @@ -148,6 +149,7 @@ static uint32_t ndopt_flags[] = { [ND_OPT_RDNSS] = NDOPT_FLAG_RDNSS, [ND_OPT_DNSSL] = NDOPT_FLAG_DNSSL, [ND_OPT_PREF64] = NDOPT_FLAG_PREF64, + [ND_OPT_ROUTE_INFO] = NDOPT_FLAG_ROUTEINFO, }; static void rtadvd_shutdown(void); @@ -372,6 +374,7 @@ rtadvd_shutdown(void) struct rainfo *rai; struct rdnss *rdn; struct dnssl *dns; + struct rtinfo *rti; if (wait_shutdown) { syslog(LOG_INFO, @@ -416,6 +419,8 @@ rtadvd_shutdown(void) rdn->rd_ltime = 0; TAILQ_FOREACH(dns, &rai->rai_dnssl, dn_next) dns->dn_ltime = 0; + TAILQ_FOREACH(rti, &rai->rai_route, rti_next) + rti->rti_ltime = 0; } TAILQ_FOREACH(ifi, &ifilist, ifi_next) { if (!ifi->ifi_persist) @@ -1085,7 +1090,8 @@ ra_input(int len, struct nd_router_advert *nra, error = nd6_options((struct nd_opt_hdr *)(nra + 1), len - sizeof(struct nd_router_advert), &ndopts, NDOPT_FLAG_SRCLINKADDR | NDOPT_FLAG_PREFIXINFO | NDOPT_FLAG_MTU | - NDOPT_FLAG_RDNSS | NDOPT_FLAG_DNSSL | NDOPT_FLAG_PREF64); + NDOPT_FLAG_RDNSS | NDOPT_FLAG_DNSSL | NDOPT_FLAG_PREF64 | + NDOPT_FLAG_ROUTEINFO); if (error) { syslog(LOG_INFO, "<%s> ND option check failed for an RA from %s on %s", @@ -1418,7 +1424,8 @@ nd6_options(struct nd_opt_hdr *hdr, int limit, if (hdr->nd_opt_type > ND_OPT_MTU && hdr->nd_opt_type != ND_OPT_RDNSS && hdr->nd_opt_type != ND_OPT_DNSSL && - hdr->nd_opt_type != ND_OPT_PREF64) { + hdr->nd_opt_type != ND_OPT_PREF64 && + hdr->nd_opt_type != ND_OPT_ROUTE_INFO) { syslog(LOG_INFO, "<%s> unknown ND option(type %d)", __func__, hdr->nd_opt_type); continue; @@ -1452,6 +1459,11 @@ nd6_options(struct nd_opt_hdr *hdr, int limit, case ND_OPT_PREFIX_INFORMATION: if (optlen == sizeof(struct nd_opt_prefix_info)) break; + goto skip; + case ND_OPT_ROUTE_INFO: + if (optlen >= 8 && optlen <= 24 && + (optlen - sizeof(struct nd_opt_route_info)) % 8 == 0) + break; skip: syslog(LOG_INFO, "<%s> invalid option length", __func__); @@ -1464,6 +1476,7 @@ skip: case ND_OPT_RDNSS: case ND_OPT_DNSSL: case ND_OPT_PREF64: + case ND_OPT_ROUTE_INFO: break; /* we don't care about these options */ case ND_OPT_SOURCE_LINKADDR: case ND_OPT_MTU:home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69e13a99.1894b.2cd6242f>
