Module Name:    src
Committed By:   martin
Date:           Mon Sep 12 14:29:20 UTC 2022

Modified Files:
        src/usr.bin/netstat [netbsd-8]: atalk.c bpf.c fast_ipsec.c if.c inet.c
            inet6.c main.c mbuf.c mroute.c mroute6.c netstat.1 netstat.h
            pfkey.c pfsync.c route.c unix.c vtw.c

Log Message:
Pull up the following, requested by msaitoh in ticket #1762:

        usr.bin/netstat/atalk.c         1.18,1.20-1.21
        usr.bin/netstat/bpf.c           1.16 via patch
        usr.bin/netstat/fast_ipsec.c    1.24 via patch
        usr.bin/netstat/if.c            1.97-1.99,1.101-1.104 via patch
        usr.bin/netstat/inet.c          1.111,1.115-1.116 via patch
        usr.bin/netstat/inet6.c         1.70,1.74-1.75,1.80-1.81 via patch
        usr.bin/netstat/main.c          1.100,1.102-1.103
        usr.bin/netstat/mbuf.c          1.34-1.35
        usr.bin/netstat/mroute.c        1.26-1.27
        usr.bin/netstat/mroute6.c       1.16
        usr.bin/netstat/netstat.h       1.52-1.53
        usr.bin/netstat/pfkey.c         1.4-1.5 via patch
        usr.bin/netstat/pfsync.c        1.4-1.5 via patch
        usr.bin/netstat/route.c         1.87-1.88
        usr.bin/netstat/unix.c          1.36-1.37
        usr.bin/netstat/vtw.c           1.11,1.13

- Add names of a few more ICMPv6 messages.
  Also make the array be explicitly 256 entries long.
- sprintf() -> snprintf(), and adjust a buffer size to avoid any
  potential for overflow.
- Add missing {IP,IP6}_STAT_NOIPSEC to netstat.
- Don't show any of the completely and utterly undocumented VTW info
  if the feature isn't enabled.
- Print oqdrops correctly.
- netstat.1: Add various xrefs present in the body to "See Also".
- Limit maximum owner name to appease gcc.
- KNF. Style fixes.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.16.8.1 src/usr.bin/netstat/atalk.c
cvs rdiff -u -r1.11 -r1.11.22.1 src/usr.bin/netstat/bpf.c
cvs rdiff -u -r1.21.4.1 -r1.21.4.2 src/usr.bin/netstat/fast_ipsec.c
cvs rdiff -u -r1.94.4.1 -r1.94.4.2 src/usr.bin/netstat/if.c
cvs rdiff -u -r1.107 -r1.107.6.1 src/usr.bin/netstat/inet.c
cvs rdiff -u -r1.69 -r1.69.6.1 src/usr.bin/netstat/inet6.c
cvs rdiff -u -r1.99 -r1.99.8.1 src/usr.bin/netstat/main.c
cvs rdiff -u -r1.33 -r1.33.8.1 src/usr.bin/netstat/mbuf.c
cvs rdiff -u -r1.25 -r1.25.8.1 src/usr.bin/netstat/mroute.c
cvs rdiff -u -r1.15 -r1.15.8.1 src/usr.bin/netstat/mroute6.c
cvs rdiff -u -r1.73 -r1.73.8.1 src/usr.bin/netstat/netstat.1
cvs rdiff -u -r1.51 -r1.51.8.1 src/usr.bin/netstat/netstat.h
cvs rdiff -u -r1.1 -r1.1.34.1 src/usr.bin/netstat/pfkey.c
cvs rdiff -u -r1.1 -r1.1.38.1 src/usr.bin/netstat/pfsync.c
cvs rdiff -u -r1.85 -r1.85.8.1 src/usr.bin/netstat/route.c
cvs rdiff -u -r1.35 -r1.35.6.1 src/usr.bin/netstat/unix.c
cvs rdiff -u -r1.9 -r1.9.8.1 src/usr.bin/netstat/vtw.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/netstat/atalk.c
diff -u src/usr.bin/netstat/atalk.c:1.16 src/usr.bin/netstat/atalk.c:1.16.8.1
--- src/usr.bin/netstat/atalk.c:1.16	Sat Jun  6 13:08:31 2015
+++ src/usr.bin/netstat/atalk.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: atalk.c,v 1.16 2015/06/06 13:08:31 joerg Exp $	*/
+/*	$NetBSD: atalk.c,v 1.16.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from @(#)atalk.c	1.1 (Whistle) 6/6/96";
 #else
-__RCSID("$NetBSD: atalk.c,v 1.16 2015/06/06 13:08:31 joerg Exp $");
+__RCSID("$NetBSD: atalk.c,v 1.16.8.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -62,9 +62,6 @@ __RCSID("$NetBSD: atalk.c,v 1.16 2015/06
 #include <string.h>
 #include "netstat.h"
 
-struct ddpcb    ddpcb;
-struct socket   sockb;
-
 static int first = 1;
 
 /*
@@ -84,11 +81,12 @@ at_pr_net(const struct sockaddr_at *sat,
 		case 0xffff:
 			return "????";
 		case ATADDR_ANYNET:
-			return ("*");
+			return "*";
 		}
 	}
-	(void)snprintf(mybuf, sizeof(mybuf), "%hu", ntohs(sat->sat_addr.s_net));
-	return (mybuf);
+	(void)snprintf(mybuf, sizeof(mybuf), "%hu",
+	    ntohs(sat->sat_addr.s_net));
+	return mybuf;
 }
 
 static const char *
@@ -101,12 +99,12 @@ at_pr_host(const struct sockaddr_at *sat
 		case ATADDR_BCAST:
 			return "bcast";
 		case ATADDR_ANYNODE:
-			return ("*");
+			return "*";
 		}
 	}
-	(void)snprintf(mybuf, sizeof(mybuf), "%d", 
+	(void)snprintf(mybuf, sizeof(mybuf), "%d",
 	    (unsigned int)sat->sat_addr.s_node);
-	return (mybuf);
+	return mybuf;
 }
 
 static const char *
@@ -116,13 +114,13 @@ at_pr_port(const struct sockaddr_at *sat
 
 	switch (sat->sat_port) {
 	case ATADDR_ANYPORT:
-		return ("*");
+		return "*";
 	case 0xff:
 		return "????";
 	default:
 		(void)snprintf(mybuf, sizeof(mybuf), "%d",
 		    (unsigned int)sat->sat_port);
-		return (mybuf);
+		return mybuf;
 	}
 }
 
@@ -140,7 +138,7 @@ at_pr_range(const struct sockaddr_at *sa
 		(void)snprintf(mybuf, sizeof(mybuf), "%d",
 			ntohs(sat->sat_range.r_netrange.nr_firstnet));
 	}
-	return (mybuf);
+	return mybuf;
 }
 
 
@@ -182,7 +180,7 @@ atalk_print(const struct sockaddr *sa, i
 		(void)snprintf(mybuf + strlen(mybuf),
 		    sizeof(mybuf) - strlen(mybuf), ".%s", at_pr_port(sat));
 	}
-	return (mybuf);
+	return mybuf;
 }
 
 const char *
@@ -223,12 +221,14 @@ atalk_print2(const struct sockaddr *sa, 
 		if (l > 0)
 			n += l;
 	}
-	return (buf);
+	return buf;
 }
 
 void
 atalkprotopr(u_long off, const char *name)
 {
+	struct ddpcb ddpcb;
+	struct socket sockb;
 	struct ddpcb *next;
 	struct ddpcb *initial;
 	int width = 22;
@@ -243,9 +243,8 @@ atalkprotopr(u_long off, const char *nam
 			return;
 		next = ddpcb.ddp_next;
 #if 0
-		if (!aflag && atalk_nullhost(ddpcb.ddp_lsat)) {
+		if (!aflag && atalk_nullhost(ddpcb.ddp_lsat))
 			continue;
-		}
 #endif
 		if (kread((u_long)ddpcb.ddp_socket,
 			  (char *)&sockb, sizeof(sockb)) < 0)
@@ -261,7 +260,7 @@ atalkprotopr(u_long off, const char *nam
 			}
 			printf("%-5.5s %-6.6s %-6.6s  %*.*s %*.*s %s\n",
 			       "Proto", "Recv-Q", "Send-Q",
-			       -width, width, "Local Address", 
+			       -width, width, "Local Address",
 			       -width, width, "Foreign Address", "(state)");
 			first = 0;
 		}
@@ -276,8 +275,9 @@ atalkprotopr(u_long off, const char *nam
 		putchar('\n');
 	}
 }
-#define ANY(x,y,z) \
-	((sflag==1 || (x)) ? printf("\t%llu %s%s%s\n",(unsigned long long)x,y,plural(x),z) : 0)
+#define ANY(x,y,z)							      \
+	((sflag==1 || (x)) ?						      \
+	    printf("\t%llu %s%s%s\n",(unsigned long long)x,y,plural(x),z) : 0)
 
 /*
  * Dump DDP statistics structure.
@@ -308,7 +308,9 @@ ddp_stats(u_long off, const char *name)
 	ANY(ddpstat[DDP_STAT_TOOSMALL], "packet", " with not enough data ");
 	ANY(ddpstat[DDP_STAT_FORWARD], "packet", " forwarded ");
 	ANY(ddpstat[DDP_STAT_ENCAP], "packet", " encapsulated ");
-	ANY(ddpstat[DDP_STAT_CANTFORWARD], "packet", " rcvd for unreachable dest ");
-	ANY(ddpstat[DDP_STAT_NOSOCKSPACE], "packet", " dropped due to no socket space ");
+	ANY(ddpstat[DDP_STAT_CANTFORWARD], "packet",
+	    " rcvd for unreachable dest ");
+	ANY(ddpstat[DDP_STAT_NOSOCKSPACE], "packet",
+	    " dropped due to no socket space ");
 }
 #undef ANY

Index: src/usr.bin/netstat/bpf.c
diff -u src/usr.bin/netstat/bpf.c:1.11 src/usr.bin/netstat/bpf.c:1.11.22.1
--- src/usr.bin/netstat/bpf.c:1.11	Fri Dec 14 08:15:44 2012
+++ src/usr.bin/netstat/bpf.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: bpf.c,v 1.11 2012/12/14 08:15:44 msaitoh Exp $	*/
+/*	$NetBSD: bpf.c,v 1.11.22.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -55,17 +55,16 @@ bpf_stats(void)
 	if (use_sysctl) {
 		if (sysctlbyname("net.bpf.stats", &bpf_s, &len, NULL, 0) == -1)
 			err(1, "net.bpf.stats");
-	
+
 		printf("bpf:\n");
-		printf("\t%" PRIu64 " total packets received\n", 
+		printf("\t%" PRIu64 " total packets received\n",
 		    bpf_s.bs_recv);
-		printf("\t%" PRIu64 " total packets captured\n", 
+		printf("\t%" PRIu64 " total packets captured\n",
 		    bpf_s.bs_capt);
-		printf("\t%" PRIu64 " total packets dropped\n", 
+		printf("\t%" PRIu64 " total packets dropped\n",
 		    bpf_s.bs_drop);
-	} else {
+	} else
 		warnx("BPF stats not available via KVM.");
-	}
 }
 
 void
@@ -79,7 +78,7 @@ bpf_dump(const char *bpfif)
 		u_int	namelen;
 		void	*v;
 		struct kinfo_proc2 p;
-	
+
 		/* adapted from sockstat.c by Andrew Brown */
 
 		sz = CTL_MAXNAME;
@@ -89,7 +88,7 @@ bpf_dump(const char *bpfif)
 
 		name[namelen++] = sizeof(*dpe);
 		name[namelen++] = INT_MAX;
