Module Name:    src
Committed By:   ozaki-r
Date:           Thu May 19 08:53:25 UTC 2016

Modified Files:
        src/sys/netinet6: ip6_input.c

Log Message:
Get rcvif once and reuse it

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.158 -r1.159 src/sys/netinet6/ip6_input.c

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_input.c
diff -u src/sys/netinet6/ip6_input.c:1.158 src/sys/netinet6/ip6_input.c:1.159
--- src/sys/netinet6/ip6_input.c:1.158	Mon Apr  4 07:37:07 2016
+++ src/sys/netinet6/ip6_input.c	Thu May 19 08:53:25 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip6_input.c,v 1.158 2016/04/04 07:37:07 ozaki-r Exp $	*/
+/*	$NetBSD: ip6_input.c,v 1.159 2016/05/19 08:53:25 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.158 2016/04/04 07:37:07 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.159 2016/05/19 08:53:25 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_gateway.h"
@@ -248,6 +248,7 @@ ip6_input(struct mbuf *m)
 		struct sockaddr		dst;
 		struct sockaddr_in6	dst6;
 	} u;
+	struct ifnet *rcvif = m->m_pkthdr.rcvif;
 
 	/*
 	 * make sure we don't have onion peering information into m_tag.
@@ -265,19 +266,18 @@ ip6_input(struct mbuf *m)
 	} else {
 #define M2MMAX	32
 		if (m->m_next) {
-			if (m->m_flags & M_LOOP) {
+			if (m->m_flags & M_LOOP)
 			/*XXX*/	IP6_STATINC(IP6_STAT_M2M + lo0ifp->if_index);
-			} else if (m->m_pkthdr.rcvif->if_index < M2MMAX) {
-				IP6_STATINC(IP6_STAT_M2M +
-					    m->m_pkthdr.rcvif->if_index);
-			} else
+			else if (rcvif->if_index < M2MMAX)
+				IP6_STATINC(IP6_STAT_M2M + rcvif->if_index);
+			else
 				IP6_STATINC(IP6_STAT_M2M);
 		} else
 			IP6_STATINC(IP6_STAT_M1);
 #undef M2MMAX
 	}
 
-	in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_receive);
+	in6_ifstat_inc(rcvif, ifs6_in_receive);
 	IP6_STATINC(IP6_STAT_TOTAL);
 
 	/*
@@ -287,19 +287,17 @@ ip6_input(struct mbuf *m)
 	 * IPv6 header is in the first mbuf of the chain.
 	 */
 	if (IP6_HDR_ALIGNED_P(mtod(m, void *)) == 0) {
-		struct ifnet *inifp = m->m_pkthdr.rcvif;
 		if ((m = m_copyup(m, sizeof(struct ip6_hdr),
 				  (max_linkhdr + 3) & ~3)) == NULL) {
 			/* XXXJRT new stat, please */
 			IP6_STATINC(IP6_STAT_TOOSMALL);
-			in6_ifstat_inc(inifp, ifs6_in_hdrerr);
+			in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
 			return;
 		}
 	} else if (__predict_false(m->m_len < sizeof(struct ip6_hdr))) {
-		struct ifnet *inifp = m->m_pkthdr.rcvif;
 		if ((m = m_pullup(m, sizeof(struct ip6_hdr))) == NULL) {
 			IP6_STATINC(IP6_STAT_TOOSMALL);
-			in6_ifstat_inc(inifp, ifs6_in_hdrerr);
+			in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
 			return;
 		}
 	}
@@ -308,7 +306,7 @@ ip6_input(struct mbuf *m)
 
 	if ((ip6->ip6_vfc & IPV6_VERSION_MASK) != IPV6_VERSION) {
 		IP6_STATINC(IP6_STAT_BADVERS);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
+		in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
 		goto bad;
 	}
 
@@ -338,8 +336,7 @@ ip6_input(struct mbuf *m)
 		struct in6_addr odst;
 
 		odst = ip6->ip6_dst;
-		if (pfil_run_hooks(inet6_pfil_hook, &m, m->m_pkthdr.rcvif,
-				   PFIL_IN) != 0)
+		if (pfil_run_hooks(inet6_pfil_hook, &m, rcvif, PFIL_IN) != 0)
 			return;
 		if (m == NULL)
 			return;
@@ -365,7 +362,7 @@ ip6_input(struct mbuf *m)
 		 * XXX: "badscope" is not very suitable for a multicast source.
 		 */
 		IP6_STATINC(IP6_STAT_BADSCOPE);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
+		in6_ifstat_inc(rcvif, ifs6_in_addrerr);
 		goto bad;
 	}
 	/*
@@ -383,7 +380,7 @@ ip6_input(struct mbuf *m)
 	if (IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||
 	    IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {
 		IP6_STATINC(IP6_STAT_BADSCOPE);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
+		in6_ifstat_inc(rcvif, ifs6_in_addrerr);
 		goto bad;
 	}
 #if 0
@@ -397,7 +394,7 @@ ip6_input(struct mbuf *m)
 	if (IN6_IS_ADDR_V4COMPAT(&ip6->ip6_src) ||
 	    IN6_IS_ADDR_V4COMPAT(&ip6->ip6_dst)) {
 		IP6_STATINC(IP6_STAT_BADSCOPE);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
+		in6_ifstat_inc(rcvif, ifs6_in_addrerr);
 		goto bad;
 	}
 #endif
@@ -420,8 +417,8 @@ ip6_input(struct mbuf *m)
 		IP6_STATINC(IP6_STAT_BADSCOPE);	/* XXX */
 		goto bad;
 	}
