Author: rwatson
Date: Sun Apr 12 13:41:13 2009
New Revision: 190965
URL: http://svn.freebsd.org/changeset/base/190965

Log:
  Update stats in struct igmpstat using two new macros:
  IGMPSTAT_ADD() and IGMPSTAT_INC(), rather than directly
  manipulating the fields of the structure.  This will make it
  easier to change the implementation of these statistics,
  such as using per-CPU versions of the data structures.
  
  MFC after:    3 days

Modified:
  head/sys/netinet/igmp.c
  head/sys/netinet/igmp_var.h

Modified: head/sys/netinet/igmp.c
==============================================================================
--- head/sys/netinet/igmp.c     Sun Apr 12 13:22:33 2009        (r190964)
+++ head/sys/netinet/igmp.c     Sun Apr 12 13:41:13 2009        (r190965)
@@ -762,11 +762,11 @@ igmp_input_v1_query(struct ifnet *ifp, c
         * daemon may wish to see it.
         */
        if (!in_allhosts(ip->ip_dst)) {
-               ++V_igmpstat.igps_rcv_badqueries;
+               IGMPSTAT_INC(igps_rcv_badqueries);
                return (0);
        }
 
-       ++V_igmpstat.igps_rcv_gen_queries;
+       IGMPSTAT_INC(igps_rcv_gen_queries);
 
        /*
         * Switch to IGMPv1 host compatibility mode.
@@ -875,7 +875,7 @@ igmp_input_v2_query(struct ifnet *ifp, c
                            inet_ntoa(igmp->igmp_group), ifp, ifp->if_xname);
                        igmp_v2_update_group(inm, timer);
                }
-               ++V_igmpstat.igps_rcv_group_queries;
+               IGMPSTAT_INC(igps_rcv_group_queries);
        } else {
                /*
                 * IGMPv2 General Query.
@@ -900,7 +900,7 @@ igmp_input_v2_query(struct ifnet *ifp, c
                        }
                        IF_ADDR_UNLOCK(ifp);
                }
-               ++V_igmpstat.igps_rcv_gen_queries;
+               IGMPSTAT_INC(igps_rcv_gen_queries);
        }
 
 out_locked:
@@ -1041,7 +1041,7 @@ igmp_input_v3_query(struct ifnet *ifp, c
                 * Schedule a current-state report on this ifp for
                 * all groups, possibly containing source lists.
                 */
-               ++V_igmpstat.igps_rcv_gen_queries;
+               IGMPSTAT_INC(igps_rcv_gen_queries);
 
                if (!in_allhosts(ip->ip_dst) || nsrc > 0) {
                        /*
@@ -1049,7 +1049,7 @@ igmp_input_v3_query(struct ifnet *ifp, c
                         * A general query with a source list has undefined
                         * behaviour; discard it.
                         */
-                       ++V_igmpstat.igps_rcv_badqueries;
+                       IGMPSTAT_INC(igps_rcv_badqueries);
                        goto out_locked;
                }
 
@@ -1079,16 +1079,16 @@ igmp_input_v3_query(struct ifnet *ifp, c
                if (inm == NULL)
                        goto out_locked;
                if (nsrc > 0) {
-                       ++V_igmpstat.igps_rcv_gsr_queries;
+                       IGMPSTAT_INC(igps_rcv_gsr_queries);
                        if (!ratecheck(&inm->inm_lastgsrtv,
                            &V_igmp_gsrdelay)) {
                                CTR1(KTR_IGMPV3, "%s: GS query throttled.",
                                    __func__);
-                               ++V_igmpstat.igps_drop_gsr_queries;
+                               IGMPSTAT_INC(igps_drop_gsr_queries);
                                goto out_locked;
                        }
                } else {
-                       ++V_igmpstat.igps_rcv_group_queries;
+                       IGMPSTAT_INC(igps_rcv_group_queries);
                }
                CTR3(KTR_IGMPV3, "process v3 %s query on ifp %p(%s)",
                     inet_ntoa(igmpv3->igmp_group), ifp, ifp->if_xname);
@@ -1224,14 +1224,14 @@ igmp_input_v1_report(struct ifnet *ifp, 
        struct in_ifaddr *ia;
        struct in_multi *inm;
 
-       ++V_igmpstat.igps_rcv_reports;
+       IGMPSTAT_INC(igps_rcv_reports);
 
        if (ifp->if_flags & IFF_LOOPBACK)
                return (0);
 
        if (!IN_MULTICAST(ntohl(igmp->igmp_group.s_addr) ||
            !in_hosteq(igmp->igmp_group, ip->ip_dst))) {
-               ++V_igmpstat.igps_rcv_badreports;
+               IGMPSTAT_INC(igps_rcv_badreports);
                return (EINVAL);
        }
 
@@ -1268,7 +1268,7 @@ igmp_input_v1_report(struct ifnet *ifp, 
                        goto out_locked;
                }
 
-               ++V_igmpstat.igps_rcv_ourreports;
+               IGMPSTAT_INC(igps_rcv_ourreports);
 
                /*
                 * If we are in IGMPv3 host mode, do not allow the
@@ -1339,14 +1339,14 @@ igmp_input_v2_report(struct ifnet *ifp, 
        if (ia != NULL && in_hosteq(ip->ip_src, IA_SIN(ia)->sin_addr))
                return (0);
 
-       ++V_igmpstat.igps_rcv_reports;
+       IGMPSTAT_INC(igps_rcv_reports);
 
        if (ifp->if_flags & IFF_LOOPBACK)
                return (0);
 
        if (!IN_MULTICAST(ntohl(igmp->igmp_group.s_addr)) ||
            !in_hosteq(igmp->igmp_group, ip->ip_dst)) {
-               ++V_igmpstat.igps_rcv_badreports;
+               IGMPSTAT_INC(igps_rcv_badreports);
                return (EINVAL);
        }
 
@@ -1379,7 +1379,7 @@ igmp_input_v2_report(struct ifnet *ifp, 
                igi = inm->inm_igi;
                KASSERT(igi != NULL, ("%s: no igi for ifp %p", __func__, ifp));
 
-               ++V_igmpstat.igps_rcv_ourreports;
+               IGMPSTAT_INC(igps_rcv_ourreports);
 
                /*
                 * If we are in IGMPv3 host mode, do not allow the
@@ -1437,7 +1437,7 @@ igmp_input(struct mbuf *m, int off)
        ifp = m->m_pkthdr.rcvif;
        INIT_VNET_INET(ifp->if_vnet);
 
-       ++V_igmpstat.igps_rcv_total;
+       IGMPSTAT_INC(igps_rcv_total);
 
        ip = mtod(m, struct ip *);
        iphlen = off;
@@ -1447,7 +1447,7 @@ igmp_input(struct mbuf *m, int off)
         * Validate lengths.
         */
        if (igmplen < IGMP_MINLEN) {
-               ++V_igmpstat.igps_rcv_tooshort;
+               IGMPSTAT_INC(igps_rcv_tooshort);
                m_freem(m);
                return;
        }
@@ -1463,13 +1463,13 @@ igmp_input(struct mbuf *m, int off)
                minlen += IGMP_MINLEN;
        if ((m->m_flags & M_EXT || m->m_len < minlen) &&
            (m = m_pullup(m, minlen)) == 0) {
-               ++V_igmpstat.igps_rcv_tooshort;
+               IGMPSTAT_INC(igps_rcv_tooshort);
                return;
        }
        ip = mtod(m, struct ip *);
 
        if (ip->ip_ttl != 1) {
-               ++V_igmpstat.igps_rcv_badttl;
+               IGMPSTAT_INC(igps_rcv_badttl);
                m_freem(m);
                return;
        }
@@ -1481,7 +1481,7 @@ igmp_input(struct mbuf *m, int off)
        m->m_len -= iphlen;
        igmp = mtod(m, struct igmp *);
        if (in_cksum(m, igmplen)) {
-               ++V_igmpstat.igps_rcv_badsum;
+               IGMPSTAT_INC(igps_rcv_badsum);
                m_freem(m);
                return;
        }
@@ -1498,14 +1498,14 @@ igmp_input(struct mbuf *m, int off)
                } else if (igmplen >= IGMP_V3_QUERY_MINLEN) {
                        queryver = IGMP_VERSION_3;
                } else {
-                       ++V_igmpstat.igps_rcv_tooshort;
+                       IGMPSTAT_INC(igps_rcv_tooshort);
                        m_freem(m);
                        return;
                }
 
                switch (queryver) {
                case IGMP_VERSION_1:
-                       ++V_igmpstat.igps_rcv_v1v2_queries;
+                       IGMPSTAT_INC(igps_rcv_v1v2_queries);
                        if (!V_igmp_v1enable)
                                break;
                        if (igmp_input_v1_query(ifp, ip) != 0) {
@@ -1515,7 +1515,7 @@ igmp_input(struct mbuf *m, int off)
                        break;
 
                case IGMP_VERSION_2:
-                       ++V_igmpstat.igps_rcv_v1v2_queries;
+                       IGMPSTAT_INC(igps_rcv_v1v2_queries);
                        if (!V_igmp_v2enable)
                                break;
                        if (igmp_input_v2_query(ifp, ip, igmp) != 0) {
@@ -1530,7 +1530,7 @@ igmp_input(struct mbuf *m, int off)
                                uint16_t srclen;
                                int nsrc;
 
-                               ++V_igmpstat.igps_rcv_v3_queries;
+                               IGMPSTAT_INC(igps_rcv_v3_queries);
                                igmpv3 = (struct igmpv3 *)igmp;
                                /*
                                 * Validate length based on source count.
@@ -1538,7 +1538,7 @@ igmp_input(struct mbuf *m, int off)
                                nsrc = ntohs(igmpv3->igmp_numsrc);
                                srclen = sizeof(struct in_addr) * nsrc;
                                if (nsrc * sizeof(in_addr_t) > srclen) {
-                                       ++V_igmpstat.igps_rcv_tooshort;
+                                       IGMPSTAT_INC(igps_rcv_tooshort);
                                        return;
                                }
                                /*
@@ -1550,7 +1550,7 @@ igmp_input(struct mbuf *m, int off)
                                if ((m->m_flags & M_EXT ||
                                     m->m_len < igmpv3len) &&
                                    (m = m_pullup(m, igmpv3len)) == NULL) {
-                                       ++V_igmpstat.igps_rcv_tooshort;
+                                       IGMPSTAT_INC(igps_rcv_tooshort);
                                        return;
                                }
                                igmpv3 = (struct igmpv3 *)(mtod(m, uint8_t *)
@@ -1577,7 +1577,7 @@ igmp_input(struct mbuf *m, int off)
                if (!V_igmp_v2enable)
                        break;
                if (!ip_checkrouteralert(m))
-                       ++V_igmpstat.igps_rcv_nora;
+                       IGMPSTAT_INC(igps_rcv_nora);
                if (igmp_input_v2_report(ifp, ip, igmp) != 0) {
                        m_freem(m);
                        return;
@@ -1590,7 +1590,7 @@ igmp_input(struct mbuf *m, int off)
                 * as report suppression is no longer required.
                 */
                if (!ip_checkrouteralert(m))
-                       ++V_igmpstat.igps_rcv_nora;
+                       IGMPSTAT_INC(igps_rcv_nora);
                break;
 
        default:
@@ -3458,7 +3458,7 @@ igmp_intr(struct mbuf *m)
                goto out;
        }
 
-       ++V_igmpstat.igps_snd_reports;
+       IGMPSTAT_INC(igps_snd_reports);
 
 out:
        /*

Modified: head/sys/netinet/igmp_var.h
==============================================================================
--- head/sys/netinet/igmp_var.h Sun Apr 12 13:22:33 2009        (r190964)
+++ head/sys/netinet/igmp_var.h Sun Apr 12 13:41:13 2009        (r190965)
@@ -106,6 +106,11 @@ struct igmpstat {
 #define IGPS_VERSION_3 3               /* as of FreeBSD 8.x */
 #define IGPS_VERSION3_LEN              168
 
+#ifdef _KERNEL
+#define        IGMPSTAT_ADD(name, val)         V_igmpstat.name += (val)
+#define        IGMPSTAT_INC(name)              IGMPSTAT_ADD(name, 1)
+#endif
+
 #ifdef CTASSERT
 CTASSERT(sizeof(struct igmpstat) == 168);
 #endif
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to