-		
+
 		v = NULL;
 		sz = 0;
 		do {
@@ -117,19 +116,19 @@ bpf_dump(const char *bpfif)
 #define BPFEXT(entry) dpe->entry
 
 		for (i = 0; i < (sz / sizeof(*dpe)); i++, dpe++) {
-			if (bpfif && 
+			if (bpfif &&
 			    strncmp(BPFEXT(bde_ifname), bpfif, IFNAMSIZ))
 				continue;
-			
+
 			printf("%-7d ", BPFEXT(bde_pid));
 			printf("%-7s ",
-			       (BPFEXT(bde_ifname)[0] == '\0') ? "-" : 
+			       (BPFEXT(bde_ifname)[0] == '\0') ? "-" :
 			       BPFEXT(bde_ifname));
 
-			printf("%-8" PRIu64 " %-8" PRIu64 " %-8" PRIu64 " ", 
-				BPFEXT(bde_rcount), BPFEXT(bde_dcount), 
+			printf("%-8" PRIu64 " %-8" PRIu64 " %-8" PRIu64 " ",
+				BPFEXT(bde_rcount), BPFEXT(bde_dcount),
 				BPFEXT(bde_ccount));
-			
+
 			switch (BPFEXT(bde_state)) {
 			case BPF_IDLE:
 				printf("I");
@@ -144,7 +143,7 @@ bpf_dump(const char *bpfif)
 				printf("-");
 				break;
 			}
-			
+
 			printf("%c", BPFEXT(bde_promisc) ? 'P' : '-');
 			printf("%c", BPFEXT(bde_immediate) ? 'R' : '-');
 			printf("%c", BPFEXT(bde_seesent) ? 'S' : '-');
@@ -160,7 +159,7 @@ bpf_dump(const char *bpfif)
 			name[namelen++] = szproc;
 			name[namelen++] = 1;
 
-			if (prog_sysctl(&name[0], namelen, &p, &szproc, 
+			if (prog_sysctl(&name[0], namelen, &p, &szproc,
 			    NULL, 0) == -1)
 				printf("-\n");
 			else
@@ -169,7 +168,7 @@ bpf_dump(const char *bpfif)
 		}
 		free(v);
 	} else {
-                /* XXX */
-                errx(1, "bpf_dump not implemented using kvm");
-        }
+		/* XXX */
+		errx(1, "bpf_dump not implemented using kvm");
+	}
 }

Index: src/usr.bin/netstat/fast_ipsec.c
diff -u src/usr.bin/netstat/fast_ipsec.c:1.21.4.1 src/usr.bin/netstat/fast_ipsec.c:1.21.4.2
--- src/usr.bin/netstat/fast_ipsec.c:1.21.4.1	Sat Oct 21 19:43:56 2017
+++ src/usr.bin/netstat/fast_ipsec.c	Mon Sep 12 14:29:19 2022
@@ -1,5 +1,5 @@
-/*	$NetBSD: fast_ipsec.c,v 1.21.4.1 2017/10/21 19:43:56 snj Exp $ */
-/* 	$FreeBSD: src/tools/tools/crypto/ipsecstats.c,v 1.1.4.1 2003/06/03 00:13:13 sam Exp $ */
+/*	$NetBSD: fast_ipsec.c,v 1.21.4.2 2022/09/12 14:29:19 martin Exp $ */
+/*	$FreeBSD: src/tools/tools/crypto/ipsecstats.c,v 1.1.4.1 2003/06/03 00:13:13 sam Exp $ */
 
 /*-
  * Copyright (c) 2003, 2004 Jonathan Stone
@@ -33,7 +33,7 @@
 #include <sys/cdefs.h>
 #ifndef lint
 #ifdef __NetBSD__
-__RCSID("$NetBSD: fast_ipsec.c,v 1.21.4.1 2017/10/21 19:43:56 snj Exp $");
+__RCSID("$NetBSD: fast_ipsec.c,v 1.21.4.2 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint*/
 
@@ -88,7 +88,7 @@ algname(size_t a, const char *algs[], si
 
 /*
  * Print the fast_ipsec statistics.
- * Since NetBSD's netstat(1) seems not to find us for "netstat -s", 
+ * Since NetBSD's netstat(1) seems not to find us for "netstat -s",
  * but does(?) find KAME, be prepared to be called explicitly from
  * netstat's main program for "netstat -s"; but silently do nothing
  * if that happens when we are running on KAME IPsec.
@@ -147,125 +147,139 @@ fast_ipsec_stats(u_long off, const char 
 
 	printf("%s:\n", name);
 
-#define	STAT(x,fmt)	if ((x) || sflag <= 1) printf("\t%"PRIu64" " fmt "\n", x)
+#define	STAT(x, fmt)					\
+	if (ipsecstats[x] || sflag <= 1)		\
+		printf("\t%"PRIu64" " fmt "\n", ipsecstats[x])
+
 	if (ipsecstats[IPSEC_STAT_IN_POLVIO]+ipsecstats[IPSEC_STAT_OUT_POLVIO])
-		printf("\t%"PRIu64" policy violations: %"PRIu64" input %"PRIu64" output\n",
-		        ipsecstats[IPSEC_STAT_IN_POLVIO] + ipsecstats[IPSEC_STAT_OUT_POLVIO],
-			ipsecstats[IPSEC_STAT_IN_POLVIO], ipsecstats[IPSEC_STAT_OUT_POLVIO]);
-	STAT(ipsecstats[IPSEC_STAT_OUT_NOSA], "no SA found (output)");
-	STAT(ipsecstats[IPSEC_STAT_OUT_NOMEM], "no memory available (output)");
-	STAT(ipsecstats[IPSEC_STAT_OUT_NOROUTE], "no route available (output)");
-	STAT(ipsecstats[IPSEC_STAT_OUT_INVAL], "generic errors (output)");
-	STAT(ipsecstats[IPSEC_STAT_OUT_BUNDLESA], "bundled SA processed (output)");
-	STAT(ipsecstats[IPSEC_STAT_SPDCACHELOOKUP], "SPD cache lookups");
-	STAT(ipsecstats[IPSEC_STAT_SPDCACHEMISS], "SPD cache misses");
+		printf("\t%"PRIu64" policy violations: %"PRIu64" input %"
+		    PRIu64" output\n",
+		    ipsecstats[IPSEC_STAT_IN_POLVIO] + ipsecstats[IPSEC_STAT_OUT_POLVIO],
+		    ipsecstats[IPSEC_STAT_IN_POLVIO], ipsecstats[IPSEC_STAT_OUT_POLVIO]);
+	STAT(IPSEC_STAT_OUT_NOSA,	"no SA found (output)");
+	STAT(IPSEC_STAT_OUT_NOMEM,	"no memory available (output)");
+	STAT(IPSEC_STAT_OUT_NOROUTE,	"no route available (output)");
+	STAT(IPSEC_STAT_OUT_INVAL,	"generic errors (output)");
+	STAT(IPSEC_STAT_OUT_BUNDLESA,	"bundled SA processed (output)");
+	STAT(IPSEC_STAT_SPDCACHELOOKUP,	"SPD cache lookups");
+	STAT(IPSEC_STAT_SPDCACHEMISS,	"SPD cache misses");
 #undef STAT
-	
+
 	printf("\tah:\n");
-#define	AHSTAT(x,fmt)	if ((x) || sflag <= 1) printf("\t\t%"PRIu64" ah " fmt "\n", x)
-	AHSTAT(ahstats[AH_STAT_INPUT],   "input packets processed");
-	AHSTAT(ahstats[AH_STAT_OUTPUT],  "output packets processed");
-	AHSTAT(ahstats[AH_STAT_HDROPS],  "headers too short");
-	AHSTAT(ahstats[AH_STAT_NOPF],    "headers for unsupported address family");
-	AHSTAT(ahstats[AH_STAT_NOTDB],   "packets with no SA");
-	AHSTAT(ahstats[AH_STAT_BADKCR], "packets dropped by crypto returning NULL mbuf");
-	AHSTAT(ahstats[AH_STAT_BADAUTH], "packets with bad authentication");
-	AHSTAT(ahstats[AH_STAT_NOXFORM], "packets with no xform");
-	AHSTAT(ahstats[AH_STAT_QFULL], "packets dropped due to queue full");
-	AHSTAT(ahstats[AH_STAT_WRAP],  "packets dropped for replay counter wrap");
-	AHSTAT(ahstats[AH_STAT_REPLAY],  "packets dropped for possible replay");
-	AHSTAT(ahstats[AH_STAT_BADAUTHL],"packets dropped for bad authenticator length");
-	AHSTAT(ahstats[AH_STAT_INVALID], "packets with an invalid SA");
-	AHSTAT(ahstats[AH_STAT_TOOBIG],  "packets too big");
-	AHSTAT(ahstats[AH_STAT_PDROPS],  "packets blocked due to policy");
-	AHSTAT(ahstats[AH_STAT_CRYPTO],  "failed crypto requests");
-	AHSTAT(ahstats[AH_STAT_TUNNEL],  "tunnel sanity check failures");
+#define	AHSTAT(x, fmt)							\
+	if (ahstats[x] || sflag <= 1)					\
+		printf("\t\t%"PRIu64" ah " fmt "\n", ahstats[x])
+
+	AHSTAT(AH_STAT_INPUT,	"input packets processed");
+	AHSTAT(AH_STAT_OUTPUT,	"output packets processed");
+	AHSTAT(AH_STAT_HDROPS,	"headers too short");
+	AHSTAT(AH_STAT_NOPF,    "headers for unsupported address family");
+	AHSTAT(AH_STAT_NOTDB,	"packets with no SA");
+	AHSTAT(AH_STAT_BADKCR,
+			      "packets dropped by crypto returning NULL mbuf");
+	AHSTAT(AH_STAT_BADAUTH,	"packets with bad authentication");
+	AHSTAT(AH_STAT_NOXFORM,	"packets with no xform");
+	AHSTAT(AH_STAT_QFULL,	"packets dropped due to queue full");
+	AHSTAT(AH_STAT_WRAP,	"packets dropped for replay counter wrap");
+	AHSTAT(AH_STAT_REPLAY,	"packets dropped for possible replay");
+	AHSTAT(AH_STAT_BADAUTHL,
+			       "packets dropped for bad authenticator length");
+	AHSTAT(AH_STAT_INVALID,	"packets with an invalid SA");
+	AHSTAT(AH_STAT_TOOBIG,	"packets too big");
+	AHSTAT(AH_STAT_PDROPS,	"packets blocked due to policy");
+	AHSTAT(AH_STAT_CRYPTO,	"failed crypto requests");
+	AHSTAT(AH_STAT_TUNNEL,	"tunnel sanity check failures");
 
 	printf("\tah histogram:\n");
 	for (i = 0; i < AH_ALG_MAX; i++)
 		if (ahstats[AH_STAT_HIST + i])
-			printf("\t\tah packets with %s: %"PRIu64"\n"
-				, algname(i, ahalgs, __arraycount(ahalgs))
-				, ahstats[AH_STAT_HIST + i]
-			);
-	AHSTAT(ahstats[AH_STAT_IBYTES], "bytes received");
-	AHSTAT(ahstats[AH_STAT_OBYTES], "bytes transmitted");
+			printf("\t\tah packets with %s: %"PRIu64"\n",
+			    algname(i, ahalgs, __arraycount(ahalgs)),
+			    ahstats[AH_STAT_HIST + i]);
+	AHSTAT(AH_STAT_IBYTES,	"bytes received");
+	AHSTAT(AH_STAT_OBYTES,	"bytes transmitted");
 #undef AHSTAT
 
 	printf("\tesp:\n");
-#define	ESPSTAT(x,fmt) if ((x) || sflag <= 1) printf("\t\t%"PRIu64" esp " fmt "\n", x)
-	ESPSTAT(espstats[ESP_STAT_INPUT],"input packets processed");
-	ESPSTAT(espstats[ESP_STAT_OUTPUT],"output packets processed");
-	ESPSTAT(espstats[ESP_STAT_HDROPS],"headers too short");
-	ESPSTAT(espstats[ESP_STAT_NOPF], "headers for unsupported address family");
-	ESPSTAT(espstats[ESP_STAT_NOTDB],"packets with no SA");
-	ESPSTAT(espstats[ESP_STAT_BADKCR],"packets dropped by crypto returning NULL mbuf");
-	ESPSTAT(espstats[ESP_STAT_QFULL],"packets dropped due to queue full");
-	ESPSTAT(espstats[ESP_STAT_NOXFORM],"packets with no xform");
-	ESPSTAT(espstats[ESP_STAT_BADILEN],"packets with bad ilen");
-	ESPSTAT(espstats[ESP_STAT_BADENC],"packets with bad encryption");
-	ESPSTAT(espstats[ESP_STAT_BADAUTH],"packets with bad authentication");
-	ESPSTAT(espstats[ESP_STAT_WRAP], "packets dropped for replay counter wrap");
-	ESPSTAT(espstats[ESP_STAT_REPLAY],"packets dropped for possible replay");
-	ESPSTAT(espstats[ESP_STAT_INVALID],"packets with an invalid SA");
-	ESPSTAT(espstats[ESP_STAT_TOOBIG],"packets too big");
-	ESPSTAT(espstats[ESP_STAT_PDROPS],"packets blocked due to policy");
-	ESPSTAT(espstats[ESP_STAT_CRYPTO],"failed crypto requests");
-	ESPSTAT(espstats[ESP_STAT_TUNNEL],"tunnel sanity check failures");
+#define	ESPSTAT(x, fmt)							\
+	if (espstats[x] || sflag <= 1)					\
+		printf("\t\t%"PRIu64" esp " fmt "\n", espstats[x])
+
+	ESPSTAT(ESP_STAT_INPUT,	  "input packets processed");
+	ESPSTAT(ESP_STAT_OUTPUT,  "output packets processed");
+	ESPSTAT(ESP_STAT_HDROPS,  "headers too short");
+	ESPSTAT(ESP_STAT_NOPF,	  "headers for unsupported address family");
+	ESPSTAT(ESP_STAT_NOTDB,	  "packets with no SA");
+	ESPSTAT(ESP_STAT_BADKCR,
+			      "packets dropped by crypto returning NULL mbuf");
+	ESPSTAT(ESP_STAT_QFULL,   "packets dropped due to queue full");
+	ESPSTAT(ESP_STAT_NOXFORM, "packets with no xform");
+	ESPSTAT(ESP_STAT_BADILEN, "packets with bad ilen");
+	ESPSTAT(ESP_STAT_BADENC,  "packets with bad encryption");
+	ESPSTAT(ESP_STAT_BADAUTH, "packets with bad authentication");
+	ESPSTAT(ESP_STAT_WRAP,	  "packets dropped for replay counter wrap");
+	ESPSTAT(ESP_STAT_REPLAY,  "packets dropped for possible replay");
+	ESPSTAT(ESP_STAT_INVALID, "packets with an invalid SA");
+	ESPSTAT(ESP_STAT_TOOBIG,  "packets too big");
+	ESPSTAT(ESP_STAT_PDROPS,  "packets blocked due to policy");
+	ESPSTAT(ESP_STAT_CRYPTO,  "failed crypto requests");
+	ESPSTAT(ESP_STAT_TUNNEL,  "tunnel sanity check failures");
 	printf("\tesp histogram:\n");
 	for (i = 0; i < ESP_ALG_MAX; i++)
 		if (espstats[ESP_STAT_HIST + i])
-			printf("\t\tesp packets with %s: %"PRIu64"\n"
-				, algname(i, espalgs, __arraycount(espalgs))
-				, espstats[ESP_STAT_HIST + i]
-			);
-	ESPSTAT(espstats[ESP_STAT_IBYTES], "bytes received");
-	ESPSTAT(espstats[ESP_STAT_OBYTES], "bytes transmitted");
+			printf("\t\tesp packets with %s: %"PRIu64"\n",
+			    algname(i, espalgs, __arraycount(espalgs)),
+			    espstats[ESP_STAT_HIST + i]);
+	ESPSTAT(ESP_STAT_IBYTES, "bytes received");
+	ESPSTAT(ESP_STAT_OBYTES, "bytes transmitted");
 #undef ESPSTAT
 	printf("\tipip:\n");
 
-#define	IPIPSTAT(x,fmt) \
-	if ((x) || sflag <= 1) printf("\t\t%"PRIu64" ipip " fmt "\n", x)
-	IPIPSTAT(ipips[IPIP_STAT_IPACKETS],"total input packets");
-	IPIPSTAT(ipips[IPIP_STAT_OPACKETS],"total output packets");
-	IPIPSTAT(ipips[IPIP_STAT_HDROPS],"packets too short for header length");
-	IPIPSTAT(ipips[IPIP_STAT_QFULL],"packets dropped due to queue full");
-	IPIPSTAT(ipips[IPIP_STAT_PDROPS],"packets blocked due to policy");
-	IPIPSTAT(ipips[IPIP_STAT_SPOOF],"IP spoofing attempts");
-	IPIPSTAT(ipips[IPIP_STAT_FAMILY],"protocol family mismatched");
-	IPIPSTAT(ipips[IPIP_STAT_UNSPEC],"missing tunnel-endpoint address");
-	IPIPSTAT(ipips[IPIP_STAT_IBYTES],"input bytes received");
-	IPIPSTAT(ipips[IPIP_STAT_OBYTES],"output bytes processed");
+#define	IPIPSTAT(x, fmt)						\
+	if (ipips[x] || sflag <= 1)					\
+		printf("\t\t%"PRIu64" ipip " fmt "\n", ipips[x])
+
+	IPIPSTAT(IPIP_STAT_IPACKETS, "total input packets");
+	IPIPSTAT(IPIP_STAT_OPACKETS, "total output packets");
+	IPIPSTAT(IPIP_STAT_HDROPS,   "packets too short for header length");
+	IPIPSTAT(IPIP_STAT_QFULL,    "packets dropped due to queue full");
+	IPIPSTAT(IPIP_STAT_PDROPS,   "packets blocked due to policy");
+	IPIPSTAT(IPIP_STAT_SPOOF,    "IP spoofing attempts");
+	IPIPSTAT(IPIP_STAT_FAMILY,   "protocol family mismatched");
+	IPIPSTAT(IPIP_STAT_UNSPEC,   "missing tunnel-endpoint address");
+	IPIPSTAT(IPIP_STAT_IBYTES,   "input bytes received");
+	IPIPSTAT(IPIP_STAT_OBYTES,   "output bytes processed");
 #undef IPIPSTAT
 
 	printf("\tipcomp:\n");
-#define	IPCOMP(x,fmt) \
-	if ((x) || sflag <= 1) printf("\t\t%"PRIu64" ipcomp " fmt "\n", x)
-
-	IPCOMP(ipcs[IPCOMP_STAT_HDROPS],"packets too short for header length");
-	IPCOMP(ipcs[IPCOMP_STAT_NOPF],	"protocol family not supported");
-	IPCOMP(ipcs[IPCOMP_STAT_NOTDB],	"packets with no SA");
-	IPCOMP(ipcs[IPCOMP_STAT_BADKCR],"packets dropped by crypto returning NULL mbuf");
-	IPCOMP(ipcs[IPCOMP_STAT_QFULL],	"queue full");
-        IPCOMP(ipcs[IPCOMP_STAT_NOXFORM],"no support for transform");
-	IPCOMP(ipcs[IPCOMP_STAT_WRAP],  "packets dropped for replay counter wrap");
-	IPCOMP(ipcs[IPCOMP_STAT_INPUT],	"input IPcomp packets");
-	IPCOMP(ipcs[IPCOMP_STAT_OUTPUT],"output IPcomp packets");
-	IPCOMP(ipcs[IPCOMP_STAT_INVALID],"packets with an invalid SA");
-	IPCOMP(ipcs[IPCOMP_STAT_TOOBIG],"packets decompressed as too big");
-	IPCOMP(ipcs[IPCOMP_STAT_MINLEN], "packets too short to be compressed");
-	IPCOMP(ipcs[IPCOMP_STAT_USELESS],"packet for which compression was useless");
-	IPCOMP(ipcs[IPCOMP_STAT_PDROPS],"packets blocked due to policy");
-	IPCOMP(ipcs[IPCOMP_STAT_CRYPTO],"failed crypto requests");
+#define	IPCOMP(x, fmt)							\
+	if (ipcs[x] || sflag <= 1)					\
+		printf("\t\t%"PRIu64" ipcomp " fmt "\n", ipcs[x])
+
+	IPCOMP(IPCOMP_STAT_HDROPS,  "packets too short for header length");
+	IPCOMP(IPCOMP_STAT_NOPF,    "protocol family not supported");
+	IPCOMP(IPCOMP_STAT_NOTDB,   "packets with no SA");
+	IPCOMP(IPCOMP_STAT_BADKCR,
+			      "packets dropped by crypto returning NULL mbuf");
+	IPCOMP(IPCOMP_STAT_QFULL,   "queue full");
+	IPCOMP(IPCOMP_STAT_NOXFORM, "no support for transform");
+	IPCOMP(IPCOMP_STAT_WRAP,    "packets dropped for replay counter wrap");
+	IPCOMP(IPCOMP_STAT_INPUT,   "input IPcomp packets");
+	IPCOMP(IPCOMP_STAT_OUTPUT,  "output IPcomp packets");
+	IPCOMP(IPCOMP_STAT_INVALID, "packets with an invalid SA");
+	IPCOMP(IPCOMP_STAT_TOOBIG,  "packets decompressed as too big");
+	IPCOMP(IPCOMP_STAT_MINLEN,  "packets too short to be compressed");
+	IPCOMP(IPCOMP_STAT_USELESS,"packet for which compression was useless");
+	IPCOMP(IPCOMP_STAT_PDROPS,  "packets blocked due to policy");
+	IPCOMP(IPCOMP_STAT_CRYPTO,  "failed crypto requests");
 
 	printf("\tipcomp histogram:\n");
 	for (i = 0; i < IPCOMP_ALG_MAX; i++)
 		if (ipcs[IPCOMP_STAT_HIST + i])
-			printf("\t\tIPcomp packets with %s: %"PRIu64"\n"
-			    , algname(i, ipcompalgs, __arraycount(ipcompalgs))
-			    , ipcs[IPCOMP_STAT_HIST + i]
-			);
-	IPCOMP(ipcs[IPCOMP_STAT_IBYTES],"input bytes");
-	IPCOMP(ipcs[IPCOMP_STAT_OBYTES],"output bytes");
+			printf("\t\tIPcomp packets with %s: %"PRIu64"\n",
+			    algname(i, ipcompalgs, __arraycount(ipcompalgs)),
+			    ipcs[IPCOMP_STAT_HIST + i]);
+	IPCOMP(IPCOMP_STAT_IBYTES,  "input bytes");
+	IPCOMP(IPCOMP_STAT_OBYTES,  "output bytes");
 #undef IPCOMP
 }

Index: src/usr.bin/netstat/if.c
diff -u src/usr.bin/netstat/if.c:1.94.4.1 src/usr.bin/netstat/if.c:1.94.4.2
--- src/usr.bin/netstat/if.c:1.94.4.1	Thu Jul 26 23:43:31 2018
+++ src/usr.bin/netstat/if.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.94.4.1 2018/07/26 23:43:31 snj Exp $	*/
+/*	$NetBSD: if.c,v 1.94.4.2 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)if.c	8.2 (Berkeley) 2/21/94";
 #else
-__RCSID("$NetBSD: if.c,v 1.94.4.1 2018/07/26 23:43:31 snj Exp $");
+__RCSID("$NetBSD: if.c,v 1.94.4.2 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -76,16 +76,21 @@ struct	iftot {
 	u_quad_t ift_ip;		/* input packets */
 	u_quad_t ift_ib;		/* input bytes */
 	u_quad_t ift_ie;		/* input errors */
+	u_quad_t ift_iq;		/* input drops */
 	u_quad_t ift_op;		/* output packets */
 	u_quad_t ift_ob;		/* output bytes */
 	u_quad_t ift_oe;		/* output errors */
+	u_quad_t ift_oq;		/* output drops */
 	u_quad_t ift_co;		/* collisions */
-	u_quad_t ift_dr;		/* drops */
+};
+
+struct if_data_ext {
+	uint64_t ifi_oqdrops;
 };
 
 static void set_lines(void);
 static void print_addr(const int, struct sockaddr *, struct sockaddr **,
-    struct if_data *, struct ifnet *);
+    struct if_data *, struct ifnet *, struct if_data_ext *);
 static void sidewaysintpr(u_int, u_long);
 
 static void iftot_banner(struct iftot *);
@@ -96,6 +101,7 @@ static void catchalarm(int);
 static void get_rtaddrs(int, struct sockaddr *, struct sockaddr **);
 static void fetchifs(void);
 
+static int if_data_ext_get(const char *, struct if_data_ext *);
 static void intpr_sysctl(void);
 static void intpr_kvm(u_long, void (*)(const char *));
 
@@ -132,12 +138,10 @@ intpr(int interval, u_long ifnetaddr, vo
 		return;
 	}
 
-	if (use_sysctl) {
+	if (use_sysctl)
 		intpr_sysctl();
-	} else {
+	else
 		intpr_kvm(ifnetaddr, pfunc);
-	}
-
 }
 
 static void
@@ -147,9 +151,9 @@ intpr_header(void)
 	if (!sflag && !pflag) {
 		if (bflag) {
 			printf("%-5.5s %-5.5s %-13.13s %-17.17s "
-			       "%10.10s %10.10s",
-			       "Name", "Mtu", "Network", "Address", 
-			       "Ibytes", "Obytes");
+			    "%10.10s %10.10s",
+			    "Name", "Mtu", "Network", "Address",
+			    "Ibytes", "Obytes");
 		} else {
 			printf("%-5.5s %-5.5s %-13.13s %-17.17s "
 			    "%8.8s %5.5s",
@@ -167,6 +171,28 @@ intpr_header(void)
 	}
 }
 
+int
+if_data_ext_get(const char *ifname, struct if_data_ext *dext)
+{
+	char namebuf[1024];
+	size_t len;
+	int drops;
+
+	/* For sysctl */
+	snprintf(namebuf, sizeof(namebuf),
+	    "net.interfaces.%s.sndq.drops", ifname);
+	len = sizeof(drops);
+	if (sysctlbyname(namebuf, &drops, &len, NULL, 0)
+	    == -1) {
+		warnx("'%s' not found", namebuf);
+		dext->ifi_oqdrops = 0;
+		return -1;
+	} else
+		dext->ifi_oqdrops = drops;
+
+	return 0;
+}
+
 static void
 intpr_sysctl(void)
 {
@@ -184,6 +210,7 @@ intpr_sysctl(void)
 	size_t len;
 	int did = 1, rtax = 0, n;
 	char name[IFNAMSIZ + 1];	/* + 1 for `*' */
+	char origname[IFNAMSIZ];	/* without `*' */
 	int ifindex = 0;
 
 	if (prog_sysctl(mib, 6, NULL, &len, NULL, 0) == -1)
@@ -201,6 +228,8 @@ intpr_sysctl(void)
 
 	lim = buf + len;
 	for (next = buf; next < lim; next += rtm->rtm_msglen) {
+		struct if_data_ext dext;
+
 		rtm = (struct rt_msghdr *)next;
 		if (rtm->rtm_version != RTM_VERSION)
 			continue;
@@ -214,25 +243,29 @@ intpr_sysctl(void)
 			get_rtaddrs(ifm->ifm_addrs, sa, rti_info);
 
 			sdl = (struct sockaddr_dl *)rti_info[RTAX_IFP];
-			if (sdl == NULL || sdl->sdl_family != AF_LINK) {
+			if (sdl == NULL || sdl->sdl_family != AF_LINK)
 				continue;
-			}
+
 			bzero(name, sizeof(name));
 			if (sdl->sdl_nlen >= IFNAMSIZ)
 				memcpy(name, sdl->sdl_data, IFNAMSIZ - 1);
-			else if (sdl->sdl_nlen > 0) 
+			else if (sdl->sdl_nlen > 0)
 				memcpy(name, sdl->sdl_data, sdl->sdl_nlen);
 
-			if (interface != 0 && strcmp(name, interface) != 0)
+			if (interface != NULL && strcmp(name, interface) != 0)
 				continue;
 
 			ifindex = sdl->sdl_index;
 
-			/* mark inactive interfaces with a '*' */
+			/* Keep the original name */
+			strcpy(origname, name);
+
+			/* Mark inactive interfaces with a '*' */
 			cp = strchr(name, '\0');
-			if ((ifm->ifm_flags & IFF_UP) == 0)
+			if ((ifm->ifm_flags & IFF_UP) == 0) {
 				*cp++ = '*';
-			*cp = '\0';
+				*cp = '\0';
+			}
 
 			if (qflag) {
 				total = ifd->ifi_ibytes + ifd->ifi_obytes +
@@ -254,7 +287,7 @@ intpr_sysctl(void)
 		case RTM_NEWADDR:
 			if (qflag && total == 0)
 				continue;
-			if (interface != 0 && strcmp(name, interface) != 0)
+			if (interface != NULL && strcmp(name, interface) != 0)
 				continue;
 			ifam = (struct ifa_msghdr *)next;
 			if ((ifam->ifam_addrs & (RTA_NETMASK | RTA_IFA |
@@ -276,7 +309,11 @@ intpr_sysctl(void)
 			n = 5;
 
 		printf("%-*.*s %-5" PRIu64 " ", n, n, name, ifd->ifi_mtu);
-		print_addr(ifindex, rti_info[rtax], rti_info, ifd, NULL);
+		if (dflag)
+			if_data_ext_get(origname, &dext);
+
+		print_addr(ifindex, rti_info[rtax], rti_info, ifd,
+		    NULL, dflag ? &dext : NULL);
 	}
 }
 
@@ -324,7 +361,7 @@ intpr_kvm(u_long ifnetaddr, void (*pfunc
 			memmove(name, ifnet.if_xname, IFNAMSIZ);
 			name[IFNAMSIZ - 1] = '\0';	/* sanity */
 			ifnetaddr = (u_long)ifnet.if_list.tqe_next;
-			if (interface != 0 && strcmp(name, interface) != 0)
+			if (interface != NULL && strcmp(name, interface) != 0)
 				continue;
 			cp = strchr(name, '\0');
 
@@ -350,7 +387,8 @@ intpr_kvm(u_long ifnetaddr, void (*pfunc
 		} else {
 			struct sockaddr *sa;
 
-			if (kread(ifaddraddr, (char *)&ifaddr, sizeof ifaddr)) {
+			if (kread(ifaddraddr, (char *)&ifaddr, sizeof ifaddr))
+			{
 				ifaddraddr = 0;
 				continue;
 			}
@@ -359,7 +397,7 @@ intpr_kvm(u_long ifnetaddr, void (*pfunc
 			    CP(&ifaddr);
 			sa = (struct sockaddr *)cp;
 			print_addr(ifnet.if_index, sa, (void *)&ifaddr,
-			    &ifnet.if_data, &ifnet);
+			    &ifnet.if_data, &ifnet, NULL);
 		}
 		ifaddraddr = (u_long)ifaddr.ifa.ifa_list.tqe_next;
 	}
@@ -456,8 +494,8 @@ mc4_print(const int ifindex)
 }
 
 static void
-print_addr(const int ifindex, struct sockaddr *sa,
-    struct sockaddr **rtinfo, struct if_data *ifd, struct ifnet *ifnet)
+print_addr(const int ifindex, struct sockaddr *sa, struct sockaddr **rtinfo,
+    struct if_data *ifd, struct ifnet *ifnet, struct if_data_ext *dext)
 {
 	char hexsep = '.';		/* for hexprint */
 	static const char hexfmt[] = "%02x%c";	/* for hexprint */
@@ -479,7 +517,8 @@ print_addr(const int ifindex, struct soc
 	case AF_INET:
 		sin = (struct sockaddr_in *)sa;
 		if (use_sysctl) {
-			netmask = *((struct sockaddr_in *)rtinfo[RTAX_NETMASK]);
+			netmask =
+			    *((struct sockaddr_in *)rtinfo[RTAX_NETMASK]);
 		} else {
 			struct in_ifaddr *ifaddr_in = (void *)rtinfo;
 			netmask.sin_addr.s_addr = ifaddr_in->ia_subnetmask;
@@ -510,9 +549,8 @@ print_addr(const int ifindex, struct soc
 				ia4_print(&inm.inm_addr);
 				multiaddr = (u_long)inm.inm_list.le_next;
 			}
-		} else {
+		} else
 			mc4_print(ifindex);
-		}
 		break;
 #ifdef INET6
 	case AF_INET6:
@@ -523,9 +561,9 @@ print_addr(const int ifindex, struct soc
 			sin6->sin6_scope_id = 0;
 #endif
 
-		if (use_sysctl) {
+		if (use_sysctl)
 			netmask6 = (struct sockaddr_in6 *)rtinfo[RTAX_NETMASK];
-		} else {
+		else {
 			struct in6_ifaddr *ifaddr_in6 = (void *)rtinfo;
 			netmask6 = &ifaddr_in6->ia_prefixmask;
 		}
@@ -549,29 +587,27 @@ print_addr(const int ifindex, struct soc
 			n = 17;
 		printf("%-*.*s ", n, n, cp);
 
-		if (!aflag) 
+		if (!aflag)
 			break;
 		if (ifnet) {
 			u_long multiaddr;
 			struct in6_multi inm;
 			union ifaddr_u *ifaddr = (union ifaddr_u *)rtinfo;
-		
+
 			multiaddr = (u_long)ifaddr->in6._ia6_multiaddrs.lh_first;
 			while (multiaddr != 0) {
 				kread(multiaddr, (char *)&inm, sizeof inm);
 				ia6_print(&inm.in6m_addr);
 				multiaddr = (u_long)inm.in6m_entry.le_next;
 			}
-		} else {
+		} else
 			mc6_print(ifindex);
-		}
 		break;
 #endif /*INET6*/
 #ifndef SMALL
 	case AF_APPLETALK:
-		printf("atalk:%-7.7s ",
-		       atalk_print(sa,0x10));
-		printf("%-17.17s ", atalk_print(sa,0x0b));
+		printf("atalk:%-7.7s ", atalk_print(sa, 0x10));
+		printf("%-17.17s ", atalk_print(sa, 0x0b));
 		break;
 #endif
 	case AF_LINK:
@@ -632,7 +668,8 @@ print_addr(const int ifindex, struct soc
 	}
 	if (dflag)
 		printf(" %6lld", ifnet ?
-		    (unsigned long long)ifnet->if_snd.ifq_drops : 0);
+		    (unsigned long long)ifnet->if_snd.ifq_drops :
+			dext->ifi_oqdrops);
 	if (tflag)
 		printf(" %4d", ifnet ? ifnet->if_timer : 0);
 	putchar('\n');
@@ -697,7 +734,7 @@ iftot_print(struct iftot *cur, struct if
 		    cur->ift_oe - old->ift_oe,
 		    cur->ift_co - old->ift_co);
 	if (dflag)
-		printf(" %5" PRIu64, cur->ift_dr - old->ift_dr);
+		printf(" %5" PRIu64, cur->ift_oq - old->ift_oq);
 }
 
 static void
@@ -716,7 +753,7 @@ iftot_print_sum(struct iftot *cur, struc
 		    cur->ift_co - old->ift_co);
 
 	if (dflag)
-		printf(" %5" PRIu64, cur->ift_dr - old->ift_dr);
+		printf(" %5" PRIu64, cur->ift_oq - old->ift_oq);
 }
 
 __dead static void
@@ -770,9 +807,9 @@ loop:
 	putchar('\n');
 	fflush(stdout);
 	line++;
-	if (signalled == 0) {
+	if (signalled == 0)
 		sigsuspend(&emptyset);
-	}
+
 	signalled = 0;
 	if (line == redraw_lines)
 		goto banner;
@@ -864,11 +901,12 @@ banner:
 		ip->ift_ip = 0;
 		ip->ift_ib = 0;
 		ip->ift_ie = 0;
+		ip->ift_iq = 0;
 		ip->ift_op = 0;
 		ip->ift_ob = 0;
 		ip->ift_oe = 0;
+		ip->ift_oq = 0;
 		ip->ift_co = 0;
-		ip->ift_dr = 0;
 	}
 	putchar('\n');
 	if (bflag)
@@ -896,11 +934,12 @@ loop:
 	sum->ift_ip = 0;
 	sum->ift_ib = 0;
 	sum->ift_ie = 0;
+	sum->ift_iq = 0;
 	sum->ift_op = 0;
 	sum->ift_ob = 0;
 	sum->ift_oe = 0;
+	sum->ift_oq = 0;
 	sum->ift_co = 0;
-	sum->ift_dr = 0;
 	for (off = firstifnet, ip = iftot; off && ip < lastif; ip++) {
 		if (kread(off, (char *)&ifnet, sizeof ifnet)) {
 			off = 0;
@@ -916,7 +955,7 @@ loop:
 				    HN_AUTOSCALE, HN_NOSPACE | HN_B) > 0)
 					printf("%10s %8.8s ", humbuf, " ");
 				else
-					printf("%10llu %8.8s ", 
+					printf("%10llu %8.8s ",
 					    (unsigned long long)
 					    (ifnet.if_ibytes-ip->ift_ib), " ");
 
@@ -926,7 +965,7 @@ loop:
 				    HN_AUTOSCALE, HN_NOSPACE | HN_B) > 0)
 					printf("%10s %5.5s", humbuf, " ");
 				else
-					printf("%10llu %5.5s", 
+					printf("%10llu %5.5s",
 					    (unsigned long long)
 					    (ifnet.if_obytes-ip->ift_ob), " ");
 			} else {
@@ -944,7 +983,7 @@ loop:
 			}
 			if (dflag)
 				printf(" %5" PRIu64,
-					ifnet.if_snd.ifq_drops - ip->ift_dr);
+					ifnet.if_snd.ifq_drops - ip->ift_oq);
 		}
 		ip->ift_ip = ifnet.if_ipackets;
 		ip->ift_ib = ifnet.if_ibytes;
@@ -953,7 +992,7 @@ loop:
 		ip->ift_ob = ifnet.if_obytes;
 		ip->ift_oe = ifnet.if_oerrors;
 		ip->ift_co = ifnet.if_collisions;
-		ip->ift_dr = ifnet.if_snd.ifq_drops;
+		ip->ift_oq = ifnet.if_snd.ifq_drops;
 		sum->ift_ip += ip->ift_ip;
 		sum->ift_ib += ip->ift_ib;
 		sum->ift_ie += ip->ift_ie;
@@ -961,7 +1000,7 @@ loop:
 		sum->ift_ob += ip->ift_ob;
 		sum->ift_oe += ip->ift_oe;
 		sum->ift_co += ip->ift_co;
-		sum->ift_dr += ip->ift_dr;
+		sum->ift_oq += ip->ift_oq;
 		off = (u_long)ifnet.if_list.tqe_next;
 	}
 	if (lastif - iftot > 0) {
@@ -973,7 +1012,7 @@ loop:
 			    HN_AUTOSCALE, HN_NOSPACE | HN_B) > 0)
 				printf("  %10s %8.8s ", humbuf, " ");
 			else
-				printf("  %10llu %8.8s ", 
+				printf("  %10llu %8.8s ",
 				    (unsigned long long)
 				    (sum->ift_ib - total->ift_ib), " ");
 
@@ -982,7 +1021,7 @@ loop:
 			    HN_AUTOSCALE, HN_NOSPACE | HN_B) > 0)
 				printf("%10s %5.5s", humbuf, " ");
 			else
