Module Name: src Committed By: ozaki-r Date: Fri Aug 28 06:28:58 UTC 2020
Modified Files: src/sys/netinet6: ip6_forward.c ip6_input.c ip6_var.h Log Message: inet6: pass rcvif to ip6_forward to avoid extra psref_acquire To generate a diff of this commit: cvs rdiff -u -r1.100 -r1.101 src/sys/netinet6/ip6_forward.c cvs rdiff -u -r1.220 -r1.221 src/sys/netinet6/ip6_input.c cvs rdiff -u -r1.85 -r1.86 src/sys/netinet6/ip6_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet6/ip6_forward.c diff -u src/sys/netinet6/ip6_forward.c:1.100 src/sys/netinet6/ip6_forward.c:1.101 --- src/sys/netinet6/ip6_forward.c:1.100 Fri Aug 28 06:19:13 2020 +++ src/sys/netinet6/ip6_forward.c Fri Aug 28 06:28:58 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_forward.c,v 1.100 2020/08/28 06:19:13 ozaki-r Exp $ */ +/* $NetBSD: ip6_forward.c,v 1.101 2020/08/28 06:28:58 ozaki-r Exp $ */ /* $KAME: ip6_forward.c,v 1.109 2002/09/11 08:10:17 sakane Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.100 2020/08/28 06:19:13 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.101 2020/08/28 06:28:58 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_gateway.h" @@ -116,7 +116,7 @@ ip6_cantforward(const struct ip6_hdr *ip * protocol deal with that. */ void -ip6_forward(struct mbuf *m, int srcrt) +ip6_forward(struct mbuf *m, int srcrt, struct ifnet *rcvif) { struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *); const struct sockaddr_in6 *dst; @@ -126,8 +126,6 @@ ip6_forward(struct mbuf *m, int srcrt) struct ifnet *origifp; /* maybe unnecessary */ uint32_t inzone, outzone; struct in6_addr src_in6, dst_in6; - struct ifnet *rcvif = NULL; - struct psref psref; struct route *ro = NULL; #ifdef IPSEC int needipsec = 0; @@ -139,10 +137,6 @@ ip6_forward(struct mbuf *m, int srcrt) */ m->m_pkthdr.csum_flags = 0; - rcvif = m_get_rcvif_psref(m, &psref); - if (__predict_false(rcvif == NULL)) - goto drop; - /* * Do not forward packets to multicast destination (should be handled * by ip6_mforward()). Do not forward packets with unspecified source. @@ -469,7 +463,5 @@ out: rtcache_unref(rt, ro); if (ro != NULL) rtcache_percpu_putref(ip6_forward_rt_percpu); - if (rcvif != NULL) - m_put_rcvif_psref(rcvif, &psref); return; } Index: src/sys/netinet6/ip6_input.c diff -u src/sys/netinet6/ip6_input.c:1.220 src/sys/netinet6/ip6_input.c:1.221 --- src/sys/netinet6/ip6_input.c:1.220 Fri Aug 28 06:20:44 2020 +++ src/sys/netinet6/ip6_input.c Fri Aug 28 06:28:58 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_input.c,v 1.220 2020/08/28 06:20:44 ozaki-r Exp $ */ +/* $NetBSD: ip6_input.c,v 1.221 2020/08/28 06:28:58 ozaki-r Exp $ */ /* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.220 2020/08/28 06:20:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.221 2020/08/28 06:28:58 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_gateway.h" @@ -667,7 +667,7 @@ hbhcheck: } else if (!ours) { rtcache_unref(rt, ro); rtcache_percpu_putref(ip6_forward_rt_percpu); - ip6_forward(m, srcrt); + ip6_forward(m, srcrt, rcvif); return; } Index: src/sys/netinet6/ip6_var.h diff -u src/sys/netinet6/ip6_var.h:1.85 src/sys/netinet6/ip6_var.h:1.86 --- src/sys/netinet6/ip6_var.h:1.85 Fri Aug 28 06:19:13 2020 +++ src/sys/netinet6/ip6_var.h Fri Aug 28 06:28:58 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_var.h,v 1.85 2020/08/28 06:19:13 ozaki-r Exp $ */ +/* $NetBSD: ip6_var.h,v 1.86 2020/08/28 06:28:58 ozaki-r Exp $ */ /* $KAME: ip6_var.h,v 1.33 2000/06/11 14:59:20 jinmei Exp $ */ /* @@ -295,7 +295,7 @@ void ip6_notify_pmtu(struct in6pcb *, co u_int32_t *); int ip6_sysctl(int *, u_int, void *, size_t *, void *, size_t); -void ip6_forward(struct mbuf *, int); +void ip6_forward(struct mbuf *, int, struct ifnet *); void ip6_mloopback(struct ifnet *, struct mbuf *, const struct sockaddr_in6 *);