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
This commit is contained in:
parent
e3500c602b
commit
66fa12d8fb
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user