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 *);

Reply via email to