PERFORCE change 166801 for review

Gabor Pali pgj at FreeBSD.org
Thu Jul 30 16:31:24 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=166801

Change 166801 by pgj at petymeg-current on 2009/07/30 16:31:15

	Make netstat(1) to use libnetstat(3) for displaying statistics
	on ICMP6.

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#20 edit
.. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet6.c#3 edit
.. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#28 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#20 (text+ko) ====

@@ -96,7 +96,7 @@
 #ifdef INET6
 void	ip6_stats(u_long, const char *, int, int);
 void	ip6_ifstats(char *);
-void	icmp6_stats(u_long, const char *, int, int);
+void	icmp6_stats(const struct stat_type *);
 void	icmp6_ifstats(char *);
 void	pim6_stats(u_long, const char *, int, int);
 void	rip6_stats(u_long, const char *, int, int);

==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet6.c#3 (text+ko) ====

@@ -72,6 +72,7 @@
 #include <errno.h>
 #include <string.h>
 #include <unistd.h>
+#include <netstat.h>
 #include "extern.h"
 
 struct	socket sockb;
@@ -579,349 +580,72 @@
 #undef p_5
 }
 
-static	const char *icmp6names[] = {
-	"#0",
-	"unreach",
-	"packet too big",
-	"time exceed",
-	"parameter problem",
-	"#5",
-	"#6",
-	"#7",
-	"#8",
-	"#9",
-	"#10",
-	"#11",
-	"#12",
-	"#13",
-	"#14",
-	"#15",
-	"#16",
-	"#17",
-	"#18",
-	"#19",
-	"#20",
-	"#21",
-	"#22",
-	"#23",
-	"#24",
-	"#25",
-	"#26",
-	"#27",
-	"#28",
-	"#29",
-	"#30",
-	"#31",
-	"#32",
-	"#33",
-	"#34",
-	"#35",
-	"#36",
-	"#37",
-	"#38",
-	"#39",
-	"#40",
-	"#41",
-	"#42",
-	"#43",
-	"#44",
-	"#45",
-	"#46",
-	"#47",
-	"#48",
-	"#49",
-	"#50",
-	"#51",
-	"#52",
-	"#53",
-	"#54",
-	"#55",
-	"#56",
-	"#57",
-	"#58",
-	"#59",
-	"#60",
-	"#61",
-	"#62",
-	"#63",
-	"#64",
-	"#65",
-	"#66",
-	"#67",
-	"#68",
-	"#69",
-	"#70",
-	"#71",
-	"#72",
-	"#73",
-	"#74",
-	"#75",
-	"#76",
-	"#77",
-	"#78",
-	"#79",
-	"#80",
-	"#81",
-	"#82",
-	"#83",
-	"#84",
-	"#85",
-	"#86",
-	"#87",
-	"#88",
-	"#89",
-	"#80",
-	"#91",
-	"#92",
-	"#93",
-	"#94",
-	"#95",
-	"#96",
-	"#97",
-	"#98",
-	"#99",
-	"#100",
-	"#101",
-	"#102",
-	"#103",
-	"#104",
-	"#105",
-	"#106",
-	"#107",
-	"#108",
-	"#109",
-	"#110",
-	"#111",
-	"#112",
-	"#113",
-	"#114",
-	"#115",
-	"#116",
-	"#117",
-	"#118",
-	"#119",
-	"#120",
-	"#121",
-	"#122",
-	"#123",
-	"#124",
-	"#125",
-	"#126",
-	"#127",
-	"echo",
-	"echo reply",
-	"multicast listener query",
-	"MLDv1 listener report",
-	"MLDv1 listener done",
-	"router solicitation",
-	"router advertisement",
-	"neighbor solicitation",
-	"neighbor advertisement",
-	"redirect",
-	"router renumbering",
-	"node information request",
-	"node information reply",
-	"inverse neighbor solicitation",
-	"inverse neighbor advertisement",
-	"MLDv2 listener report",
-	"#144",
-	"#145",
-	"#146",
-	"#147",
-	"#148",
-	"#149",
-	"#150",
-	"#151",
-	"#152",
-	"#153",
-	"#154",
-	"#155",
-	"#156",
-	"#157",
-	"#158",
-	"#159",
-	"#160",
-	"#161",
-	"#162",
-	"#163",
-	"#164",
-	"#165",
-	"#166",
-	"#167",
-	"#168",
-	"#169",
-	"#170",
-	"#171",
-	"#172",
-	"#173",
-	"#174",
-	"#175",
-	"#176",
-	"#177",
-	"#178",
-	"#179",
-	"#180",
-	"#181",
-	"#182",
-	"#183",
-	"#184",
-	"#185",
-	"#186",
-	"#187",
-	"#188",
-	"#189",
-	"#180",
-	"#191",
-	"#192",
-	"#193",
-	"#194",
-	"#195",
-	"#196",
-	"#197",
-	"#198",
-	"#199",
-	"#200",
-	"#201",
-	"#202",
-	"#203",
-	"#204",
-	"#205",
-	"#206",
-	"#207",
-	"#208",
-	"#209",
-	"#210",
-	"#211",
-	"#212",
-	"#213",
-	"#214",
-	"#215",
-	"#216",
-	"#217",
-	"#218",
-	"#219",
-	"#220",
-	"#221",
-	"#222",
-	"#223",
-	"#224",
-	"#225",
-	"#226",
-	"#227",
-	"#228",
-	"#229",
-	"#230",
-	"#231",
-	"#232",
-	"#233",
-	"#234",
-	"#235",
-	"#236",
-	"#237",
-	"#238",
-	"#239",
-	"#240",
-	"#241",
-	"#242",
-	"#243",
-	"#244",
-	"#245",
-	"#246",
-	"#247",
-	"#248",
-	"#249",
-	"#250",
-	"#251",
-	"#252",
-	"#253",
-	"#254",
-	"#255",
-};
 
 /*
  * Dump ICMP6 statistics.
  */
 void