-				printf("%10llu %5.5s", 
+				printf("%10llu %5.5s",
 				    (unsigned long long)
 				    (sum->ift_ob - total->ift_ob), " ");
 		} else {
@@ -1000,15 +1039,15 @@ loop:
 		}
 		if (dflag)
 			printf(" %5llu",
-			    (unsigned long long)(sum->ift_dr - total->ift_dr));
+			    (unsigned long long)(sum->ift_oq - total->ift_oq));
 	}
 	*total = *sum;
 	putchar('\n');
 	fflush(stdout);
 	line++;
-	if (signalled == 0) {
+	if (signalled == 0)
 		sigsuspend(&emptyset);
-	}
+
 	signalled = 0;
 	if (line == redraw_lines)
 		goto banner;
@@ -1026,11 +1065,10 @@ static void
 sidewaysintpr(unsigned int interval, u_long off)
 {
 
-	if (use_sysctl) {
+	if (use_sysctl)
 		sidewaysintpr_sysctl(interval);
-	} else {
+	else
 		sidewaysintpr_kvm(interval, off);
-	}
 }
 
 /*
@@ -1046,7 +1084,7 @@ catchalarm(int signo)
 
 static void
 get_rtaddrs(int addrs, struct sockaddr *sa, struct sockaddr **rti_info)
-{   
+{
 	int i;
 
 	for (i = 0; i < RTAX_MAX; i++) {
@@ -1054,7 +1092,7 @@ get_rtaddrs(int addrs, struct sockaddr *
 			rti_info[i] = sa;
 			sa = (struct sockaddr *)((char *)(sa) +
 			    RT_ROUNDUP(sa->sa_len));
-		} else 
+		} else
 			rti_info[i] = NULL;
 	}
 }
@@ -1070,6 +1108,7 @@ fetchifs(void)
 	struct sockaddr_dl *sdl;
 	static char *buf = NULL;
 	static size_t olen;
+	struct if_data_ext dext;
 	char *next, *lim;
 	char name[IFNAMSIZ];
 	size_t len;
@@ -1085,6 +1124,7 @@ fetchifs(void)
 	if (prog_sysctl(mib, 6, buf, &len, NULL, 0) == -1)
 		err(1, "sysctl");
 
+	memset(&dext, 0, sizeof(dext));
 	lim = buf + len;
 	for (next = buf; next < lim; next += rtm->rtm_msglen) {
 		rtm = (struct rt_msghdr *)next;
@@ -1104,10 +1144,12 @@ fetchifs(void)
 			bzero(name, sizeof(name));
 			if (sdl->sdl_nlen >= IFNAMSIZ)
 				memcpy(name, sdl->sdl_data, IFNAMSIZ - 1);
-			else if (sdl->sdl_nlen > 0) 
+			else if (sdl->sdl_nlen > 0)
 				memcpy(name, sdl->sdl_data, sdl->sdl_nlen);
 
-			if (interface != 0 && !strcmp(name, interface)) {
+			if_data_ext_get(name, &dext);
+
+			if (interface != NULL && !strcmp(name, interface)) {
 				strlcpy(ip_cur.ift_name, name,
 				    sizeof(ip_cur.ift_name));
 				ip_cur.ift_ip = ifd->ifi_ipackets;
@@ -1117,7 +1159,8 @@ fetchifs(void)
 				ip_cur.ift_ob = ifd->ifi_obytes;
 				ip_cur.ift_oe = ifd->ifi_oerrors;
 				ip_cur.ift_co = ifd->ifi_collisions;
-				ip_cur.ift_dr = ifd->ifi_iqdrops;
+				ip_cur.ift_iq = ifd->ifi_iqdrops;
+				ip_cur.ift_oq = dext.ifi_oqdrops;
 			}
 
 			sum_cur.ift_ip += ifd->ifi_ipackets;
@@ -1127,7 +1170,8 @@ fetchifs(void)
 			sum_cur.ift_ob += ifd->ifi_obytes;
 			sum_cur.ift_oe += ifd->ifi_oerrors;
 			sum_cur.ift_co += ifd->ifi_collisions;
-			sum_cur.ift_dr += ifd->ifi_iqdrops;
+			sum_cur.ift_iq += ifd->ifi_iqdrops;
+			sum_cur.ift_oq += dext.ifi_oqdrops;
 			break;
 		}
 	}
@@ -1141,6 +1185,7 @@ fetchifs(void)
 		ip_cur.ift_ob = ifd->ifi_obytes;
 		ip_cur.ift_oe = ifd->ifi_oerrors;
 		ip_cur.ift_co = ifd->ifi_collisions;
-		ip_cur.ift_dr = ifd->ifi_iqdrops;
+		ip_cur.ift_iq = ifd->ifi_iqdrops;
+		ip_cur.ift_oq = dext.ifi_oqdrops;
 	}
 }

Index: src/usr.bin/netstat/inet.c
diff -u src/usr.bin/netstat/inet.c:1.107 src/usr.bin/netstat/inet.c:1.107.6.1
--- src/usr.bin/netstat/inet.c:1.107	Fri Dec 23 06:22:00 2016
+++ src/usr.bin/netstat/inet.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: inet.c,v 1.107 2016/12/23 06:22:00 mrg Exp $	*/
+/*	$NetBSD: inet.c,v 1.107.6.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)inet.c	8.4 (Berkeley) 4/20/94";
 #else
-__RCSID("$NetBSD: inet.c,v 1.107 2016/12/23 06:22:00 mrg Exp $");
+__RCSID("$NetBSD: inet.c,v 1.107.6.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -95,7 +95,7 @@ __RCSID("$NetBSD: inet.c,v 1.107 2016/12
 #include "prog_ops.h"
 
 char	*inetname(struct in_addr *);
-void	inetprint(struct in_addr *, u_int16_t, const char *, int);
+void	inetprint(struct in_addr *, uint16_t, const char *, int);
 
 void	print_vtw_v4(const vtw_t *);
 
@@ -122,7 +122,7 @@ protoprhdr(void)
 		printf("%-8.8s ", "PCB");
 	printf(
 	    Vflag ? "%-5.5s %-6.6s %-6.6s %s%-*.*s %-*.*s %-13.13s Expires\n"
-	          : "%-5.5s %-6.6s %-6.6s %s%-*.*s %-*.*s %s\n",
+		  : "%-5.5s %-6.6s %-6.6s %s%-*.*s %-*.*s %s\n",
 		"Proto", "Recv-Q", "Send-Q", compact ? "" : " ",
 		width, width, "Local Address",
 		width, width, "Foreign Address",
@@ -131,25 +131,25 @@ protoprhdr(void)
 
 static void
 protopr0(intptr_t ppcb, u_long rcv_sb_cc, u_long snd_sb_cc,
-	 struct in_addr *laddr, u_int16_t lport,
-	 struct in_addr *faddr, u_int16_t fport,
+	 struct in_addr *laddr, uint16_t lport,
+	 struct in_addr *faddr, uint16_t fport,
 	 short t_state, const char *name, int inp_flags,
 	 const struct timeval *expires)
 {
 	static const char *shorttcpstates[] = {
 		"CLOSED",	"LISTEN",	"SYNSEN",	"SYSRCV",
 		"ESTABL",	"CLWAIT",	"FWAIT1",	"CLOSNG",
-		"LASTAK",	"FWAIT2",	"TMWAIT",
+		"LASTAK",	"FWAIT2",	"TMWAIT"
 	};
 	int istcp;
 
 	istcp = strcmp(name, "tcp") == 0;
 
-	if (Aflag) {
+	if (Aflag)
 		printf("%8" PRIxPTR " ", ppcb);
-	}
+
 	printf("%-5.5s %6ld %6ld%s", name, rcv_sb_cc, snd_sb_cc,
-	       compact ? "" : " ");
+	    compact ? "" : " ");
 	if (numeric_port) {
 		inetprint(laddr, lport, name, 1);
 		inetprint(faddr, fport, name, 1);
@@ -165,7 +165,7 @@ protopr0(intptr_t ppcb, u_long rcv_sb_cc
 			printf(" %d", t_state);
 		else
 			printf(" %s", compact ? shorttcpstates[t_state] :
-			       tcpstates[t_state]);
+			    tcpstates[t_state]);
 	}
 	if (Vflag && expires != NULL) {
 		if (expires->tv_sec == 0 && expires->tv_usec == -1)
@@ -187,7 +187,7 @@ dbg_printf(const char *fmt, ...)
 	return;
 }
 
-void 
+void
 print_vtw_v4(const vtw_t *vtw)
 {
 	const vtw_v4_t *v4 = (const vtw_v4_t *)vtw;
@@ -205,23 +205,23 @@ print_vtw_v4(const vtw_t *vtw)
 	timersub(&vtw->expire, &now, &delta);
 
 	if (vtw->expire.tv_sec == 0 && vtw->expire.tv_usec == -1) {
-		dbg_printf("%15.15s:%d %15.15s:%d reclaimed\n"
-		    ,buf[0], ntohs(v4->lport)
-		    ,buf[1], ntohs(v4->fport));
+		dbg_printf("%15.15s:%d %15.15s:%d reclaimed\n",
+		    buf[0], ntohs(v4->lport),
+		    buf[1], ntohs(v4->fport));
 		if (!(Vflag && vflag))
 			return;
 	} else if (vtw->expire.tv_sec == 0)
 		return;
 	else if (timercmp(&delta, &zero, <) && !(Vflag && vflag)) {
-		dbg_printf("%15.15s:%d %15.15s:%d expired\n"
-		    ,buf[0], ntohs(v4->lport)
-		    ,buf[1], ntohs(v4->fport));
+		dbg_printf("%15.15s:%d %15.15s:%d expired\n",
+		    buf[0], ntohs(v4->lport),
+		    buf[1], ntohs(v4->fport));
 		return;
 	} else {
-		dbg_printf("%15.15s:%d %15.15s:%d expires in %.3fms\n"
-		    ,buf[0], ntohs(v4->lport)
-		    ,buf[1], ntohs(v4->fport)
-		    ,delta.tv_sec * 1000.0 + delta.tv_usec / 1000.0);
+		dbg_printf("%15.15s:%d %15.15s:%d expires in %.3fms\n",
+		    buf[0], ntohs(v4->lport),
+		    buf[1], ntohs(v4->fport),
+		    delta.tv_sec * 1000.0 + delta.tv_usec / 1000.0);
 	}
 	protopr0(0, 0, 0,
 		 &la, v4->lport,
@@ -230,7 +230,8 @@ print_vtw_v4(const vtw_t *vtw)
 }
 
 struct kinfo_pcb *
-getpcblist_sysctl(const char *name, size_t *len) {
+getpcblist_sysctl(const char *name, size_t *len)
+{
 	int mib[8];
 	size_t namelen = 0, size = 0;
 	char *mibname = NULL;
@@ -247,7 +248,7 @@ getpcblist_sysctl(const char *name, size
 			*len = 0;
 			return NULL;
 		}
-			
+
 		err(1, "sysctlnametomib: %s", mibname);
 	}
 
@@ -272,7 +273,8 @@ getpcblist_sysctl(const char *name, size
 }
 
 static struct kinfo_pcb *
-getpcblist_kmem(u_long off, const char *name, size_t *len) {
+getpcblist_kmem(u_long off, const char *name, size_t *len)
+{
 	struct inpcbtable table;
 	struct inpcb_hdr *next, *prev;
 	struct inpcb inpcb;
@@ -281,7 +283,7 @@ getpcblist_kmem(u_long off, const char *
 	int istcp = strcmp(name, "tcp") == 0;
 	struct kinfo_pcb *pcblist;
 	size_t size = 100, i;
-	struct sockaddr_in sin; 
+	struct sockaddr_in sin;
 	struct inpcbqueue *head;
 
 	if (off == 0) {
@@ -358,7 +360,7 @@ protopr(u_long off, const char *name)
 	if (use_sysctl)
 		pcblist = getpcblist_sysctl(name, &len);
 	else
-		pcblist = getpcblist_kmem(off, name, &len);	
+		pcblist = getpcblist_kmem(off, name, &len);
 
 	for (i = 0; i < len; i++) {
 		struct sockaddr_in src, dst;
@@ -366,8 +368,7 @@ protopr(u_long off, const char *name)
 		memcpy(&src, &pcblist[i].ki_s, sizeof(src));
 		memcpy(&dst, &pcblist[i].ki_d, sizeof(dst));
 
-		if (!aflag &&
-		    inet_lnaof(dst.sin_addr) == INADDR_ANY)
+		if (!aflag && (inet_lnaof(dst.sin_addr) == INADDR_ANY))
 			continue;
 
 		if (first) {
@@ -414,18 +415,18 @@ tcp_stats(u_long off, const char *name)
 
 	printf ("%s:\n", name);
 
-#define	ps(f, m) if (tcpstat[f] || sflag <= 1) \
-    printf(m, tcpstat[f])
-#define	p(f, m) if (tcpstat[f] || sflag <= 1) \
-    printf(m, tcpstat[f], plural(tcpstat[f]))
-#define	p2(f1, f2, m) if (tcpstat[f1] || tcpstat[f2] || sflag <= 1) \
-    printf(m, tcpstat[f1], plural(tcpstat[f1]), \
-    tcpstat[f2], plural(tcpstat[f2]))
-#define	p2s(f1, f2, m) if (tcpstat[f1] || tcpstat[f2] || sflag <= 1) \
-    printf(m, tcpstat[f1], plural(tcpstat[f1]), \
-    tcpstat[f2])
-#define	p3(f, m) if (tcpstat[f] || sflag <= 1) \
-    printf(m, tcpstat[f], plurales(tcpstat[f]))
+#define	ps(f, m) if (tcpstat[f] || sflag <= 1)	\
+		printf(m, tcpstat[f])
+#define	p(f, m) if (tcpstat[f] || sflag <= 1)			\
+		printf(m, tcpstat[f], plural(tcpstat[f]))
+#define	p2(f1, f2, m) if (tcpstat[f1] || tcpstat[f2] || sflag <= 1)	\
+		printf(m, tcpstat[f1], plural(tcpstat[f1]),		\
+		    tcpstat[f2], plural(tcpstat[f2]))
+#define	p2s(f1, f2, m) if (tcpstat[f1] || tcpstat[f2] || sflag <= 1)	\
+		printf(m, tcpstat[f1], plural(tcpstat[f1]),		\
+		    tcpstat[f2])
+#define	p3(f, m) if (tcpstat[f] || sflag <= 1)			\
+		printf(m, tcpstat[f], plurales(tcpstat[f]))
 
 	p(TCP_STAT_SNDTOTAL, "\t%" PRIu64 " packet%s sent\n");
 	p2(TCP_STAT_SNDPACK,TCP_STAT_SNDBYTE,
@@ -442,69 +443,84 @@ tcp_stats(u_long off, const char *name)
 	    "\t\t%" PRIu64 " send attempt%s resulted in self-quench\n");
 	p(TCP_STAT_RCVTOTAL, "\t%" PRIu64 " packet%s received\n");
 	p2(TCP_STAT_RCVACKPACK, TCP_STAT_RCVACKBYTE,
-		"\t\t%" PRIu64 " ack%s (for %" PRIu64 " byte%s)\n");
+	    "\t\t%" PRIu64 " ack%s (for %" PRIu64 " byte%s)\n");
 	p(TCP_STAT_RCVDUPACK, "\t\t%" PRIu64 " duplicate ack%s\n");
 	p(TCP_STAT_RCVACKTOOMUCH, "\t\t%" PRIu64 " ack%s for unsent data\n");
 	p2(TCP_STAT_RCVPACK, TCP_STAT_RCVBYTE,
-		"\t\t%" PRIu64 " packet%s (%" PRIu64 " byte%s) received in-sequence\n");
+	    "\t\t%" PRIu64 " packet%s (%" PRIu64 " byte%s) received in-sequence\n");
 	p2(TCP_STAT_RCVDUPPACK, TCP_STAT_RCVDUPBYTE,
-		"\t\t%" PRIu64 " completely duplicate packet%s (%" PRIu64 " byte%s)\n");
+	    "\t\t%" PRIu64 " completely duplicate packet%s (%" PRIu64 " byte%s)\n");
 	p(TCP_STAT_PAWSDROP, "\t\t%" PRIu64 " old duplicate packet%s\n");
 	p2(TCP_STAT_RCVPARTDUPPACK, TCP_STAT_RCVPARTDUPBYTE,
-		"\t\t%" PRIu64 " packet%s with some dup. data (%" PRIu64 " byte%s duped)\n");
+	    "\t\t%" PRIu64 " packet%s with some dup. data (%" PRIu64 " byte%s duped)\n");
 	p2(TCP_STAT_RCVOOPACK, TCP_STAT_RCVOOBYTE,
-		"\t\t%" PRIu64 " out-of-order packet%s (%" PRIu64 " byte%s)\n");
+	    "\t\t%" PRIu64 " out-of-order packet%s (%" PRIu64 " byte%s)\n");
 	p2(TCP_STAT_RCVPACKAFTERWIN, TCP_STAT_RCVBYTEAFTERWIN,
-		"\t\t%" PRIu64 " packet%s (%" PRIu64 " byte%s) of data after window\n");
+	    "\t\t%" PRIu64 " packet%s (%" PRIu64 " byte%s) of data after window\n");
 	p(TCP_STAT_RCVWINPROBE, "\t\t%" PRIu64 " window probe%s\n");
 	p(TCP_STAT_RCVWINUPD, "\t\t%" PRIu64 " window update packet%s\n");
-	p(TCP_STAT_RCVAFTERCLOSE, "\t\t%" PRIu64 " packet%s received after close\n");
-	p(TCP_STAT_RCVBADSUM, "\t\t%" PRIu64 " discarded for bad checksum%s\n");
-	p(TCP_STAT_RCVBADOFF, "\t\t%" PRIu64 " discarded for bad header offset field%s\n");
-	ps(TCP_STAT_RCVSHORT, "\t\t%" PRIu64 " discarded because packet too short\n");
+	p(TCP_STAT_RCVAFTERCLOSE,
+	    "\t\t%" PRIu64 " packet%s received after close\n");
+	p(TCP_STAT_RCVBADSUM,
+	    "\t\t%" PRIu64 " discarded for bad checksum%s\n");
+	p(TCP_STAT_RCVBADOFF,
+	    "\t\t%" PRIu64 " discarded for bad header offset field%s\n");
+	ps(TCP_STAT_RCVSHORT,
+	    "\t\t%" PRIu64 " discarded because packet too short\n");
 	p(TCP_STAT_CONNATTEMPT, "\t%" PRIu64 " connection request%s\n");
 	p(TCP_STAT_ACCEPTS, "\t%" PRIu64 " connection accept%s\n");
 	p(TCP_STAT_CONNECTS,
-		"\t%" PRIu64 " connection%s established (including accepts)\n");
+	    "\t%" PRIu64 " connection%s established (including accepts)\n");
 	p2(TCP_STAT_CLOSED, TCP_STAT_DROPS,
-		"\t%" PRIu64 " connection%s closed (including %" PRIu64 " drop%s)\n");
-	p(TCP_STAT_CONNDROPS, "\t%" PRIu64 " embryonic connection%s dropped\n");
+	    "\t%" PRIu64 " connection%s closed (including %" PRIu64 " drop%s)\n");
+	p(TCP_STAT_CONNDROPS,
+	    "\t%" PRIu64 " embryonic connection%s dropped\n");
 	p(TCP_STAT_DELAYED_FREE, "\t%" PRIu64 " delayed free%s of tcpcb\n");
 	p2(TCP_STAT_RTTUPDATED, TCP_STAT_SEGSTIMED,
-		"\t%" PRIu64 " segment%s updated rtt (of %" PRIu64 " attempt%s)\n");
+	    "\t%" PRIu64 " segment%s updated rtt (of %" PRIu64 " attempt%s)\n");
 	p(TCP_STAT_REXMTTIMEO, "\t%" PRIu64 " retransmit timeout%s\n");
 	p(TCP_STAT_TIMEOUTDROP,
-		"\t\t%" PRIu64 " connection%s dropped by rexmit timeout\n");
+	    "\t\t%" PRIu64 " connection%s dropped by rexmit timeout\n");
 	p2(TCP_STAT_PERSISTTIMEO, TCP_STAT_PERSISTDROPS,
 	   "\t%" PRIu64 " persist timeout%s (resulting in %" PRIu64 " dropped "
 		"connection%s)\n");
 	p(TCP_STAT_KEEPTIMEO, "\t%" PRIu64 " keepalive timeout%s\n");
 	p(TCP_STAT_KEEPPROBE, "\t\t%" PRIu64 " keepalive probe%s sent\n");
-	p(TCP_STAT_KEEPDROPS, "\t\t%" PRIu64 " connection%s dropped by keepalive\n");
+	p(TCP_STAT_KEEPDROPS,
+	    "\t\t%" PRIu64 " connection%s dropped by keepalive\n");
 	p(TCP_STAT_PREDACK, "\t%" PRIu64 " correct ACK header prediction%s\n");
-	p(TCP_STAT_PREDDAT, "\t%" PRIu64 " correct data packet header prediction%s\n");
+	p(TCP_STAT_PREDDAT,
+	    "\t%" PRIu64 " correct data packet header prediction%s\n");
 	p3(TCP_STAT_PCBHASHMISS, "\t%" PRIu64 " PCB hash miss%s\n");
 	ps(TCP_STAT_NOPORT, "\t%" PRIu64 " dropped due to no socket\n");
-	p(TCP_STAT_CONNSDRAINED, "\t%" PRIu64 " connection%s drained due to memory "
-		"shortage\n");
-	p(TCP_STAT_PMTUBLACKHOLE, "\t%" PRIu64 " PMTUD blackhole%s detected\n");
+	p(TCP_STAT_CONNSDRAINED,
+	    "\t%" PRIu64 " connection%s drained due to memory shortage\n");
+	p(TCP_STAT_PMTUBLACKHOLE,
+	    "\t%" PRIu64 " PMTUD blackhole%s detected\n");
 
 	p(TCP_STAT_BADSYN, "\t%" PRIu64 " bad connection attempt%s\n");
 	ps(TCP_STAT_SC_ADDED, "\t%" PRIu64 " SYN cache entries added\n");
 	p(TCP_STAT_SC_COLLISIONS, "\t\t%" PRIu64 " hash collision%s\n");
 	ps(TCP_STAT_SC_COMPLETED, "\t\t%" PRIu64 " completed\n");
-	ps(TCP_STAT_SC_ABORTED, "\t\t%" PRIu64 " aborted (no space to build PCB)\n");
+	ps(TCP_STAT_SC_ABORTED,
+	    "\t\t%" PRIu64 " aborted (no space to build PCB)\n");
 	ps(TCP_STAT_SC_TIMED_OUT, "\t\t%" PRIu64 " timed out\n");
-	ps(TCP_STAT_SC_OVERFLOWED, "\t\t%" PRIu64 " dropped due to overflow\n");
-	ps(TCP_STAT_SC_BUCKETOVERFLOW, "\t\t%" PRIu64 " dropped due to bucket overflow\n");
+	ps(TCP_STAT_SC_OVERFLOWED,
+	    "\t\t%" PRIu64 " dropped due to overflow\n");
+	ps(TCP_STAT_SC_BUCKETOVERFLOW,
+	    "\t\t%" PRIu64 " dropped due to bucket overflow\n");
 	ps(TCP_STAT_SC_RESET, "\t\t%" PRIu64 " dropped due to RST\n");
-	ps(TCP_STAT_SC_UNREACH, "\t\t%" PRIu64 " dropped due to ICMP unreachable\n");
-	ps(TCP_STAT_SC_DELAYED_FREE, "\t\t%" PRIu64 " delayed free of SYN cache "
-		"entries\n");
-	p(TCP_STAT_SC_RETRANSMITTED, "\t%" PRIu64 " SYN,ACK%s retransmitted\n");
-	p(TCP_STAT_SC_DUPESYN, "\t%" PRIu64 " duplicate SYN%s received for entries "
+	ps(TCP_STAT_SC_UNREACH,
+	    "\t\t%" PRIu64 " dropped due to ICMP unreachable\n");
+	ps(TCP_STAT_SC_DELAYED_FREE,
+	    "\t\t%" PRIu64 " delayed free of SYN cache entries\n");
+	p(TCP_STAT_SC_RETRANSMITTED,
+	    "\t%" PRIu64 " SYN,ACK%s retransmitted\n");
+	p(TCP_STAT_SC_DUPESYN,
+	    "\t%" PRIu64 " duplicate SYN%s received for entries "
 		"already in the cache\n");
-	p(TCP_STAT_SC_DROPPED, "\t%" PRIu64 " SYN%s dropped (no route or no space)\n");
+	p(TCP_STAT_SC_DROPPED,
+	    "\t%" PRIu64 " SYN%s dropped (no route or no space)\n");
 	p(TCP_STAT_BADSIG, "\t%" PRIu64 " packet%s with bad signature\n");
 	p(TCP_STAT_GOODSIG, "\t%" PRIu64 " packet%s with good signature\n");
 
@@ -541,21 +557,22 @@ udp_stats(u_long off, const char *name)
 
 	printf ("%s:\n", name);
 
-#define	ps(f, m) if (udpstat[f] || sflag <= 1) \
-    printf(m, udpstat[f])
-#define	p(f, m) if (udpstat[f] || sflag <= 1) \
-    printf(m, udpstat[f], plural(udpstat[f]))
-#define	p3(f, m) if (udpstat[f] || sflag <= 1) \
-    printf(m, udpstat[f], plurales(udpstat[f]))
+#define	ps(f, m) if (udpstat[f] || sflag <= 1)	\
+		printf(m, udpstat[f])
+#define	p(f, m) if (udpstat[f] || sflag <= 1)			\
+		printf(m, udpstat[f], plural(udpstat[f]))
+#define	p3(f, m) if (udpstat[f] || sflag <= 1)			\
+		printf(m, udpstat[f], plurales(udpstat[f]))
 
 	p(UDP_STAT_IPACKETS, "\t%" PRIu64 " datagram%s received\n");
 	ps(UDP_STAT_HDROPS, "\t%" PRIu64 " with incomplete header\n");
 	ps(UDP_STAT_BADLEN, "\t%" PRIu64 " with bad data length field\n");
 	ps(UDP_STAT_BADSUM, "\t%" PRIu64 " with bad checksum\n");
 	ps(UDP_STAT_NOPORT, "\t%" PRIu64 " dropped due to no socket\n");
-	p(UDP_STAT_NOPORTBCAST,
-	  "\t%" PRIu64 " broadcast/multicast datagram%s dropped due to no socket\n");
-	ps(UDP_STAT_FULLSOCK, "\t%" PRIu64 " dropped due to full socket buffers\n");
+	p(UDP_STAT_NOPORTBCAST, "\t%" PRIu64
+	    " broadcast/multicast datagram%s dropped due to no socket\n");
+	ps(UDP_STAT_FULLSOCK, "\t%" PRIu64
+	    " dropped due to full socket buffers\n");
 	delivered = udpstat[UDP_STAT_IPACKETS] -
 		    udpstat[UDP_STAT_HDROPS] -
 		    udpstat[UDP_STAT_BADLEN] -
@@ -585,7 +602,7 @@ ip_stats(u_long off, const char *name)
 		size_t size = sizeof(ipstat);
 
 		if (sysctlbyname("net.inet.ip.stats", ipstat, &size,
-				 NULL, 0) == -1)
+		    NULL, 0) == -1)
 			return;
 	} else {
 		warnx("%s stats not available via KVM.", name);
@@ -594,28 +611,33 @@ ip_stats(u_long off, const char *name)
 
 	printf("%s:\n", name);
 
-#define	ps(f, m) if (ipstat[f] || sflag <= 1) \
-    printf(m, ipstat[f])
-#define	p(f, m) if (ipstat[f] || sflag <= 1) \
-    printf(m, ipstat[f], plural(ipstat[f]))
+#define	ps(f, m) if (ipstat[f] || sflag <= 1)	\
+		printf(m, ipstat[f])
+#define	p(f, m) if (ipstat[f] || sflag <= 1)		\
+		printf(m, ipstat[f], plural(ipstat[f]))
 
 	p(IP_STAT_TOTAL, "\t%" PRIu64 " total packet%s received\n");
 	p(IP_STAT_BADSUM, "\t%" PRIu64 " bad header checksum%s\n");
 	ps(IP_STAT_TOOSMALL, "\t%" PRIu64 " with size smaller than minimum\n");
 	ps(IP_STAT_TOOSHORT, "\t%" PRIu64 " with data size < data length\n");
-	ps(IP_STAT_TOOLONG, "\t%" PRIu64 " with length > max ip packet size\n");
+	ps(IP_STAT_TOOLONG,
+	    "\t%" PRIu64 " with length > max ip packet size\n");
 	ps(IP_STAT_BADHLEN, "\t%" PRIu64 " with header length < data size\n");
 	ps(IP_STAT_BADLEN, "\t%" PRIu64 " with data length < header length\n");
 	ps(IP_STAT_BADOPTIONS, "\t%" PRIu64 " with bad options\n");
 	ps(IP_STAT_BADVERS, "\t%" PRIu64 " with incorrect version number\n");
 	p(IP_STAT_FRAGMENTS, "\t%" PRIu64 " fragment%s received\n");
-	p(IP_STAT_FRAGDROPPED, "\t%" PRIu64 " fragment%s dropped (dup or out of space)\n");
-	p(IP_STAT_RCVMEMDROP, "\t%" PRIu64 " fragment%s dropped (out of ipqent)\n");
+	p(IP_STAT_FRAGDROPPED,
+	    "\t%" PRIu64 " fragment%s dropped (dup or out of space)\n");
+	p(IP_STAT_RCVMEMDROP,
+	    "\t%" PRIu64 " fragment%s dropped (out of ipqent)\n");
 	p(IP_STAT_BADFRAGS, "\t%" PRIu64 " malformed fragment%s dropped\n");
-	p(IP_STAT_FRAGTIMEOUT, "\t%" PRIu64 " fragment%s dropped after timeout\n");
+	p(IP_STAT_FRAGTIMEOUT,
+	    "\t%" PRIu64 " fragment%s dropped after timeout\n");
 	p(IP_STAT_REASSEMBLED, "\t%" PRIu64 " packet%s reassembled ok\n");
 	p(IP_STAT_DELIVERED, "\t%" PRIu64 " packet%s for this host\n");
-	p(IP_STAT_NOPROTO, "\t%" PRIu64 " packet%s for unknown/unsupported protocol\n");
+	p(IP_STAT_NOPROTO,
+	    "\t%" PRIu64 " packet%s for unknown/unsupported protocol\n");
 	p(IP_STAT_FORWARD, "\t%" PRIu64 " packet%s forwarded");
 	p(IP_STAT_FASTFORWARD, " (%" PRIu64 " packet%s fast forwarded)");
 	if (ipstat[IP_STAT_FORWARD] || sflag <= 1)
@@ -623,14 +645,21 @@ ip_stats(u_long off, const char *name)
 	p(IP_STAT_CANTFORWARD, "\t%" PRIu64 " packet%s not forwardable\n");
 	p(IP_STAT_REDIRECTSENT, "\t%" PRIu64 " redirect%s sent\n");
 	p(IP_STAT_NOGIF, "\t%" PRIu64 " packet%s no matching gif found\n");
+	p(IP_STAT_NOIPSEC,
+	    "\t%" PRIu64 " packet%s no matching ipsecif found\n");
 	p(IP_STAT_LOCALOUT, "\t%" PRIu64 " packet%s sent from this host\n");
-	p(IP_STAT_RAWOUT, "\t%" PRIu64 " packet%s sent with fabricated ip header\n");
-	p(IP_STAT_ODROPPED, "\t%" PRIu64 " output packet%s dropped due to no bufs, etc.\n");
-	p(IP_STAT_NOROUTE, "\t%" PRIu64 " output packet%s discarded due to no route\n");
+	p(IP_STAT_RAWOUT,
+	    "\t%" PRIu64 " packet%s sent with fabricated ip header\n");
+	p(IP_STAT_ODROPPED,
+	    "\t%" PRIu64 " output packet%s dropped due to no bufs, etc.\n");
+	p(IP_STAT_NOROUTE,
+	    "\t%" PRIu64 " output packet%s discarded due to no route\n");
 	p(IP_STAT_FRAGMENTED, "\t%" PRIu64 " output datagram%s fragmented\n");
 	p(IP_STAT_OFRAGMENTS, "\t%" PRIu64 " fragment%s created\n");
-	p(IP_STAT_CANTFRAG, "\t%" PRIu64 " datagram%s that can't be fragmented\n");
-	p(IP_STAT_BADADDR, "\t%" PRIu64 " datagram%s with bad address in header\n");
+	p(IP_STAT_CANTFRAG,
+	    "\t%" PRIu64 " datagram%s that can't be fragmented\n");
+	p(IP_STAT_BADADDR,
+	    "\t%" PRIu64 " datagram%s with bad address in header\n");
 #undef ps
 #undef p
 }
@@ -661,8 +690,8 @@ icmp_stats(u_long off, const char *name)
     printf(m, icmpstat[f], plural(icmpstat[f]))
 
 	p(ICMP_STAT_ERROR, "\t%" PRIu64 " call%s to icmp_error\n");
-	p(ICMP_STAT_OLDICMP,
-	    "\t%" PRIu64 " error%s not generated because old message was icmp\n");
+	p(ICMP_STAT_OLDICMP, "\t%" PRIu64
+	    " error%s not generated because old message was icmp\n");
 	for (first = 1, i = 0; i < ICMP_MAXTYPE + 1; i++)
 		if (icmpstat[ICMP_STAT_OUTHIST + i] != 0) {
 			if (first) {
@@ -676,8 +705,10 @@ icmp_stats(u_long off, const char *name)
 	p(ICMP_STAT_TOOSHORT, "\t%" PRIu64 " message%s < minimum length\n");
 	p(ICMP_STAT_CHECKSUM, "\t%" PRIu64 " bad checksum%s\n");
 	p(ICMP_STAT_BADLEN, "\t%" PRIu64 " message%s with bad length\n");
-	p(ICMP_STAT_BMCASTECHO, "\t%" PRIu64 " multicast echo request%s ignored\n");
-	p(ICMP_STAT_BMCASTTSTAMP, "\t%" PRIu64 " multicast timestamp request%s ignored\n");
+	p(ICMP_STAT_BMCASTECHO,
+	    "\t%" PRIu64 " multicast echo request%s ignored\n");
+	p(ICMP_STAT_BMCASTTSTAMP,
+	    "\t%" PRIu64 " multicast timestamp request%s ignored\n");
 	for (first = 1, i = 0; i < ICMP_MAXTYPE + 1; i++)
 		if (icmpstat[ICMP_STAT_INHIST + i] != 0) {
 			if (first) {
@@ -704,7 +735,7 @@ igmp_stats(u_long off, const char *name)
 		size_t size = sizeof(igmpstat);
 
 		if (sysctlbyname("net.inet.igmp.stats", igmpstat, &size,
-				 NULL, 0) == -1)
+		    NULL, 0) == -1)
 			return;
 	} else {
 		warnx("%s stats not available via KVM.", name);
@@ -713,19 +744,28 @@ igmp_stats(u_long off, const char *name)
 
 	printf("%s:\n", name);
 
-#define	p(f, m) if (igmpstat[f] || sflag <= 1) \
-    printf(m, igmpstat[f], plural(igmpstat[f]))
-#define	py(f, m) if (igmpstat[f] || sflag <= 1) \
-    printf(m, igmpstat[f], igmpstat[f] != 1 ? "ies" : "y")
+#define	p(f, m) if (igmpstat[f] || sflag <= 1)			\
+		printf(m, igmpstat[f], plural(igmpstat[f]))
+#define	py(f, m) if (igmpstat[f] || sflag <= 1)				\
+		printf(m, igmpstat[f], igmpstat[f] != 1 ? "ies" : "y")
+
 	p(IGMP_STAT_RCV_TOTAL, "\t%" PRIu64 " message%s received\n");
-        p(IGMP_STAT_RCV_TOOSHORT, "\t%" PRIu64 " message%s received with too few bytes\n");
-        p(IGMP_STAT_RCV_BADSUM, "\t%" PRIu64 " message%s received with bad checksum\n");
-        py(IGMP_STAT_RCV_QUERIES, "\t%" PRIu64 " membership quer%s received\n");
-        py(IGMP_STAT_RCV_BADQUERIES, "\t%" PRIu64 " membership quer%s received with invalid field(s)\n");
-        p(IGMP_STAT_RCV_REPORTS, "\t%" PRIu64 " membership report%s received\n");
-        p(IGMP_STAT_RCV_BADREPORTS, "\t%" PRIu64 " membership report%s received with invalid field(s)\n");
-        p(IGMP_STAT_RCV_OURREPORTS, "\t%" PRIu64 " membership report%s received for groups to which we belong\n");
-        p(IGMP_STAT_SND_REPORTS, "\t%" PRIu64 " membership report%s sent\n");
+	p(IGMP_STAT_RCV_TOOSHORT,
+	    "\t%" PRIu64 " message%s received with too few bytes\n");
+	p(IGMP_STAT_RCV_BADSUM,
+	    "\t%" PRIu64 " message%s received with bad checksum\n");
+	py(IGMP_STAT_RCV_QUERIES,
+	    "\t%" PRIu64 " membership quer%s received\n");
+	py(IGMP_STAT_RCV_BADQUERIES,
+	    "\t%" PRIu64 " membership quer%s received with invalid field(s)\n");
+	p(IGMP_STAT_RCV_REPORTS,
+	    "\t%" PRIu64 " membership report%s received\n");
+	p(IGMP_STAT_RCV_BADREPORTS, "\t%" PRIu64
+	    " membership report%s received with invalid field(s)\n");
+	p(IGMP_STAT_RCV_OURREPORTS, "\t%" PRIu64
+	    " membership report%s received for groups to which we belong\n");
+	p(IGMP_STAT_SND_REPORTS,
+	    "\t%" PRIu64 " membership report%s sent\n");
 #undef p
 #undef py
 }
@@ -763,17 +803,18 @@ carp_stats(u_long off, const char *name)
 	p(CARP_STAT_BADTTL,
 	    "\t\t%" PRIu64 " packet%s discarded for wrong TTL\n");
 	p(CARP_STAT_HDROPS, "\t\t%" PRIu64 " packet%s shorter than header\n");
-	p(CARP_STAT_BADSUM, "\t\t%" PRIu64
-		" packet%s discarded for bad checksum\n");
+	p(CARP_STAT_BADSUM,
+	    "\t\t%" PRIu64 " packet%s discarded for bad checksum\n");
 	p(CARP_STAT_BADVER,
 	    "\t\t%" PRIu64 " packet%s discarded with a bad version\n");
 	p2(CARP_STAT_BADLEN,
 	    "\t\t%" PRIu64 " discarded because packet was too short\n");
 	p(CARP_STAT_BADAUTH,
 	    "\t\t%" PRIu64 " packet%s discarded for bad authentication\n");
-	p(CARP_STAT_BADVHID, "\t\t%" PRIu64 " packet%s discarded for bad vhid\n");
+	p(CARP_STAT_BADVHID,
+	    "\t\t%" PRIu64 " packet%s discarded for bad vhid\n");
 	p(CARP_STAT_BADADDRS, "\t\t%" PRIu64
-		" packet%s discarded because of a bad address list\n");
+	    " packet%s discarded because of a bad address list\n");
 	p(CARP_STAT_OPACKETS, "\t%" PRIu64 " packet%s sent (IPv4)\n");
 	p(CARP_STAT_OPACKETS6, "\t%" PRIu64 " packet%s sent (IPv6)\n");
 	p2(CARP_STAT_ONOMEM,
@@ -804,15 +845,24 @@ pim_stats(u_long off, const char *name)
 
 	p(pims_rcv_total_msgs, "\t%" PRIu64 " message%s received\n");
 	p(pims_rcv_total_bytes, "\t%" PRIu64 " byte%s received\n");
-	p(pims_rcv_tooshort, "\t%" PRIu64 " message%s received with too few bytes\n");
-        p(pims_rcv_badsum, "\t%" PRIu64 " message%s received with bad checksum\n");
-	p(pims_rcv_badversion, "\t%" PRIu64 " message%s received with bad version\n");
-	p(pims_rcv_registers_msgs, "\t%" PRIu64 " data register message%s received\n");
-	p(pims_rcv_registers_bytes, "\t%" PRIu64 " data register byte%s received\n");
-	p(pims_rcv_registers_wrongiif, "\t%" PRIu64 " data register message%s received on wrong iif\n");
-	p(pims_rcv_badregisters, "\t%" PRIu64 " bad register%s received\n");
-	p(pims_snd_registers_msgs, "\t%" PRIu64 " data register message%s sent\n");
-	p(pims_snd_registers_bytes, "\t%" PRIu64 " data register byte%s sent\n");
+	p(pims_rcv_tooshort,
+	    "\t%" PRIu64 " message%s received with too few bytes\n");
+	p(pims_rcv_badsum,
+	    "\t%" PRIu64 " message%s received with bad checksum\n");
+	p(pims_rcv_badversion,
+	    "\t%" PRIu64 " message%s received with bad version\n");
+	p(pims_rcv_registers_msgs,
+	    "\t%" PRIu64 " data register message%s received\n");
+	p(pims_rcv_registers_bytes,
+	    "\t%" PRIu64 " data register byte%s received\n");
+	p(pims_rcv_registers_wrongiif,
+	    "\t%" PRIu64 " data register message%s received on wrong iif\n");
+	p(pims_rcv_badregisters,
+	    "\t%" PRIu64 " bad register%s received\n");
+	p(pims_snd_registers_msgs,
+	    "\t%" PRIu64 " data register message%s sent\n");
+	p(pims_snd_registers_bytes,
+	    "\t%" PRIu64 " data register byte%s sent\n");
 #undef p
 }
 
@@ -850,22 +900,33 @@ arp_stats(u_long off, const char *name)
 	p(ARP_STAT_RCVREPLY, "\t\t%" PRIu64 " reply packet%s\n");
 	p(ARP_STAT_RCVREQUEST, "\t\t%" PRIu64 " valid request packet%s\n");
 	p(ARP_STAT_RCVMCAST, "\t\t%" PRIu64 " broadcast/multicast packet%s\n");
-	p(ARP_STAT_RCVBADPROTO, "\t\t%" PRIu64 " packet%s with unknown protocol type\n");
-	p(ARP_STAT_RCVBADLEN, "\t\t%" PRIu64 " packet%s with bad (short) length\n");
-	p(ARP_STAT_RCVZEROTPA, "\t\t%" PRIu64 " packet%s with null target IP address\n");
-	p(ARP_STAT_RCVZEROSPA, "\t\t%" PRIu64 " packet%s with null source IP address\n");
-	ps(ARP_STAT_RCVNOINT, "\t\t%" PRIu64 " could not be mapped to an interface\n");
-	p(ARP_STAT_RCVLOCALSHA, "\t\t%" PRIu64 " packet%s sourced from a local hardware "
+	p(ARP_STAT_RCVBADPROTO,
+	    "\t\t%" PRIu64 " packet%s with unknown protocol type\n");
+	p(ARP_STAT_RCVBADLEN,
+	    "\t\t%" PRIu64 " packet%s with bad (short) length\n");
+	p(ARP_STAT_RCVZEROTPA,
+	    "\t\t%" PRIu64 " packet%s with null target IP address\n");
+	p(ARP_STAT_RCVZEROSPA,
+	    "\t\t%" PRIu64 " packet%s with null source IP address\n");
+	ps(ARP_STAT_RCVNOINT,
+	    "\t\t%" PRIu64 " could not be mapped to an interface\n");
+	p(ARP_STAT_RCVLOCALSHA,
+	    "\t\t%" PRIu64 " packet%s sourced from a local hardware "
 	    "address\n");
 	p(ARP_STAT_RCVBCASTSHA, "\t\t%" PRIu64 " packet%s with a broadcast "
 	    "source hardware address\n");
-	p(ARP_STAT_RCVLOCALSPA, "\t\t%" PRIu64 " duplicate%s for a local IP address\n");
-	p(ARP_STAT_RCVOVERPERM, "\t\t%" PRIu64 " attempt%s to overwrite a static entry\n");
-	p(ARP_STAT_RCVOVERINT, "\t\t%" PRIu64 " packet%s received on wrong interface\n");
+	p(ARP_STAT_RCVLOCALSPA,
+	    "\t\t%" PRIu64 " duplicate%s for a local IP address\n");
+	p(ARP_STAT_RCVOVERPERM,
+	    "\t\t%" PRIu64 " attempt%s to overwrite a static entry\n");
+	p(ARP_STAT_RCVOVERINT,
+	    "\t\t%" PRIu64 " packet%s received on wrong interface\n");
 	p(ARP_STAT_RCVOVER, "\t\t%" PRIu64 " entry%s overwritten\n");
-	p(ARP_STAT_RCVLENCHG, "\t\t%" PRIu64 " change%s in hardware address length\n");
+	p(ARP_STAT_RCVLENCHG,
+	    "\t\t%" PRIu64 " change%s in hardware address length\n");
 
-	p(ARP_STAT_DFRTOTAL, "\t%" PRIu64 " packet%s deferred pending ARP resolution\n");
+	p(ARP_STAT_DFRTOTAL,
+	    "\t%" PRIu64 " packet%s deferred pending ARP resolution\n");
 	ps(ARP_STAT_DFRSENT, "\t\t%" PRIu64 " sent\n");
 	ps(ARP_STAT_DFRDROPPED, "\t\t%" PRIu64 " dropped\n");
 
@@ -958,7 +1019,7 @@ inetname(struct in_addr *inp)
 		    C(inp->s_addr >> 8), C(inp->s_addr));
 #undef C
 	}
-	return (line);
+	return line;
 }
 
 /*
@@ -974,9 +1035,9 @@ tcp_dump(u_long off, const char *name, u
 	size_t j, len;
 
 	if (use_sysctl)
-		pcblist = getpcblist_sysctl(name, &len);	
+		pcblist = getpcblist_sysctl(name, &len);
 	else
-		pcblist = getpcblist_kmem(off, name, &len);	
+		pcblist = getpcblist_kmem(off, name, &len);
 
 	for (j = 0; j < len; j++)
 		if (pcblist[j].ki_ppcbaddr == pcbaddr)
@@ -1013,7 +1074,7 @@ tcp_dump(u_long off, const char *name, u
 
 	printf("rxtshift %d, rxtcur %d, dupacks %d\n", tcpcb.t_rxtshift,
 	    tcpcb.t_rxtcur, tcpcb.t_dupacks);
-        printf("peermss %u, ourmss %u, segsz %u, segqlen %u\n\n",
+	printf("peermss %u, ourmss %u, segsz %u, segqlen %u\n\n",
 	    tcpcb.t_peermss, tcpcb.t_ourmss, tcpcb.t_segsz, tcpcb.t_segqlen);
 
 	printf("snd_una %u, snd_nxt %u, snd_up %u\n",

Index: src/usr.bin/netstat/inet6.c
diff -u src/usr.bin/netstat/inet6.c:1.69 src/usr.bin/netstat/inet6.c:1.69.6.1
--- src/usr.bin/netstat/inet6.c:1.69	Sat Dec 17 09:12:22 2016
+++ src/usr.bin/netstat/inet6.c	Mon Sep 12 14:29:19 2022
@@ -1,10 +1,10 @@
-/*	$NetBSD: inet6.c,v 1.69 2016/12/17 09:12:22 mlelstv Exp $	*/
+/*	$NetBSD: inet6.c,v 1.69.6.1 2022/09/12 14:29:19 martin Exp $	*/
 /*	BSDI inet.c,v 2.3 1995/10/24 02:19:29 prb Exp	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -16,7 +16,7 @@
  * 3. Neither the name of the project nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -64,7 +64,7 @@
 #if 0
 static char sccsid[] = "@(#)inet.c	8.4 (Berkeley) 4/20/94";
 #else
-__RCSID("$NetBSD: inet6.c,v 1.69 2016/12/17 09:12:22 mlelstv Exp $");
+__RCSID("$NetBSD: inet6.c,v 1.69.6.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -148,7 +148,6 @@ struct	tcp6cb tcp6cb;
 #else
 struct	tcpcb tcpcb;
 #endif
-struct	socket sockb;
 
 char	*inet6name(const struct in6_addr *);
 void	inet6print(const struct in6_addr *, int, const char *);
@@ -169,20 +168,20 @@ static struct timeval now;
 static void
 ip6protoprhdr(void)
 {
-	
+
 	printf("Active Internet6 connections");
-	
+
 	if (aflag)
 		printf(" (including servers)");
 	putchar('\n');
-	
+
 	if (Aflag) {
 		printf("%-8.8s ", "PCB");
 		width = 18;
 	}
 	printf(
 	    Vflag ? "%-5.5s %-6.6s %-6.6s  %*.*s %*.*s %-13.13s Expires\n"
-	          : "%-5.5s %-6.6s %-6.6s  %*.*s %*.*s %s\n",
+		  : "%-5.5s %-6.6s %-6.6s  %*.*s %*.*s %s\n",
 	    "Proto", "Recv-Q", "Send-Q",
 	    -width, width, "Local Address",
 	    -width, width, "Foreign Address", "(state)");
@@ -190,14 +189,14 @@ ip6protoprhdr(void)
 
 static void
 ip6protopr0(intptr_t ppcb, u_long rcv_sb_cc, u_long snd_sb_cc,
-	const struct in6_addr *laddr, u_int16_t lport,
-	const struct in6_addr *faddr, u_int16_t fport,
+	const struct in6_addr *laddr, uint16_t lport,
+	const struct in6_addr *faddr, uint16_t fport,
 	short t_state, const char *name, const struct timeval *expires)
 {
 	static const char *shorttcpstates[] = {
 		"CLOSED",       "LISTEN",       "SYNSEN",       "SYSRCV",
 		"ESTABL",       "CLWAIT",       "FWAIT1",       "CLOSNG",
-		"LASTAK",       "FWAIT2",       "TMWAIT",
+		"LASTAK",       "FWAIT2",       "TMWAIT"
 	};
 	int istcp;
 
@@ -241,10 +240,11 @@ ip6protopr0(intptr_t ppcb, u_long rcv_sb
 static void
 dbg_printf(const char *fmt, ...)
 {
+
 	return;
 }
 
-void 
+void
 print_vtw_v6(const vtw_t *vtw)
 {
 	const vtw_v6_t *v6 = (const vtw_v6_t *)vtw;
@@ -258,23 +258,23 @@ print_vtw_v6(const vtw_t *vtw)
 	timersub(&vtw->expire, &now, &delta);
 
 	if (vtw->expire.tv_sec == 0 && vtw->expire.tv_usec == -1) {
-		dbg_printf("%15.15s:%d %15.15s:%d reclaimed\n"
-		    ,buf[0], ntohs(v6->lport)
-		    ,buf[1], ntohs(v6->fport));
+		dbg_printf("%15.15s:%d %15.15s:%d reclaimed\n",
+		    buf[0], ntohs(v6->lport),
+		    buf[1], ntohs(v6->fport));
 		if (!(Vflag && vflag))
 			return;
 	} else if (vtw->expire.tv_sec == 0)
 		return;
 	else if (timercmp(&delta, &zero, <) && !(Vflag && vflag)) {
-		dbg_printf("%15.15s:%d %15.15s:%d expired\n"
-		    ,buf[0], ntohs(v6->lport)
-		    ,buf[1], ntohs(v6->fport));
+		dbg_printf("%15.15s:%d %15.15s:%d expired\n",
+		    buf[0], ntohs(v6->lport),
+		    buf[1], ntohs(v6->fport));
 		return;
 	} else {
-		dbg_printf("%15.15s:%d %15.15s:%d expires in %.3fms\n"
-		    ,buf[0], ntohs(v6->lport)
-		    ,buf[1], ntohs(v6->fport)
-		    ,delta.tv_sec * 1000.0 + delta.tv_usec / 1000.0);
+		dbg_printf("%15.15s:%d %15.15s:%d expires in %.3fms\n",
+		    buf[0], ntohs(v6->lport),
+		    buf[1], ntohs(v6->fport),
+		    delta.tv_sec * 1000.0 + delta.tv_usec / 1000.0);
 	}
 	ip6protopr0(0, 0, 0,
 		 &v6->laddr, v6->lport,
@@ -284,8 +284,9 @@ print_vtw_v6(const vtw_t *vtw)
 
 
 static struct kinfo_pcb *
-getpcblist_kmem(u_long off, const char *name, size_t *len) {
-
+getpcblist_kmem(u_long off, const char *name, size_t *len)
+{
+	struct socket sockb;
 	struct inpcbtable table;
 	struct inpcb_hdr *next, *prev;
 	int istcp = strcmp(name, "tcp6") == 0;
@@ -315,7 +316,7 @@ getpcblist_kmem(u_long off, const char *
 		if (in6pcb.in6p_af != AF_INET6)
 			continue;
 
-		kread((u_long)in6pcb.in6p_socket, (char *)&sockb, 
+		kread((u_long)in6pcb.in6p_socket, (char *)&sockb,
 		    sizeof (sockb));
 		if (istcp) {
 #ifdef TCP6
@@ -326,7 +327,7 @@ getpcblist_kmem(u_long off, const char *
 			    (char *)&tcpcb, sizeof (tcpcb));
 #endif
 		}
-		pcblist[i].ki_ppcbaddr = 
+		pcblist[i].ki_ppcbaddr =
 		    istcp ? (uintptr_t) in6pcb.in6p_ppcb : (uintptr_t) prev;
 		pcblist[i].ki_rcvq = (uint64_t)sockb.so_rcv.sb_cc;
 		pcblist[i].ki_sndq = (uint64_t)sockb.so_snd.sb_cc;
@@ -427,56 +428,61 @@ tcp6_stats(u_long off, const char *name)
 
 	printf ("%s:\n", name);
 
-#define	p(f, m) if (tcp6stat.f || sflag <= 1) \
-    printf(m, tcp6stat.f, plural(tcp6stat.f))
-#define	p2(f1, f2, m) if (tcp6stat.f1 || tcp6stat.f2 || sflag <= 1) \
-    printf(m, tcp6stat.f1, plural(tcp6stat.f1), tcp6stat.f2, plural(tcp6stat.f2))
-#define	p3(f, m) if (tcp6stat.f || sflag <= 1) \
-    printf(m, tcp6stat.f, plurales(tcp6stat.f))
+#define	p(f, m) if (tcp6stat.f || sflag <= 1)			\
+		printf(m, tcp6stat.f, plural(tcp6stat.f))
+#define	p2(f1, f2, m) if (tcp6stat.f1 || tcp6stat.f2 || sflag <= 1)	 \
+		printf(m, tcp6stat.f1, plural(tcp6stat.f1), tcp6stat.f2, \
+		    plural(tcp6stat.f2))
+#define	p3(f, m) if (tcp6stat.f || sflag <= 1)			\
+		printf(m, tcp6stat.f, plurales(tcp6stat.f))
 
 	p(tcp6s_sndtotal, "\t%ld packet%s sent\n");
 	p2(tcp6s_sndpack,tcp6s_sndbyte,
-		"\t\t%ld data packet%s (%ld byte%s)\n");
+	    "\t\t%ld data packet%s (%ld byte%s)\n");
 	p2(tcp6s_sndrexmitpack, tcp6s_sndrexmitbyte,
-		"\t\t%ld data packet%s (%ld byte%s) retransmitted\n");
+	    "\t\t%ld data packet%s (%ld byte%s) retransmitted\n");
 	p2(tcp6s_sndacks, tcp6s_delack,
-		"\t\t%ld ack-only packet%s (%ld packet%s delayed)\n");
+	    "\t\t%ld ack-only packet%s (%ld packet%s delayed)\n");
 	p(tcp6s_sndurg, "\t\t%ld URG only packet%s\n");
 	p(tcp6s_sndprobe, "\t\t%ld window probe packet%s\n");
 	p(tcp6s_sndwinup, "\t\t%ld window update packet%s\n");
 	p(tcp6s_sndctrl, "\t\t%ld control packet%s\n");
 	p(tcp6s_rcvtotal, "\t%ld packet%s received\n");
-	p2(tcp6s_rcvackpack, tcp6s_rcvackbyte, "\t\t%ld ack%s (for %ld byte%s)\n");
+	p2(tcp6s_rcvackpack, tcp6s_rcvackbyte,
+	    "\t\t%ld ack%s (for %ld byte%s)\n");
 	p(tcp6s_rcvdupack, "\t\t%ld duplicate ack%s\n");
 	p(tcp6s_rcvacktoomuch, "\t\t%ld ack%s for unsent data\n");
 	p2(tcp6s_rcvpack, tcp6s_rcvbyte,
-		"\t\t%ld packet%s (%ld byte%s) received in-sequence\n");
+	    "\t\t%ld packet%s (%ld byte%s) received in-sequence\n");
 	p2(tcp6s_rcvduppack, tcp6s_rcvdupbyte,
-		"\t\t%ld completely duplicate packet%s (%ld byte%s)\n");
+	    "\t\t%ld completely duplicate packet%s (%ld byte%s)\n");
 	p(tcp6s_pawsdrop, "\t\t%ld old duplicate packet%s\n");
 	p2(tcp6s_rcvpartduppack, tcp6s_rcvpartdupbyte,
-		"\t\t%ld packet%s with some dup. data (%ld byte%s duped)\n");
+	    "\t\t%ld packet%s with some dup. data (%ld byte%s duped)\n");
 	p2(tcp6s_rcvoopack, tcp6s_rcvoobyte,
-		"\t\t%ld out-of-order packet%s (%ld byte%s)\n");
+	    "\t\t%ld out-of-order packet%s (%ld byte%s)\n");
 	p2(tcp6s_rcvpackafterwin, tcp6s_rcvbyteafterwin,
-		"\t\t%ld packet%s (%ld byte%s) of data after window\n");
+	    "\t\t%ld packet%s (%ld byte%s) of data after window\n");
 	p(tcp6s_rcvwinprobe, "\t\t%ld window probe%s\n");
 	p(tcp6s_rcvwinupd, "\t\t%ld window update packet%s\n");
 	p(tcp6s_rcvafterclose, "\t\t%ld packet%s received after close\n");
 	p(tcp6s_rcvbadsum, "\t\t%ld discarded for bad checksum%s\n");
-	p(tcp6s_rcvbadoff, "\t\t%ld discarded for bad header offset field%s\n");
+	p(tcp6s_rcvbadoff,
+	    "\t\t%ld discarded for bad header offset field%s\n");
 	p(tcp6s_rcvshort, "\t\t%ld discarded because packet%s too short\n");
 	p(tcp6s_connattempt, "\t%ld connection request%s\n");
 	p(tcp6s_accepts, "\t%ld connection accept%s\n");
 	p(tcp6s_badsyn, "\t%ld bad connection attempt%s\n");
-	p(tcp6s_connects, "\t%ld connection%s established (including accepts)\n");
+	p(tcp6s_connects,
+	    "\t%ld connection%s established (including accepts)\n");
 	p2(tcp6s_closed, tcp6s_drops,
-		"\t%ld connection%s closed (including %ld drop%s)\n");
+	    "\t%ld connection%s closed (including %ld drop%s)\n");
 	p(tcp6s_conndrops, "\t%ld embryonic connection%s dropped\n");
 	p2(tcp6s_rttupdated, tcp6s_segstimed,
-		"\t%ld segment%s updated rtt (of %ld attempt%s)\n");
+	    "\t%ld segment%s updated rtt (of %ld attempt%s)\n");
 	p(tcp6s_rexmttimeo, "\t%ld retransmit timeout%s\n");
-	p(tcp6s_timeoutdrop, "\t\t%ld connection%s dropped by rexmit timeout\n");
+	p(tcp6s_timeoutdrop,
+	    "\t\t%ld connection%s dropped by rexmit timeout\n");
 	p(tcp6s_persisttimeo, "\t%ld persist timeout%s\n");
 	p(tcp6s_persistdrop, "\t%ld connection%s timed out in persist\n");
 	p(tcp6s_keeptimeo, "\t%ld keepalive timeout%s\n");
@@ -511,10 +517,10 @@ udp6_stats(u_long off, const char *name)
 		return;
 	}
 	printf("%s:\n", name);
-#define	p(f, m) if (udp6stat[f] || sflag <= 1) \
-    printf(m, (unsigned long long)udp6stat[f], plural(udp6stat[f]))
-#define	p1(f, m) if (udp6stat[f] || sflag <= 1) \
-    printf(m, (unsigned long long)udp6stat[f])
+#define	p(f, m) if (udp6stat[f] || sflag <= 1)				      \
+		printf(m, (unsigned long long)udp6stat[f], plural(udp6stat[f]))
+#define	p1(f, m) if (udp6stat[f] || sflag <= 1)			\
+		printf(m, (unsigned long long)udp6stat[f])
 	p(UDP6_STAT_IPACKETS, "\t%llu datagram%s received\n");
 	p1(UDP6_STAT_HDROPS, "\t%llu with incomplete header\n");
 	p1(UDP6_STAT_BADLEN, "\t%llu with bad data length field\n");
@@ -630,7 +636,7 @@ static	const char *ip6nh[] = {
 /*220*/	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 /*240*/	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-	NULL, NULL, NULL, NULL, NULL, NULL,
