svn commit: r309052 - projects/ipsec/sys/netipsec

Andrey V. Elsukov ae at FreeBSD.org
Wed Nov 23 11:03:24 UTC 2016


Author: ae
Date: Wed Nov 23 11:03:23 2016
New Revision: 309052
URL: https://svnweb.freebsd.org/changeset/base/309052

Log:
  Update key_sa_recordxfer() to use PCPU counters.
  
  NOTE: previously CURRENT usetime was updated every time, when
  key_sa_recordxfer() is invoked. RFC 2367 says:
  
  sadb_lifetime_usetime
        For CURRENT, the time, in seconds, when association
        was first used. For HARD and SOFT, the number of
        seconds after the first use of the association until
        it expires.
  
  Rename usetime into firstused and update it only once. Also, now
  it is possible to check SA expiration using difference between
  SOFT/HARD usetime and CURRENT firstused (this is already done in
  key_flush_sad).

Modified:
  projects/ipsec/sys/netipsec/key.c

Modified: projects/ipsec/sys/netipsec/key.c
==============================================================================
--- projects/ipsec/sys/netipsec/key.c	Wed Nov 23 10:52:19 2016	(r309051)
+++ projects/ipsec/sys/netipsec/key.c	Wed Nov 23 11:03:23 2016	(r309052)
@@ -7591,23 +7591,19 @@ key_sa_recordxfer(struct secasvar *sav, 
 {
 	IPSEC_ASSERT(sav != NULL, ("Null secasvar"));
 	IPSEC_ASSERT(m != NULL, ("Null mbuf"));
-	if (!sav->lft_c)
-		return;
 
 	/*
 	 * XXX Currently, there is a difference of bytes size
 	 * between inbound and outbound processing.
 	 */
-	sav->lft_c->bytes += m->m_pkthdr.len;
-	/* to check bytes lifetime is done in key_timehandler(). */
+	counter_u64_add(sav->lft_c_bytes, m->m_pkthdr.len);
 
 	/*
 	 * We use the number of packets as the unit of
 	 * allocations.  We increment the variable
 	 * whenever {esp,ah}_{in,out}put is called.
 	 */
-	sav->lft_c->allocations++;
-	/* XXX check for expires? */
+	counter_u64_add(sav->lft_c_allocations, 1);
 
 	/*
 	 * NOTE: We record CURRENT usetime by using wall clock,
@@ -7620,10 +7616,8 @@ key_sa_recordxfer(struct secasvar *sav, 
 	 *	<--------------> HARD
 	 *	<-----> SOFT
 	 */
-	sav->lft_c->usetime = time_second;
-	/* XXX check for expires? */
-
-	return;
+	if (sav->firstused == 0)
+		sav->firstused = time_second;
 }
 
 static void


More information about the svn-src-projects mailing list