git: c2c28c0fa2e4 - main - carp: fix unicast link-local
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 18 May 2023 16:01:24 UTC
The branch main has been updated by kp:
URL: https://cgit.FreeBSD.org/src/commit/?id=c2c28c0fa2e44caf1671b4dbf94167f686c3c411
commit c2c28c0fa2e44caf1671b4dbf94167f686c3c411
Author: Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2023-05-18 15:30:39 +0000
Commit: Kristof Provost <kp@FreeBSD.org>
CommitDate: 2023-05-18 15:47:03 +0000
carp: fix unicast link-local
If the peer6 address is a link-local address we have to embed the
scopeid, much like we have to for IPv6 multicast as well.
Sponsored by: Rubicon Communications, LLC ("Netgate")
---
sys/netinet/ip_carp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index 5eb6e0bf5166..935e7eaf92f5 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -1065,7 +1065,8 @@ carp_send_ad_locked(struct carp_softc *sc)
/* Set the multicast destination. */
memcpy(&ip6->ip6_dst, &sc->sc_carpaddr6, sizeof(ip6->ip6_dst));
- if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
+ if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst) ||
+ IN6_IS_ADDR_LINKLOCAL(&ip6->ip6_dst)) {
if (in6_setscope(&ip6->ip6_dst, sc->sc_carpdev, NULL) != 0) {
m_freem(m);
CARP_DEBUG("%s: in6_setscope failed\n", __func__);