xref: /minix3/usr.bin/netstat/pfsync.c (revision 66dfcc8533c70ea68511edc95c03189c8eb0a7a2)
1*66dfcc85SDavid van Moolenbroek /*	$NetBSD: pfsync.c,v 1.1 2011/03/01 19:01:59 dyoung Exp $	*/
2*66dfcc85SDavid van Moolenbroek 
3*66dfcc85SDavid van Moolenbroek /*
4*66dfcc85SDavid van Moolenbroek  * Copyright (c) 1983, 1988, 1993
5*66dfcc85SDavid van Moolenbroek  *	The Regents of the University of California.  All rights reserved.
6*66dfcc85SDavid van Moolenbroek  *
7*66dfcc85SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
8*66dfcc85SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
9*66dfcc85SDavid van Moolenbroek  * are met:
10*66dfcc85SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
11*66dfcc85SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
12*66dfcc85SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
13*66dfcc85SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
14*66dfcc85SDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
15*66dfcc85SDavid van Moolenbroek  * 3. Neither the name of the University nor the names of its contributors
16*66dfcc85SDavid van Moolenbroek  *    may be used to endorse or promote products derived from this software
17*66dfcc85SDavid van Moolenbroek  *    without specific prior written permission.
18*66dfcc85SDavid van Moolenbroek  *
19*66dfcc85SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20*66dfcc85SDavid van Moolenbroek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*66dfcc85SDavid van Moolenbroek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*66dfcc85SDavid van Moolenbroek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23*66dfcc85SDavid van Moolenbroek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24*66dfcc85SDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25*66dfcc85SDavid van Moolenbroek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26*66dfcc85SDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27*66dfcc85SDavid van Moolenbroek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28*66dfcc85SDavid van Moolenbroek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29*66dfcc85SDavid van Moolenbroek  * SUCH DAMAGE.
30*66dfcc85SDavid van Moolenbroek  */
31*66dfcc85SDavid van Moolenbroek 
32*66dfcc85SDavid van Moolenbroek #include <sys/cdefs.h>
33*66dfcc85SDavid van Moolenbroek #ifndef lint
34*66dfcc85SDavid van Moolenbroek __RCSID("$NetBSD: pfsync.c,v 1.1 2011/03/01 19:01:59 dyoung Exp $");
35*66dfcc85SDavid van Moolenbroek #endif /* not lint */
36*66dfcc85SDavid van Moolenbroek 
37*66dfcc85SDavid van Moolenbroek #define	_CALLOUT_PRIVATE	/* for defs in sys/callout.h */
38*66dfcc85SDavid van Moolenbroek 
39*66dfcc85SDavid van Moolenbroek #include <sys/param.h>
40*66dfcc85SDavid van Moolenbroek #include <sys/queue.h>
41*66dfcc85SDavid van Moolenbroek #include <sys/socket.h>
42*66dfcc85SDavid van Moolenbroek #include <sys/socketvar.h>
43*66dfcc85SDavid van Moolenbroek #include <sys/mbuf.h>
44*66dfcc85SDavid van Moolenbroek #include <sys/protosw.h>
45*66dfcc85SDavid van Moolenbroek #include <sys/sysctl.h>
46*66dfcc85SDavid van Moolenbroek 
47*66dfcc85SDavid van Moolenbroek #include <net/if_arp.h>
48*66dfcc85SDavid van Moolenbroek #include <net/route.h>
49*66dfcc85SDavid van Moolenbroek #include <netinet/in.h>
50*66dfcc85SDavid van Moolenbroek #include <netinet/in_systm.h>
51*66dfcc85SDavid van Moolenbroek #include <netinet/ip.h>
52*66dfcc85SDavid van Moolenbroek #include <netinet/in_pcb.h>
53*66dfcc85SDavid van Moolenbroek #include <netinet/ip_icmp.h>
54*66dfcc85SDavid van Moolenbroek 
55*66dfcc85SDavid van Moolenbroek #ifdef INET6
56*66dfcc85SDavid van Moolenbroek #include <netinet/ip6.h>
57*66dfcc85SDavid van Moolenbroek #endif
58*66dfcc85SDavid van Moolenbroek 
59*66dfcc85SDavid van Moolenbroek #include <net/pfvar.h>
60*66dfcc85SDavid van Moolenbroek #include <net/if_pfsync.h>
61*66dfcc85SDavid van Moolenbroek 
62*66dfcc85SDavid van Moolenbroek #include <arpa/inet.h>
63*66dfcc85SDavid van Moolenbroek #include <kvm.h>
64*66dfcc85SDavid van Moolenbroek #include <netdb.h>
65*66dfcc85SDavid van Moolenbroek #include <stdio.h>
66*66dfcc85SDavid van Moolenbroek #include <string.h>
67*66dfcc85SDavid van Moolenbroek #include <unistd.h>
68*66dfcc85SDavid van Moolenbroek #include <stdlib.h>
69*66dfcc85SDavid van Moolenbroek #include <err.h>
70*66dfcc85SDavid van Moolenbroek #include "netstat.h"
71*66dfcc85SDavid van Moolenbroek #include "prog_ops.h"
72*66dfcc85SDavid van Moolenbroek 
73*66dfcc85SDavid van Moolenbroek /*
74*66dfcc85SDavid van Moolenbroek  * Dump PFSYNC statistics structure.
75*66dfcc85SDavid van Moolenbroek  */
76*66dfcc85SDavid van Moolenbroek void
pfsync_stats(u_long off,const char * name)77*66dfcc85SDavid van Moolenbroek pfsync_stats(u_long off, const char *name)
78*66dfcc85SDavid van Moolenbroek {
79*66dfcc85SDavid van Moolenbroek 	uint64_t pfsyncstat[PFSYNC_NSTATS];
80*66dfcc85SDavid van Moolenbroek 
81*66dfcc85SDavid van Moolenbroek 	if (use_sysctl) {
82*66dfcc85SDavid van Moolenbroek 		size_t size = sizeof(pfsyncstat);
83*66dfcc85SDavid van Moolenbroek 
84*66dfcc85SDavid van Moolenbroek 		if (sysctlbyname("net.inet.pfsync.stats", pfsyncstat, &size,
85*66dfcc85SDavid van Moolenbroek 				 NULL, 0) == -1)
86*66dfcc85SDavid van Moolenbroek 			return;
87*66dfcc85SDavid van Moolenbroek 	} else {
88*66dfcc85SDavid van Moolenbroek 		warnx("%s stats not available via KVM.", name);
89*66dfcc85SDavid van Moolenbroek 		return;
90*66dfcc85SDavid van Moolenbroek 	}
91*66dfcc85SDavid van Moolenbroek 
92*66dfcc85SDavid van Moolenbroek 	printf("%s:\n", name);
93*66dfcc85SDavid van Moolenbroek 
94*66dfcc85SDavid van Moolenbroek #define p(f, m) if (pfsyncstat[f] || sflag <= 1) \
95*66dfcc85SDavid van Moolenbroek 	printf(m, pfsyncstat[f], plural(pfsyncstat[f]))
96*66dfcc85SDavid van Moolenbroek #define p2(f, m) if (pfsyncstat[f] || sflag <= 1) \
97*66dfcc85SDavid van Moolenbroek 	printf(m, pfsyncstat[f])
98*66dfcc85SDavid van Moolenbroek 
99*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_IPACKETS, "\t%" PRIu64 " packet%s received (IPv4)\n");
100*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_IPACKETS6,"\t%" PRIu64 " packet%s received (IPv6)\n");
101*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADIF, "\t\t%" PRIu64 " packet%s discarded for bad interface\n");
102*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADTTL, "\t\t%" PRIu64 " packet%s discarded for bad ttl\n");
103*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_HDROPS, "\t\t%" PRIu64 " packet%s shorter than header\n");
104*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADVER, "\t\t%" PRIu64 " packet%s discarded for bad version\n");
105*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADAUTH, "\t\t%" PRIu64 " packet%s discarded for bad HMAC\n");
106*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADACT,"\t\t%" PRIu64 " packet%s discarded for bad action\n");
107*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADLEN, "\t\t%" PRIu64 " packet%s discarded for short packet\n");
108*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADVAL, "\t\t%" PRIu64 " state%s discarded for bad values\n");
109*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_STALE, "\t\t%" PRIu64 " stale state%s\n");
110*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_BADSTATE, "\t\t%" PRIu64 " failed state lookup/insert%s\n");
111*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_OPACKETS, "\t%" PRIu64 " packet%s sent (IPv4)\n");
112*66dfcc85SDavid van Moolenbroek 	p(PFSYNC_STAT_OPACKETS6, "\t%" PRIu64 " packet%s sent (IPv6)\n");
113*66dfcc85SDavid van Moolenbroek 	p2(PFSYNC_STAT_ONOMEM, "\t\t%" PRIu64 " send failed due to mbuf memory error\n");
114*66dfcc85SDavid van Moolenbroek 	p2(PFSYNC_STAT_OERRORS, "\t\t%" PRIu64 " send error\n");
115*66dfcc85SDavid van Moolenbroek #undef p
116*66dfcc85SDavid van Moolenbroek #undef p2
117*66dfcc85SDavid van Moolenbroek }
118*66dfcc85SDavid van Moolenbroek 
119*66dfcc85SDavid van Moolenbroek 
120