Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Dec 2009 23:58:32 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r201243 - in stable/7: sys/netipsec usr.bin/netstat
Message-ID:  <200912292358.nBTNwWpM041001@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Tue Dec 29 23:58:32 2009
New Revision: 201243
URL: http://svn.freebsd.org/changeset/base/201243

Log:
  MFC r199946:
  
    Add more statistics variables for IPcomp.
  
    Try to version the struct in a backward compatible way.
    People asked for the versioning of the stats structs in general before.
  
  Note: old netstat binaries, as only consumer, continue to work as they are
        still using kvm but will not display the new stats. [1]
  
  Discussed with:		rwatson [1] (for stable/8)

Modified:
  stable/7/sys/netipsec/ipcomp_var.h
  stable/7/sys/netipsec/xform_ipcomp.c
  stable/7/usr.bin/netstat/ipsec.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/usr.bin/netstat/   (props changed)

Modified: stable/7/sys/netipsec/ipcomp_var.h
==============================================================================
--- stable/7/sys/netipsec/ipcomp_var.h	Tue Dec 29 23:47:21 2009	(r201242)
+++ stable/7/sys/netipsec/ipcomp_var.h	Tue Dec 29 23:58:32 2009	(r201243)
@@ -41,6 +41,7 @@
  */
 #define	IPCOMP_ALG_MAX	8
 
+#define	IPCOMPSTAT_VERSION	1
 struct ipcompstat {
 	u_int32_t	ipcomps_hdrops;	/* Packet shorter than header shows */
 	u_int32_t	ipcomps_nopf;	/* Protocol family not supported */
@@ -58,6 +59,9 @@ struct ipcompstat {
 	u_int32_t	ipcomps_pdrops;	/* Packet blocked due to policy */
 	u_int32_t	ipcomps_crypto;	/* "Crypto" processing failure */
 	u_int32_t	ipcomps_hist[IPCOMP_ALG_MAX];/* Per-algorithm op count */
+	u_int32_t	version;	/* Version of this structure. */
+	u_int32_t	ipcomps_threshold; /* Packet < comp. algo. threshold. */
+	u_int32_t	ipcomps_uncompr; /* Compression was useles. */
 };
 
 #ifdef _KERNEL

Modified: stable/7/sys/netipsec/xform_ipcomp.c
==============================================================================
--- stable/7/sys/netipsec/xform_ipcomp.c	Tue Dec 29 23:47:21 2009	(r201242)
+++ stable/7/sys/netipsec/xform_ipcomp.c	Tue Dec 29 23:58:32 2009	(r201243)
@@ -347,7 +347,7 @@ ipcomp_output(
 	 * See RFC 3173, 2.2. Non-Expansion Policy.
 	 */
 	if (m->m_pkthdr.len <= ipcompx->minlen) {
-		/* XXX-BZ V_ipcompstat.threshold++; */
+		ipcompstat.ipcomps_threshold++;
 		return ipsec_process_done(m, isr);
 	}
 
@@ -571,8 +571,10 @@ ipcomp_output_cb(struct cryptop *crp)
 			goto bad;
 		}
 	} else {
-		/* compression was useless, we have lost time */
-		/* XXX add statistic */
+		/* Compression was useless, we have lost time. */
+		ipcompstat.ipcomps_uncompr++;
+		DPRINTF(("%s: compressions was useless %d - %d <= %d\n",
+		    __func__, crp->crp_ilen, skip, crp->crp_olen));
 		/* XXX remember state to not compress the next couple
 		 *     of packets, RFC 3173, 2.2. Non-Expansion Policy */
 	}
@@ -606,6 +608,8 @@ static struct xformsw ipcomp_xformsw = {
 static void
 ipcomp_attach(void)
 {
+
+	ipcompstat.version = IPCOMPSTAT_VERSION;
 	xform_register(&ipcomp_xformsw);
 }
 SYSINIT(ipcomp_xform_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ipcomp_attach, NULL);

Modified: stable/7/usr.bin/netstat/ipsec.c
==============================================================================
--- stable/7/usr.bin/netstat/ipsec.c	Tue Dec 29 23:47:21 2009	(r201242)
+++ stable/7/usr.bin/netstat/ipsec.c	Tue Dec 29 23:58:32 2009	(r201243)
@@ -418,6 +418,7 @@ esp_stats(u_long off, const char *name, 
 static void
 print_ipcompstats(const struct ipcompstat *ipcompstat)
 {
+	uint32_t version;
 #define	p32(f, m) if (ipcompstat->f || sflag <= 1) \
     printf("\t%u" m, (unsigned int)ipcompstat->f, plural(ipcompstat->f))
 #define	p64(f, m) if (ipcompstat->f || sflag <= 1) \
@@ -425,6 +426,11 @@ print_ipcompstats(const struct ipcompsta
 #define	hist(f, n, t) \
     ipsec_hist_new((f), sizeof(f)/sizeof(f[0]), (n), (t));
 
+#ifndef IPCOMPSTAT_VERSION
+	version = 0;
+#else
+	version = ipcompstat->version;
+#endif
 	p32(ipcomps_hdrops, " packet%s shorter than header shows\n");
 	p32(ipcomps_nopf, " packet%s dropped; protocol family not supported\n");
 	p32(ipcomps_notdb, " packet%s dropped; no TDB\n");
@@ -441,6 +447,10 @@ print_ipcompstats(const struct ipcompsta
 	p32(ipcomps_pdrops, " packet%s blocked due to policy\n");
 	p32(ipcomps_crypto, " crypto processing failure%s\n");
 	hist(ipcompstat->ipcomps_hist, ipsec_compnames, "COMP output");
+	if (version >= 1) {
+	p32(ipcomps_threshold, " packet%s sent uncompressed; size < compr. algo. threshold\n");
+	p32(ipcomps_uncompr, " packet%s sent uncompressed; compression was useless\n");
+	}
 
 #undef p32
 #undef p64



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912292358.nBTNwWpM041001>