Using a mix of 32 and 64 bits counters leads to an ugly conversion to
percpu counters.  Why not move to 64 bits counters?  struct ipipstat is
afaik only used by netstat and ports/shells/nsh (I can cook a fix for
the latter).

ok?


Index: sys/netinet/ip_ipip.h
===================================================================
RCS file: /d/cvs/src/sys/netinet/ip_ipip.h,v
retrieving revision 1.6
diff -u -p -r1.6 ip_ipip.h
--- sys/netinet/ip_ipip.h       14 Dec 2007 18:33:41 -0000      1.6
+++ sys/netinet/ip_ipip.h       10 Feb 2017 15:48:13 -0000
@@ -43,18 +43,17 @@
  * Not quite all the functionality of RFC-1853, but the main idea is there.
  */
 
-struct ipipstat
-{
-    u_int32_t  ipips_ipackets;         /* total input packets */
-    u_int32_t  ipips_opackets;         /* total output packets */
-    u_int32_t  ipips_hdrops;           /* packet shorter than header shows */
-    u_int32_t  ipips_qfull;
-    u_int64_t   ipips_ibytes;
-    u_int64_t   ipips_obytes;
-    u_int32_t  ipips_pdrops;           /* packet dropped due to policy */
-    u_int32_t  ipips_spoof;            /* IP spoofing attempts */
-    u_int32_t   ipips_family;          /* Protocol family mismatch */
-    u_int32_t   ipips_unspec;            /* Missing tunnel endpoint address */
+struct ipipstat {
+    u_int64_t  ipips_ipackets;         /* total input packets */
+    u_int64_t  ipips_opackets;         /* total output packets */
+    u_int64_t  ipips_hdrops;           /* packet shorter than header shows */
+    u_int64_t  ipips_qfull;
+    u_int64_t  ipips_ibytes;
+    u_int64_t  ipips_obytes;
+    u_int64_t  ipips_pdrops;           /* packet dropped due to policy */
+    u_int64_t  ipips_spoof;            /* IP spoofing attempts */
+    u_int64_t  ipips_family;           /* Protocol family mismatch */
+    u_int64_t  ipips_unspec;            /* Missing tunnel endpoint address */
 };
 
 #define IP4_DEFAULT_TTL    0
Index: usr.bin/netstat/inet.c
===================================================================
RCS file: /d/cvs/src/usr.bin/netstat/inet.c,v
retrieving revision 1.154
diff -u -p -r1.154 inet.c
--- usr.bin/netstat/inet.c      7 Feb 2017 18:18:16 -0000       1.154
+++ usr.bin/netstat/inet.c      10 Feb 2017 15:39:13 -0000
@@ -1065,16 +1065,16 @@ ipip_stats(char *name)
 #define p(f, m) if (ipipstat.f || sflag <= 1) \
        printf(m, ipipstat.f, plural(ipipstat.f))
 
-       p(ipips_ipackets, "\t%u total input packet%s\n");
-       p(ipips_opackets, "\t%u total output packet%s\n");
-       p(ipips_hdrops, "\t%u packet%s shorter than header shows\n");
-       p(ipips_pdrops, "\t%u packet%s dropped due to policy\n");
-       p(ipips_spoof, "\t%u packet%s with possibly spoofed local addresses\n");
-       p(ipips_qfull, "\t%u packet%s were dropped due to full output queue\n");
+       p(ipips_ipackets, "\t%llu total input packet%s\n");
+       p(ipips_opackets, "\t%llu total output packet%s\n");
+       p(ipips_hdrops, "\t%llu packet%s shorter than header shows\n");
+       p(ipips_pdrops, "\t%llu packet%s dropped due to policy\n");
+       p(ipips_spoof, "\t%llu packet%s with possibly spoofed local 
addresses\n");
+       p(ipips_qfull, "\t%llu packet%s were dropped due to full output 
queue\n");
        p(ipips_ibytes, "\t%llu input byte%s\n");
        p(ipips_obytes, "\t%llu output byte%s\n");
-       p(ipips_family, "\t%u protocol family mismatche%s\n");
-       p(ipips_unspec, "\t%u attempt%s to use tunnel with unspecified 
endpoint(s)\n");
+       p(ipips_family, "\t%llu protocol family mismatche%s\n");
+       p(ipips_unspec, "\t%llu attempt%s to use tunnel with unspecified 
endpoint(s)\n");
 #undef p
 }
 


-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to