]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dpdk: support capture timeout support 8877/head
authorVictor Julien <vjulien@oisf.net>
Fri, 12 May 2023 14:53:58 +0000 (16:53 +0200)
committerVictor Julien <vjulien@oisf.net>
Fri, 12 May 2023 17:36:47 +0000 (19:36 +0200)
To not inject too many packets, simulate a 100ms timeout based on
af-packet's 100ms poll() timeout.

Bug: #6064.

src/source-dpdk.c

index 7afce350edab1ce6fc7a948fa64925ae051e6d08..14dd9f807125d5265a880145fa325de4bfe25d7d 100644 (file)
@@ -346,6 +346,8 @@ static TmEcode ReceiveDPDKLoop(ThreadVars *tv, void *data, void *slot)
     time_t last_dump = 0;
     time_t current_time;
     bool segmented_mbufs_warned = 0;
+    SCTime_t t = DPDKSetTimevalReal(&machine_start_time);
+    uint64_t last_timeout_msec = SCTIME_MSECS(t);
 
     DPDKThreadVars *ptv = (DPDKThreadVars *)data;
     TmSlot *s = (TmSlot *)slot;
@@ -366,6 +368,12 @@ static TmEcode ReceiveDPDKLoop(ThreadVars *tv, void *data, void *slot)
 
         nb_rx = rte_eth_rx_burst(ptv->port_id, ptv->queue_id, ptv->received_mbufs, BURST_SIZE);
         if (unlikely(nb_rx == 0)) {
+            t = DPDKSetTimevalReal(&machine_start_time);
+            uint64_t msecs = SCTIME_MSECS(t);
+            if (msecs > last_timeout_msec + 100) {
+                TmThreadsCaptureHandleTimeout(tv, NULL);
+                last_timeout_msec = msecs;
+            }
             continue;
         }