+	NULL, NULL, NULL, NULL, NULL, NULL
 };
 
 /*
@@ -656,10 +662,10 @@ ip6_stats(u_long off, const char *name)
 	}
 	printf("%s:\n", name);
 
-#define	p(f, m) if (ip6stat[f] || sflag <= 1) \
-    printf(m, (unsigned long long)ip6stat[f], plural(ip6stat[f]))
-#define	p1(f, m) if (ip6stat[f] || sflag <= 1) \
-    printf(m, (unsigned long long)ip6stat[f])
+#define	p(f, m) if (ip6stat[f] || sflag <= 1)				     \
+		printf(m, (unsigned long long)ip6stat[f], plural(ip6stat[f]))
+#define	p1(f, m) if (ip6stat[f] || sflag <= 1)			\
+		printf(m, (unsigned long long)ip6stat[f])
 
 	p(IP6_STAT_TOTAL, "\t%llu total packet%s received\n");
 	p1(IP6_STAT_TOOSMALL, "\t%llu with size smaller than minimum\n");
@@ -675,14 +681,15 @@ ip6_stats(u_long off, const char *name)
 	p(IP6_STAT_DELIVERED, "\t%llu packet%s for this host\n");
 	p(IP6_STAT_FORWARD, "\t%llu packet%s forwarded\n");
 	p(IP6_STAT_FASTFORWARD, "\t%llu packet%s fast forwarded\n");
-	p1(IP6_STAT_FASTFORWARDFLOWS, "\t%llu fast forward flows\n");	
+	p1(IP6_STAT_FASTFORWARDFLOWS, "\t%llu fast forward flows\n");
 	p(IP6_STAT_CANTFORWARD, "\t%llu packet%s not forwardable\n");
 	p(IP6_STAT_REDIRECTSENT, "\t%llu redirect%s sent\n");
 	p(IP6_STAT_LOCALOUT, "\t%llu packet%s sent from this host\n");
 	p(IP6_STAT_RAWOUT, "\t%llu packet%s sent with fabricated ip header\n");
 	p(IP6_STAT_ODROPPED,
 	    "\t%llu output packet%s dropped due to no bufs, etc.\n");
-	p(IP6_STAT_NOROUTE, "\t%llu output packet%s discarded due to no route\n");
+	p(IP6_STAT_NOROUTE,
+	    "\t%llu output packet%s discarded due to no route\n");
 	p(IP6_STAT_FRAGMENTED, "\t%llu output datagram%s fragmented\n");
 	p(IP6_STAT_OFRAGMENTS, "\t%llu fragment%s created\n");
 	p(IP6_STAT_CANTFRAG, "\t%llu datagram%s that can't be fragmented\n");
@@ -710,14 +717,14 @@ ip6_stats(u_long off, const char *name)
 	p(IP6_STAT_M1, "\t\t%llu one mbuf%s\n");
 	for (first = 1, i = 0; i < 32; i++) {
 		char ifbuf[IFNAMSIZ];
-		if (ip6stat[IP6_STAT_M2M + i] != 0) {		
+		if (ip6stat[IP6_STAT_M2M + i] != 0) {
 			if (first) {
 				printf("\t\ttwo or more mbuf:\n");
 				first = 0;
 			}
 			printf("\t\t\t%s = %llu\n",
-			       if_indextoname(i, ifbuf),
-			       (unsigned long long)ip6stat[IP6_STAT_M2M + i]);
+			    if_indextoname(i, ifbuf),
+			    (unsigned long long)ip6stat[IP6_STAT_M2M + i]);
 		}
 	}
 	p(IP6_STAT_MEXT1, "\t\t%llu one ext mbuf%s\n");
@@ -725,28 +732,30 @@ ip6_stats(u_long off, const char *name)
 	p(IP6_STAT_EXTHDRTOOLONG,
 	    "\t%llu packet%s whose headers are not continuous\n");
 	p(IP6_STAT_NOGIF, "\t%llu tunneling packet%s that can't find gif\n");
+	p(IP6_STAT_NOIPSEC,
+	    "\t%llu tunneling packet%s that can't find ipsecif\n");
 	p(IP6_STAT_TOOMANYHDR,
 	    "\t%llu packet%s discarded due to too many headers\n");
 
 	/* for debugging source address selection */
