PERFORCE change 166869 for review
Gabor Pali
pgj at FreeBSD.org
Fri Jul 31 20:24:58 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166869
Change 166869 by pgj at petymeg-current on 2009/07/31 20:24:29
Add support for IP6 statistics.
Affected files ...
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#54 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#51 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_stat.c#21 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#59 edit
Differences ...
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#54 (text+ko) ====
@@ -99,6 +99,10 @@
#define NETSTAT_IPSEC_AH_HIST_MAX 256
#define NETSTAT_IPSEC_IPCOMP_HIST_MAX 256
+/* IP6: */
+#define NETSTAT_IP6_NHIST_MAX 256
+#define NETSTAT_IP6_MBUF_MAX 32
+#define NETSTAT_IP6_IF_MAX 16
/* Enum for TCP states: */
enum tcp_state {
@@ -152,6 +156,7 @@
stat_SCTP,
#endif
#ifdef INET6
+ stat_IP6,
stat_ICMP6,
stat_PIM6,
stat_RIP6,
@@ -207,6 +212,7 @@
struct sctp_stat;
#endif
#ifdef INET6
+struct ip6_stat;
struct icmp6_stat;
struct pim6_stat;
struct rip6_stat;
@@ -785,6 +791,49 @@
#endif /* !SCTP */
#ifdef INET6
+const struct ip6_stat *netstat_get_ip6stats(const struct stat_type *);
+const char *netstat_ip6_nhist_name(int);
+const char *netstat_ip6_srcrule_name(int);
+
+u_int64_t netstat_ip6s_get_total(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_tooshort(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_toosmall(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_fragments(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_fragdropped(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_fragtimeout(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_fragoverflow(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_forward(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_cantforward(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_redirectsent(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_delivered(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_localout(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_odropped(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_reassembled(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_fragmented(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_ofragments(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_cantfrag(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_badoptions(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_noroute(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_badvers(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_rawout(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_badscope(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_notmember(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_nxthist(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_m1(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_m2m(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_mext1(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_mext2m(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_exthdrtoolong(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_nogif(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_toomanyhdr(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_sources_none(const struct ip6_stat *);
+u_int64_t netstat_ip6s_get_sources_sameif(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_sources_otherif(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_sources_samescope(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_sources_otherscope(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_sources_deprecated(const struct ip6_stat *, int);
+u_int64_t netstat_ip6s_get_sources_rule(const struct ip6_stat *, int);
+
const struct icmp6_stat *netstat_get_icmp6stats(const struct stat_type *);
u_int64_t netstat_icmp6s_get_error(const struct icmp6_stat *);
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#51 (text+ko) ====
@@ -55,6 +55,7 @@
#include <netinet/sctp_uio.h>
#endif
#ifdef INET6
+#include <netinet6/ip6_var.h>
#include <netinet/icmp6.h>
#include <netinet6/pim6_var.h>
#include <netinet6/raw_ip6.h>
@@ -348,6 +349,10 @@
#endif
#ifdef INET6
+struct ip6_stat {
+ struct ip6stat s;
+};
+
struct icmp6_stat {
struct icmp6stat s;
};
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_stat.c#21 (text+ko) ====
@@ -77,6 +77,7 @@
{ SCTPSTAT_VERSION, "net.inet.sctp.stats", "_sctpstat" },
#endif
#ifdef INET6
+ { IP6STAT_VERSION, "net.inet6.ip6.stats", "_ip6stat" },
{ ICMP6STAT_VERSION, "net.inet6.icmp6.stats", "_icmp6stat" },
{ PIM6STAT_VERSION, "net.inet6.pim.stats", "_pim6stat" },
{ RIP6STAT_VERSION, "net.inet6.ip6.rip6stats", "_rip6stat" },
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#59 (text+ko) ====
@@ -1692,6 +1692,54 @@
#endif /* !SCTP */
#ifdef INET6
+#define IP6_ACC(field) \
+ STATS_ACCX(u_int64_t,ip6,field,ip6s_##field)
+
+#define IP6_ACCA(field,size) \
+ STATS_ACCXA(u_int64_t,ip6,field,ip6s_##field,size)
+
+STATS_GET(ip6,IP6);
+IP6_ACC(total);
+IP6_ACC(tooshort);
+IP6_ACC(toosmall);
+IP6_ACC(fragments);
+IP6_ACC(fragdropped);
+IP6_ACC(fragtimeout);
+IP6_ACC(fragoverflow);
+IP6_ACC(forward);
+IP6_ACC(cantforward);
+IP6_ACC(redirectsent);
+IP6_ACC(delivered);
+IP6_ACC(localout);
+IP6_ACC(odropped);
+IP6_ACC(reassembled);
+IP6_ACC(fragmented);
+IP6_ACC(ofragments);
+IP6_ACC(cantfrag);
+IP6_ACC(badoptions);
+IP6_ACC(noroute);
+IP6_ACC(badvers);
+IP6_ACC(rawout);
+IP6_ACC(badscope);
+IP6_ACC(notmember);
+IP6_ACCA(nxthist,NETSTAT_IP6_NHIST_MAX);
+IP6_ACC(m1);
+IP6_ACCA(m2m,NETSTAT_IP6_MBUF_MAX);
+IP6_ACC(mext1);
+IP6_ACC(mext2m);
+IP6_ACC(exthdrtoolong);
+IP6_ACC(nogif);
+IP6_ACC(toomanyhdr);
+IP6_ACC(sources_none);
+IP6_ACCA(sources_sameif,NETSTAT_IP6_IF_MAX);
+IP6_ACCA(sources_otherif,NETSTAT_IP6_IF_MAX);
+IP6_ACCA(sources_samescope,NETSTAT_IP6_IF_MAX);
+IP6_ACCA(sources_otherscope,NETSTAT_IP6_IF_MAX);
+IP6_ACCA(sources_deprecated,NETSTAT_IP6_IF_MAX);
+IP6_ACCA(sources_rule,NETSTAT_IP6_IF_MAX);
+#undef IP6_ACC
+#undef IP6_ACCA
+
#define ICMP6_ACC(field) \
STATS_ACCX(u_int64_t,icmp6,field,icp6s_##field)
@@ -2486,6 +2534,301 @@
return (resolve_val2str_name(proto, ipsec_ipcompnames));
}
+static const char *ip6nh[] = {
+ "hop by hop",
+ "ICMP",
+ "IGMP",
+ "#3",
+ "IP",
+ "#5",
+ "TCP",
+ "#7",
+ "#8",
+ "#9",
+ "#10",
+ "#11",
+ "#12",
+ "#13",
+ "#14",
+ "#15",
+ "#16",
+ "UDP",
+ "#18",
+ "#19",
+ "#20",
+ "#21",
+ "IDP",
+ "#23",
+ "#24",
+ "#25",
+ "#26",
+ "#27",
+ "#28",
+ "TP",
+ "#30",
+ "#31",
+ "#32",
+ "#33",
+ "#34",
+ "#35",
+ "#36",
+ "#37",
+ "#38",
+ "#39",
+ "#40",
+ "IP6",
+ "#42",
+ "routing",
+ "fragment",
+ "#45",
+ "#46",
+ "#47",
+ "#48",
+ "#49",
+ "ESP",
+ "AH",
+ "#52",
+ "#53",
+ "#54",
+ "#55",
+ "#56",
+ "#57",
+ "ICMP6",
+ "no next header",
+ "destination option",
+ "#61",
+ "mobility",
+ "#63",
+ "#64",
+ "#65",
+ "#66",
+ "#67",
+ "#68",
+ "#69",
+ "#70",
+ "#71",
+ "#72",
+ "#73",
+ "#74",
+ "#75",
+ "#76",
+ "#77",
+ "#78",
+ "#79",
+ "ISOIP",
+ "#81",
+ "#82",
+ "#83",
+ "#84",
+ "#85",
+ "#86",
+ "#87",
+ "#88",
+ "OSPF",
+ "#80",
+ "#91",
+ "#92",
+ "#93",
+ "#94",
+ "#95",
+ "#96",
+ "Ethernet",
+ "#98",
+ "#99",
+ "#100",
+ "#101",
+ "#102",
+ "PIM",
+ "#104",
+ "#105",
+ "#106",
+ "#107",
+ "#108",
+ "#109",
+ "#110",
+ "#111",
+ "#112",
+ "#113",
+ "#114",
+ "#115",
+ "#116",
+ "#117",
+ "#118",
+ "#119",
+ "#120",
+ "#121",
+ "#122",
+ "#123",
+ "#124",
+ "#125",
+ "#126",
+ "#127",
+ "#128",
+ "#129",
+ "#130",
+ "#131",
+ "#132",
+ "#133",
+ "#134",
+ "#135",
+ "#136",
+ "#137",
+ "#138",
+ "#139",
+ "#140",
+ "#141",
+ "#142",
+ "#143",
+ "#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",
+};
+
+const char *
+netstat_ip6_nhist_name(int i)
+{
+ if (0 <= i && i < SizeOf(ip6nh))
+ return (ip6nh[i]);
+ return (NULL);
+}
+
+static const char *srcrule[] = {
+ "first candidate",
+ "same address",
+ "appropriate scope",
+ "deprecated address",
+ "home address",
+ "outgoing interface",
+ "matching label",
+ "public/temporary address",
+ "alive interface",
+ "preferred interface",
+ "rule #10",
+ "rule #11",
+ "rule #12",
+ "rule #13",
+ "longest match",
+ "rule #15",
+};
+
+
+const char *
+netstat_ip6_srcrule_name(int i)
+{
+ if (0 <= i && i < SizeOf(srcrule))
+ return (srcrule[i]);
+ return (NULL);
+}
+
const char *
routename(in_addr_t in, int numeric)
{
More information about the p4-projects
mailing list