Author: ae
Date: Mon Apr 29 10:52:45 2013
New Revision: 250044
URL: http://svnweb.freebsd.org/changeset/base/250044

Log:
  MFC r249294:
    Use IP6STAT_INC/IP6STAT_DEC macros to update ip6 stats.
  
  MFC r249528,249546:
    Add accounting to the source address selection algorithm for cases, when
    it fails to select an address, also add several another counters to
    the statistics.
  
  MFC r249543,249552:
    Replace hardcoded numbers.
  
  MFC r249544:
    Use IP6S_M2MMAX macro.
  
  MFC r249545:
    Replace hardcoded numbers. Also use interface-local scope name instead
    of node-local.

Modified:
  stable/9/sys/net/if_bridge.c
  stable/9/sys/netinet/ip6.h
  stable/9/sys/netinet6/dest6.c
  stable/9/sys/netinet6/frag6.c
  stable/9/sys/netinet6/in6_gif.c
  stable/9/sys/netinet6/in6_src.c
  stable/9/sys/netinet6/ip6_forward.c
  stable/9/sys/netinet6/ip6_input.c
  stable/9/sys/netinet6/ip6_ipsec.c
  stable/9/sys/netinet6/ip6_mroute.c
  stable/9/sys/netinet6/ip6_output.c
  stable/9/sys/netinet6/ip6_var.h
  stable/9/sys/netinet6/raw_ip6.c
  stable/9/sys/netinet6/route6.c
  stable/9/sys/netipsec/ipsec_input.c
  stable/9/sys/netipsec/ipsec_output.c
  stable/9/usr.bin/netstat/inet6.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/net/   (props changed)
  stable/9/usr.bin/netstat/   (props changed)

Modified: stable/9/sys/net/if_bridge.c
==============================================================================
--- stable/9/sys/net/if_bridge.c        Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/net/if_bridge.c        Mon Apr 29 10:52:45 2013        
(r250044)
@@ -3397,14 +3397,14 @@ bridge_ip6_checkbasic(struct mbuf **mp)
                if ((m = m_copyup(m, sizeof(struct ip6_hdr),
                            (max_linkhdr + 3) & ~3)) == NULL) {
                        /* XXXJRT new stat, please */
-                       V_ip6stat.ip6s_toosmall++;
+                       IP6STAT_INC(ip6s_toosmall);
                        in6_ifstat_inc(inifp, ifs6_in_hdrerr);
                        goto bad;
                }
        } 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) {
-                       V_ip6stat.ip6s_toosmall++;
+                       IP6STAT_INC(ip6s_toosmall);
                        in6_ifstat_inc(inifp, ifs6_in_hdrerr);
                        goto bad;
                }
@@ -3413,7 +3413,7 @@ bridge_ip6_checkbasic(struct mbuf **mp)
        ip6 = mtod(m, struct ip6_hdr *);
 
        if ((ip6->ip6_vfc & IPV6_VERSION_MASK) != IPV6_VERSION) {
-               V_ip6stat.ip6s_badvers++;
+               IP6STAT_INC(ip6s_badvers);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
                goto bad;
        }

