]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
util-ebpf: optimization on flow storage queries
authorEric Leblond <eric@regit.org>
Mon, 10 Jun 2019 12:55:20 +0000 (14:55 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 18 Jun 2019 05:07:02 +0000 (07:07 +0200)
src/util-ebpf.c

index 4136b8e38a7a34520ad8ef42fe8f98127640dbf9..7117d0aa7ba8ca9ed434467fdb228304b84adb4f 100644 (file)
@@ -574,7 +574,8 @@ void EBPFBypassFree(void *data)
  * \return true if entries have activity, false if not
  */
 
-static bool EBPFBypassCheckHalfFlow(Flow *f, EBPFBypassData *eb, void *key,
+static bool EBPFBypassCheckHalfFlow(Flow *f, FlowBypassInfo *fc,
+                                    EBPFBypassData *eb, void *key,
                                     int index)
 {
     int i;
@@ -597,10 +598,6 @@ static bool EBPFBypassCheckHalfFlow(Flow *f, EBPFBypassData *eb, void *key,
         pkts_cnt += BPF_PERCPU(values_array, i).packets;
         bytes_cnt += BPF_PERCPU(values_array, i).bytes;
     }
-    FlowBypassInfo *fc = FlowGetStorageById(f, GetFlowBypassInfoID());
-    if (fc == NULL) {
-        return false;
-    }
     if (index == 0) {
         if (pkts_cnt != fc->todstpktcnt) {
             fc->todstpktcnt = pkts_cnt;
@@ -629,8 +626,12 @@ bool EBPFBypassUpdate(Flow *f, void *data, time_t tsec)
     if (eb == NULL) {
         return false;
     }
-    bool activity = EBPFBypassCheckHalfFlow(f, eb, eb->key[0], 0);
-    activity |= EBPFBypassCheckHalfFlow(f, eb, eb->key[1], 1);
+    FlowBypassInfo *fc = FlowGetStorageById(f, GetFlowBypassInfoID());
+    if (fc == NULL) {
+        return false;
+    }
+    bool activity = EBPFBypassCheckHalfFlow(f, fc, eb, eb->key[0], 0);
+    activity |= EBPFBypassCheckHalfFlow(f, fc, eb, eb->key[1], 1);
     if (!activity) {
         SCLogDebug("Delete entry: %u (%ld)", FLOW_IS_IPV6(f), FlowGetId(f));
         /* delete the entries if no time update */