-#define PRINT_SCOPESTAT(s,i) do {\
-		switch(i) { /* XXX hardcoding in each case */\
-		case 1:\
-			p(s, "\t\t%llu node-local%s\n");\
-			break;\
-		case 2:\
-			p(s, "\t\t%llu link-local%s\n");\
-			break;\
-		case 5:\
-			p(s, "\t\t%llu site-local%s\n");\
-			break;\
-		case 14:\
-			p(s, "\t\t%llu global%s\n");\
-			break;\
-		default:\
-			printf("\t\t%llu addresses scope=%x\n",\
-			       (unsigned long long)ip6stat[s], i);\
-		}\
+#define PRINT_SCOPESTAT(s, i) do {				\
+		switch (i) { /* XXX hardcoding in each case */	\
+		case 1:						\
+			p(s, "\t\t%llu node-local%s\n");	\
+			break;					\
+		case 2:						\
+			p(s, "\t\t%llu link-local%s\n");	\
+			break;					\
+		case 5:						\
+			p(s, "\t\t%llu site-local%s\n");	\
+			break;					\
+		case 14:					\
+			p(s, "\t\t%llu global%s\n");		\
+			break;					\
+		default:					\
+			printf("\t\t%llu addresses scope=%x\n",	\
+			    (unsigned long long)ip6stat[s], i);	\
+		}						\
 	} while(/*CONSTCOND*/0);
 
 	p(IP6_STAT_SOURCES_NONE,
@@ -811,11 +820,11 @@ ip6_ifstats(const char *ifname)
 {
 	struct in6_ifreq ifr;
 	int s;
-#define	p(f, m) if (ifr.ifr_ifru.ifru_stat.f || sflag <= 1) \
-    printf(m, (unsigned long long)ifr.ifr_ifru.ifru_stat.f, \
-	plural(ifr.ifr_ifru.ifru_stat.f))
-#define	p_5(f, m) if (ifr.ifr_ifru.ifru_stat.f || sflag <= 1) \
-    printf(m, (unsigned long long)ip6stat.f)
+#define	p(f, m) if (ifr.ifr_ifru.ifru_stat.f || sflag <= 1)		\
+		printf(m, (unsigned long long)ifr.ifr_ifru.ifru_stat.f, \
+		    plural(ifr.ifr_ifru.ifru_stat.f))
+#define	p_5(f, m) if (ifr.ifr_ifru.ifru_stat.f || sflag <= 1)	\
+		printf(m, (unsigned long long)ip6stat.f)
 
 	if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 		perror("Warning: socket(AF_INET6)");
@@ -836,17 +845,19 @@ ip6_ifstats(const char *ifname)
 	p(ifs6_in_noroute, "\t%llu datagram%s with no route received\n");
 	p(ifs6_in_addrerr, "\t%llu datagram%s with invalid dst received\n");
 	p(ifs6_in_truncated, "\t%llu truncated datagram%s received\n");
-	p(ifs6_in_protounknown, "\t%llu datagram%s with unknown proto received\n");
+	p(ifs6_in_protounknown,
+	    "\t%llu datagram%s with unknown proto received\n");
 	p(ifs6_in_discard, "\t%llu input datagram%s discarded\n");
 	p(ifs6_in_deliver,
-	  "\t%llu datagram%s delivered to an upper layer protocol\n");
+	    "\t%llu datagram%s delivered to an upper layer protocol\n");
 	p(ifs6_out_forward, "\t%llu datagram%s forwarded to this interface\n");
 	p(ifs6_out_request,
-	  "\t%llu datagram%s sent from an upper layer protocol\n");
+	    "\t%llu datagram%s sent from an upper layer protocol\n");
 	p(ifs6_out_discard, "\t%llu total discarded output datagram%s\n");
 	p(ifs6_out_fragok, "\t%llu output datagram%s fragmented\n");
 	p(ifs6_out_fragfail, "\t%llu output datagram%s failed on fragment\n");
