Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/netinet6 Get rcvif once and reuse it



details:   https://anonhg.NetBSD.org/src/rev/e3a4c90cc318
branches:  trunk
changeset: 345325:e3a4c90cc318
user:      ozaki-r <ozaki-r%NetBSD.org@localhost>
date:      Thu May 19 08:53:25 2016 +0000

description:
Get rcvif once and reuse it

No functional change.

diffstat:

 sys/netinet6/ip6_input.c |  68 ++++++++++++++++++++++-------------------------
 1 files changed, 32 insertions(+), 36 deletions(-)

diffs (249 lines):

diff -r cfd84d88a46a -r e3a4c90cc318 sys/netinet6/ip6_input.c
--- a/sys/netinet6/ip6_input.c  Thu May 19 08:35:03 2016 +0000
+++ b/sys/netinet6/ip6_input.c  Thu May 19 08:53:25 2016 +0000
@@ -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 @@
                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 @@
        } 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 @@
         * 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 @@
 
        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 @@
                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 @@
                 * 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 @@
        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 @@
        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_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 @@
        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 @@
                        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 @@
         * 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 @@
         */
        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 @@
 
                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 @@
                         * (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 @@
         */
        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_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 @@
        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 @@
        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 @@
                 */
                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;
                        }



Home | Main Index | Thread Index | Old Index