Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Aug 2021 00:03:16 GMT
From:      Kevin Bowling <kbowling@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 477308acc5f0 - stable/12 - iflib: emulate counters in netmap mode
Message-ID:  <202108260003.17Q03GEP004107@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=477308acc5f0c11940e98c4f278f2f4f1b072360

commit 477308acc5f0c11940e98c4f278f2f4f1b072360
Author:     Stephan de Wit <stephan.dewt@yahoo.co.uk>
AuthorDate: 2021-08-18 07:17:43 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-08-26 00:01:26 +0000

    iflib: emulate counters in netmap mode
    
    When iflib devices are in netmap mode the driver
    counters are no longer updated making it look from
    userspace tools that traffic has stopped.
    
    Reported by:    Franco Fichtner <franco@opnsense.org>
    Reviewed by:    vmaffione, iflib (erj, gallatin)
    Obtained from:  OPNsense
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D31550
    
    (cherry picked from commit 66fa12d8fb61485780f32f0226e79d3389567496)
---
 sys/net/iflib.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 1976852209a1..fb43a62ba67f 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -994,6 +994,7 @@ iflib_netmap_txsync(struct netmap_kring *kring, int flags)
 	u_int const lim = kring->nkr_num_slots - 1;
 	u_int const head = kring->rhead;
 	struct if_pkt_info pi;
+	int tx_pkts = 0, tx_bytes = 0;
 
 	/*
 	 * interrupts on every tx packet are expensive so request
@@ -1077,6 +1078,10 @@ iflib_netmap_txsync(struct netmap_kring *kring, int flags)
 				ctx->isc_txd_encap(ctx->ifc_softc, &pi);
 				DBG_COUNTER_INC(tx_encap);
 
+				/* Update transmit counters */
+				tx_bytes += pi.ipi_len;
+				tx_pkts++;
+
 				/* Reinit per-packet info for the next one. */
 				flags = seg_idx = pkt_len = 0;
 				nic_i_start = -1;
@@ -1135,6 +1140,10 @@ iflib_netmap_txsync(struct netmap_kring *kring, int flags)
 			    iflib_netmap_timer, txq,
 			    txq->ift_netmap_timer.c_cpu, 0);
 		}
+
+	if_inc_counter(ifp, IFCOUNTER_OBYTES, tx_bytes);
+	if_inc_counter(ifp, IFCOUNTER_OPACKETS, tx_pkts);
+
 	return (0);
 }
 
@@ -1162,7 +1171,7 @@ iflib_netmap_rxsync(struct netmap_kring *kring, int flags)
 	u_int n;
 	u_int const lim = kring->nkr_num_slots - 1;
 	int force_update = (flags & NAF_FORCE_READ) || kring->nr_kflags & NKR_PENDINTR;
-	int i = 0;
+	int i = 0, rx_bytes = 0, rx_pkts = 0;
 
 	if_ctx_t ctx = ifp->if_softc;
 	if_shared_ctx_t sctx = ctx->ifc_sctx;
@@ -1233,6 +1242,10 @@ iflib_netmap_rxsync(struct netmap_kring *kring, int flags)
 					if (i == (ri.iri_nfrags - 1)) {
 						ring->slot[nm_i].len -= crclen;
 						ring->slot[nm_i].flags = 0;
+
+						/* Update receive counters */
+						rx_bytes += ri.iri_len;
+						rx_pkts++;
 					} else
 						ring->slot[nm_i].flags = NS_MOREFRAG;
 				}
@@ -1270,6 +1283,9 @@ iflib_netmap_rxsync(struct netmap_kring *kring, int flags)
 	 */
 	netmap_fl_refill(rxq, kring, false);
 
+	if_inc_counter(ifp, IFCOUNTER_IBYTES, rx_bytes);
+	if_inc_counter(ifp, IFCOUNTER_IPACKETS, rx_pkts);
+
 	return (0);
 }
 



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