This makes 'tdb' struct more MP compliant. 'tdb_data' struct became
unused and was removed.
Index: sys/net/pfkeyv2_convert.c
===================================================================
RCS file: /cvs/src/sys/net/pfkeyv2_convert.c,v
retrieving revision 1.72
diff -u -p -r1.72 pfkeyv2_convert.c
--- sys/net/pfkeyv2_convert.c 14 Jul 2021 22:39:26 -0000 1.72
+++ sys/net/pfkeyv2_convert.c 23 Jul 2021 00:01:58 -0000
@@ -960,18 +960,21 @@ export_satype(void **p, struct tdb *tdb)
void
export_counter(void **p, struct tdb *tdb)
{
+ uint64_t counters[tdb_ncounters];
struct sadb_x_counter *scnt = (struct sadb_x_counter *)*p;
+ counters_read(tdb->tdb_counters, counters, tdb_ncounters);
+
scnt->sadb_x_counter_len = sizeof(struct sadb_x_counter) /
sizeof(uint64_t);
scnt->sadb_x_counter_pad = 0;
- scnt->sadb_x_counter_ipackets = tdb->tdb_ipackets;
- scnt->sadb_x_counter_opackets = tdb->tdb_opackets;
- scnt->sadb_x_counter_ibytes = tdb->tdb_ibytes;
- scnt->sadb_x_counter_obytes = tdb->tdb_obytes;
- scnt->sadb_x_counter_idrops = tdb->tdb_idrops;
- scnt->sadb_x_counter_odrops = tdb->tdb_odrops;
- scnt->sadb_x_counter_idecompbytes = tdb->tdb_idecompbytes;
- scnt->sadb_x_counter_ouncompbytes = tdb->tdb_ouncompbytes;
+ scnt->sadb_x_counter_ipackets = counters[tdb_ipackets];
+ scnt->sadb_x_counter_opackets = counters[tdb_opackets];
+ scnt->sadb_x_counter_ibytes = counters[tdb_ibytes];
+ scnt->sadb_x_counter_obytes = counters[tdb_obytes];
+ scnt->sadb_x_counter_idrops = counters[tdb_idrops];
+ scnt->sadb_x_counter_odrops = counters[tdb_odrops];
+ scnt->sadb_x_counter_idecompbytes = counters[tdb_idecompbytes];
+ scnt->sadb_x_counter_ouncompbytes = counters[tdb_ouncompbytes];
*p += sizeof(struct sadb_x_counter);
}
Index: sys/netinet/ip_ah.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_ah.c,v
retrieving revision 1.151
diff -u -p -r1.151 ip_ah.c
--- sys/netinet/ip_ah.c 18 Jul 2021 14:38:20 -0000 1.151
+++ sys/netinet/ip_ah.c 23 Jul 2021 00:01:58 -0000
@@ -609,7 +609,7 @@ ah_input(struct mbuf *m, struct tdb *tdb
/* Update the counters. */
ibytes = (m->m_pkthdr.len - skip - hl * sizeof(u_int32_t));
tdb->tdb_cur_bytes += ibytes;
- tdb->tdb_ibytes += ibytes;
+ tdb_stat_add(tdb, tdb_ibytes, ibytes);
ahstat_add(ahs_ibytes, ibytes);
/* Hard expiration. */
Index: sys/netinet/ip_esp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_esp.c,v
retrieving revision 1.169
diff -u -p -r1.169 ip_esp.c
--- sys/netinet/ip_esp.c 18 Jul 2021 14:38:20 -0000 1.169
+++ sys/netinet/ip_esp.c 23 Jul 2021 00:01:58 -0000
@@ -426,7 +426,7 @@ esp_input(struct mbuf *m, struct tdb *td
/* Update the counters */
ibytes = m->m_pkthdr.len - skip - hlen - alen;
tdb->tdb_cur_bytes += ibytes;
- tdb->tdb_ibytes += ibytes;
+ tdb_stat_add(tdb, tdb_ibytes, ibytes);
espstat_add(esps_ibytes, ibytes);
/* Hard expiration */
Index: sys/netinet/ip_ipcomp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_ipcomp.c,v
retrieving revision 1.71
diff -u -p -r1.71 ip_ipcomp.c
--- sys/netinet/ip_ipcomp.c 8 Jul 2021 21:07:19 -0000 1.71
+++ sys/netinet/ip_ipcomp.c 23 Jul 2021 00:01:58 -0000
@@ -215,7 +215,7 @@ ipcomp_input_cb(struct tdb *tdb, struct
/* update the counters */
ibytes = m->m_pkthdr.len - (skip + hlen);
tdb->tdb_cur_bytes += ibytes;
- tdb->tdb_ibytes += ibytes;
+ tdb_stat_add(tdb, tdb_ibytes, ibytes);
ipcompstat_add(ipcomps_ibytes, ibytes);
/* Hard expiration */
Index: sys/netinet/ip_ipsp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_ipsp.c,v
retrieving revision 1.242
diff -u -p -r1.242 ip_ipsp.c
--- sys/netinet/ip_ipsp.c 19 Jul 2021 14:49:55 -0000 1.242
+++ sys/netinet/ip_ipsp.c 23 Jul 2021 00:01:58 -0000
@@ -830,6 +830,9 @@ tdb_alloc(u_int rdomain)
tdbp->tdb_rdomain = rdomain;
tdbp->tdb_rdomain_post = rdomain;
+ /* Initialize counters. */
+ tdbp->tdb_counters = counters_alloc(tdb_ncounters);
+
/* Initialize timeouts. */
timeout_set_proc(&tdbp->tdb_timer_tmo, tdb_timeout, tdbp);
timeout_set_proc(&tdbp->tdb_first_tmo, tdb_firstuse, tdbp);
@@ -881,6 +884,8 @@ tdb_free(struct tdb *tdbp)
if ((tdbp->tdb_inext) && (tdbp->tdb_inext->tdb_onext == tdbp))
tdbp->tdb_inext->tdb_onext = NULL;
+
+ counters_free(tdbp->tdb_counters, tdb_ncounters);
/* Remove expiration timeouts. */
tdbp->tdb_flags &= ~(TDBF_FIRSTUSE | TDBF_SOFT_FIRSTUSE | TDBF_TIMER |
Index: sys/netinet/ip_ipsp.h
===================================================================
RCS file: /cvs/src/sys/netinet/ip_ipsp.h,v
retrieving revision 1.203
diff -u -p -r1.203 ip_ipsp.h
--- sys/netinet/ip_ipsp.h 18 Jul 2021 18:19:22 -0000 1.203
+++ sys/netinet/ip_ipsp.h 23 Jul 2021 00:01:58 -0000
@@ -135,17 +135,6 @@ struct ipsecstat {
uint64_t ipsec_noxform; /* Crypto error */
};
-struct tdb_data {
- uint64_t tdd_ipackets; /* Input IPsec packets */
- uint64_t tdd_opackets; /* Output IPsec packets */
- uint64_t tdd_ibytes; /* Input bytes */
- uint64_t tdd_obytes; /* Output bytes */
- uint64_t tdd_idrops; /* Dropped on input */
- uint64_t tdd_odrops; /* Dropped on output */
- uint64_t tdd_idecompbytes; /* Input bytes, decompressed */
- uint64_t tdd_ouncompbytes; /* Output bytes, uncompressed */
-};
-
#ifdef _KERNEL
#include <sys/timeout.h>
@@ -369,7 +358,8 @@ struct tdb { /* tunnel
descriptor blo
u_int64_t tdb_last_used; /* When was this SA last used */
u_int64_t tdb_last_marked;/* Last SKIPCRYPTO status change */
- struct tdb_data tdb_data; /* stats about this TDB */
+ struct cpumem *tdb_counters; /* stats about this TDB */
+
u_int64_t tdb_cryptoid; /* Crypto session ID */
u_int32_t tdb_spi; /* SPI */
@@ -415,15 +405,37 @@ struct tdb { /* tunnel
descriptor blo
TAILQ_HEAD(tdb_policy_head, ipsec_policy) tdb_policy_head;
TAILQ_ENTRY(tdb) tdb_sync_entry;
};
-#define tdb_ipackets tdb_data.tdd_ipackets
-#define tdb_opackets tdb_data.tdd_opackets
-#define tdb_ibytes tdb_data.tdd_ibytes
-#define tdb_obytes tdb_data.tdd_obytes
-#define tdb_idrops tdb_data.tdd_idrops
-#define tdb_odrops tdb_data.tdd_odrops
-#define tdb_idecompbytes tdb_data.tdd_idecompbytes
-#define tdb_ouncompbytes tdb_data.tdd_ouncompbytes
+enum tdb_counters {
+ tdb_ipackets, /* Input IPsec packets */
+ tdb_opackets, /* Output IPsec packets */
+ tdb_ibytes, /* Input bytes */
+ tdb_obytes, /* Output bytes */
+ tdb_idrops, /* Dropped on input */
+ tdb_odrops, /* Dropped on output */
+ tdb_idecompbytes, /* Input bytes, decompressed */
+ tdb_ouncompbytes, /* Output bytes, uncompressed */
+ tdb_ncounters
+};
+
+static inline void
+tdb_stat_inc(struct tdb *tdb, enum tdb_counters c)
+{
+ counters_inc(tdb->tdb_counters, c);
+}
+
+static inline void
+tdb_stat_add(struct tdb *tdb, enum tdb_counters c, uint64_t v)
+{
+ counters_add(tdb->tdb_counters, c, v);
+}
+
+static inline void
+tdb_stat_pkt(struct tdb *tdb, enum tdb_counters pc, enum tdb_counters bc,
+ uint64_t bytes)
+{
+ counters_pkt(tdb->tdb_counters, pc, bc, bytes);
+}
struct tdb_ident {
u_int32_t spi;
Index: sys/netinet/ip_output.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.372
diff -u -p -r1.372 ip_output.c
--- sys/netinet/ip_output.c 8 Jul 2021 15:13:14 -0000 1.372
+++ sys/netinet/ip_output.c 23 Jul 2021 00:01:58 -0000
@@ -646,7 +646,7 @@ ip_output_ipsec_send(struct tdb *tdb, st
error = ipsp_process_packet(m, tdb, AF_INET, 0);
if (error) {
ipsecstat_inc(ipsec_odrops);
- tdb->tdb_odrops++;
+ tdb_stat_inc(tdb, tdb_odrops);
}
return error;
}
Index: sys/netinet/ipsec_input.c
===================================================================
RCS file: /cvs/src/sys/netinet/ipsec_input.c,v
retrieving revision 1.176
diff -u -p -r1.176 ipsec_input.c
--- sys/netinet/ipsec_input.c 21 Jul 2021 12:23:32 -0000 1.176
+++ sys/netinet/ipsec_input.c 23 Jul 2021 00:01:58 -0000
@@ -350,8 +350,7 @@ ipsec_common_input(struct mbuf *m, int s
tdbp->tdb_soft_first_use);
}
- tdbp->tdb_ipackets++;
- tdbp->tdb_ibytes += m->m_pkthdr.len;
+ tdb_stat_pkt(tdbp, tdb_ipackets, tdb_ibytes, m->m_pkthdr.len);
/*
* Call appropriate transform and return -- callback takes care of
@@ -360,14 +359,14 @@ ipsec_common_input(struct mbuf *m, int s
error = (*(tdbp->tdb_xform->xf_input))(m, tdbp, skip, protoff);
if (error) {
ipsecstat_inc(ipsec_idrops);
- tdbp->tdb_idrops++;
+ tdb_stat_inc(tdbp, tdb_idrops);
}
return error;
drop:
ipsecstat_inc(ipsec_idrops);
if (tdbp != NULL)
- tdbp->tdb_idrops++;
+ tdb_stat_inc(tdbp, tdb_idrops);
m_freem(m);
return error;
}
@@ -408,7 +407,7 @@ ipsec_input_cb(struct cryptop *crp)
if (error) {
DPRINTF("crypto dispatch error %d", error);
ipsecstat_inc(ipsec_idrops);
- tdb->tdb_idrops++;
+ tdb_stat_inc(tdb, tdb_idrops);
}
return;
}
@@ -441,7 +440,7 @@ ipsec_input_cb(struct cryptop *crp)
NET_UNLOCK();
if (error) {
ipsecstat_inc(ipsec_idrops);
- tdb->tdb_idrops++;
+ tdb_stat_inc(tdb, tdb_idrops);
}
return;
@@ -450,7 +449,7 @@ ipsec_input_cb(struct cryptop *crp)
droponly:
ipsecstat_inc(ipsec_idrops);
if (tdb != NULL)
- tdb->tdb_idrops++;
+ tdb_stat_inc(tdb, tdb_idrops);
free(tc, M_XDATA, 0);
m_freem(m);
crypto_freereq(crp);
@@ -695,7 +694,7 @@ ipsec_common_input_cb(struct mbuf *m, st
m->m_flags |= M_TUNNEL;
ipsecstat_add(ipsec_idecompbytes, m->m_pkthdr.len);
- tdbp->tdb_idecompbytes += m->m_pkthdr.len;
+ tdb_stat_add(tdbp, tdb_idecompbytes, m->m_pkthdr.len);
#if NBPFILTER > 0
if ((encif = enc_getif(tdbp->tdb_rdomain_post, tdbp->tdb_tap)) != NULL)
{
Index: sys/netinet/ipsec_output.c
===================================================================
RCS file: /cvs/src/sys/netinet/ipsec_output.c,v
retrieving revision 1.83
diff -u -p -r1.83 ipsec_output.c
--- sys/netinet/ipsec_output.c 21 Jul 2021 11:11:41 -0000 1.83
+++ sys/netinet/ipsec_output.c 23 Jul 2021 00:01:58 -0000
@@ -365,7 +365,7 @@ ipsp_process_packet(struct mbuf *m, stru
}
ipsecstat_add(ipsec_ouncompbytes, m->m_pkthdr.len);
- tdb->tdb_ouncompbytes += m->m_pkthdr.len;
+ tdb_stat_add(tdb, tdb_ouncompbytes, m->m_pkthdr.len);
/* Non expansion policy for IPCOMP */
if (tdb->tdb_sproto == IPPROTO_IPCOMP) {
@@ -422,7 +422,7 @@ ipsec_output_cb(struct cryptop *crp)
if (error) {
DPRINTF("crypto dispatch error %d", error);
ipsecstat_inc(ipsec_odrops);
- tdb->tdb_odrops++;
+ tdb_stat_inc(tdb, tdb_odrops);
}
return;
}
@@ -455,7 +455,7 @@ ipsec_output_cb(struct cryptop *crp)
NET_UNLOCK();
if (error) {
ipsecstat_inc(ipsec_odrops);
- tdb->tdb_odrops++;
+ tdb_stat_inc(tdb, tdb_odrops);
}
return;
@@ -463,7 +463,7 @@ ipsec_output_cb(struct cryptop *crp)
NET_UNLOCK();
droponly:
if (tdb != NULL)
- tdb->tdb_odrops++;
+ tdb_stat_inc(tdb, tdb_odrops);
m_freem(m);
free(tc, M_XDATA, 0);
crypto_freereq(crp);
@@ -589,8 +589,7 @@ ipsp_process_done(struct mbuf *m, struct
ipsecstat_inc(ipsec_opackets);
ipsecstat_add(ipsec_obytes, m->m_pkthdr.len);
- tdb->tdb_opackets++;
- tdb->tdb_obytes += m->m_pkthdr.len;
+ tdb_stat_pkt(tdb, tdb_opackets, tdb_obytes, m->m_pkthdr.len);
/* If there's another (bundled) TDB to apply, do so. */
if (tdb->tdb_onext)
Index: sys/netinet6/ip6_output.c
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_output.c,v
retrieving revision 1.258
diff -u -p -r1.258 ip6_output.c
--- sys/netinet6/ip6_output.c 8 Jul 2021 15:13:14 -0000 1.258
+++ sys/netinet6/ip6_output.c 23 Jul 2021 00:01:58 -0000
@@ -2872,7 +2872,7 @@ ip6_output_ipsec_send(struct tdb *tdb, s
error = ipsp_process_packet(m, tdb, AF_INET6, tunalready);
if (error) {
ipsecstat_inc(ipsec_odrops);
- tdb->tdb_odrops++;
+ tdb_stat_inc(tdb, tdb_odrops);
}
return error;
}