PERFORCE change 166835 for review
Gabor Pali
pgj at FreeBSD.org
Thu Jul 30 20:40:03 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166835
Change 166835 by pgj at petymeg-current on 2009/07/30 20:39:52
Add support for pfkey statistics.
Affected files ...
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/Makefile#16 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#49 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#46 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_stat.c#16 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#54 edit
Differences ...
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/Makefile#16 (text+ko) ====
@@ -21,6 +21,7 @@
WITHOUT_MAN= yes
CFLAGS+=-DSCTP
+CFLAGS+=-DIPSEC
.if ${MK_INET6_SUPPORT} != "no"
CFLAGS+= -DINET6
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#49 (text+ko) ====
@@ -32,6 +32,10 @@
#include <sys/socket.h>
#include <sys/sockbuf.h>
+#ifdef IPSEC
+#include <netipsec/keysock.h>
+#endif
+
#define NETSTAT_MAXCALLER 16
#define SOCKTYPE_MAXNAME 32
@@ -80,6 +84,10 @@
#define NETSTAT_BPF_ASYNC 0x10 /* packet reception should generate signal */
#define NETSTAT_BPF_LOCKED 0x20 /* descriptor is locked */
+/* pfkey: */
+#define NETSTAT_PFKEY_IN_MSGTYPE_MAX 256
+#define NETSTAT_PFKEY_OUT_MSGTYPE_MAX 256
+
/* Enum for TCP states: */
enum tcp_state {
@@ -114,6 +122,12 @@
bpfdir_MAX,
};
+enum pfkey_msgtarget {
+ pfkey_Sendup_One = KEY_SENDUP_ONE,
+ pfkey_Sendup_All = KEY_SENDUP_ALL,
+ pfkey_Sendup_Registered = KEY_SENDUP_REGISTERED,
+};
+
enum stat {
stat_TCP = 0,
stat_UDP,
@@ -136,6 +150,9 @@
stat_SPX,
#endif
stat_pfsync,
+#ifdef IPSEC
+ stat_pfkey,
+#endif
stat_MAX,
stat_Invalid,
};
@@ -184,6 +201,9 @@
struct spx_stat;
#endif
struct pfsync_stat;
+#ifdef IPSEC
+struct pfkey_stat;
+#endif
__BEGIN_DECLS
const char *netstat_strerror(int);
@@ -900,4 +920,29 @@
u_int64_t netstat_pfsyncs_get_opackets6(const struct pfsync_stat *);
u_int64_t netstat_pfsyncs_get_onomem(const struct pfsync_stat *);
u_int64_t netstat_pfsyncs_get_oerrors(const struct pfsync_stat *);
+
+#ifdef IPSEC
+const struct pfkey_stat *netstat_get_pfkeystats(const struct stat_type *);
+const char *netstat_pfkey_msgtype_name(int);
+
+u_int64_t netstat_pfkeys_get_out_total(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_bytes(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_msgtype(const struct pfkey_stat *, int);
+u_int64_t netstat_pfkeys_get_out_invlen(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_invver(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_invmsgtype(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_tooshort(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_nomem(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_dupext(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_invexttype(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_invsatype(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_out_invaddr(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_in_total(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_in_bytes(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_in_msgtype(const struct pfkey_stat *, int);
+u_int64_t netstat_pfkeys_get_in_msgtarget(const struct pfkey_stat *,
+ enum pfkey_msgtarget);
+u_int64_t netstat_pfkeys_get_in_nomem(const struct pfkey_stat *);
+u_int64_t netstat_pfkeys_get_sockerr(const struct pfkey_stat *);
+#endif /* !IPSEC */
#endif /* !_NETSTAT_H_ */
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#46 (text+ko) ====
@@ -65,6 +65,9 @@
#endif
#include <net/pfvar.h>
#include <net/if_pfsync.h>
+#ifdef IPSEC
+#include <netipsec/keysock.h>
+#endif
#include "netstat.h"
@@ -368,6 +371,12 @@
struct pfsyncstats s;
};
+#ifdef IPSEC
+struct pfkey_stat {
+ struct pfkeystat s;
+};
+#endif
+
/* Timestamp type. */
struct timestamp_type {
u_int32_t ts_sec;
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_stat.c#16 (text+ko) ====
@@ -86,6 +86,9 @@
{ SPXSTAT_VERSION, "net.ipx.spx.stats", "_spx_istat" },
#endif
{ PFSYNCSTAT_VERSION, "net.inet.pfsync.stats", "_pfsyncstats" },
+#ifdef IPSEC
+ { PFKEYSTAT_VERSION, "net.key.stats", "_pfkeystat" },
+#endif
};
int
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#54 (text+ko) ====
@@ -1256,6 +1256,12 @@
return (0); \
}
+#define STATS_ACCXE(returns, stats, f1, f2, enty) \
+returns \
+netstat_##stats##s_get_##f1(const struct stats##_stat *a, enum enty i) \
+{ \
+ return (a->s.f2[i]); \
+}
#define TCP_ACC(field) \
@@ -1865,6 +1871,39 @@
PFSYNC_ACC(oerrors);
#undef PFSYNC_ACC
+#ifdef IPSEC
+#define PFKEY_ACC(field) \
+ STATS_ACCX(u_int64_t,pfkey,field,field)
+
+#define PFKEY_ACCA(field,size) \
+ STATS_ACCXA(u_int64_t,pfkey,field,field,size)
+
+#define PFKEY_ACCE(field,size) \
+ STATS_ACCXE(u_int64_t,pfkey,field,field,pfkey_msgtarget)
+
+STATS_GET(pfkey,pfkey);
+PFKEY_ACC(out_total);
+PFKEY_ACC(out_bytes);
+PFKEY_ACCA(out_msgtype,256);
+PFKEY_ACC(out_invlen);
+PFKEY_ACC(out_invver);
+PFKEY_ACC(out_invmsgtype);
+PFKEY_ACC(out_tooshort);
+PFKEY_ACC(out_nomem);
+PFKEY_ACC(out_dupext);
+PFKEY_ACC(out_invexttype);
+PFKEY_ACC(out_invsatype);
+PFKEY_ACC(out_invaddr);
+PFKEY_ACC(in_total);
+PFKEY_ACC(in_bytes);
+PFKEY_ACCA(in_msgtype,256);
+PFKEY_ACCE(in_msgtarget,pfkey_msgtarget);
+PFKEY_ACC(in_nomem);
+PFKEY_ACC(sockerr);
+#undef PFKEY_ACC
+#undef PFKEY_ACCA
+#endif /* !IPSEC */
+
static const char *icmpnames[ICMP_MAXTYPE + 1] = {
"echo reply", /* RFC 792 */
"#1",
@@ -2189,6 +2228,25 @@
return (NULL);
}
+static const char *pfkey_msgtypenames[] = {
+ "reserved", "getspi", "update", "add", "delete",
+ "get", "acquire", "register", "expire", "flush",
+ "dump", "x_promisc", "x_pchange", "x_spdupdate", "x_spdadd",
+ "x_spddelete", "x_spdget", "x_spdacquire", "x_spddump", "x_spdflush",
+ "x_spdsetidx", "x_spdexpire", "x_spddelete2"
+};
+
+const char *
+netstat_pfkey_msgtype_name(int x)
+{
+ static char buf[20];
+
+ if (x < SizeOf(pfkey_msgtypenames) && pfkey_msgtypenames[x])
+ return pfkey_msgtypenames[x];
+ snprintf(buf, sizeof(buf), "#%d", x);
+ return buf;
+}
+
const char *
routename(in_addr_t in, int numeric)
{
More information about the p4-projects
mailing list