diff options
author | ngie <ngie@FreeBSD.org> | 2015-12-19 19:57:28 +0000 |
---|---|---|
committer | ngie <ngie@FreeBSD.org> | 2015-12-19 19:57:28 +0000 |
commit | f8c5cd12c37a92500da3f42f1d25bae9cc70e30a (patch) | |
tree | ea8f2cb9e0c06c3875296365ec64f45267a791eb /sys/netinet/ip_carp.c | |
parent | 490921132f201193a73d81699cb455aa2ae87357 (diff) | |
parent | 69774947bfffd5e16d26b60a82d880aa659abbf2 (diff) | |
download | FreeBSD-src-f8c5cd12c37a92500da3f42f1d25bae9cc70e30a.zip FreeBSD-src-f8c5cd12c37a92500da3f42f1d25bae9cc70e30a.tar.gz |
MFhead @ r292474
Diffstat (limited to 'sys/netinet/ip_carp.c')
-rw-r--r-- | sys/netinet/ip_carp.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c index da0ceab..7855af2 100644 --- a/sys/netinet/ip_carp.c +++ b/sys/netinet/ip_carp.c @@ -1009,12 +1009,13 @@ static void carp_send_arp(struct carp_softc *sc) { struct ifaddr *ifa; + struct in_addr addr; CARP_FOREACH_IFA(sc, ifa) { if (ifa->ifa_addr->sa_family != AF_INET) continue; - arp_announce_addr(sc->sc_carpdev, IFA_IN(ifa), - LLADDR(&sc->sc_addr)); + addr = ((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; + arp_announce_ifaddr(sc->sc_carpdev, addr, LLADDR(&sc->sc_addr)); } } @@ -1036,16 +1037,18 @@ carp_iamatch(struct ifaddr *ifa, uint8_t **enaddr) static void carp_send_na(struct carp_softc *sc) { + static struct in6_addr mcast = IN6ADDR_LINKLOCAL_ALLNODES_INIT; struct ifaddr *ifa; + struct in6_addr *in6; CARP_FOREACH_IFA(sc, ifa) { - if (ifa->ifa_addr->sa_family != AF_INET6 || - IFA_ND6_NA_UNSOLICITED_SKIP(ifa)) + if (ifa->ifa_addr->sa_family != AF_INET6) continue; - nd6_na_output_unsolicited_addr(sc->sc_carpdev, IFA_IN6(ifa), - IFA_ND6_NA_BASE_FLAGS(sc->sc_carpdev, ifa)); - DELAY(nd6_na_unsolicited_addr_delay(ifa)); + in6 = IFA_IN6(ifa); + nd6_na_output(sc->sc_carpdev, &mcast, in6, + ND_NA_FLAG_OVERRIDE, 1, NULL); + DELAY(1000); /* XXX */ } } |