From 9f10dc79105dc2efa429b96f9ddce763e8170055 Mon Sep 17 00:00:00 2001 From: ozaki-r Date: Thu, 19 May 2016 08:53:25 +0000 Subject: [PATCH] Get rcvif once and reuse it No functional change. --- sys/netinet6/ip6_input.c | 68 +++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c index 9ba57c90fdeb..2db28060d6a3 100644 --- a/sys/netinet6/ip6_input.c +++ b/sys/netinet6/ip6_input.c @@ -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 -__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; }