Index: icmp6.c =================================================================== RCS file: /cvs/src/sys/netinet6/icmp6.c,v diff -u -p -r1.267 icmp6.c --- icmp6.c 12 Jun 2025 20:37:59 -0000 1.267 +++ icmp6.c 3 Jul 2025 04:35:58 -0000 @@ -1139,6 +1139,20 @@ icmp6_reflect(struct mbuf **mp, size_t o src = &ia6->ia_addr.sin6_addr; if (src == NULL) src = &ifatoia6(rt->rt_ifa)->ia_addr.sin6_addr; + + /* route sourceaddr may override src address selection */ + if (ISSET(rt->rt_flags, RTF_GATEWAY)) { + struct sockaddr *sourceaddr; + + sourceaddr = rtable_getsource(rtableid, AF_INET6); + if (sourceaddr != NULL) { + struct ifaddr *ifa; + ifa = ifa_ifwithaddr(sourceaddr, rtableid); + if (ifa != NULL && + ISSET(ifa->ifa_ifp->if_flags, IFF_UP)) + src = &satosin6(sourceaddr)->sin6_addr; + } + } } ip6->ip6_src = *src;