]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dpdk: fix received/error counters
authorLukas Sismis <lukas.sismis@gmail.com>
Wed, 15 Dec 2021 13:24:55 +0000 (14:24 +0100)
committerVictor Julien <vjulien@oisf.net>
Mon, 17 Jan 2022 12:10:08 +0000 (13:10 +0100)
src/source-dpdk.c

index fc50de0ef0b93414742b687e7e8c491e4948cc0c..c22c68b3fc60ee13c836e4f9ce87e5e5fe3c9b91 100644 (file)
@@ -267,27 +267,28 @@ static inline void DPDKDumpCounters(DPDKThreadVars *ptv)
     int retval = rte_eth_stats_get(ptv->port_id, &eth_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);
     }
 }