aboutsummaryrefslogtreecommitdiff
path: root/sys/net/if_ethersubr.c
diff options
context:
space:
mode:
authorZhenlei Huang <zlei.huang@gmail.com>2021-08-22 22:28:47 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2021-08-22 22:56:08 +0000
commit62e1a437f3285e785d9b35a476d36a469a90028d (patch)
tree371cf19e2cae5884ebac7bc3a864d2b056aa7f1c /sys/net/if_ethersubr.c
parenteccb516db8b7fec957b139c3a9a2e16175551067 (diff)
Diffstat (limited to 'sys/net/if_ethersubr.c')
-rw-r--r--sys/net/if_ethersubr.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 6d8b79d4dd12..3209e8a82978 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -236,10 +236,11 @@ ether_resolve_addr(struct ifnet *ifp, struct mbuf *m,
#endif
#ifdef INET6
case AF_INET6:
- if ((m->m_flags & M_MCAST) == 0)
- error = nd6_resolve(ifp, LLE_SF(AF_INET6, 0), m, dst, phdr,
+ if ((m->m_flags & M_MCAST) == 0) {
+ int af = RO_GET_FAMILY(ro, dst);
+ error = nd6_resolve(ifp, LLE_SF(af, 0), m, dst, phdr,
&lleflags, plle);
- else {
+ } else {
const struct in6_addr *a6;
a6 = &(((const struct sockaddr_in6 *)dst)->sin6_addr);
ETHER_MAP_IPV6_MULTICAST(a6, eh->ether_dhost);
@@ -353,7 +354,7 @@ ether_output(struct ifnet *ifp, struct mbuf *m,
if ((pflags & RT_L2_ME) != 0) {
update_mbuf_csumflags(m, m);
- return (if_simloop(ifp, m, dst->sa_family, 0));
+ return (if_simloop(ifp, m, RO_GET_FAMILY(ro, dst), 0));
}
loop_copy = (pflags & RT_MAY_LOOP) != 0;
@@ -400,7 +401,7 @@ ether_output(struct ifnet *ifp, struct mbuf *m,
*/
if ((n = m_dup(m, M_NOWAIT)) != NULL) {
update_mbuf_csumflags(m, n);
- (void)if_simloop(ifp, n, dst->sa_family, hlen);
+ (void)if_simloop(ifp, n, RO_GET_FAMILY(ro, dst), hlen);
} else
if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
}