ping

> On 23 Jul 2021, at 03:12, Vitaliy Makkoveev <[email protected]> wrote:
> 
> 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;
> }
> 

Reply via email to