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++;
 	}