aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/net/iflib.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index abd6bd32cd4e..8c8cc6936f7e 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -993,6 +993,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);
}