-	p(ifs6_out_fragcreat, "\t%llu output datagram%s succeeded on fragment\n");
+	p(ifs6_out_fragcreat,
+	    "\t%llu output datagram%s succeeded on fragment\n");
 	p(ifs6_reass_reqd, "\t%llu incoming datagram%s fragmented\n");
 	p(ifs6_reass_ok, "\t%llu datagram%s reassembled\n");
 	p(ifs6_reass_fail, "\t%llu datagram%s failed on reassembling\n");
@@ -860,7 +871,7 @@ ip6_ifstats(const char *ifname)
 #undef p_5
 }
 
-static	const char *icmp6names[] = {
+static	const char *icmp6names[256] = {
 	"#0",
 	"unreach",
 	"packet too big",
@@ -880,7 +891,7 @@ static	const char *icmp6names[] = {
 	"#16",
 	"#17",
 	"#18",
-	"#19",	
+	"#19",
 	"#20",
 	"#21",
 	"#22",
@@ -890,7 +901,7 @@ static	const char *icmp6names[] = {
 	"#26",
 	"#27",
 	"#28",
-	"#29",	
+	"#29",
 	"#30",
 	"#31",
 	"#32",
@@ -900,7 +911,7 @@ static	const char *icmp6names[] = {
 	"#36",
 	"#37",
 	"#38",
-	"#39",	
+	"#39",
 	"#40",
 	"#41",
 	"#42",
@@ -910,7 +921,7 @@ static	const char *icmp6names[] = {
 	"#46",
 	"#47",
 	"#48",
-	"#49",	
+	"#49",
 	"#50",
 	"#51",
 	"#52",
@@ -920,7 +931,7 @@ static	const char *icmp6names[] = {
 	"#56",
 	"#57",
 	"#58",
-	"#59",	
+	"#59",
 	"#60",
 	"#61",
 	"#62",
@@ -930,7 +941,7 @@ static	const char *icmp6names[] = {
 	"#66",
 	"#67",
 	"#68",
-	"#69",	
+	"#69",
 	"#70",
 	"#71",
 	"#72",
@@ -940,7 +951,7 @@ static	const char *icmp6names[] = {
 	"#76",
 	"#77",
 	"#78",
-	"#79",	
+	"#79",
 	"#80",
 	"#81",
 	"#82",
@@ -950,7 +961,7 @@ static	const char *icmp6names[] = {
 	"#86",
 	"#87",
 	"#88",
-	"#89",	
+	"#89",
 	"#80",
 	"#91",
 	"#92",
@@ -960,7 +971,7 @@ static	const char *icmp6names[] = {
 	"#96",
 	"#97",
 	"#98",
-	"#99",	
+	"#99",
 	"#100",
 	"#101",
 	"#102",
@@ -970,7 +981,7 @@ static	const char *icmp6names[] = {
 	"#106",
 	"#107",
 	"#108",
-	"#109",	
+	"#109",
 	"#110",
 	"#111",
 	"#112",
@@ -980,7 +991,7 @@ static	const char *icmp6names[] = {
 	"#116",
 	"#117",
 	"#118",
-	"#119",	
+	"#119",
 	"#120",
 	"#121",
 	"#122",
@@ -990,7 +1001,7 @@ static	const char *icmp6names[] = {
 	"#126",
 	"#127",
 	"echo",
-	"echo reply",	
+	"echo reply",
 	"multicast listener query",
 	"multicast listener report",
 	"multicast listener done",
@@ -1004,23 +1015,23 @@ static	const char *icmp6names[] = {
 	"node information reply",
 	"#141",
 	"#142",
-	"#143",
-	"#144",
-	"#145",
-	"#146",
-	"#147",
+	"multicast listener report (v2)",
+	"home agent discovery request",
+	"home agent discovery reply",
+	"mobile prefix solicitation",
+	"mobile prefix advertisement",
 	"#148",
-	"#149",	
+	"#149",
 	"#150",
-	"#151",
-	"#152",
-	"#153",
+	"multicast router advertisement",
+	"multicast router solicitation",
+	"multicast router termination",
 	"#154",
 	"#155",
 	"#156",
 	"#157",
 	"#158",
-	"#159",	
+	"#159",
 	"#160",
 	"#161",
 	"#162",
@@ -1030,7 +1041,7 @@ static	const char *icmp6names[] = {
 	"#166",
 	"#167",
 	"#168",
-	"#169",	
+	"#169",
 	"#170",
 	"#171",
 	"#172",
@@ -1040,7 +1051,7 @@ static	const char *icmp6names[] = {
 	"#176",
 	"#177",
 	"#178",
-	"#179",	
+	"#179",
 	"#180",
 	"#181",
 	"#182",
@@ -1050,7 +1061,7 @@ static	const char *icmp6names[] = {
 	"#186",
 	"#187",
 	"#188",
-	"#189",	
+	"#189",
 	"#180",
 	"#191",
 	"#192",
@@ -1060,7 +1071,7 @@ static	const char *icmp6names[] = {
 	"#196",
 	"#197",
 	"#198",
-	"#199",	
+	"#199",
 	"#200",
 	"#201",
 	"#202",
@@ -1070,7 +1081,7 @@ static	const char *icmp6names[] = {
 	"#206",
 	"#207",
 	"#208",
-	"#209",	
+	"#209",
 	"#210",
 	"#211",
 	"#212",
@@ -1080,7 +1091,7 @@ static	const char *icmp6names[] = {
 	"#216",
 	"#217",
 	"#218",
-	"#219",	
+	"#219",
 	"#220",
 	"#221",
 	"#222",
@@ -1090,7 +1101,7 @@ static	const char *icmp6names[] = {
 	"#226",
 	"#227",
 	"#228",
-	"#229",	
+	"#229",
 	"#230",
 	"#231",
 	"#232",
@@ -1100,7 +1111,7 @@ static	const char *icmp6names[] = {
 	"#236",
 	"#237",
 	"#238",
-	"#239",	
+	"#239",
 	"#240",
 	"#241",
 	"#242",
@@ -1110,13 +1121,13 @@ static	const char *icmp6names[] = {
 	"#246",
 	"#247",
 	"#248",
-	"#249",	
+	"#249",
 	"#250",
 	"#251",
 	"#252",
 	"#253",
 	"#254",
-	"#255",
+	"#255"
 };
 
 /*
@@ -1138,13 +1149,15 @@ icmp6_stats(u_long off, const char *name
 		warnx("%s stats not available via KVM.", name);
 		return;
 	}
-	
+
 	printf("%s:\n", name);
 
-#define	p(f, m) if (icmp6stat[f] || sflag <= 1) \
-    printf(m, (unsigned long long)icmp6stat[f], plural(icmp6stat[f]))
+#define	p(f, m) if (icmp6stat[f] || sflag <= 1)			\
+		printf(m, (unsigned long long)icmp6stat[f],	\
+		    plural(icmp6stat[f]))
 #define p_oerr(f, m) if (icmp6stat[ICMP6_STAT_OUTERRHIST + f] || sflag <= 1) \
-    printf(m, (unsigned long long)icmp6stat[ICMP6_STAT_OUTERRHIST + f])
+		printf(m,						     \
+		    (unsigned long long)icmp6stat[ICMP6_STAT_OUTERRHIST + f])
 
 	p(ICMP6_STAT_ERROR, "\t%llu call%s to icmp6_error\n");
 	p(ICMP6_STAT_CANTERROR,
@@ -1175,27 +1188,38 @@ icmp6_stats(u_long off, const char *name
 		}
 	printf("\tHistogram of error messages to be generated:\n");
 	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_NOROUTE, "\t\t%llu no route\n");
-	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_ADMIN, "\t\t%llu administratively prohibited\n");
-	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_BEYONDSCOPE, "\t\t%llu beyond scope\n");
-	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_ADDR, "\t\t%llu address unreachable\n");
-	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_NOPORT, "\t\t%llu port unreachable\n");
+	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_ADMIN,
+	    "\t\t%llu administratively prohibited\n");
+	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_BEYONDSCOPE,
+	    "\t\t%llu beyond scope\n");
+	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_ADDR,
+	    "\t\t%llu address unreachable\n");
+	p_oerr(ICMP6_ERRSTAT_DST_UNREACH_NOPORT,
+	    "\t\t%llu port unreachable\n");
 	p_oerr(ICMP6_ERRSTAT_PACKET_TOO_BIG, "\t\t%llu packet too big\n");
-	p_oerr(ICMP6_ERRSTAT_TIME_EXCEED_TRANSIT, "\t\t%llu time exceed transit\n");
-	p_oerr(ICMP6_ERRSTAT_TIME_EXCEED_REASSEMBLY, "\t\t%llu time exceed reassembly\n");
-	p_oerr(ICMP6_ERRSTAT_PARAMPROB_HEADER, "\t\t%llu erroneous header field\n");
-	p_oerr(ICMP6_ERRSTAT_PARAMPROB_NEXTHEADER, "\t\t%llu unrecognized next header\n");
-	p_oerr(ICMP6_ERRSTAT_PARAMPROB_OPTION, "\t\t%llu unrecognized option\n");
+	p_oerr(ICMP6_ERRSTAT_TIME_EXCEED_TRANSIT,
+	    "\t\t%llu time exceed transit\n");
+	p_oerr(ICMP6_ERRSTAT_TIME_EXCEED_REASSEMBLY,
+	    "\t\t%llu time exceed reassembly\n");
+	p_oerr(ICMP6_ERRSTAT_PARAMPROB_HEADER,
+	    "\t\t%llu erroneous header field\n");
+	p_oerr(ICMP6_ERRSTAT_PARAMPROB_NEXTHEADER,
+	    "\t\t%llu unrecognized next header\n");
+	p_oerr(ICMP6_ERRSTAT_PARAMPROB_OPTION,
+	    "\t\t%llu unrecognized option\n");
 	p_oerr(ICMP6_ERRSTAT_REDIRECT, "\t\t%llu redirect\n");
 	p_oerr(ICMP6_ERRSTAT_UNKNOWN, "\t\t%llu unknown\n");
 
 	p(ICMP6_STAT_REFLECT, "\t%llu message response%s generated\n");
-	p(ICMP6_STAT_ND_TOOMANYOPT, "\t%llu message%s with too many ND options\n");
+	p(ICMP6_STAT_ND_TOOMANYOPT,
+	    "\t%llu message%s with too many ND options\n");
 	p(ICMP6_STAT_ND_BADOPT, "\t%llu message%s with bad ND options\n");
 	p(ICMP6_STAT_BADNS, "\t%llu bad neighbor solicitation message%s\n");
 	p(ICMP6_STAT_BADNA, "\t%llu bad neighbor advertisement message%s\n");
 	p(ICMP6_STAT_BADRS, "\t%llu bad router solicitation message%s\n");
 	p(ICMP6_STAT_BADRA, "\t%llu bad router advertisement message%s\n");
-	p(ICMP6_STAT_DROPPED_RAROUTE, "\t%llu router advertisement route%s dropped\n");
+	p(ICMP6_STAT_DROPPED_RAROUTE,
+	    "\t%llu router advertisement route%s dropped\n");
 	p(ICMP6_STAT_BADREDIRECT, "\t%llu bad redirect message%s\n");
 	p(ICMP6_STAT_PMTUCHG, "\t%llu path MTU change%s\n");
 #undef p
@@ -1210,9 +1234,9 @@ icmp6_ifstats(const char *ifname)
 {
 	struct in6_ifreq ifr;
 	int s;
-#define	p(f, m) if (ifr.ifr_ifru.ifru_icmp6stat.f || sflag <= 1) \
-    printf(m, (unsigned long long)ifr.ifr_ifru.ifru_icmp6stat.f, \
-	plural(ifr.ifr_ifru.ifru_icmp6stat.f))
+#define	p(f, m) if (ifr.ifr_ifru.ifru_icmp6stat.f || sflag <= 1)	      \
+		printf(m, (unsigned long long)ifr.ifr_ifru.ifru_icmp6stat.f,  \
+		    plural(ifr.ifr_ifru.ifru_icmp6stat.f))
 
 	if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
 		perror("Warning: socket(AF_INET6)");
@@ -1228,9 +1252,11 @@ icmp6_ifstats(const char *ifname)
 	}
 
 	p(ifs6_in_msg, "\t%llu total input message%s\n");
-	p(ifs6_in_error, "\t%llu total input error message%s\n"); 
-	p(ifs6_in_dstunreach, "\t%llu input destination unreachable error%s\n");
-	p(ifs6_in_adminprohib, "\t%llu input administratively prohibited error%s\n");
+	p(ifs6_in_error, "\t%llu total input error message%s\n");
+	p(ifs6_in_dstunreach,
+	    "\t%llu input destination unreachable error%s\n");
+	p(ifs6_in_adminprohib,
+	    "\t%llu input administratively prohibited error%s\n");
 	p(ifs6_in_timeexceed, "\t%llu input time exceeded error%s\n");
 	p(ifs6_in_paramprob, "\t%llu input parameter problem error%s\n");
 	p(ifs6_in_pkttoobig, "\t%llu input packet too big error%s\n");
@@ -1247,8 +1273,10 @@ icmp6_ifstats(const char *ifname)
 
 	p(ifs6_out_msg, "\t%llu total output message%s\n");
 	p(ifs6_out_error, "\t%llu total output error message%s\n");
-	p(ifs6_out_dstunreach, "\t%llu output destination unreachable error%s\n");
-	p(ifs6_out_adminprohib, "\t%llu output administratively prohibited error%s\n");
+	p(ifs6_out_dstunreach,
+	    "\t%llu output destination unreachable error%s\n");
+	p(ifs6_out_adminprohib,
+	    "\t%llu output administratively prohibited error%s\n");
 	p(ifs6_out_timeexceed, "\t%llu output time exceeded error%s\n");
 	p(ifs6_out_paramprob, "\t%llu output parameter problem error%s\n");
 	p(ifs6_out_pkttoobig, "\t%llu output packet too big error%s\n");
@@ -1282,18 +1310,22 @@ pim6_stats(u_long off, const char *name)
 		if (sysctlbyname("net.inet6.pim6.stats", pim6stat, &size,
 		    NULL, 0) == -1)
 			return;
-        } else {
+	} else {
 		warnx("%s stats not available via KVM.", name);
 		return;
 	}
 	printf("%s:\n", name);
 
-#define	p(f, m) if (pim6stat[f] || sflag <= 1) \
-    printf(m, (unsigned long long)pim6stat[f], plural(pim6stat[f]))
+#define	p(f, m) if (pim6stat[f] || sflag <= 1)				      \
+		printf(m, (unsigned long long)pim6stat[f], plural(pim6stat[f]))
+
 	p(PIM6_STAT_RCV_TOTAL, "\t%llu message%s received\n");
-	p(PIM6_STAT_RCV_TOOSHORT, "\t%llu message%s received with too few bytes\n");
-	p(PIM6_STAT_RCV_BADSUM, "\t%llu message%s received with bad checksum\n");
-	p(PIM6_STAT_RCV_BADVERSION, "\t%llu message%s received with bad version\n");
+	p(PIM6_STAT_RCV_TOOSHORT,
+	    "\t%llu message%s received with too few bytes\n");
+	p(PIM6_STAT_RCV_BADSUM,
+	    "\t%llu message%s received with bad checksum\n");
+	p(PIM6_STAT_RCV_BADVERSION,
+	    "\t%llu message%s received with bad version\n");
 	p(PIM6_STAT_RCV_REGISTERS, "\t%llu register%s received\n");
 	p(PIM6_STAT_RCV_BADREGISTERS, "\t%llu bad register%s received\n");
 	p(PIM6_STAT_SND_REGISTERS, "\t%llu register%s sent\n");
@@ -1349,15 +1381,16 @@ rip6_stats(u_long off, const char *name)
 void
 inet6print(const struct in6_addr *in6, int port, const char *proto)
 {
-#define GETSERVBYPORT6(port, proto, ret)\
-do {\
-	if (strcmp((proto), "tcp6") == 0)\
-		(ret) = getservbyport((int)(port), "tcp");\
-	else if (strcmp((proto), "udp6") == 0)\
-		(ret) = getservbyport((int)(port), "udp");\
-	else\
-		(ret) = getservbyport((int)(port), (proto));\
-} while (0)
+#define GETSERVBYPORT6(port, proto, ret)				\
+	do {								\
+		if (strcmp((proto), "tcp6") == 0)			\
+			(ret) = getservbyport((int)(port), "tcp");	\
+		else if (strcmp((proto), "udp6") == 0)			\
+			(ret) = getservbyport((int)(port), "udp");	\
+		else							\
+			(ret) = getservbyport((int)(port), (proto));	\
+	} while (0)
+
 	struct servent *sp = 0;
 	char line[80], *cp;
 	int lwidth;
@@ -1426,14 +1459,14 @@ inet6name(const struct in6_addr *in6p)
 		sin6.sin6_len = sizeof(sin6);
 		sin6.sin6_family = AF_INET6;
 		sin6.sin6_addr = *in6p;
-		inet6_getscopeid(&sin6, INET6_IS_ADDR_LINKLOCAL|
-		    INET6_IS_ADDR_MC_LINKLOCAL);
+		inet6_getscopeid(&sin6,
+		    INET6_IS_ADDR_LINKLOCAL | INET6_IS_ADDR_MC_LINKLOCAL);
 		if (getnameinfo((struct sockaddr *)&sin6, sin6.sin6_len,
 				hbuf, sizeof(hbuf), NULL, 0, niflag) != 0)
 			strlcpy(hbuf, "?", sizeof(hbuf));
 		strlcpy(line, hbuf, sizeof(line));
 	}
-	return (line);
+	return line;
 }
 
 /*
@@ -1453,9 +1486,9 @@ tcp6_dump(u_long off, const char *name, 
 	size_t j, len;
 
 	if (use_sysctl)
-		pcblist = getpcblist_sysctl(name, &len);	
+		pcblist = getpcblist_sysctl(name, &len);
 	else
-		pcblist = getpcblist_kmem(off, name, &len);	
+		pcblist = getpcblist_kmem(off, name, &len);
 
 	for (j = 0; j < len; j++)
 		if (pcblist[j].ki_ppcbaddr == pcbaddr)
@@ -1495,7 +1528,7 @@ tcp6_dump(u_long off, const char *name, 
 	printf("peermaxseg %u, maxseg %u, force %d\n\n", mypcb.t_peermaxseg,
 	    mypcb.t_maxseg, mypcb.t_force);
 #else
-        printf("peermss %u, ourmss %u, segsz %u, segqlen %u\n\n",
+	printf("peermss %u, ourmss %u, segsz %u, segqlen %u\n\n",
 	    tcpcb.t_peermss, tcpcb.t_ourmss, tcpcb.t_segsz, tcpcb.t_segqlen);
 #endif
 

Index: src/usr.bin/netstat/main.c
diff -u src/usr.bin/netstat/main.c:1.99 src/usr.bin/netstat/main.c:1.99.8.1
--- src/usr.bin/netstat/main.c:1.99	Thu Jul 14 20:13:10 2016
+++ src/usr.bin/netstat/main.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.99 2016/07/14 20:13:10 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.99.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 19
 #if 0
 static char sccsid[] = "from: @(#)main.c	8.4 (Berkeley) 3/1/94";
 #else
-__RCSID("$NetBSD: main.c,v 1.99 2016/07/14 20:13:10 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.99.8.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -67,6 +67,38 @@ __RCSID("$NetBSD: main.c,v 1.99 2016/07/
 #include "rtutil.h"
 #include "prog_ops.h"
 
+int	Aflag;
+int	aflag;
+int	Bflag;
+int	bflag;
+int	dflag;
+#ifndef SMALL
+int	gflag;
+#endif
+int	hflag;
+int	iflag;
+int	Lflag;
+int	lflag;
+int	mflag;
+int	numeric_addr;
+int	numeric_port;
+int	nflag;
+int	Pflag;
+int	pflag;
+int	qflag;
+int	rflag;
+int	sflag;
+int	tagflag;
+int	tflag;
+int	Vflag;
+int	vflag;
+
+char	*interface;
+
+int	af;
+int	use_sysctl;
+int	force_sysctl;
+
 struct nlist nl[] = {
 #define	N_MBSTAT	0
 	{ "_mbstat", 0, 0, 0, 0 },
@@ -175,8 +207,8 @@ struct protox {
 			(u_long, const char *);
 	void	(*pr_stats)		/* statistics printing routine */
 			(u_long, const char *);
-	void	(*pr_istats)
-			(const char *);	/* per/if statistics printing routine */
+	void	(*pr_istats)	       /* per/if statistics printing routine */
+			(const char *);
 	void	(*pr_dump)		/* PCB state dump routine */
 			(u_long, const char *, u_long);
 	const char *pr_name;		/* well-known name */
@@ -200,7 +232,7 @@ struct protox {
 	{ -1,		N_PIMSTAT,	1,	0,
 	  pim_stats,	NULL,		0,	"pim" },
 	{ -1,		N_PFSYNCSTAT,  1,  0,
-	  pfsync_stats,  NULL,		0,  "pfsync" },	
+	  pfsync_stats,  NULL,		0,  "pfsync" },
 	{ -1,		-1,		0,	0,
 	  0,		NULL,		0,	0 }
 };
@@ -324,6 +356,7 @@ void
 prepare(const char *nf, const char *mf, struct protox *tp)
 {
 	char buf[_POSIX2_LINE_MAX];
+
 	/*
 	 * Try to figure out if we can use sysctl or not.
 	 */
@@ -354,7 +387,7 @@ prepare(const char *nf, const char *mf, 
 
 	if (force_sysctl && !use_sysctl) {
 		/* Let the user know what's about to happen. */
-		warnx("forcing sysctl usage even though it might not be "\
+		warnx("forcing sysctl usage even though it might not be "
 		    "supported");
 		use_sysctl = 1;
 	}
@@ -456,13 +489,13 @@ main(int argc, char *argv[])
 			errno = 0;
 			pcbaddr = strtoul(optarg, &cp, 16);
 			if (*cp != '\0' || errno == ERANGE)
-				errx(1, "invalid PCB address %s",
-				    optarg);
+				errx(1, "invalid PCB address %s", optarg);
 			Pflag = 1;
 			break;
 		case 'p':
 			if ((tp = name2protox(optarg)) == NULL)
-				errx(1, "%s: unknown or uninstrumented protocol",
+				errx(1,
+				    "%s: unknown or uninstrumented protocol",
 				    optarg);
 			pflag = 1;
 			break;
@@ -557,7 +590,8 @@ main(int argc, char *argv[])
 	}
 	if (pflag) {
 		if (iflag && tp->pr_istats)
-			intpr(interval, nl[N_IFNET_LIST].n_value, tp->pr_istats);
+			intpr(interval, nl[N_IFNET_LIST].n_value,
+			    tp->pr_istats);
 		else if (tp->pr_stats)
 			(*tp->pr_stats)(nl[tp->pr_sindex].n_value,
 				tp->pr_name);
@@ -616,7 +650,8 @@ main(int argc, char *argv[])
 		}
 		if (rflag) {
 			if (sflag)
-				rt_stats(use_sysctl ? 0 : nl[N_RTSTAT].n_value);
+				rt_stats(use_sysctl ? 0 :
+				    nl[N_RTSTAT].n_value);
 			else {
 				if (use_sysctl)
 					p_rttables(af,
@@ -712,7 +747,7 @@ printproto(struct protox *tp, const char
 		if (iflag) {
 			if (tp->pr_istats)
 				intpr(interval, nl[N_IFNET_LIST].n_value,
-				      tp->pr_istats);
+				    tp->pr_istats);
 			return;
 		}
 		else {
@@ -723,9 +758,8 @@ printproto(struct protox *tp, const char
 		pr = tp->pr_cblocks;
 		off = nl[tp->pr_index].n_value;
 	}
-	if (pr != NULL && ((off || af != AF_UNSPEC) || use_sysctl)) {
+	if (pr != NULL && ((off || af != AF_UNSPEC) || use_sysctl))
 		(*pr)(off, name);
-	}
 }
 
 /*
@@ -760,9 +794,9 @@ kread(u_long addr, char *buf, int size)
 
 	if (kvm_read(kvmd, addr, buf, size) != size) {
 		warnx("%s", kvm_geterr(kvmd));
-		return (-1);
+		return -1;
 	}
-	return (0);
+	return 0;
 }
 
 const char *
@@ -786,7 +820,7 @@ get_hardticks(void)
 
 	kread(nl[N_HARDCLOCK_TICKS].n_value, (char *)&hardticks,
 	    sizeof(hardticks));
-	return (hardticks);
+	return hardticks;
 }
 
 /*
@@ -800,8 +834,8 @@ knownname(const char *name)
 	for (tpp = protoprotox; *tpp; tpp++)
 		for (tp = *tpp; tp->pr_name; tp++)
 			if (strcmp(tp->pr_name, name) == 0)
-				return (tp);
-	return (NULL);
+				return tp;
+	return NULL;
 }
 
 /*
@@ -819,7 +853,7 @@ name2protox(const char *name)
 	 * fails, check if name is an alias for an Internet protocol.
 	 */
 	if ((tp = knownname(name)) != NULL)
-		return (tp);
+		return tp;
 
 	setprotoent(1);			/* make protocol lookup cheaper */
 	while ((p = getprotoent()) != NULL) {
@@ -827,11 +861,11 @@ name2protox(const char *name)
 		for (alias = p->p_aliases; *alias; alias++)
 			if (strcmp(name, *alias) == 0) {
 				endprotoent();
-				return (knownname(p->p_name));
+				return knownname(p->p_name);
 			}
 	}
 	endprotoent();
-	return (NULL);
+	return NULL;
 }
 
 static void
@@ -842,7 +876,7 @@ usage(void)
 	(void)fprintf(stderr,
 "usage: %s [-Aan] [-f address_family[,family ...]] [-M core] [-N system]\n", progname);
 	(void)fprintf(stderr,
-"       %s [-bdgiLmnqrsSv] [-f address_family[,family ...]] [-M core] [-N system]\n", 
+"       %s [-bdgiLmnqrsSv] [-f address_family[,family ...]] [-M core] [-N system]\n",
 	progname);
 	(void)fprintf(stderr,
 "       %s [-dn] [-I interface] [-M core] [-N system] [-w wait]\n", progname);

Index: src/usr.bin/netstat/mbuf.c
diff -u src/usr.bin/netstat/mbuf.c:1.33 src/usr.bin/netstat/mbuf.c:1.33.8.1
--- src/usr.bin/netstat/mbuf.c:1.33	Tue Jul 28 19:46:42 2015
+++ src/usr.bin/netstat/mbuf.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: mbuf.c,v 1.33 2015/07/28 19:46:42 christos Exp $	*/
+/*	$NetBSD: mbuf.c,v 1.33.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)mbuf.c	8.1 (Berkeley) 6/6/93";
 #else
-__RCSID("$NetBSD: mbuf.c,v 1.33 2015/07/28 19:46:42 christos Exp $");
+__RCSID("$NetBSD: mbuf.c,v 1.33.8.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -101,7 +101,7 @@ mbpr(u_long mbaddr, u_long msizeaddr, u_
 	if (nmbtypes != 256) {
 		fprintf(stderr,
 		    "%s: unexpected change to mbstat; check source\n",
-		        getprogname());
+		    getprogname());
 		return;
 	}
 
@@ -172,29 +172,29 @@ mbpr(u_long mbaddr, u_long msizeaddr, u_
 		goto dump_drain;
 
 	printf("%lu/%lu mapped pages in use\n",
-	       (u_long)(mclpool.pr_nget - mclpool.pr_nput),
-	       ((u_long)mclpool.pr_npages * mclpool.pr_itemsperpage));
+	    (u_long)(mclpool.pr_nget - mclpool.pr_nput),
+	    ((u_long)mclpool.pr_npages * mclpool.pr_itemsperpage));
 	totmem = (mbpool.pr_npages << mbpa.pa_pageshift) +
 	    (mclpool.pr_npages << mclpa.pa_pageshift);
 	totused = (mbpool.pr_nget - mbpool.pr_nput) * mbpool.pr_size +
 	    (mclpool.pr_nget - mclpool.pr_nput) * mclpool.pr_size;
 	if (totmem == 0)
 		totpct = 0;
-	else if (totused < (ULONG_MAX/100))
+	else if (totused < (ULONG_MAX / 100))
 		totpct = (totused * 100)/totmem;
 	else {
-		u_long totmem1 = totmem/100;
-		u_long totused1 = totused/100;
-		totpct = (totused1 * 100)/totmem1;
+		u_long totmem1 = totmem / 100;
+		u_long totused1 = totused / 100;
+		totpct = (totused1 * 100) / totmem1;
 	}
-	
+
 	printf("%lu Kbytes allocated to network (%lu%% in use)\n",
 	    totmem / 1024, totpct);
 
 dump_drain:
 	printf("%lu calls to protocol drain routines\n", mbstat.m_drain);
 
- 	if (sflag < 2)
+	if (sflag < 2)
 		return;
 
 	if (!use_sysctl)
@@ -239,7 +239,7 @@ dump_drain:
 		    mo->mo_counter[MOWNER_COUNTER_CLUSTER_CLAIMS] ==
 		    mo->mo_counter[MOWNER_COUNTER_CLUSTER_RELEASES])
 			continue;
-		snprintf(buf, sizeof(buf), "%16s %-13s",
+		snprintf(buf, sizeof(buf), "%16.16s %-13s",
 		    mo->mo_name, mo->mo_descr);
 		if ((lines % 24) == 0 || lines > 24) {
 			printf("%30s %-8s %10s %10s %10s\n",

Index: src/usr.bin/netstat/mroute.c
diff -u src/usr.bin/netstat/mroute.c:1.25 src/usr.bin/netstat/mroute.c:1.25.8.1
--- src/usr.bin/netstat/mroute.c:1.25	Thu Nov  6 21:30:09 2014
+++ src/usr.bin/netstat/mroute.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: mroute.c,v 1.25 2014/11/06 21:30:09 christos Exp $	*/
+/*	$NetBSD: mroute.c,v 1.25.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -76,7 +76,7 @@
 #if 0
 static char sccsid[] = "from: @(#)mroute.c	8.1 (Berkeley) 6/6/93";
 #else
-__RCSID("$NetBSD: mroute.c,v 1.25 2014/11/06 21:30:09 christos Exp $");
+__RCSID("$NetBSD: mroute.c,v 1.25.8.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -125,7 +125,7 @@ pktscale(u_long n)
 	}
 
 	(void)snprintf(buf, sizeof buf, "%lu%c", n, t);
-	return (buf);
+	return buf;
 }
 
 void
@@ -230,7 +230,8 @@ mroutepr(u_long mrpaddr, u_long mfchasht
 			    pktscale(mfc.mfc_pkt_cnt), mfc.mfc_parent);
 			for (vifi = 0; vifi <= numvifs; ++vifi)
 				if (mfc.mfc_ttls[vifi])
-					printf(" %u/%u", vifi, mfc.mfc_ttls[vifi]);
+					printf(" %u/%u", vifi,
+					    mfc.mfc_ttls[vifi]);
 
 			printf("\n");
 
@@ -241,12 +242,12 @@ mroutepr(u_long mrpaddr, u_long mfchasht
 
 				bwm = mfc.mfc_bw_meter;
 				while (bwm) {
-				kread((u_long)bwm,
-				      (char *)&bw_meter,
-				      sizeof bw_meter);
-				print_bw_meter(&bw_meter,
-					       &banner_printed2);
-				bwm = bw_meter.bm_mfc_next;
+					kread((u_long)bwm,
+					    (char *)&bw_meter,
+					    sizeof bw_meter);
+					print_bw_meter(&bw_meter,
+					    &banner_printed2);
+					bwm = bw_meter.bm_mfc_next;
 				}
 #if 0	/* Don't ever print it? */
 				if (! banner_printed2)
@@ -269,7 +270,7 @@ mroutepr(u_long mrpaddr, u_long mfchasht
 static void
 print_bw_meter(struct bw_meter *bw_meter, int *banner_printed)
 {
-	char s0[256], s1[256], s2[256], s3[256];
+	char s0[256*3], s1[256], s2[256], s3[256];
 	struct timeval now, end, delta;
 
 	gettimeofday(&now, NULL);
@@ -286,37 +287,41 @@ print_bw_meter(struct bw_meter *bw_meter
 
 	/* The measured values */
 	if (bw_meter->bm_flags & BW_METER_UNIT_PACKETS)
-		sprintf(s1, "%llu", (unsigned long long)bw_meter->bm_measured.b_packets);
+		snprintf(s1, sizeof s1, "%llu",
+		    (unsigned long long)bw_meter->bm_measured.b_packets);
 	else
-		sprintf(s1, "?");
+		snprintf(s1, sizeof s1, "?");
 	if (bw_meter->bm_flags & BW_METER_UNIT_BYTES)
-		sprintf(s2, "%llu", (unsigned long long)bw_meter->bm_measured.b_bytes);
+		snprintf(s2, sizeof s2, "%llu",
+		    (unsigned long long)bw_meter->bm_measured.b_bytes);
 	else
-		sprintf(s2, "?");
-	sprintf(s0, "%lld.%ld|%s|%s",
+		snprintf(s2, sizeof s2, "?");
+	snprintf(s0, sizeof s0, "%lld.%ld|%s|%s",
 		(long long)bw_meter->bm_start_time.tv_sec,
 		(long)bw_meter->bm_start_time.tv_usec,
 		s1, s2);
 	printf("  %-30s", s0);
 
 	/* The type of entry */
-	sprintf(s0, "%s", "?");
+	snprintf(s0, sizeof s0, "%s", "?");
 	if (bw_meter->bm_flags & BW_METER_GEQ)
-		sprintf(s0, "%s", ">=");
+		snprintf(s0, sizeof s0, "%s", ">=");
 	else if (bw_meter->bm_flags & BW_METER_LEQ)
-		sprintf(s0, "%s", "<=");
+		snprintf(s0, sizeof s0, "%s", "<=");
 	printf("  %-3s", s0);
 
 	/* The threshold values */
 	if (bw_meter->bm_flags & BW_METER_UNIT_PACKETS)
-		sprintf(s1, "%llu", (unsigned long long)bw_meter->bm_threshold.b_packets);
+		snprintf(s1, sizeof s1, "%llu",
+		    (unsigned long long)bw_meter->bm_threshold.b_packets);
 	else
-		sprintf(s1, "?");
+		snprintf(s1, sizeof s1, "?");
 	if (bw_meter->bm_flags & BW_METER_UNIT_BYTES)
-		sprintf(s2, "%llu", (unsigned long long)bw_meter->bm_threshold.b_bytes);
+		snprintf(s2, sizeof s2, "%llu",
+		    (unsigned long long)bw_meter->bm_threshold.b_bytes);
 	else
-		sprintf(s2, "?");
-	sprintf(s0, "%lld.%ld|%s|%s",
+		snprintf(s2, sizeof s2, "?");
+	snprintf(s0, sizeof s0, "%lld.%ld|%s|%s",
 		(long long)bw_meter->bm_threshold.b_time.tv_sec,
 		(long)bw_meter->bm_threshold.b_time.tv_usec,
 		s1, s2);
@@ -327,12 +332,12 @@ print_bw_meter(struct bw_meter *bw_meter
 		 &bw_meter->bm_threshold.b_time, &end);
 	if (timercmp(&now, &end, <=)) {
 		timersub(&end, &now, &delta);
-		sprintf(s3, "%lld.%ld",
+		snprintf(s3, sizeof s3, "%lld.%ld",
 		    (long long)delta.tv_sec, (long)delta.tv_usec);
 	} else {
 		/* Negative time */
 		timersub(&now, &end, &delta);
-		sprintf(s3, "-%lld.%ld",
+		snprintf(s3, sizeof s3, "-%lld.%ld",
 		    (long long)delta.tv_sec, (long)delta.tv_usec);
 	}
 	printf(" %s", s3);

Index: src/usr.bin/netstat/mroute6.c
diff -u src/usr.bin/netstat/mroute6.c:1.15 src/usr.bin/netstat/mroute6.c:1.15.8.1
--- src/usr.bin/netstat/mroute6.c:1.15	Thu Nov  6 21:30:09 2014
+++ src/usr.bin/netstat/mroute6.c	Mon Sep 12 14:29:19 2022
@@ -1,9 +1,9 @@
-/*	$NetBSD: mroute6.c,v 1.15 2014/11/06 21:30:09 christos Exp $	*/
+/*	$NetBSD: mroute6.c,v 1.15.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (C) 1998 WIDE Project.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -15,7 +15,7 @@
  * 3. Neither the name of the project nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -121,8 +121,10 @@
 
 #ifdef INET6
 
-#define	WID_ORG	(lflag ? 39 : (numeric_addr ? 29 : 18)) /* width of origin column */
-#define	WID_GRP	(lflag ? 18 : (numeric_addr ? 16 : 18)) /* width of group column */
+/* Width of origin column */
+#define	WID_ORG	(lflag ? 39 : (numeric_addr ? 29 : 18))
+/* Width of group column */
+#define	WID_GRP	(lflag ? 18 : (numeric_addr ? 16 : 18))
 
 void
 mroute6pr(u_long mrpaddr, u_long mfcaddr, u_long mifaddr)
@@ -201,7 +203,7 @@ mroute6pr(u_long mrpaddr, u_long mfcaddr
 	banner_printed = 0;
 	for (i = 0; i < MF6CTBLSIZ; ++i) {
 		mfcp = mf6ctable[i];
-		while(mfcp) {
+		while (mfcp) {
 			kread((u_long)mfcp, (char *)&mfc, sizeof(mfc));
 			if (!banner_printed) {
 				printf ("\nIPv6 Multicast Forwarding Cache\n");
@@ -211,7 +213,7 @@ mroute6pr(u_long mrpaddr, u_long mfcaddr
 				    "  Packets Waits In-Mif  Out-Mifs\n");
 				banner_printed = 1;
 			}
-			
+
 			printf(" %-*.*s", WID_ORG, WID_ORG,
 			    routename6(&mfc.mf6c_origin, nflag));
 			printf(" %-*.*s", WID_GRP, WID_GRP,

Index: src/usr.bin/netstat/netstat.1
diff -u src/usr.bin/netstat/netstat.1:1.73 src/usr.bin/netstat/netstat.1:1.73.8.1
--- src/usr.bin/netstat/netstat.1:1.73	Thu May 12 03:44:11 2016
+++ src/usr.bin/netstat/netstat.1	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-.\"	$NetBSD: netstat.1,v 1.73 2016/05/12 03:44:11 ozaki-r Exp $
+.\"	$NetBSD: netstat.1,v 1.73.8.1 2022/09/12 14:29:19 martin Exp $
 .\"
 .\" Copyright (c) 1983, 1990, 1992, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	@(#)netstat.1	8.8 (Berkeley) 4/18/94
 .\"
-.Dd May 12, 2016
+.Dd July 21, 2020
 .Dt NETSTAT 1
 .Os
 .Sh NAME
@@ -432,12 +432,17 @@ And the fifth character shows the header
 .Xr sockstat 1 ,
 .Xr vmstat 1 ,
 .Xr inet 3 ,
+.Xr kvm 3 ,
+.Xr kvm_openfiles 3 ,
+.Xr sysctl 3 ,
 .Xr bpf 4 ,
+.Xr route 4 ,
 .Xr hosts 5 ,
 .Xr networks 5 ,
 .Xr protocols 5 ,
 .Xr services 5 ,
 .Xr iostat 8 ,
+.Xr route 8 ,
 .Xr trpt 8
 .Sh HISTORY
 The

Index: src/usr.bin/netstat/netstat.h
diff -u src/usr.bin/netstat/netstat.h:1.51 src/usr.bin/netstat/netstat.h:1.51.8.1
--- src/usr.bin/netstat/netstat.h:1.51	Thu Nov  6 21:30:09 2014
+++ src/usr.bin/netstat/netstat.h	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: netstat.h,v 1.51 2014/11/06 21:30:09 christos Exp $	*/
+/*	$NetBSD: netstat.h,v 1.51.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -34,37 +34,37 @@
 #include <sys/cdefs.h>
 #include <kvm.h>
 
-int	Aflag;		/* show addresses of protocol control block */
-int	aflag;		/* show all sockets (including servers) */
-int	Bflag;		/* show Berkeley Packet Filter information */
-int	bflag;		/* show i/f byte stats */
-int	dflag;		/* show i/f dropped packets */
+extern int	Aflag;		/* show addresses of protocol control block */
+extern int	aflag;		/* show all sockets (including servers) */
+extern int	Bflag;		/* show Berkeley Packet Filter information */
+extern int	bflag;		/* show i/f byte stats */
+extern int	dflag;		/* show i/f dropped packets */
 #ifndef SMALL
-int	gflag;		/* show group (multicast) routing or stats */
+extern int	gflag;		/* show group (multicast) routing or stats */
 #endif
-int	hflag;		/* humanize byte counts */
-int	iflag;		/* show interfaces */
-int	Lflag;		/* don't show LLINFO entries */
-int	lflag;		/* show routing table with use and ref */
-int	mflag;		/* show memory stats */
-int	numeric_addr;	/* show addresses numerically */
-int	numeric_port;	/* show ports numerically */
-int	nflag;		/* same as above, for show.c compat */
-int	Pflag;		/* dump a PCB */
-int	pflag;		/* show given protocol */
-int	qflag;		/* show softintrq */
-int	rflag;		/* show routing tables (or routing stats) */
-int	sflag;		/* show protocol statistics */
-int	tagflag;	/* show route tags */
-int	tflag;		/* show i/f watchdog timers */
-int	Vflag;		/* show Vestigial TIME_WAIT (VTW) information */
-int	vflag;		/* verbose route information or don't truncate names */
-
-char	*interface;	/* desired i/f for stats, or NULL for all i/fs */
-
-int	af;		/* address family */
-int	use_sysctl;	/* use sysctl instead of kmem */
-int	force_sysctl;	/* force use of sysctl (or exit) - for testing */
+extern int	hflag;		/* humanize byte counts */
+extern int	iflag;		/* show interfaces */
+extern int	Lflag;		/* don't show LLINFO entries */
+extern int	lflag;		/* show routing table with use and ref */
+extern int	mflag;		/* show memory stats */
+extern int	numeric_addr;	/* show addresses numerically */
+extern int	numeric_port;	/* show ports numerically */
+extern int	nflag;		/* same as above, for show.c compat */
+extern int	Pflag;		/* dump a PCB */
+extern int	pflag;		/* show given protocol */
+extern int	qflag;		/* show softintrq */
+extern int	rflag;		/* show routing tables (or routing stats) */
+extern int	sflag;		/* show protocol statistics */
+extern int	tagflag;	/* show route tags */
+extern int	tflag;		/* show i/f watchdog timers */
+extern int	Vflag;	       /* show Vestigial TIME_WAIT (VTW) information */
+extern int	vflag;	/* verbose route information or don't truncate names */
+
+extern char	*interface;   /* desired i/f for stats, or NULL for all i/fs */
+
+extern int	af;		/* address family */
+extern int	use_sysctl;	/* use sysctl instead of kmem */
+extern int	force_sysctl; /* force use of sysctl (or exit) - for testing */
 
 
 int	kread(u_long addr, char *buf, int size);

Index: src/usr.bin/netstat/pfkey.c
diff -u src/usr.bin/netstat/pfkey.c:1.1 src/usr.bin/netstat/pfkey.c:1.1.34.1
--- src/usr.bin/netstat/pfkey.c:1.1	Fri Jan  6 14:21:16 2012
+++ src/usr.bin/netstat/pfkey.c	Mon Sep 12 14:29:19 2022
@@ -1,10 +1,10 @@
-/*	$NetBSD: pfkey.c,v 1.1 2012/01/06 14:21:16 drochner Exp $	*/
+/*	$NetBSD: pfkey.c,v 1.1.34.1 2022/09/12 14:29:19 martin Exp $	*/
 /*	$KAME: ipsec.c,v 1.33 2003/07/25 09:54:32 itojun Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -16,7 +16,7 @@
  * 3. Neither the name of the project nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -65,7 +65,7 @@
 static char sccsid[] = "from: @(#)inet.c	8.4 (Berkeley) 4/20/94";
 #else
 #ifdef __NetBSD__
-__RCSID("$NetBSD: pfkey.c,v 1.1 2012/01/06 14:21:16 drochner Exp $");
+__RCSID("$NetBSD: pfkey.c,v 1.1.34.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif
 #endif /* not lint */
@@ -85,7 +85,7 @@ __RCSID("$NetBSD: pfkey.c,v 1.1 2012/01/
 #include <unistd.h>
 #include "netstat.h"
 
-#ifdef IPSEC 
+#ifdef IPSEC
 
 static const char *pfkey_msgtypenames[] = {
 	"reserved", "getspi", "update", "add", "delete",
@@ -129,7 +129,7 @@ pfkey_stats(u_long off, const char *name
 
 	printf ("%s:\n", name);
 
-#define	p(f, m) if (pfkeystat[f] || sflag <= 1) \
+#define	p(f, m) if (pfkeystat[f] || sflag <= 1)				\
     printf(m, (unsigned long long)pfkeystat[f], plural(pfkeystat[f]))
 
 	/* userland -> kernel */
@@ -145,15 +145,24 @@ pfkey_stats(u_long off, const char *name
 		printf("\t\t%s: %llu\n", pfkey_msgtype_names(type),
 		    (unsigned long long)pfkeystat[PFKEY_STAT_OUT_MSGTYPE + type]);
 	}
-	p(PFKEY_STAT_OUT_INVLEN, "\t%llu message%s with invalid length field\n");
-	p(PFKEY_STAT_OUT_INVVER, "\t%llu message%s with invalid version field\n");
-	p(PFKEY_STAT_OUT_INVMSGTYPE, "\t%llu message%s with invalid message type field\n");
-	p(PFKEY_STAT_OUT_TOOSHORT, "\t%llu message%s too short\n");
-	p(PFKEY_STAT_OUT_NOMEM, "\t%llu message%s with memory allocation failure\n");
-	p(PFKEY_STAT_OUT_DUPEXT, "\t%llu message%s with duplicate extension\n");
-	p(PFKEY_STAT_OUT_INVEXTTYPE, "\t%llu message%s with invalid extension type\n");
-	p(PFKEY_STAT_OUT_INVSATYPE, "\t%llu message%s with invalid sa type\n");
-	p(PFKEY_STAT_OUT_INVADDR, "\t%llu message%s with invalid address extension\n");
+	p(PFKEY_STAT_OUT_INVLEN,
+	    "\t%llu message%s with invalid length field\n");
+	p(PFKEY_STAT_OUT_INVVER,
+	    "\t%llu message%s with invalid version field\n");
+	p(PFKEY_STAT_OUT_INVMSGTYPE,
+	    "\t%llu message%s with invalid message type field\n");
+	p(PFKEY_STAT_OUT_TOOSHORT,
+	    "\t%llu message%s too short\n");
+	p(PFKEY_STAT_OUT_NOMEM,
+	    "\t%llu message%s with memory allocation failure\n");
+	p(PFKEY_STAT_OUT_DUPEXT,
+	    "\t%llu message%s with duplicate extension\n");
+	p(PFKEY_STAT_OUT_INVEXTTYPE,
+	    "\t%llu message%s with invalid extension type\n");
+	p(PFKEY_STAT_OUT_INVSATYPE,
+	    "\t%llu message%s with invalid sa type\n");
+	p(PFKEY_STAT_OUT_INVADDR,
+	    "\t%llu message%s with invalid address extension\n");
 
 	/* kernel -> userland */
 	p(PFKEY_STAT_IN_TOTAL, "\t%llu request%s sent to userland\n");
@@ -174,7 +183,8 @@ pfkey_stats(u_long off, const char *name
 	    "\t%llu message%s toward all sockets\n");
 	p(PFKEY_STAT_IN_MSGTARGET + KEY_SENDUP_REGISTERED,
 	    "\t%llu message%s toward registered sockets\n");
-	p(PFKEY_STAT_IN_NOMEM, "\t%llu message%s with memory allocation failure\n");
+	p(PFKEY_STAT_IN_NOMEM,
+	    "\t%llu message%s with memory allocation failure\n");
 #undef p
 }
 #endif /*IPSEC*/

Index: src/usr.bin/netstat/pfsync.c
diff -u src/usr.bin/netstat/pfsync.c:1.1 src/usr.bin/netstat/pfsync.c:1.1.38.1
--- src/usr.bin/netstat/pfsync.c:1.1	Tue Mar  1 19:01:59 2011
+++ src/usr.bin/netstat/pfsync.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: pfsync.c,v 1.1 2011/03/01 19:01:59 dyoung Exp $	*/
+/*	$NetBSD: pfsync.c,v 1.1.38.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: pfsync.c,v 1.1 2011/03/01 19:01:59 dyoung Exp $");
+__RCSID("$NetBSD: pfsync.c,v 1.1.38.1 2022/09/12 14:29:19 martin Exp $");
 #endif /* not lint */
 
 #define	_CALLOUT_PRIVATE	/* for defs in sys/callout.h */
@@ -82,7 +82,7 @@ pfsync_stats(u_long off, const char *nam
 		size_t size = sizeof(pfsyncstat);
 
 		if (sysctlbyname("net.inet.pfsync.stats", pfsyncstat, &size,
-				 NULL, 0) == -1)
+		    NULL, 0) == -1)
 			return;
 	} else {
 		warnx("%s stats not available via KVM.", name);
@@ -98,20 +98,34 @@ pfsync_stats(u_long off, const char *nam
 
 	p(PFSYNC_STAT_IPACKETS, "\t%" PRIu64 " packet%s received (IPv4)\n");
 	p(PFSYNC_STAT_IPACKETS6,"\t%" PRIu64 " packet%s received (IPv6)\n");
-	p(PFSYNC_STAT_BADIF, "\t\t%" PRIu64 " packet%s discarded for bad interface\n");
-	p(PFSYNC_STAT_BADTTL, "\t\t%" PRIu64 " packet%s discarded for bad ttl\n");
-	p(PFSYNC_STAT_HDROPS, "\t\t%" PRIu64 " packet%s shorter than header\n");
-	p(PFSYNC_STAT_BADVER, "\t\t%" PRIu64 " packet%s discarded for bad version\n");
-	p(PFSYNC_STAT_BADAUTH, "\t\t%" PRIu64 " packet%s discarded for bad HMAC\n");
-	p(PFSYNC_STAT_BADACT,"\t\t%" PRIu64 " packet%s discarded for bad action\n");
-	p(PFSYNC_STAT_BADLEN, "\t\t%" PRIu64 " packet%s discarded for short packet\n");
-	p(PFSYNC_STAT_BADVAL, "\t\t%" PRIu64 " state%s discarded for bad values\n");
-	p(PFSYNC_STAT_STALE, "\t\t%" PRIu64 " stale state%s\n");
-	p(PFSYNC_STAT_BADSTATE, "\t\t%" PRIu64 " failed state lookup/insert%s\n");
-	p(PFSYNC_STAT_OPACKETS, "\t%" PRIu64 " packet%s sent (IPv4)\n");
-	p(PFSYNC_STAT_OPACKETS6, "\t%" PRIu64 " packet%s sent (IPv6)\n");
-	p2(PFSYNC_STAT_ONOMEM, "\t\t%" PRIu64 " send failed due to mbuf memory error\n");
-	p2(PFSYNC_STAT_OERRORS, "\t\t%" PRIu64 " send error\n");
+	p(PFSYNC_STAT_BADIF,
+	    "\t\t%" PRIu64 " packet%s discarded for bad interface\n");
+	p(PFSYNC_STAT_BADTTL,
+	    "\t\t%" PRIu64 " packet%s discarded for bad ttl\n");
+	p(PFSYNC_STAT_HDROPS,
+	    "\t\t%" PRIu64 " packet%s shorter than header\n");
+	p(PFSYNC_STAT_BADVER,
+	    "\t\t%" PRIu64 " packet%s discarded for bad version\n");
+	p(PFSYNC_STAT_BADAUTH,
+	    "\t\t%" PRIu64 " packet%s discarded for bad HMAC\n");
+	p(PFSYNC_STAT_BADACT,
+	    "\t\t%" PRIu64 " packet%s discarded for bad action\n");
+	p(PFSYNC_STAT_BADLEN,
+	    "\t\t%" PRIu64 " packet%s discarded for short packet\n");
+	p(PFSYNC_STAT_BADVAL,
+	    "\t\t%" PRIu64 " state%s discarded for bad values\n");
+	p(PFSYNC_STAT_STALE,
+	    "\t\t%" PRIu64 " stale state%s\n");
+	p(PFSYNC_STAT_BADSTATE,
+	    "\t\t%" PRIu64 " failed state lookup/insert%s\n");
+	p(PFSYNC_STAT_OPACKETS,
+	    "\t%" PRIu64 " packet%s sent (IPv4)\n");
+	p(PFSYNC_STAT_OPACKETS6,
+	    "\t%" PRIu64 " packet%s sent (IPv6)\n");
+	p2(PFSYNC_STAT_ONOMEM,
+	    "\t\t%" PRIu64 " send failed due to mbuf memory error\n");
+	p2(PFSYNC_STAT_OERRORS,
+	    "\t\t%" PRIu64 " send error\n");
 #undef p
 #undef p2
 }

Index: src/usr.bin/netstat/route.c
diff -u src/usr.bin/netstat/route.c:1.85 src/usr.bin/netstat/route.c:1.85.8.1
--- src/usr.bin/netstat/route.c:1.85	Mon Apr  4 07:37:08 2016
+++ src/usr.bin/netstat/route.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: route.c,v 1.85 2016/04/04 07:37:08 ozaki-r Exp $	*/
+/*	$NetBSD: route.c,v 1.85.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)route.c	8.3 (Berkeley) 3/9/94";
 #else
-__RCSID("$NetBSD: route.c,v 1.85 2016/04/04 07:37:08 ozaki-r Exp $");
+__RCSID("$NetBSD: route.c,v 1.85.8.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -101,7 +101,7 @@ void
 routepr(u_long rtree)
 {
 	struct radix_node_head *rnh, head;
-	struct radix_node_head *rt_nodes[AF_MAX+1];
+	struct radix_node_head *rt_nodes[AF_MAX + 1];
 	int i;
 
 	printf("Routing tables\n");
@@ -159,8 +159,9 @@ again:
 			if (Aflag)
 				p_rtnode();
 		} else {
-			p_sockaddr(kgetsa((const struct sockaddr *)rnode.rn_key),
-			    NULL, 0, 44, nflag);
+			p_sockaddr(
+				kgetsa((const struct sockaddr *)rnode.rn_key),
+				NULL, 0, 44, nflag);
 			putchar('\n');
 		}
 		if ((rn = rnode.rn_dupedkey) != NULL)
@@ -185,8 +186,9 @@ p_rtnode(void)
 	if (rnode.rn_b < 0) {
 		if (rnode.rn_mask) {
 			printf("\t  mask ");
-			p_sockaddr(kgetsa((const struct sockaddr *)rnode.rn_mask),
-				    NULL, 0, -1, nflag);
+			p_sockaddr(
+				kgetsa((const struct sockaddr *)rnode.rn_mask),
+				NULL, 0, -1, nflag);
 		} else if (rm == 0)
 			return;
 	} else {
@@ -204,10 +206,11 @@ p_rtnode(void)
 			printf(" <normal>, ");
 			kget(rmask.rm_leaf, rnode_aux);
 			p_sockaddr(kgetsa((const struct sockaddr *)rnode_aux.rn_mask),
-				    NULL, 0, -1, nflag);
-		} else
-			p_sockaddr(kgetsa((const struct sockaddr *)rmask.rm_mask),
 			    NULL, 0, -1, nflag);
+		} else
+			p_sockaddr(
+				kgetsa((const struct sockaddr *)rmask.rm_mask),
+				NULL, 0, -1, nflag);
 		putchar('}');
 		if ((rm = rmask.rm_mklist) != NULL)
 			printf(" ->");
@@ -250,11 +253,12 @@ p_krtentry(struct rtentry *rt)
 	else
 		mask = sockcopy(NULL, &mask_un);
 	p_addr(addr, mask, rt->rt_flags, nflag);
-	p_gwaddr(kgetsa(rt->rt_gateway), kgetsa(rt->rt_gateway)->sa_family, nflag);
+	p_gwaddr(kgetsa(rt->rt_gateway), kgetsa(rt->rt_gateway)->sa_family,
+	    nflag);
 	p_flags(rt->rt_flags);
 	printf("%6d %8"PRIu64" ", rt->rt_refcnt, rt->rt_use);
 	if (rt->rt_rmx.rmx_mtu)
-		printf("%6"PRIu64, rt->rt_rmx.rmx_mtu); 
+		printf("%6"PRIu64, rt->rt_rmx.rmx_mtu);
 	else
 		printf("%6s", "-");
 	putchar((rt->rt_rmx.rmx_locks & RTV_MTU) ? 'L' : ' ');
@@ -270,8 +274,7 @@ p_krtentry(struct rtentry *rt)
 					printf("%7s", tagstr);
 				else
 					printf("%s", tagstr);
-			}
-			else
+			} else
 				printf("%7s", "-");
 		} else
 #endif
@@ -306,7 +309,7 @@ rt_stats(u_long off)
 		if (sysctlbyname("net.route.stats", &rtstats, &rtsize,
 		    NULL, 0) == -1)
 			err(1, "rt_stats: sysctl");
-	} else 	if (off == 0) {
+	} else if (off == 0) {
 		printf("rtstat: symbol not in namelist\n");
 		return;
 	} else
@@ -314,18 +317,18 @@ rt_stats(u_long off)
 
 	printf("routing:\n");
 	printf("\t%llu bad routing redirect%s\n",
-		(unsigned long long)rtstats.rts_badredirect,
-		plural(rtstats.rts_badredirect));
+	    (unsigned long long)rtstats.rts_badredirect,
+	    plural(rtstats.rts_badredirect));
 	printf("\t%llu dynamically created route%s\n",
-		(unsigned long long)rtstats.rts_dynamic,
-		plural(rtstats.rts_dynamic));
+	    (unsigned long long)rtstats.rts_dynamic,
+	    plural(rtstats.rts_dynamic));
 	printf("\t%llu new gateway%s due to redirects\n",
-		(unsigned long long)rtstats.rts_newgateway,
-		plural(rtstats.rts_newgateway));
+	    (unsigned long long)rtstats.rts_newgateway,
+	    plural(rtstats.rts_newgateway));
 	printf("\t%llu destination%s found unreachable\n",
-		(unsigned long long)rtstats.rts_unreach,
-		plural(rtstats.rts_unreach));
+	    (unsigned long long)rtstats.rts_unreach,
+	    plural(rtstats.rts_unreach));
 	printf("\t%llu use%s of a wildcard route\n",
-		(unsigned long long)rtstats.rts_wildcard,
-		plural(rtstats.rts_wildcard));
+	    (unsigned long long)rtstats.rts_wildcard,
+	    plural(rtstats.rts_wildcard));
 }

Index: src/usr.bin/netstat/unix.c
diff -u src/usr.bin/netstat/unix.c:1.35 src/usr.bin/netstat/unix.c:1.35.6.1
--- src/usr.bin/netstat/unix.c:1.35	Fri Jan 13 04:22:51 2017
+++ src/usr.bin/netstat/unix.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: unix.c,v 1.35 2017/01/13 04:22:51 christos Exp $	*/
+/*	$NetBSD: unix.c,v 1.35.6.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*-
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)unix.c	8.1 (Berkeley) 6/6/93";
 #else
-__RCSID("$NetBSD: unix.c,v 1.35 2017/01/13 04:22:51 christos Exp $");
+__RCSID("$NetBSD: unix.c,v 1.35.6.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -79,8 +79,8 @@ unixdomainprhdr(void)
 {
 	printf("Active UNIX domain sockets\n");
 	printf("%-8.8s %-6.6s %-6.6s %-6.6s %8.8s %8.8s %8.8s %8.8s Addr\n",
-	       "Address", "Type", "Recv-Q", "Send-Q", "Inode", "Conn", "Refs",
-	       "Nextref");
+	    "Address", "Type", "Recv-Q", "Send-Q", "Inode", "Conn", "Refs",
+	    "Nextref");
 }
 
 static	const char * const socktype[] =
@@ -92,12 +92,12 @@ unixdomainpr0(u_long so_pcb, u_long so_t
 	      u_long addr, struct sockaddr_un *sun, int remote)
 {
 	printf("%8lx %-6.6s %6ld %6ld %8lx %8lx %8lx %8lx",
-	       so_pcb, socktype[so_type], rcvq, sndq, inode, conn, refs,
-	       nextref);
+	    so_pcb, socktype[so_type], rcvq, sndq, inode, conn, refs,
+	    nextref);
 	if (addr || remote)
 		printf((remote ? " -> %.*s" : " %.*s"),
-		       (int)(sun->sun_len - (sizeof(*sun) - sizeof(sun->sun_path))),
-		       sun->sun_path);
+		    (int)(sun->sun_len - (sizeof(*sun) - sizeof(sun->sun_path))),
+		    sun->sun_path);
 	putchar('\n');
 }
 
@@ -161,8 +161,7 @@ unixpr(u_long off)
 		for (mibname = mibnames; *mibname; mibname++) {
 			memset(mib, 0, sizeof(mib));
 
-			if (sysctlnametomib(*mibname, mib,
-					    &namelen) == -1)
+			if (sysctlnametomib(*mibname, mib, &namelen) == -1)
 				err(1, "sysctlnametomib: %s", *mibname);
 
 			if (prog_sysctl(mib, sizeof(mib) / sizeof(*mib),
@@ -176,7 +175,7 @@ unixpr(u_long off)
 			mib[6] = sizeof(*pcblist);
 			mib[7] = size / sizeof(*pcblist);
 
-			if (prog_sysctl(mib, sizeof(mib) / sizeof(*mib), 
+			if (prog_sysctl(mib, sizeof(mib) / sizeof(*mib),
 					pcblist, &size, NULL, 0) == -1)
 				err(1, "sysctl (copy)");
 
@@ -197,10 +196,10 @@ unixpr(u_long off)
 					sun = (struct sockaddr_un *)&ki->ki_src;
 				}
 
-				unixdomainpr0(ki->ki_pcbaddr, ki->ki_type, 
+				unixdomainpr0(ki->ki_pcbaddr, ki->ki_type,
 					      ki->ki_rcvq, ki->ki_sndq,
-					      ki->ki_vnode, ki->ki_conn, 
-					      ki->ki_refs, ki->ki_nextref, 
+					      ki->ki_vnode, ki->ki_conn,
+					      ki->ki_refs, ki->ki_nextref,
 					      ki->ki_sockaddr, sun, remote);
 			}
 
@@ -208,11 +207,11 @@ unixpr(u_long off)
 		}
 
 	} else {
-		filebuf = (char *)kvm_getfiles(get_kvmd(), KERN_FILE, 
+		filebuf = (char *)kvm_getfiles(get_kvmd(), KERN_FILE,
 					       0, &ns_nfiles);
 		if (filebuf == 0) {
-			printf("file table read error: %s", 
-			       kvm_geterr(get_kvmd()));
+			printf("file table read error: %s",
+			    kvm_geterr(get_kvmd()));
 			return;
 		}
 		file = (struct file *)(filebuf + sizeof(fp));
@@ -223,7 +222,8 @@ unixpr(u_long off)
 			if (kread((u_long)fp->f_data, (char *)so, sizeof (*so)))
 				continue;
 			/* kludge */
-			if (so->so_proto >= unixsw && so->so_proto <= unixsw + 2)
+			if (so->so_proto >= unixsw &&
+			    so->so_proto <= unixsw + 2)
 				if (so->so_pcb)
 					unixdomainpr(so, fp->f_data);
 		}

Index: src/usr.bin/netstat/vtw.c
diff -u src/usr.bin/netstat/vtw.c:1.9 src/usr.bin/netstat/vtw.c:1.9.8.1
--- src/usr.bin/netstat/vtw.c:1.9	Mon Feb 29 18:19:46 2016
+++ src/usr.bin/netstat/vtw.c	Mon Sep 12 14:29:19 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vtw.c,v 1.9 2016/02/29 18:19:46 christos Exp $	*/
+/*	$NetBSD: vtw.c,v 1.9.8.1 2022/09/12 14:29:19 martin Exp $	*/
 
 /*
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
 #if 0
 static char sccsid[] = "from: @(#)inet.c	8.4 (Berkeley) 4/20/94";
 #else
-__RCSID("$NetBSD: vtw.c,v 1.9 2016/02/29 18:19:46 christos Exp $");
+__RCSID("$NetBSD: vtw.c,v 1.9.8.1 2022/09/12 14:29:19 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -116,11 +116,28 @@ __RCSID("$NetBSD: vtw.c,v 1.9 2016/02/29
 #include "vtw.h"
 #include "prog_ops.h"
 
+static bool	vtw_enabled(void);
 static void	snarf(const void *, void *, size_t);
 static void	*lookup(const char *);
 static void	process_vtw(const vtw_ctl_t *, void (*)(const vtw_t *));
 
-static void 
+static bool
+vtw_enabled(void)
+{
+
+	if (use_sysctl) {
+		int enabled;
+		size_t size = sizeof(enabled);
+
+		if (sysctlbyname("net.inet.tcp.vtw.enable",
+		    &enabled, &size, NULL, 0) == -1)
+			return true;
+		return enabled ? true : false;
+	} else
+		return true;
+}
+
+static void
 snarf(const void *addr, void *buf, size_t len)
 {
 	size_t cc;
@@ -173,6 +190,11 @@ timebase(struct timeval *tv)
 	void *p;
 	struct bintime timebasebin;
 
+	if (!vtw_enabled()) {
+		memset(tv, 0, sizeof(*tv));
+		return;
+	}
+
 	p = lookup("timebasebin");
 	if (!p)
 		return;
@@ -180,7 +202,7 @@ timebase(struct timeval *tv)
 	bintime2timeval(&timebasebin, tv);
 }
 
-static void 
+static void
 process_vtw(const vtw_ctl_t * ctl, void (*print)(const vtw_t *))
 {
 	vtw_t *vp;
@@ -210,6 +232,9 @@ show_vtw_stats(void)
 	if (!Vflag)
 		return;
 
+	if (!vtw_enabled())
+		return;
+
 	if ((p = lookup("vtw_stats")) == NULL)
 		return;
 	snarf(p, &stats, sizeof(stats));
@@ -237,7 +262,7 @@ show_vtw_stats(void)
 	printf("\t\t%" PRIu64 " max_loss\n", stats.max_loss[1]);
 }
 
-void 
+void
 show_vtw_v4(void (*print)(const vtw_t *))
 {
 	fatp_t *base, *lim;
@@ -249,6 +274,9 @@ show_vtw_v4(void (*print)(const vtw_t *)
 	int mem = 0;
 	void *p;
 
+	if (!vtw_enabled())
+		return;
+
 	if ((p = lookup("fat_tcpv4")) == NULL)
 		return;
 	snarf(p, &fat_tcpv4, sizeof(fat_tcpv4));
@@ -280,9 +308,8 @@ show_vtw_v4(void (*print)(const vtw_t *)
 			snarf(kbase, ubase, n * sizeof(*ubase));
 
 			mem += n * sizeof(*ubase);
-		} else {
+		} else
 			ubase = vtw_tcpv4[0].base.v4;
-		}
 
 		delta = ubase - kbase;
 
@@ -332,14 +359,14 @@ end:
 
 #if 0
 	if (Vflag && vflag) {
-		printf("total memory for VTW in current config: %d bytes %f MB\n"
-		    ,mem
-		    ,mem / (1024.0 * 1024));
+		printf("total memory for VTW in current config: "
+		    "%d bytes %f MB\n",
+		    mem, mem / (1024.0 * 1024));
 	}
 #endif
 }
 
-void 
+void
 show_vtw_v6(void (*print)(const vtw_t *))
 {
 	fatp_t *base, *lim;
@@ -351,6 +378,9 @@ show_vtw_v6(void (*print)(const vtw_t *)
 	int mem = 0;
 	void *p;
 
+	if (!vtw_enabled())
+		return;
+
 	if ((p = lookup("fat_tcpv6")) == NULL)
 		return;
 	snarf(p, &fat_tcpv6, sizeof(fat_tcpv6));
@@ -381,9 +411,8 @@ show_vtw_v6(void (*print)(const vtw_t *)
 			snarf(kbase, ubase, n * sizeof(*ubase));
 
 			mem += n * sizeof(*ubase);
-		} else {
+		} else
 			ubase = vtw_tcpv6[0].base.v6;
-		}
 
 		delta = ubase - kbase;
 
@@ -431,9 +460,9 @@ end:
 	process_vtw(&vtw_tcpv6[0], print);
 #if 0
 	if (Vflag && vflag) {
-		printf("total memory for VTW in current config: %d bytes %f MB\n"
-		    ,mem
-		    ,mem / (1024.0 * 1024));
+		printf("total memory for VTW in current config: "
+		    "%d bytes %f MB\n",
+		    mem, mem / (1024.0 * 1024));
 	}
 #endif
 }

Reply via email to