-icmp6_stats(u_long off, const char *name, int af1 __unused, int proto __unused)
+icmp6_stats(const struct stat_type *sttp)
 {
-	struct icmp6stat icmp6stat;
+	const struct icmp6_stat *s;
 	int i, first;
-	size_t len;
 
-	len = sizeof icmp6stat;
-	if (live) {
-		memset(&icmp6stat, 0, len);
-		if (sysctlbyname("net.inet6.icmp6.stats", &icmp6stat, &len,
-		    NULL, 0) < 0) {
-			if (errno != ENOENT)
-				warn("sysctl: net.inet6.icmp6.stats");
-			return;
-		}
-	} else
-		kread(off, &icmp6stat, len);
-
-	printf("%s:\n", name);
-
-#define	p(f, m) if (icmp6stat.f || sflag <= 1) \
-    printf(m, (uintmax_t)icmp6stat.f, plural(icmp6stat.f))
-#define	p_5(f, m) if (icmp6stat.f || sflag <= 1) \
-    printf(m, (uintmax_t)icmp6stat.f)
-
-	p(icp6s_error, "\t%ju call%s to icmp6_error\n");
-	p(icp6s_canterror,
+	s = netstat_get_icmp6stats(sttp);
+#define	p(f, m) if (netstat_icmp6s_get_##f(s) || sflag <= 1) \
+    printf(m, netstat_icmp6s_get_##f(s), plural(netstat_icmp6s_get_##f(s)))
+#define	p_5(f, m) if (netstat_icmp6s_get_##f(s) || sflag <= 1) \
+    printf(m, netstat_icmp6s_get_##f(s))
+	p(error, "\t%ju call%s to icmp6_error\n");
+	p(canterror,
 	    "\t%ju error%s not generated in response to an icmp6 message\n");
-	p(icp6s_toofreq,
+	p(toofreq,
 	  "\t%ju error%s not generated because of rate limitation\n");
-#define	NELEM (int)(sizeof(icmp6stat.icp6s_outhist)/sizeof(icmp6stat.icp6s_outhist[0]))
-	for (first = 1, i = 0; i < NELEM; i++)
-		if (icmp6stat.icp6s_outhist[i] != 0) {
+	for (first = 1, i = 0; i < 256; i++)
+		if (netstat_icmp6s_get_outhist(s, i) != 0) {
 			if (first) {
 				printf("\tOutput histogram:\n");
 				first = 0;
 			}
-			printf("\t\t%s: %ju\n", icmp6names[i],
-			    (uintmax_t)icmp6stat.icp6s_outhist[i]);
+			printf("\t\t%s: %ju\n", netstat_icmp6name(i),
+			    netstat_icmp6s_get_outhist(s, i));
 		}
-#undef NELEM
-	p(icp6s_badcode, "\t%ju message%s with bad code fields\n");
-	p(icp6s_tooshort, "\t%ju message%s < minimum length\n");
-	p(icp6s_checksum, "\t%ju bad checksum%s\n");
-	p(icp6s_badlen, "\t%ju message%s with bad length\n");
-#define	NELEM (int)(sizeof(icmp6stat.icp6s_inhist)/sizeof(icmp6stat.icp6s_inhist[0]))
-	for (first = 1, i = 0; i < NELEM; i++)
-		if (icmp6stat.icp6s_inhist[i] != 0) {
+	p(badcode, "\t%ju message%s with bad code fields\n");
+	p(tooshort, "\t%ju message%s < minimum length\n");
+	p(checksum, "\t%ju bad checksum%s\n");
+	p(badlen, "\t%ju message%s with bad length\n");
+	for (first = 1, i = 0; i < 256; i++)
+		if (netstat_icmp6s_get_inhist(s, i) != 0) {
 			if (first) {
 				printf("\tInput histogram:\n");
 				first = 0;
 			}
-			printf("\t\t%s: %ju\n", icmp6names[i],
-			    (uintmax_t)icmp6stat.icp6s_inhist[i]);
+			printf("\t\t%s: %ju\n", netstat_icmp6name(i),
+			    netstat_icmp6s_get_inhist(s, i));
 		}
-#undef NELEM
 	printf("\tHistogram of error messages to be generated:\n");
-	p_5(icp6s_odst_unreach_noroute, "\t\t%ju no route\n");
-	p_5(icp6s_odst_unreach_admin, "\t\t%ju administratively prohibited\n");
-	p_5(icp6s_odst_unreach_beyondscope, "\t\t%ju beyond scope\n");
-	p_5(icp6s_odst_unreach_addr, "\t\t%ju address unreachable\n");
-	p_5(icp6s_odst_unreach_noport, "\t\t%ju port unreachable\n");
-	p_5(icp6s_opacket_too_big, "\t\t%ju packet too big\n");
-	p_5(icp6s_otime_exceed_transit, "\t\t%ju time exceed transit\n");
-	p_5(icp6s_otime_exceed_reassembly, "\t\t%ju time exceed reassembly\n");
-	p_5(icp6s_oparamprob_header, "\t\t%ju erroneous header field\n");
-	p_5(icp6s_oparamprob_nextheader, "\t\t%ju unrecognized next header\n");
-	p_5(icp6s_oparamprob_option, "\t\t%ju unrecognized option\n");
-	p_5(icp6s_oredirect, "\t\t%ju redirect\n");
-	p_5(icp6s_ounknown, "\t\t%ju unknown\n");
+	p_5(odst_unreach_noroute, "\t\t%ju no route\n");
+	p_5(odst_unreach_admin, "\t\t%ju administratively prohibited\n");
+	p_5(odst_unreach_beyondscope, "\t\t%ju beyond scope\n");
+	p_5(odst_unreach_addr, "\t\t%ju address unreachable\n");
+	p_5(odst_unreach_noport, "\t\t%ju port unreachable\n");
+	p_5(opacket_too_big, "\t\t%ju packet too big\n");
+	p_5(otime_exceed_transit, "\t\t%ju time exceed transit\n");
+	p_5(otime_exceed_reassembly, "\t\t%ju time exceed reassembly\n");
+	p_5(oparamprob_header, "\t\t%ju erroneous header field\n");
+	p_5(oparamprob_nextheader, "\t\t%ju unrecognized next header\n");
+	p_5(oparamprob_option, "\t\t%ju unrecognized option\n");
+	p_5(oredirect, "\t\t%ju redirect\n");
+	p_5(ounknown, "\t\t%ju unknown\n");
 
-	p(icp6s_reflect, "\t%ju message response%s generated\n");
-	p(icp6s_nd_toomanyopt, "\t%ju message%s with too many ND options\n");
-	p(icp6s_nd_badopt, "\t%ju message%s with bad ND options\n");
-	p(icp6s_badns, "\t%ju bad neighbor solicitation message%s\n");
-	p(icp6s_badna, "\t%ju bad neighbor advertisement message%s\n");
-	p(icp6s_badrs, "\t%ju bad router solicitation message%s\n");
-	p(icp6s_badra, "\t%ju bad router advertisement message%s\n");
-	p(icp6s_badredirect, "\t%ju bad redirect message%s\n");
-	p(icp6s_pmtuchg, "\t%ju path MTU change%s\n");
+	p(reflect, "\t%ju message response%s generated\n");
+	p(nd_toomanyopt, "\t%ju message%s with too many ND options\n");
+	p(nd_badopt, "\t%ju message%s with bad ND options\n");
+	p(badns, "\t%ju bad neighbor solicitation message%s\n");
+	p(badna, "\t%ju bad neighbor advertisement message%s\n");
+	p(badrs, "\t%ju bad router solicitation message%s\n");
+	p(badra, "\t%ju bad router advertisement message%s\n");
+	p(badredirect, "\t%ju bad redirect message%s\n");
+	p(pmtuchg, "\t%ju path MTU change%s\n");
 #undef p
 #undef p_5
 }

==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#28 (text+ko) ====

@@ -99,35 +99,33 @@
 	{ .n_name = "_ngsocklist"},
 #define	N_IP6STAT	10
 	{ .n_name = "_ip6stat" },
-#define	N_ICMP6STAT	11
-	{ .n_name = "_icmp6stat" },
-#define	N_IPSECSTAT	12
+#define	N_IPSECSTAT	11
 	{ .n_name = "_ipsec4stat" },
-#define	N_IPSEC6STAT	13
+#define	N_IPSEC6STAT	12
 	{ .n_name = "_ipsec6stat" },
-#define	N_PIM6STAT	14
+#define	N_PIM6STAT	13
 	{ .n_name = "_pim6stat" },
-#define	N_MRT6STAT	15
+#define	N_MRT6STAT	14
 	{ .n_name = "_mrt6stat" },
-#define	N_MF6CTABLE	16
+#define	N_MF6CTABLE	15
 	{ .n_name = "_mf6ctable" },
-#define	N_MIF6TABLE	17
+#define	N_MIF6TABLE	16
 	{ .n_name = "_mif6table" },
-#define	N_PFKEYSTAT	18
+#define	N_PFKEYSTAT	17
 	{ .n_name = "_pfkeystat" },
-#define	N_RTTRASH	19
+#define	N_RTTRASH	18
 	{ .n_name = "_rttrash" },
-#define	N_PFSYNCSTAT	20
+#define	N_PFSYNCSTAT	19
 	{ .n_name = "_pfsyncstats" },
-#define	N_AHSTAT	21
+#define	N_AHSTAT	20
 	{ .n_name = "_ahstat" },
-#define	N_ESPSTAT	22
+#define	N_ESPSTAT	21
 	{ .n_name = "_espstat" },
-#define	N_IPCOMPSTAT	23
+#define	N_IPCOMPSTAT	22
 	{ .n_name = "_ipcompstat" },
-#define	N_RIP6STAT	24
+#define	N_RIP6STAT	23
 	{ .n_name = "_rip6stat" },
-#define	N_MFCTABLESIZE	25
+#define	N_MFCTABLESIZE	24
 	{ .n_name = "_mfctablesize" },
 	{ .n_name = NULL },
 };
@@ -191,8 +189,8 @@
 	  NULL,		NULL,		"udp",	1,	IPPROTO_UDP },
 	{ 0,		N_IP6STAT,	1,	NULL,	NULL, stat_MAX,
 	  ip6_stats,	ip6_ifstats,	"ip6",	1,	IPPROTO_RAW },
-	{ 0,		N_ICMP6STAT,	1,	NULL,	NULL, stat_MAX,
-	  icmp6_stats,	icmp6_ifstats,	"icmp6", 1,	IPPROTO_ICMPV6 },
+	{ 0,		0,		1,	NULL,	icmp6_stats, stat_ICMP6,
+	  NULL,		icmp6_ifstats,	"icmp6", 1,	IPPROTO_ICMPV6 },
 #ifdef IPSEC
 	{ -1,		N_IPSEC6STAT,	1,	NULL,	NULL, stat_MAX,
 	  ipsec_stats,	NULL,		"ipsec6", 0,	0 },


More information about the p4-projects mailing list