Modified: stable/9/sys/netinet/ip6.h
==============================================================================
--- stable/9/sys/netinet/ip6.h  Mon Apr 29 10:20:46 2013        (r250043)
+++ stable/9/sys/netinet/ip6.h  Mon Apr 29 10:52:45 2013        (r250044)
@@ -275,24 +275,24 @@ do {                                                      
                \
        if (((m)->m_flags & M_LOOP) &&                                  \
            ((m)->m_len < (off) + (hlen)) &&                            \
            (((m) = m_pullup((m), (off) + (hlen))) == NULL)) {          \
-               V_ip6stat.ip6s_exthdrtoolong++;                         \
+               IP6STAT_INC(ip6s_exthdrtoolong);                                
\
                return ret;                                             \
        } else if ((m)->m_flags & M_EXT) {                              \
                if ((m)->m_len < (off) + (hlen)) {                      \
-                       V_ip6stat.ip6s_exthdrtoolong++;                 \
+                       IP6STAT_INC(ip6s_exthdrtoolong);                        
\
                        m_freem(m);                                     \
                        return ret;                                     \
                }                                                       \
        } else {                                                        \
                if ((m)->m_len < (off) + (hlen)) {                      \
-                       V_ip6stat.ip6s_exthdrtoolong++;                 \
+                       IP6STAT_INC(ip6s_exthdrtoolong);                        
\
                        m_freem(m);                                     \
                        return ret;                                     \
                }                                                       \
        }                                                               \
     } else {                                                           \
        if ((m)->m_len < (off) + (hlen)) {                              \
-               V_ip6stat.ip6s_tooshort++;                              \
+               IP6STAT_INC(ip6s_tooshort);                             \
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);   \
                m_freem(m);                                             \
                return ret;                                             \

Modified: stable/9/sys/netinet6/dest6.c
==============================================================================
--- stable/9/sys/netinet6/dest6.c       Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/dest6.c       Mon Apr 29 10:52:45 2013        
(r250044)
@@ -93,7 +93,7 @@ dest6_input(struct mbuf **mp, int *offp,
        for (optlen = 0; dstoptlen > 0; dstoptlen -= optlen, opt += optlen) {
                if (*opt != IP6OPT_PAD1 &&
                    (dstoptlen < IP6OPT_MINLEN || *(opt + 1) + 2 > dstoptlen)) {
-                       V_ip6stat.ip6s_toosmall++;
+                       IP6STAT_INC(ip6s_toosmall);
                        goto bad;
                }
 

Modified: stable/9/sys/netinet6/frag6.c
==============================================================================
--- stable/9/sys/netinet6/frag6.c       Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/frag6.c       Mon Apr 29 10:52:45 2013        
(r250044)
@@ -215,7 +215,7 @@ frag6_input(struct mbuf **mp, int *offp,
                return IPPROTO_DONE;
        }
 
-       V_ip6stat.ip6s_fragments++;
+       IP6STAT_INC(ip6s_fragments);
        in6_ifstat_inc(dstifp, ifs6_reass_reqd);
 
        /* offset now points to data portion */
@@ -228,7 +228,7 @@ frag6_input(struct mbuf **mp, int *offp,
         */
        if ((ip6f->ip6f_offlg & ~IP6F_RESERVED_MASK) == 0) {
                /* XXX-BZ we want dedicated counters for this. */
-               V_ip6stat.ip6s_reassembled++;
+               IP6STAT_INC(ip6s_reassembled);
                in6_ifstat_inc(dstifp, ifs6_reass_ok);
                *offp = offset;
                return (ip6f->ip6f_nxt);
@@ -603,7 +603,7 @@ insert:
                m->m_pkthdr.len = plen;
        }
 
-       V_ip6stat.ip6s_reassembled++;
+       IP6STAT_INC(ip6s_reassembled);
        in6_ifstat_inc(dstifp, ifs6_reass_ok);
 
        /*
@@ -619,7 +619,7 @@ insert:
  dropfrag:
        IP6Q_UNLOCK();
        in6_ifstat_inc(dstifp, ifs6_reass_fail);
-       V_ip6stat.ip6s_fragdropped++;
+       IP6STAT_INC(ip6s_fragdropped);
        m_freem(m);
        return IPPROTO_DONE;
 }
@@ -743,7 +743,7 @@ frag6_slowtimo(void)
                                --q6->ip6q_ttl;
                                q6 = q6->ip6q_next;
                                if (q6->ip6q_prev->ip6q_ttl == 0) {
-                                       V_ip6stat.ip6s_fragtimeout++;
+                                       IP6STAT_INC(ip6s_fragtimeout);
                                        /* XXX in6_ifstat_inc(ifp, 
ifs6_reass_fail) */
                                        frag6_freef(q6->ip6q_prev);
                                }
@@ -755,7 +755,7 @@ frag6_slowtimo(void)
                 */
                while (V_frag6_nfragpackets > (u_int)V_ip6_maxfragpackets &&
                    V_ip6q.ip6q_prev) {
-                       V_ip6stat.ip6s_fragoverflow++;
+                       IP6STAT_INC(ip6s_fragoverflow);
                        /* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */
                        frag6_freef(V_ip6q.ip6q_prev);
                }
@@ -781,7 +781,7 @@ frag6_drain(void)
        VNET_FOREACH(vnet_iter) {
                CURVNET_SET(vnet_iter);
                while (V_ip6q.ip6q_next != &V_ip6q) {
-                       V_ip6stat.ip6s_fragdropped++;
+                       IP6STAT_INC(ip6s_fragdropped);
                        /* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */
                        frag6_freef(V_ip6q.ip6q_next);
                }

Modified: stable/9/sys/netinet6/in6_gif.c
==============================================================================
--- stable/9/sys/netinet6/in6_gif.c     Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/in6_gif.c     Mon Apr 29 10:52:45 2013        
(r250044)
@@ -301,14 +301,14 @@ in6_gif_input(struct mbuf **mp, int *off
        sc = (struct gif_softc *)encap_getarg(m);
        if (sc == NULL) {
                m_freem(m);
-               V_ip6stat.ip6s_nogif++;
+               IP6STAT_INC(ip6s_nogif);
                return IPPROTO_DONE;
        }
 
        gifp = GIF2IFP(sc);
        if (gifp == NULL || (gifp->if_flags & IFF_UP) == 0) {
                m_freem(m);
-               V_ip6stat.ip6s_nogif++;
+               IP6STAT_INC(ip6s_nogif);
                return IPPROTO_DONE;
        }
 
@@ -363,7 +363,7 @@ in6_gif_input(struct mbuf **mp, int *off
                break;
 
        default:
-               V_ip6stat.ip6s_nogif++;
+               IP6STAT_INC(ip6s_nogif);
                m_freem(m);
                return IPPROTO_DONE;
        }

Modified: stable/9/sys/netinet6/in6_src.c
==============================================================================
--- stable/9/sys/netinet6/in6_src.c     Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/in6_src.c     Mon Apr 29 10:52:45 2013        
(r250044)
@@ -151,9 +151,8 @@ static struct in6_addrpolicy *match_addr
  * an entry to the caller for later use.
  */
 #define REPLACE(r) do {\
-       if ((r) < sizeof(V_ip6stat.ip6s_sources_rule) / \
-               sizeof(V_ip6stat.ip6s_sources_rule[0])) /* check for safety */ \
-               V_ip6stat.ip6s_sources_rule[(r)]++; \
+       IP6STAT_INC(ip6s_sources_rule[(r)]); \
+       rule = (r);     \
        /* { \
        char ip6buf[INET6_ADDRSTRLEN], ip6b[INET6_ADDRSTRLEN]; \
        printf("in6_selectsrc: replace %s with %s by %d\n", ia_best ? 
ip6_sprintf(ip6buf, &ia_best->ia_addr.sin6_addr) : "none", ip6_sprintf(ip6b, 
&ia->ia_addr.sin6_addr), (r)); \
@@ -161,9 +160,6 @@ static struct in6_addrpolicy *match_addr
        goto replace; \
 } while(0)
 #define NEXT(r) do {\
-       if ((r) < sizeof(V_ip6stat.ip6s_sources_rule) / \
-               sizeof(V_ip6stat.ip6s_sources_rule[0])) /* check for safety */ \
-               V_ip6stat.ip6s_sources_rule[(r)]++; \
        /* { \
        char ip6buf[INET6_ADDRSTRLEN], ip6b[INET6_ADDRSTRLEN]; \
        printf("in6_selectsrc: keep %s against %s by %d\n", ia_best ? 
ip6_sprintf(ip6buf, &ia_best->ia_addr.sin6_addr) : "none", ip6_sprintf(ip6b, 
&ia->ia_addr.sin6_addr), (r)); \
@@ -171,9 +167,8 @@ static struct in6_addrpolicy *match_addr
        goto next;              /* XXX: we can't use 'continue' here */ \
 } while(0)
 #define BREAK(r) do { \
-       if ((r) < sizeof(V_ip6stat.ip6s_sources_rule) / \
-               sizeof(V_ip6stat.ip6s_sources_rule[0])) /* check for safety */ \
-               V_ip6stat.ip6s_sources_rule[(r)]++; \
+       IP6STAT_INC(ip6s_sources_rule[(r)]); \
+       rule = (r);     \
        goto out;               /* XXX: we can't use 'break' here */ \
 } while(0)
 
@@ -190,7 +185,7 @@ in6_selectsrc(struct sockaddr_in6 *dstso
        struct in6_addrpolicy *dst_policy = NULL, *best_policy = NULL;
        u_int32_t odstzone;
        int prefer_tempaddr;
-       int error;
+       int error, rule;
        struct ip6_moptions *mopts;
 
        KASSERT(srcp != NULL, ("%s: srcp is NULL", __func__));
@@ -306,6 +301,7 @@ in6_selectsrc(struct sockaddr_in6 *dstso
        if (error)
                return (error);
 
+       rule = 0;
        IN6_IFADDR_RLOCK();
        TAILQ_FOREACH(ia, &V_in6_ifaddrhead, ia_link) {
                int new_scope = -1, new_matchlen = -1;
@@ -487,6 +483,7 @@ in6_selectsrc(struct sockaddr_in6 *dstso
 
        if ((ia = ia_best) == NULL) {
                IN6_IFADDR_RUNLOCK();
+               IP6STAT_INC(ip6s_sources_none);
                return (EADDRNOTAVAIL);
        }
 
@@ -503,6 +500,7 @@ in6_selectsrc(struct sockaddr_in6 *dstso
        if (cred != NULL && prison_local_ip6(cred, &tmp, (inp != NULL &&
            (inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) {
                IN6_IFADDR_RUNLOCK();
+               IP6STAT_INC(ip6s_sources_none);
                return (EADDRNOTAVAIL);
        }
 
@@ -510,6 +508,16 @@ in6_selectsrc(struct sockaddr_in6 *dstso
                *ifpp = ifp;
 
        bcopy(&tmp, srcp, sizeof(*srcp));
+       if (ia->ia_ifp == ifp)
+               IP6STAT_INC(ip6s_sources_sameif[best_scope]);
+       else
+               IP6STAT_INC(ip6s_sources_otherif[best_scope]);
+       if (dst_scope == best_scope)
+               IP6STAT_INC(ip6s_sources_samescope[best_scope]);
+       else
+               IP6STAT_INC(ip6s_sources_otherscope[best_scope]);
+       if (IFA6_IS_DEPRECATED(ia))
+               IP6STAT_INC(ip6s_sources_deprecated[best_scope]);
        IN6_IFADDR_RUNLOCK();
        return (0);
 }
@@ -733,7 +741,7 @@ selectroute(struct sockaddr_in6 *dstsock
                error = EHOSTUNREACH;
        }
        if (error == EHOSTUNREACH)
-               V_ip6stat.ip6s_noroute++;
+               IP6STAT_INC(ip6s_noroute);
 
        if (retifp != NULL) {
                *retifp = ifp;

Modified: stable/9/sys/netinet6/ip6_forward.c
==============================================================================
--- stable/9/sys/netinet6/ip6_forward.c Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/ip6_forward.c Mon Apr 29 10:52:45 2013        
(r250044)
@@ -135,7 +135,7 @@ ip6_forward(struct mbuf *m, int srcrt)
        if ((m->m_flags & (M_BCAST|M_MCAST)) != 0 ||
            IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst) ||
            IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src)) {
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                /* XXX in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard) */
                if (V_ip6_log_time + V_ip6_log_interval < time_second) {
                        V_ip6_log_time = time_second;
@@ -183,7 +183,7 @@ ip6_forward(struct mbuf *m, int srcrt)
            IP_FORWARDING, &error);
        if (sp == NULL) {
                V_ipsec6stat.out_inval++;
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                if (mcopy) {
 #if 0
                        /* XXX: what icmp ? */
@@ -204,7 +204,7 @@ ip6_forward(struct mbuf *m, int srcrt)
                 * This packet is just discarded.
                 */
                V_ipsec6stat.out_polvio++;
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                KEY_FREESP(&sp);
                if (mcopy) {
 #if 0
@@ -226,7 +226,7 @@ ip6_forward(struct mbuf *m, int srcrt)
                if (sp->req == NULL) {
                        /* XXX should be panic ? */
                        printf("ip6_forward: No IPsec request specified.\n");
-                       V_ip6stat.ip6s_cantforward++;
+                       IP6STAT_INC(ip6s_cantforward);
                        KEY_FREESP(&sp);
                        if (mcopy) {
 #if 0
@@ -310,7 +310,7 @@ ip6_forward(struct mbuf *m, int srcrt)
                        /* don't show these error codes to the user */
                        break;
                }
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                if (mcopy) {
 #if 0
                        /* XXX: what icmp ? */
@@ -362,7 +362,7 @@ again2:
        if (rin6.ro_rt != NULL)
                RT_UNLOCK(rin6.ro_rt);
        else {
-               V_ip6stat.ip6s_noroute++;
+               IP6STAT_INC(ip6s_noroute);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_noroute);
                if (mcopy) {
                        icmp6_error(mcopy, ICMP6_DST_UNREACH,
@@ -387,13 +387,13 @@ skip_routing:
        src_in6 = ip6->ip6_src;
        if (in6_setscope(&src_in6, rt->rt_ifp, &outzone)) {
                /* XXX: this should not happen */
-               V_ip6stat.ip6s_cantforward++;
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_cantforward);
+               IP6STAT_INC(ip6s_badscope);
                goto bad;
        }
        if (in6_setscope(&src_in6, m->m_pkthdr.rcvif, &inzone)) {
-               V_ip6stat.ip6s_cantforward++;
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_cantforward);
+               IP6STAT_INC(ip6s_badscope);
                goto bad;
        }
        if (inzone != outzone
@@ -401,8 +401,8 @@ skip_routing:
            && !ipsecrt
 #endif
            ) {
-               V_ip6stat.ip6s_cantforward++;
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_cantforward);
+               IP6STAT_INC(ip6s_badscope);
                in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard);
 
                if (V_ip6_log_time + V_ip6_log_interval < time_second) {
@@ -432,8 +432,8 @@ skip_routing:
        if (in6_setscope(&dst_in6, m->m_pkthdr.rcvif, &inzone) != 0 ||
            in6_setscope(&dst_in6, rt->rt_ifp, &outzone) != 0 ||
            inzone != outzone) {
-               V_ip6stat.ip6s_cantforward++;
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_cantforward);
+               IP6STAT_INC(ip6s_badscope);
                goto bad;
        }
 
@@ -623,12 +623,12 @@ pass:
        error = nd6_output(rt->rt_ifp, origifp, m, dst, rt);
        if (error) {
                in6_ifstat_inc(rt->rt_ifp, ifs6_out_discard);
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
        } else {
-               V_ip6stat.ip6s_forward++;
+               IP6STAT_INC(ip6s_forward);
                in6_ifstat_inc(rt->rt_ifp, ifs6_out_forward);
                if (type)
-                       V_ip6stat.ip6s_redirectsent++;
+                       IP6STAT_INC(ip6s_redirectsent);
                else {
                        if (mcopy)
                                goto freecopy;

Modified: stable/9/sys/netinet6/ip6_input.c
==============================================================================
--- stable/9/sys/netinet6/ip6_input.c   Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/ip6_input.c   Mon Apr 29 10:52:45 2013        
(r250044)
@@ -357,7 +357,7 @@ ip6_input_hbh(struct mbuf *m, uint32_t *
                 * contained, ip6_hopopts_input() must set a valid
                 * (non-zero) payload length to the variable plen.
                 */
-               V_ip6stat.ip6s_badoptions++;
+               IP6STAT_INC(ip6s_badoptions);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
                icmp6_error(m, ICMP6_PARAM_PROB,
@@ -372,7 +372,7 @@ ip6_input_hbh(struct mbuf *m, uint32_t *
        IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m, sizeof(struct ip6_hdr),
                sizeof(struct ip6_hbh));
        if (hbh == NULL) {
-               V_ip6stat.ip6s_tooshort++;
+               IP6STAT_INC(ip6s_tooshort);
                goto out;
        }
 #endif
@@ -455,21 +455,20 @@ ip6_input(struct mbuf *m)
         */
        if (m->m_flags & M_EXT) {
                if (m->m_next)
-                       V_ip6stat.ip6s_mext2m++;
+                       IP6STAT_INC(ip6s_mext2m);
                else
-                       V_ip6stat.ip6s_mext1++;
+                       IP6STAT_INC(ip6s_mext1);
        } else {
-#define M2MMAX (sizeof(V_ip6stat.ip6s_m2m)/sizeof(V_ip6stat.ip6s_m2m[0]))
                if (m->m_next) {
                        if (m->m_flags & M_LOOP) {
-                               V_ip6stat.ip6s_m2m[V_loif->if_index]++;
-                       } else if (m->m_pkthdr.rcvif->if_index < M2MMAX)
-                               
V_ip6stat.ip6s_m2m[m->m_pkthdr.rcvif->if_index]++;
+                               IP6STAT_INC(ip6s_m2m[V_loif->if_index]);
+                       } else if (m->m_pkthdr.rcvif->if_index < IP6S_M2MMAX)
+                               IP6STAT_INC(
+                                   ip6s_m2m[m->m_pkthdr.rcvif->if_index]);
                        else
-                               V_ip6stat.ip6s_m2m[0]++;
+                               IP6STAT_INC(ip6s_m2m[0]);
                } else
-                       V_ip6stat.ip6s_m1++;
-#undef M2MMAX
+                       IP6STAT_INC(ip6s_m1);
        }
 
        /* drop the packet if IPv6 operation is disabled on the IF */
@@ -479,7 +478,7 @@ ip6_input(struct mbuf *m)
        }
 
        in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_receive);
-       V_ip6stat.ip6s_total++;
+       IP6STAT_INC(ip6s_total);
 
 #ifndef PULLDOWN_TEST
        /*
@@ -517,7 +516,7 @@ ip6_input(struct mbuf *m)
                struct ifnet *inifp;
                inifp = m->m_pkthdr.rcvif;
                if ((m = m_pullup(m, sizeof(struct ip6_hdr))) == NULL) {
-                       V_ip6stat.ip6s_toosmall++;
+                       IP6STAT_INC(ip6s_toosmall);
                        in6_ifstat_inc(inifp, ifs6_in_hdrerr);
                        return;
                }
@@ -526,12 +525,12 @@ ip6_input(struct mbuf *m)
        ip6 = mtod(m, struct ip6_hdr *);
 
        if ((ip6->ip6_vfc & IPV6_VERSION_MASK) != IPV6_VERSION) {
-               V_ip6stat.ip6s_badvers++;
+               IP6STAT_INC(ip6s_badvers);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
                goto bad;
        }
 
-       V_ip6stat.ip6s_nxthist[ip6->ip6_nxt]++;
+       IP6STAT_INC(ip6s_nxthist[ip6->ip6_nxt]);
 
        /*
         * Check against address spoofing/corruption.
@@ -541,7 +540,7 @@ ip6_input(struct mbuf *m)
                /*
                 * XXX: "badscope" is not very suitable for a multicast source.
                 */
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
                goto bad;
        }
@@ -553,7 +552,7 @@ ip6_input(struct mbuf *m)
                 * because ip6_mloopback() passes the "actual" interface
                 * as the outgoing/incoming interface.
                 */
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
                goto bad;
        }
@@ -578,7 +577,7 @@ ip6_input(struct mbuf *m)
         */
        if (IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||
            IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
                goto bad;
        }
@@ -592,7 +591,7 @@ ip6_input(struct mbuf *m)
         */
        if (IN6_IS_ADDR_V4COMPAT(&ip6->ip6_src) ||
            IN6_IS_ADDR_V4COMPAT(&ip6->ip6_dst)) {
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
                goto bad;
        }
@@ -655,12 +654,12 @@ passin:
         * is not loopback.
         */
        if (in6_clearscope(&ip6->ip6_src) || in6_clearscope(&ip6->ip6_dst)) {
-               V_ip6stat.ip6s_badscope++; /* XXX */
+               IP6STAT_INC(ip6s_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)) {
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                goto bad;
        }
 
@@ -864,7 +863,7 @@ passin:
         * and we're not a router.
         */
        if (!V_ip6_forwarding) {
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
                goto bad;
        }
@@ -918,7 +917,7 @@ passin:
         * Drop packet if shorter than we expect.
         */
        if (m->m_pkthdr.len - sizeof(struct ip6_hdr) < plen) {
-               V_ip6stat.ip6s_tooshort++;
+               IP6STAT_INC(ip6s_tooshort);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);
                goto bad;
        }
@@ -970,7 +969,7 @@ passin:
         */
        if (IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||
            IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_addrerr);
                goto bad;
        }
@@ -978,13 +977,13 @@ passin:
        /*
         * Tell launch routine the next header
         */
-       V_ip6stat.ip6s_delivered++;
+       IP6STAT_INC(ip6s_delivered);
        in6_ifstat_inc(deliverifp, ifs6_in_deliver);
        nest = 0;
 
        while (nxt != IPPROTO_DONE) {
                if (V_ip6_hdrnestlimit && (++nest > V_ip6_hdrnestlimit)) {
-                       V_ip6stat.ip6s_toomanyhdr++;
+                       IP6STAT_INC(ip6s_toomanyhdr);
                        goto bad;
                }
 
@@ -993,7 +992,7 @@ passin:
                 * more sanity checks in header chain processing.
                 */
                if (m->m_pkthdr.len < off) {
-                       V_ip6stat.ip6s_tooshort++;
+                       IP6STAT_INC(ip6s_tooshort);
                        in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);
                        goto bad;
                }
@@ -1087,14 +1086,14 @@ ip6_hopopts_input(u_int32_t *plenp, u_in
        IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m,
                sizeof(struct ip6_hdr), sizeof(struct ip6_hbh));
        if (hbh == NULL) {
-               V_ip6stat.ip6s_tooshort++;
+               IP6STAT_INC(ip6s_tooshort);
                return -1;
        }
        hbhlen = (hbh->ip6h_len + 1) << 3;
        IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m, sizeof(struct ip6_hdr),
                hbhlen);
        if (hbh == NULL) {
-               V_ip6stat.ip6s_tooshort++;
+               IP6STAT_INC(ip6s_tooshort);
                return -1;
        }
 #endif
@@ -1139,7 +1138,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                        break;
                case IP6OPT_PADN:
                        if (hbhlen < IP6OPT_MINLEN) {
-                               V_ip6stat.ip6s_toosmall++;
+                               IP6STAT_INC(ip6s_toosmall);
                                goto bad;
                        }
                        optlen = *(opt + 1) + 2;
@@ -1147,7 +1146,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                case IP6OPT_ROUTER_ALERT:
                        /* XXX may need check for alignment */
                        if (hbhlen < IP6OPT_RTALERT_LEN) {
-                               V_ip6stat.ip6s_toosmall++;
+                               IP6STAT_INC(ip6s_toosmall);
                                goto bad;
                        }
                        if (*(opt + 1) != IP6OPT_RTALERT_LEN - 2) {
@@ -1164,7 +1163,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                case IP6OPT_JUMBO:
                        /* XXX may need check for alignment */
                        if (hbhlen < IP6OPT_JUMBO_LEN) {
-                               V_ip6stat.ip6s_toosmall++;
+                               IP6STAT_INC(ip6s_toosmall);
                                goto bad;
                        }
                        if (*(opt + 1) != IP6OPT_JUMBO_LEN - 2) {
@@ -1182,7 +1181,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                         */
                        ip6 = mtod(m, struct ip6_hdr *);
                        if (ip6->ip6_plen) {
-                               V_ip6stat.ip6s_badoptions++;
+                               IP6STAT_INC(ip6s_badoptions);
                                icmp6_error(m, ICMP6_PARAM_PROB,
                                    ICMP6_PARAMPROB_HEADER,
                                    erroff + opt - opthead);
@@ -1206,7 +1205,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                         * there's no explicit mention in specification.
                         */
                        if (*plenp != 0) {
-                               V_ip6stat.ip6s_badoptions++;
+                               IP6STAT_INC(ip6s_badoptions);
                                icmp6_error(m, ICMP6_PARAM_PROB,
                                    ICMP6_PARAMPROB_HEADER,
                                    erroff + opt + 2 - opthead);
@@ -1218,7 +1217,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                         * jumbo payload length must be larger than 65535.
                         */
                        if (jumboplen <= IPV6_MAXPACKET) {
-                               V_ip6stat.ip6s_badoptions++;
+                               IP6STAT_INC(ip6s_badoptions);
                                icmp6_error(m, ICMP6_PARAM_PROB,
                                    ICMP6_PARAMPROB_HEADER,
                                    erroff + opt + 2 - opthead);
@@ -1229,7 +1228,7 @@ ip6_process_hopopts(struct mbuf *m, u_in
                        break;
                default:                /* unknown option */
                        if (hbhlen < IP6OPT_MINLEN) {
-                               V_ip6stat.ip6s_toosmall++;
+                               IP6STAT_INC(ip6s_toosmall);
                                goto bad;
                        }
                        optlen = ip6_unknown_opt(opt, m,
@@ -1266,11 +1265,11 @@ ip6_unknown_opt(u_int8_t *optp, struct m
                m_freem(m);
                return (-1);
        case IP6OPT_TYPE_FORCEICMP: /* send ICMP even if multicasted */
-               V_ip6stat.ip6s_badoptions++;
+               IP6STAT_INC(ip6s_badoptions);
                icmp6_error(m, ICMP6_PARAM_PROB, ICMP6_PARAMPROB_OPTION, off);
                return (-1);
        case IP6OPT_TYPE_ICMP: /* send ICMP if not multicasted */
-               V_ip6stat.ip6s_badoptions++;
+               IP6STAT_INC(ip6s_badoptions);
                ip6 = mtod(m, struct ip6_hdr *);
                if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst) ||
                    (m->m_flags & (M_BCAST|M_MCAST)))
@@ -1449,14 +1448,14 @@ ip6_savecontrol(struct inpcb *in6p, stru
                        ext = ip6_pullexthdr(m, sizeof(struct ip6_hdr),
                            ip6->ip6_nxt);
                        if (ext == NULL) {
-                               V_ip6stat.ip6s_tooshort++;
+                               IP6STAT_INC(ip6s_tooshort);
                                return;
                        }
                        hbh = mtod(ext, struct ip6_hbh *);
                        hbhlen = (hbh->ip6h_len + 1) << 3;
                        if (hbhlen != ext->m_len) {
                                m_freem(ext);
-                               V_ip6stat.ip6s_tooshort++;
+                               IP6STAT_INC(ip6s_tooshort);
                                return;
                        }
 #endif
@@ -1523,7 +1522,7 @@ ip6_savecontrol(struct inpcb *in6p, stru
 #else
                        ext = ip6_pullexthdr(m, off, nxt);
                        if (ext == NULL) {
-                               V_ip6stat.ip6s_tooshort++;
+                               IP6STAT_INC(ip6s_tooshort);
                                return;
                        }
                        ip6e = mtod(ext, struct ip6_ext *);
@@ -1533,7 +1532,7 @@ ip6_savecontrol(struct inpcb *in6p, stru
                                elen = (ip6e->ip6e_len + 1) << 3;
                        if (elen != ext->m_len) {
                                m_freem(ext);
-                               V_ip6stat.ip6s_tooshort++;
+                               IP6STAT_INC(ip6s_tooshort);
                                return;
                        }
 #endif

Modified: stable/9/sys/netinet6/ip6_ipsec.c
==============================================================================
--- stable/9/sys/netinet6/ip6_ipsec.c   Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/ip6_ipsec.c   Mon Apr 29 10:52:45 2013        
(r250044)
@@ -152,7 +152,7 @@ ip6_ipsec_fwd(struct mbuf *m)
        KEY_FREESP(&sp);
        splx(s);
        if (error) {
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                return 1;
        }
 #endif /* IPSEC */

Modified: stable/9/sys/netinet6/ip6_mroute.c
==============================================================================
--- stable/9/sys/netinet6/ip6_mroute.c  Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/ip6_mroute.c  Mon Apr 29 10:52:45 2013        
(r250044)
@@ -1100,7 +1100,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, stru
         * (although such packets must normally set 1 to the hop limit field).
         */
        if (IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src)) {
-               V_ip6stat.ip6s_cantforward++;
+               IP6STAT_INC(ip6s_cantforward);
                if (V_ip6_log_time + V_ip6_log_interval < time_second) {
                        V_ip6_log_time = time_second;
                        log(LOG_DEBUG,
@@ -1535,7 +1535,7 @@ ip6_mdq(struct mbuf *m, struct ifnet *if
        dst0 = ip6->ip6_dst;
        if ((error = in6_setscope(&src0, ifp, &iszone)) != 0 ||
            (error = in6_setscope(&dst0, ifp, &idzone)) != 0) {
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                return (error);
        }
        for (mifp = mif6table, mifi = 0; mifi < nummifs; mifp++, mifi++) {
@@ -1555,7 +1555,7 @@ ip6_mdq(struct mbuf *m, struct ifnet *if
                                    &odzone) ||
                                    iszone != oszone ||
                                    idzone != odzone) {
-                                       V_ip6stat.ip6s_badscope++;
+                                       IP6STAT_INC(ip6s_badscope);
                                        continue;
                                }
                        }

Modified: stable/9/sys/netinet6/ip6_output.c
==============================================================================
--- stable/9/sys/netinet6/ip6_output.c  Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/ip6_output.c  Mon Apr 29 10:52:45 2013        
(r250044)
@@ -498,16 +498,16 @@ skip_ipsec2:;
        if (IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src) &&
            (flags & IPV6_UNSPECSRC) == 0) {
                error = EOPNOTSUPP;
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                goto bad;
        }
        if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_src)) {
                error = EOPNOTSUPP;
-               V_ip6stat.ip6s_badscope++;
+               IP6STAT_INC(ip6s_badscope);
                goto bad;
        }
 
-       V_ip6stat.ip6s_localout++;
+       IP6STAT_INC(ip6s_localout);
 
        /*
         * Route packet.
@@ -713,7 +713,7 @@ again:
        goto routefound;
 
   badscope:
-       V_ip6stat.ip6s_badscope++;
+       IP6STAT_INC(ip6s_badscope);
        in6_ifstat_inc(origifp, ifs6_out_discard);
        if (error == 0)
                error = EHOSTUNREACH; /* XXX */
@@ -742,7 +742,7 @@ again:
                 * Confirm that the outgoing interface supports multicast.
                 */
                if (!(ifp->if_flags & IFF_MULTICAST)) {
-                       V_ip6stat.ip6s_noroute++;
+                       IP6STAT_INC(ip6s_noroute);
                        in6_ifstat_inc(ifp, ifs6_out_discard);
                        error = ENETUNREACH;
                        goto bad;
@@ -1075,7 +1075,7 @@ passout:
                if (qslots <= 0 || ((u_int)qslots * (mtu - hlen)
                    < tlen  /* - hlen */)) {
                        error = ENOBUFS;
-                       V_ip6stat.ip6s_odropped++;
+                       IP6STAT_INC(ip6s_odropped);
                        goto bad;
                }
 
@@ -1125,7 +1125,7 @@ passout:
                        MGETHDR(m, M_DONTWAIT, MT_HEADER);
                        if (!m) {
                                error = ENOBUFS;
-                               V_ip6stat.ip6s_odropped++;
+                               IP6STAT_INC(ip6s_odropped);
                                goto sendorfree;
                        }
                        m->m_pkthdr.rcvif = NULL;
@@ -1138,7 +1138,7 @@ passout:
                        m->m_len = sizeof(*mhip6);
                        error = ip6_insertfraghdr(m0, m, hlen, &ip6f);
                        if (error) {
-                               V_ip6stat.ip6s_odropped++;
+                               IP6STAT_INC(ip6s_odropped);
                                goto sendorfree;
                        }
                        ip6f->ip6f_offlg = htons((u_short)((off - hlen) & ~7));
@@ -1150,7 +1150,7 @@ passout:
                            sizeof(*ip6f) - sizeof(struct ip6_hdr)));
                        if ((m_frgpart = m_copy(m0, off, len)) == 0) {
                                error = ENOBUFS;
-                               V_ip6stat.ip6s_odropped++;
+                               IP6STAT_INC(ip6s_odropped);
                                goto sendorfree;
                        }
                        m_cat(m, m_frgpart);
@@ -1159,7 +1159,7 @@ passout:
                        ip6f->ip6f_reserved = 0;
                        ip6f->ip6f_ident = id;
                        ip6f->ip6f_nxt = nextproto;
-                       V_ip6stat.ip6s_ofragments++;
+                       IP6STAT_INC(ip6s_ofragments);
                        in6_ifstat_inc(ifp, ifs6_out_fragcreat);
                }
 
@@ -1188,7 +1188,7 @@ sendorfree:
        }
 
        if (error == 0)
-               V_ip6stat.ip6s_fragmented++;
+               IP6STAT_INC(ip6s_fragmented);
 
 done:
        if (ro == &ip6route)

Modified: stable/9/sys/netinet6/ip6_var.h
==============================================================================
--- stable/9/sys/netinet6/ip6_var.h     Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/ip6_var.h     Mon Apr 29 10:52:45 2013        
(r250044)
@@ -204,9 +204,11 @@ struct     ip6stat {
        u_quad_t ip6s_rawout;           /* total raw ip packets generated */
        u_quad_t ip6s_badscope;         /* scope error */
        u_quad_t ip6s_notmember;        /* don't join this multicast group */
-       u_quad_t ip6s_nxthist[256];     /* next header history */
+#define        IP6S_HDRCNT             256     /* headers count */
+       u_quad_t ip6s_nxthist[IP6S_HDRCNT]; /* next header history */
        u_quad_t ip6s_m1;               /* one mbuf */
-       u_quad_t ip6s_m2m[32];          /* two or more mbuf */
+#define        IP6S_M2MMAX             32
+       u_quad_t ip6s_m2m[IP6S_M2MMAX]; /* two or more mbuf */
        u_quad_t ip6s_mext1;            /* one ext mbuf */
        u_quad_t ip6s_mext2m;           /* two or more ext mbuf */
        u_quad_t ip6s_exthdrtoolong;    /* ext hdr are not contiguous */
@@ -218,27 +220,29 @@ struct    ip6stat {
         * algorithm:
         * XXX: hardcoded 16 = # of ip6 multicast scope types + 1
         */
+#define        IP6S_RULESMAX           16
+#define        IP6S_SCOPECNT           16
        /* number of times that address selection fails */
        u_quad_t ip6s_sources_none;
        /* number of times that an address on the outgoing I/F is chosen */
-       u_quad_t ip6s_sources_sameif[16];
+       u_quad_t ip6s_sources_sameif[IP6S_SCOPECNT];
        /* number of times that an address on a non-outgoing I/F is chosen */
-       u_quad_t ip6s_sources_otherif[16];
+       u_quad_t ip6s_sources_otherif[IP6S_SCOPECNT];
        /*
         * number of times that an address that has the same scope
         * from the destination is chosen.
         */
-       u_quad_t ip6s_sources_samescope[16];
+       u_quad_t ip6s_sources_samescope[IP6S_SCOPECNT];
        /*
         * number of times that an address that has a different scope
         * from the destination is chosen.
         */
-       u_quad_t ip6s_sources_otherscope[16];
+       u_quad_t ip6s_sources_otherscope[IP6S_SCOPECNT];
        /* number of times that a deprecated address is chosen */
-       u_quad_t ip6s_sources_deprecated[16];
+       u_quad_t ip6s_sources_deprecated[IP6S_SCOPECNT];
 
        /* number of times that each rule of source selection is applied. */
-       u_quad_t ip6s_sources_rule[16];
+       u_quad_t ip6s_sources_rule[IP6S_RULESMAX];
 };
 
 #ifdef _KERNEL

Modified: stable/9/sys/netinet6/raw_ip6.c
==============================================================================
--- stable/9/sys/netinet6/raw_ip6.c     Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/raw_ip6.c     Mon Apr 29 10:52:45 2013        
(r250044)
@@ -296,7 +296,7 @@ rip6_input(struct mbuf **mp, int *offp, 
        if ((last != NULL) && ipsec6_in_reject(m, last)) {
                m_freem(m);
                V_ipsec6stat.in_polvio++;
-               V_ip6stat.ip6s_delivered--;
+               IP6STAT_DEC(ip6s_delivered);
                /* Do not inject data into pcb. */
                INP_RUNLOCK(last);
        } else
@@ -328,7 +328,7 @@ rip6_input(struct mbuf **mp, int *offp, 
                            ICMP6_PARAMPROB_NEXTHEADER,
                            prvnxtp - mtod(m, char *));
                }
-               V_ip6stat.ip6s_delivered--;
+               IP6STAT_DEC(ip6s_delivered);
        }
        return (IPPROTO_DONE);
 }

Modified: stable/9/sys/netinet6/route6.c
==============================================================================
--- stable/9/sys/netinet6/route6.c      Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netinet6/route6.c      Mon Apr 29 10:52:45 2013        
(r250044)
@@ -69,7 +69,7 @@ route6_input(struct mbuf **mp, int *offp
        if (ip6a) {
                /* XXX reject home-address option before rthdr */
                if (ip6a->ip6a_flags & IP6A_SWAP) {
-                       V_ip6stat.ip6s_badoptions++;
+                       IP6STAT_INC(ip6s_badoptions);
                        m_freem(m);
                        return IPPROTO_DONE;
                }
@@ -84,7 +84,7 @@ route6_input(struct mbuf **mp, int *offp
        ip6 = mtod(m, struct ip6_hdr *);
        IP6_EXTHDR_GET(rh, struct ip6_rthdr *, m, off, sizeof(*rh));
        if (rh == NULL) {
-               V_ip6stat.ip6s_tooshort++;
+               IP6STAT_INC(ip6s_tooshort);
                return IPPROTO_DONE;
        }
 #endif
@@ -100,7 +100,7 @@ route6_input(struct mbuf **mp, int *offp
                        rhlen = (rh->ip6r_len + 1) << 3;
                        break;  /* Final dst. Just ignore the header. */
                }
-               V_ip6stat.ip6s_badoptions++;
+               IP6STAT_INC(ip6s_badoptions);
                icmp6_error(m, ICMP6_PARAM_PROB, ICMP6_PARAMPROB_HEADER,
                            (caddr_t)&rh->ip6r_type - (caddr_t)ip6);
                return (IPPROTO_DONE);

Modified: stable/9/sys/netipsec/ipsec_input.c
==============================================================================
--- stable/9/sys/netipsec/ipsec_input.c Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netipsec/ipsec_input.c Mon Apr 29 10:52:45 2013        
(r250044)
@@ -768,7 +768,7 @@ ipsec6_common_input_cb(struct mbuf *m, s
        nxt = nxt8;
        while (nxt != IPPROTO_DONE) {
                if (V_ip6_hdrnestlimit && (++nest > V_ip6_hdrnestlimit)) {
-                       V_ip6stat.ip6s_toomanyhdr++;
+                       IP6STAT_INC(ip6s_toomanyhdr);
                        error = EINVAL;
                        goto bad;
                }
@@ -778,7 +778,7 @@ ipsec6_common_input_cb(struct mbuf *m, s
                 * more sanity checks in header chain processing.
                 */
                if (m->m_pkthdr.len < skip) {
-                       V_ip6stat.ip6s_tooshort++;
+                       IP6STAT_INC(ip6s_tooshort);
                        in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);
                        error = EINVAL;
                        goto bad;

Modified: stable/9/sys/netipsec/ipsec_output.c
==============================================================================
--- stable/9/sys/netipsec/ipsec_output.c        Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/sys/netipsec/ipsec_output.c        Mon Apr 29 10:52:45 2013        
(r250044)
@@ -869,7 +869,7 @@ ipsec6_output_tunnel(struct ipsec_output
                        rtalloc_ign_fib(state->ro, 0UL, M_GETFIB(m));
                }
                if (state->ro->ro_rt == NULL) {
-                       V_ip6stat.ip6s_noroute++;
+                       IP6STAT_INC(ip6s_noroute);
                        V_ipsec6stat.ips_out_noroute++;
                        error = EHOSTUNREACH;
                        goto bad;

Modified: stable/9/usr.bin/netstat/inet6.c
==============================================================================
--- stable/9/usr.bin/netstat/inet6.c    Mon Apr 29 10:20:46 2013        
(r250043)
+++ stable/9/usr.bin/netstat/inet6.c    Mon Apr 29 10:52:45 2013        
(r250044)
@@ -408,7 +408,7 @@ ip6_stats(u_long off, const char *name, 
        p(ip6s_cantfrag, "\t%ju datagram%s that can't be fragmented\n");
        p(ip6s_badscope, "\t%ju packet%s that violated scope rules\n");
        p(ip6s_notmember, "\t%ju multicast packet%s which we don't join\n");
-       for (first = 1, i = 0; i < 256; i++)
+       for (first = 1, i = 0; i < IP6S_HDRCNT; i++)
                if (ip6stat.ip6s_nxthist[i] != 0) {
                        if (first) {
                                printf("\tInput histogram:\n");
@@ -419,7 +419,7 @@ ip6_stats(u_long off, const char *name, 
                }
        printf("\tMbuf statistics:\n");
        printf("\t\t%ju one mbuf\n", (uintmax_t)ip6stat.ip6s_m1);
-       for (first = 1, i = 0; i < 32; i++) {
+       for (first = 1, i = 0; i < IP6S_M2MMAX; i++) {
                char ifbuf[IFNAMSIZ];
                if (ip6stat.ip6s_m2m[i] != 0) {
                        if (first) {
@@ -445,7 +445,7 @@ ip6_stats(u_long off, const char *name, 
 #define        PRINT_SCOPESTAT(s,i) do {\
                switch(i) { /* XXX hardcoding in each case */\
                case 1:\
-                       p(s, "\t\t%ju node-local%s\n");\
+                       p(s, "\t\t%ju interface-local%s\n");\
                        break;\
                case 2:\
                        p(s,"\t\t%ju link-local%s\n");\
@@ -464,7 +464,7 @@ ip6_stats(u_long off, const char *name, 
 
        p(ip6s_sources_none,
          "\t%ju failure%s of source address selection\n");
-       for (first = 1, i = 0; i < 16; i++) {
+       for (first = 1, i = 0; i < IP6S_SCOPECNT; i++) {
                if (ip6stat.ip6s_sources_sameif[i]) {
                        if (first) {
                                printf("\tsource addresses on an outgoing 
I/F\n");
@@ -473,7 +473,7 @@ ip6_stats(u_long off, const char *name, 
                        PRINT_SCOPESTAT(ip6s_sources_sameif[i], i);
                }
        }
-       for (first = 1, i = 0; i < 16; i++) {
+       for (first = 1, i = 0; i < IP6S_SCOPECNT; i++) {
                if (ip6stat.ip6s_sources_otherif[i]) {
                        if (first) {
                                printf("\tsource addresses on a non-outgoing 
I/F\n");
@@ -482,7 +482,7 @@ ip6_stats(u_long off, const char *name, 
                        PRINT_SCOPESTAT(ip6s_sources_otherif[i], i);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to