svn commit: r292394 - head/usr.bin/netstat

George V. Neville-Neil gnn at FreeBSD.org
Thu Dec 17 02:02:11 UTC 2015


Author: gnn
Date: Thu Dec 17 02:02:09 2015
New Revision: 292394
URL: https://svnweb.freebsd.org/changeset/base/292394

Log:
  Switch the IPsec related statistics to using the built in sysctl
  variable set rather than reading from kernel memory.
  This also makes the -z (zero) flag work correctly
  
  MFC after:	1 week
  Sponsored by: Rubicon Communications, LLC (Netgate)
  Differential Revision:	https://reviews.freebsd.org/D4591

Modified:
  head/usr.bin/netstat/ipsec.c
  head/usr.bin/netstat/main.c

Modified: head/usr.bin/netstat/ipsec.c
==============================================================================
--- head/usr.bin/netstat/ipsec.c	Thu Dec 17 01:33:45 2015	(r292393)
+++ head/usr.bin/netstat/ipsec.c	Thu Dec 17 02:02:09 2015	(r292394)
@@ -216,10 +216,17 @@ ipsec_stats(u_long off, const char *name
 {
 	struct ipsecstat ipsecstat;
 
-	if (off == 0)
-		return;
+	if (strcmp(name, "ipsec6") == 0) {
+		if (fetch_stats("net.inet6.ipsec6.ipsecstats", off,&ipsecstat,
+				sizeof(ipsecstat), kread_counters) != 0)
+			return;
+	} else {
+		if (fetch_stats("net.inet.ipsec.ipsecstats", off, &ipsecstat,
+				sizeof(ipsecstat), kread_counters) != 0)
+			return;
+	}
+
 	xo_emit("{T:/%s}:\n", name);
-	kread_counters(off, (char *)&ipsecstat, sizeof(ipsecstat));
 
 	print_ipsecstats(&ipsecstat);
 }
@@ -318,10 +325,11 @@ ah_stats(u_long off, const char *name, i
 {
 	struct ahstat ahstat;
 
-	if (off == 0)
+	if (fetch_stats("net.inet.ah.stats", off, &ahstat,
+	    sizeof(ahstat), kread_counters) != 0)
 		return;
+
 	xo_emit("{T:/%s}:\n", name);
-	kread_counters(off, (char *)&ahstat, sizeof(ahstat));
 
 	print_ahstats(&ahstat);
 }
@@ -377,10 +385,11 @@ esp_stats(u_long off, const char *name, 
 {
 	struct espstat espstat;
 
-	if (off == 0)
+	if (fetch_stats("net.inet.esp.stats", off, &espstat,
+	    sizeof(espstat), kread_counters) != 0)
 		return;
+
 	xo_emit("{T:/%s}:\n", name);
-	kread_counters(off, (char *)&espstat, sizeof(espstat));
 
 	print_espstats(&espstat);
 }
@@ -434,10 +443,11 @@ ipcomp_stats(u_long off, const char *nam
 {
 	struct ipcompstat ipcompstat;
 
-	if (off == 0)
+	if (fetch_stats("net.inet.ipcomp.stats", off, &ipcompstat,
+	    sizeof(ipcompstat), kread_counters) != 0)
 		return;
+
 	xo_emit("{T:/%s}:\n", name);
-	kread_counters(off, (char *)&ipcompstat, sizeof(ipcompstat));
 
 	print_ipcompstats(&ipcompstat);
 }

Modified: head/usr.bin/netstat/main.c
==============================================================================
--- head/usr.bin/netstat/main.c	Thu Dec 17 01:33:45 2015	(r292393)
+++ head/usr.bin/netstat/main.c	Thu Dec 17 02:02:09 2015	(r292394)
@@ -108,13 +108,13 @@ static struct protox {
 	  igmp_stats,	NULL,		"igmp",	1,	IPPROTO_IGMP },
 #ifdef IPSEC
 	{ -1,		N_IPSEC4STAT,	1,	NULL,	/* keep as compat */
-	  ipsec_stats,	NULL,		"ipsec", 0,	0},
+	  ipsec_stats,	NULL,		"ipsec", 1,	0},
 	{ -1,		N_AHSTAT,	1,	NULL,
-	  ah_stats,	NULL,		"ah",	0,	0},
+	  ah_stats,	NULL,		"ah",	1,	0},
 	{ -1,		N_ESPSTAT,	1,	NULL,
-	  esp_stats,	NULL,		"esp",	0,	0},
+	  esp_stats,	NULL,		"esp",	1,	0},
 	{ -1,		N_IPCOMPSTAT,	1,	NULL,
-	  ipcomp_stats,	NULL,		"ipcomp", 0,	0},
+	  ipcomp_stats,	NULL,		"ipcomp", 1,	0},
 #endif
 	{ N_RIPCBINFO,	N_PIMSTAT,	1,	protopr,
 	  pim_stats,	NULL,		"pim",	1,	IPPROTO_PIM },
@@ -146,7 +146,7 @@ static struct protox ip6protox[] = {
 #endif
 #ifdef IPSEC
 	{ -1,		N_IPSEC6STAT,	1,	NULL,
-	  ipsec_stats,	NULL,		"ipsec6", 0,	0 },
+	  ipsec_stats,	NULL,		"ipsec6", 1,	0 },
 #endif
 #ifdef notyet
 	{ -1,		N_PIM6STAT,	1,	NULL,


More information about the svn-src-head mailing list