Author: melifaro
Date: Sat May 18 05:40:59 2013
New Revision: 250761
URL: http://svnweb.freebsd.org/changeset/base/250761

Log:
  MFC r243711.
  
  Use common macros for working with rule/dynamic counters.
  This is done as preparation to introduce per-cpu ipfw counters.

Modified:
  stable/9/sys/netpfil/ipfw/ip_fw2.c
  stable/9/sys/netpfil/ipfw/ip_fw_dynamic.c
  stable/9/sys/netpfil/ipfw/ip_fw_private.h
  stable/9/sys/netpfil/ipfw/ip_fw_sockopt.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/netpfil/ipfw/ip_fw2.c
==============================================================================
--- stable/9/sys/netpfil/ipfw/ip_fw2.c  Sat May 18 05:31:17 2013        
(r250760)
+++ stable/9/sys/netpfil/ipfw/ip_fw2.c  Sat May 18 05:40:59 2013        
(r250761)
@@ -2056,8 +2056,7 @@ do {                                                      
        \
                                         * the parent rule by setting
                                         * f, cmd, l and clearing cmdlen.
                                         */
-                                       q->pcnt++;
-                                       q->bcnt += pktlen;
+                                       IPFW_INC_DYN_COUNTER(q, pktlen);
                                        /* XXX we would like to have f_pos
                                         * readily accessible in the dynamic
                                         * rule, instead of having to
@@ -2116,16 +2115,12 @@ do {                                                    
        \
                                break;
 
                        case O_COUNT:
-                               f->pcnt++;      /* update stats */
-                               f->bcnt += pktlen;
-                               f->timestamp = time_uptime;
+                               IPFW_INC_RULE_COUNTER(f, pktlen);
                                l = 0;          /* exit inner loop */
                                break;
 
                        case O_SKIPTO:
-                           f->pcnt++;  /* update stats */
-                           f->bcnt += pktlen;
-                           f->timestamp = time_uptime;
+                           IPFW_INC_RULE_COUNTER(f, pktlen);
                            f_pos = jump_fast(chain, f, cmd->arg1, tablearg, 0);
                            /*
                             * Skip disabled rules, and re-enter
@@ -2201,9 +2196,7 @@ do {                                                      
        \
                                        break;
                                }
 
-                               f->pcnt++;      /* update stats */
-                               f->bcnt += pktlen;
-                               f->timestamp = time_uptime;
+                               IPFW_INC_RULE_COUNTER(f, pktlen);
                                stack = (uint16_t *)(mtag + 1);
 
                                /*
@@ -2337,9 +2330,7 @@ do {                                                      
        \
                        case O_SETFIB: {
                                uint32_t fib;
 
-                               f->pcnt++;      /* update stats */
-                               f->bcnt += pktlen;
-                               f->timestamp = time_uptime;
+                               IPFW_INC_RULE_COUNTER(f, pktlen);
                                fib = IP_FW_ARG_TABLEARG(cmd->arg1);
                                if (fib >= rt_numfibs)
                                        fib = 0;
@@ -2387,8 +2378,7 @@ do {                                                      
        \
                        case O_REASS: {
                                int ip_off;
 
-                               f->pcnt++;
-                               f->bcnt += pktlen;
+                               IPFW_INC_RULE_COUNTER(f, pktlen);
                                l = 0;  /* in any case exit inner loop */
                                ip_off = ntohs(ip->ip_off);
 
@@ -2457,9 +2447,7 @@ do {                                                      
        \
        if (done) {
                struct ip_fw *rule = chain->map[f_pos];
                /* Update statistics */
-               rule->pcnt++;
-               rule->bcnt += pktlen;
-               rule->timestamp = time_uptime;
+               IPFW_INC_RULE_COUNTER(rule, pktlen);
        } else {
                retval = IP_FW_DENY;
                printf("ipfw: ouch!, skip past end of rules, denying packet\n");

Modified: stable/9/sys/netpfil/ipfw/ip_fw_dynamic.c
==============================================================================
--- stable/9/sys/netpfil/ipfw/ip_fw_dynamic.c   Sat May 18 05:31:17 2013        
(r250760)
+++ stable/9/sys/netpfil/ipfw/ip_fw_dynamic.c   Sat May 18 05:40:59 2013        
(r250761)
@@ -594,7 +594,7 @@ add_dyn_rule(struct ipfw_flow_id *id, in
        r->expire = time_uptime + V_dyn_syn_lifetime;
        r->rule = rule;
        r->dyn_type = dyn_type;
-       r->pcnt = r->bcnt = 0;
+       IPFW_ZERO_DYN_COUNTER(r);
        r->count = 0;
 
        r->bucket = i;

Modified: stable/9/sys/netpfil/ipfw/ip_fw_private.h
==============================================================================
--- stable/9/sys/netpfil/ipfw/ip_fw_private.h   Sat May 18 05:31:17 2013        
(r250760)
+++ stable/9/sys/netpfil/ipfw/ip_fw_private.h   Sat May 18 05:40:59 2013        
(r250761)
@@ -236,6 +236,28 @@ struct ip_fw_chain {
 
 struct sockopt;        /* used by tcp_var.h */
 
+/* Macro for working with various counters */
+#define        IPFW_INC_RULE_COUNTER(_cntr, _bytes)    do {    \
+       (_cntr)->pcnt++;                                \
+       (_cntr)->bcnt += _bytes;                        \
+       (_cntr)->timestamp = time_uptime;               \
+       } while (0)
+
+#define        IPFW_INC_DYN_COUNTER(_cntr, _bytes)     do {            \
+       (_cntr)->pcnt++;                                \
+       (_cntr)->bcnt += _bytes;                        \
+       } while (0)
+
+#define        IPFW_ZERO_RULE_COUNTER(_cntr) do {              \
+       (_cntr)->pcnt = 0;                              \
+       (_cntr)->bcnt = 0;                              \
+       (_cntr)->timestamp = 0;                         \
+       } while (0)
+
+#define        IPFW_ZERO_DYN_COUNTER(_cntr) do {               \
+       (_cntr)->pcnt = 0;                              \
+       (_cntr)->bcnt = 0;                              \
+       } while (0)
 
 #define        IP_FW_ARG_TABLEARG(a)   ((a) == IP_FW_TABLEARG) ? tablearg : (a)
 /*

Modified: stable/9/sys/netpfil/ipfw/ip_fw_sockopt.c
==============================================================================
--- stable/9/sys/netpfil/ipfw/ip_fw_sockopt.c   Sat May 18 05:31:17 2013        
(r250760)
+++ stable/9/sys/netpfil/ipfw/ip_fw_sockopt.c   Sat May 18 05:40:59 2013        
(r250761)
@@ -177,9 +177,7 @@ ipfw_add_rule(struct ip_fw_chain *chain,
        /* clear fields not settable from userland */
        rule->x_next = NULL;
        rule->next_rule = NULL;
-       rule->pcnt = 0;
-       rule->bcnt = 0;
-       rule->timestamp = 0;
+       IPFW_ZERO_RULE_COUNTER(rule);
 
        if (V_autoinc_step < 1)
                V_autoinc_step = 1;
@@ -442,10 +440,8 @@ clear_counters(struct ip_fw *rule, int l
 {
        ipfw_insn_log *l = (ipfw_insn_log *)ACTION_PTR(rule);
 
-       if (log_only == 0) {
-               rule->bcnt = rule->pcnt = 0;
-               rule->timestamp = 0;
-       }
+       if (log_only == 0)
+               IPFW_ZERO_RULE_COUNTER(rule);
        if (l->o.opcode == O_LOG)
                l->log_left = l->max_log;
 }
_______________________________________________
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