Commit dddd5d4f09 for frr
commit dddd5d4f09997a919176eaaf0439f466453e5b6c
Author: Donald Sharp <sharpd@nvidia.com>
Date: Tue Sep 22 13:40:22 2026 -0400
ripngd: Do not use TENTATIVE addresses to decide to use the interface
Currently ripngd looks at the mere existence of a LL address to decide
if an interface is ready to be used. If decisions about what to use
as the source of a packet are made in sending out a packet( see ripngd.c
ripng_send_packet) during this TENTATIVE period, a address may be
choosen by the kernel that causes the other side to reject the neighbor
relationship from properly being formed. This is causing topotest
failures. Let's modify the code to check to see if the LL address
is still tentative or not for purposes of deciding if an interface
is ready to be used. In other words do not allow the neighbor state
to progress when there is not quite yet a usable LL address.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index 4b0c6d0eee..d33907fd90 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -127,8 +127,12 @@ static int ripng_if_ipv6_lladdress_check(struct interface *ifp)
struct prefix *p;
p = connected->address;
- if ((p->family == AF_INET6) &&
- IN6_IS_ADDR_LINKLOCAL(&p->u.prefix6))
+ /*
+ * A link-local still undergoing DAD is not usable as a
+ * RIPng source address yet.
+ */
+ if ((p->family == AF_INET6) && IN6_IS_ADDR_LINKLOCAL(&p->u.prefix6) &&
+ !CHECK_FLAG(connected->flags, ZEBRA_IFA_TENTATIVE))
count++;
}