-	if (in6_setscope(&ip6->ip6_src, m->m_pkthdr.rcvif, NULL) ||
-	    in6_setscope(&ip6->ip6_dst, m->m_pkthdr.rcvif, NULL)) {
+	if (in6_setscope(&ip6->ip6_src, rcvif, NULL) ||
+	    in6_setscope(&ip6->ip6_dst, rcvif, NULL)) {
 		IP6_STATINC(IP6_STAT_BADSCOPE);
 		goto bad;
 	}
@@ -432,12 +429,12 @@ ip6_input(struct mbuf *m)
 	if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
 	  	struct	in6_multi *in6m = 0;
 
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_mcast);
+		in6_ifstat_inc(rcvif, ifs6_in_mcast);
 		/*
 		 * See if we belong to the destination multicast group on the
 		 * arrival interface.
 		 */
-		IN6_LOOKUP_MULTI(ip6->ip6_dst, m->m_pkthdr.rcvif, in6m);
+		IN6_LOOKUP_MULTI(ip6->ip6_dst, rcvif, in6m);
 		if (in6m)
 			ours = 1;
 		else if (!ip6_mrouter) {
@@ -445,10 +442,10 @@ ip6_input(struct mbuf *m)
 			ip6s[IP6_STAT_NOTMEMBER]++;
 			ip6s[IP6_STAT_CANTFORWARD]++;
 			IP6_STAT_PUTREF();
-			in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
+			in6_ifstat_inc(rcvif, ifs6_in_discard);
 			goto bad;
 		}
-		deliverifp = m->m_pkthdr.rcvif;
+		deliverifp = rcvif;
 		goto hbhcheck;
 	}
 
@@ -530,7 +527,7 @@ ip6_input(struct mbuf *m)
 	 * working right.
 	 */
 	struct ifaddr *ifa;
-	IFADDR_FOREACH(ifa, m->m_pkthdr.rcvif) {
+	IFADDR_FOREACH(ifa, rcvif) {
 		if (ifa->ifa_addr == NULL)
 			continue;	/* just for safety */
 		if (ifa->ifa_addr->sa_family != AF_INET6)
@@ -550,7 +547,7 @@ ip6_input(struct mbuf *m)
 	 */
 	if (!ip6_forwarding) {
 		IP6_STATINC(IP6_STAT_CANTFORWARD);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
+		in6_ifstat_inc(rcvif, ifs6_in_discard);
 		goto bad;
 	}
 
@@ -585,7 +582,7 @@ ip6_input(struct mbuf *m)
 
 		if (ip6_hopopts_input(&plen, &rtalert, &m, &off)) {
 #if 0	/*touches NULL pointer*/
-			in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
+			in6_ifstat_inc(rcvif, ifs6_in_discard);
 #endif
 			return;	/* m have already been freed */
 		}
@@ -605,8 +602,8 @@ ip6_input(struct mbuf *m)
 			 * (non-zero) payload length to the variable plen.
 			 */
 			IP6_STATINC(IP6_STAT_BADOPTIONS);
-			in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
-			in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
+			in6_ifstat_inc(rcvif, ifs6_in_discard);
+			in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
 			icmp6_error(m, ICMP6_PARAM_PROB,
 				    ICMP6_PARAMPROB_HEADER,
 				    (char *)&ip6->ip6_plen - (char *)ip6);
@@ -638,7 +635,7 @@ ip6_input(struct mbuf *m)
 	 */
 	if (m->m_pkthdr.len - sizeof(struct ip6_hdr) < plen) {
 		IP6_STATINC(IP6_STAT_TOOSHORT);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);
+		in6_ifstat_inc(rcvif, ifs6_in_truncated);
 		goto bad;
 	}
 	if (m->m_pkthdr.len > sizeof(struct ip6_hdr) + plen) {
@@ -661,7 +658,7 @@ ip6_input(struct mbuf *m)
 		 * ip6_mforward() returns a non-zero value, the packet
 		 * must be discarded, else it may be accepted below.
 		 */
-		if (ip6_mrouter && ip6_mforward(ip6, m->m_pkthdr.rcvif, m)) {
+		if (ip6_mrouter && ip6_mforward(ip6, rcvif, m)) {
 			IP6_STATINC(IP6_STAT_CANTFORWARD);
 			m_freem(m);
 			return;
@@ -689,7 +686,7 @@ ip6_input(struct mbuf *m)
 	if (IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||
 	    IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {
 		IP6_STATINC(IP6_STAT_BADSCOPE);
-		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
+		in6_ifstat_inc(rcvif, ifs6_in_addrerr);
 		goto bad;
 	}
 
@@ -712,7 +709,7 @@ ip6_input(struct mbuf *m)
 	while (nxt != IPPROTO_DONE) {
 		if (ip6_hdrnestlimit && (++nest > ip6_hdrnestlimit)) {
 			IP6_STATINC(IP6_STAT_TOOMANYHDR);
-			in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
+			in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
 			goto bad;
 		}
 
@@ -722,14 +719,13 @@ ip6_input(struct mbuf *m)
 		 */
 		if (m->m_pkthdr.len < off) {
 			IP6_STATINC(IP6_STAT_TOOSHORT);
-			in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);
+			in6_ifstat_inc(rcvif, ifs6_in_truncated);
 			goto bad;
 		}
 
 		if (nxt == IPPROTO_ROUTING) {
 			if (rh_present++) {
-				in6_ifstat_inc(m->m_pkthdr.rcvif,
-				    ifs6_in_hdrerr);
+				in6_ifstat_inc(rcvif, ifs6_in_hdrerr);
 				IP6_STATINC(IP6_STAT_BADOPTIONS);
 				goto bad;
 			}

Reply via email to