diff --git a/src/source-dpdk.c b/src/source-dpdk.c index fc50de0ef0..c22c68b3fc 100644 --- a/src/source-dpdk.c +++ b/src/source-dpdk.c @@ -267,27 +267,28 @@ static inline void DPDKDumpCounters(DPDKThreadVars *ptv) int retval = rte_eth_stats_get(ptv->port_id, ð_stats); if (unlikely(retval != 0)) { SCLogError(SC_ERR_STAT, "Failed to get stats for port id %d: %s", ptv->port_id, - strerror(-retval)); + rte_strerror(-retval)); return; } - uint64_t th_pkts = StatsGetLocalCounterValue(ptv->tv, ptv->capture_dpdk_packets); - StatsAddUI64(ptv->tv, ptv->capture_dpdk_packets, ptv->pkts - th_pkts); - SC_ATOMIC_ADD(ptv->livedev->pkts, ptv->pkts - th_pkts); - /* Some NICs (e.g. Intel) do not support queue statistics and the drops can be fetched only on * the port level. Therefore setting it to the first worker to have at least continuous update * on the dropped packets. */ if (ptv->queue_id == 0) { + StatsSetUI64(ptv->tv, ptv->capture_dpdk_packets, + ptv->pkts + eth_stats.imissed + eth_stats.ierrors + eth_stats.rx_nombuf); + SC_ATOMIC_SET(ptv->livedev->pkts, + eth_stats.ipackets + eth_stats.imissed + eth_stats.ierrors + eth_stats.rx_nombuf); StatsSetUI64(ptv->tv, ptv->capture_dpdk_rx_errs, - eth_stats.imissed + eth_stats.ierrors + eth_stats.rx_nombuf + ptv->pkts); + eth_stats.imissed + eth_stats.ierrors + eth_stats.rx_nombuf); StatsSetUI64(ptv->tv, ptv->capture_dpdk_imissed, eth_stats.imissed); StatsSetUI64(ptv->tv, ptv->capture_dpdk_rx_no_mbufs, eth_stats.rx_nombuf); StatsSetUI64(ptv->tv, ptv->capture_dpdk_ierrors, eth_stats.ierrors); StatsSetUI64(ptv->tv, ptv->capture_dpdk_tx_errs, eth_stats.oerrors); - SC_ATOMIC_SET(ptv->livedev->drop, eth_stats.imissed + eth_stats.ierrors + - eth_stats.rx_nombuf + eth_stats.oerrors + - ptv->pkts); + SC_ATOMIC_SET( + ptv->livedev->drop, eth_stats.imissed + eth_stats.ierrors + eth_stats.rx_nombuf); + } else { + StatsSetUI64(ptv->tv, ptv->capture_dpdk_packets, ptv->pkts); } }