]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #3066 in SNORT/snort3 from ~ABHPAL/snort3:efd to master
authorShanmugam S (shanms) <shanms@cisco.com>
Mon, 27 Sep 2021 09:50:46 +0000 (09:50 +0000)
committerShanmugam S (shanms) <shanms@cisco.com>
Mon, 27 Sep 2021 09:50:46 +0000 (09:50 +0000)
Squashed commit of the following:

commit a7546af7ffbfe398895275113b8647ebc1f8ca4d
Author: abhpal <abhpal@cisco.com>
Date:   Tue Sep 21 14:45:08 2021 +0530

    latency: adding configuration for implicit enable

commit 56dd75b7fc2ea8b87a58fbd7745ffbf35a977c04
Author: abhpal <abhpal@cisco.com>
Date:   Tue Sep 21 14:43:41 2021 +0530

    snort_config: adding api for enabling latency module

commit cd88ec50a401f9badd105ed22fe62739c44496de
Author: abhpal <abhpal@cisco.com>
Date:   Thu Sep 16 20:09:57 2021 +0530

    flow: add total flow latency to flowstats

src/flow/flow.h
src/latency/latency_module.cc
src/latency/latency_module.h
src/latency/packet_latency.cc
src/latency/packet_latency_config.h
src/main/snort_config.cc
src/main/snort_config.h

index 2f94a7a66bb86aeec6d1db4c53fe00a76f5b8718..2d248fa4d90cb613cea3d3f366eda23d807e764d 100644 (file)
@@ -140,6 +140,7 @@ struct FlowStats
     uint64_t client_bytes;
     uint64_t server_bytes;
     struct timeval start_time;
+    uint64_t total_flow_latency;
 };
 
 struct LwState
index f4c61d632c465dbb14416d6fc466d4be29b49aec..9a89161d333ca8cedfcbafe00d2bc4aeaa30e5da 100644 (file)
@@ -201,6 +201,16 @@ bool LatencyModule::set(const char* fqn, Value& v, SnortConfig* sc)
     return true;
 }
 
+bool LatencyModule::end(const char*, int, SnortConfig* sc)
+{
+    PacketLatencyConfig& config = sc->latency->packet_latency;
+
+    if (config.max_time > CLOCK_ZERO)
+        config.force_enable = true;
+
+    return true;
+}
+
 const RuleMap* LatencyModule::get_rules() const
 { return latency_rules; }
 
index 81f43b497a4409f3503400a27e38eeaadc51e9b1..0796a5abf538bdb2b71efabd02912f247dac7fbf 100644 (file)
@@ -29,6 +29,7 @@ public:
     LatencyModule();
 
     bool set(const char*, snort::Value&, snort::SnortConfig*) override;
+    bool end(const char*, int, snort::SnortConfig*) override;
 
     const snort::RuleMap* get_rules() const override;
     unsigned get_gid() const override;
index 559447ee2ca1ae3fe0cdef0bc823974bad92588c..84ce294fdb68815ae5fba1aea4ddb9031a0943c0 100644 (file)
@@ -233,7 +233,7 @@ static inline Impl<>& get_impl()
 
 void PacketLatency::push()
 {
-    if ( packet_latency::config->enabled() )
+    if ( packet_latency::config->force_enabled())
     {
         packet_latency::get_impl().push();
         ++latency_stats.total_packets;
@@ -242,7 +242,7 @@ void PacketLatency::push()
 
 void PacketLatency::pop(const Packet* p)
 {
-    if ( packet_latency::config->enabled() )
+    if ( packet_latency::config->force_enabled())
     {
         if ( packet_latency::get_impl().pop(p) )
             ++latency_stats.packet_timeouts;
@@ -251,6 +251,9 @@ void PacketLatency::pop(const Packet* p)
         if ( elapsed > latency_stats.max_usecs )
             latency_stats.max_usecs = elapsed;
 
+        if ( p->flow )
+            p->flow->flowstats.total_flow_latency += elapsed;
+
         latency_stats.total_usecs += elapsed;
     }
 }
index f5a0d4e06dbda424fca5cc13c663fd1d8d339ea0..06628294cf80c18837dabcaa5ab046bc68f34263 100644 (file)
@@ -27,6 +27,7 @@ struct PacketLatencyConfig
 {
     hr_duration max_time = CLOCK_ZERO;
     bool fastpath = false;
+    bool force_enable = false;
 #ifdef REG_TEST
     bool test_timeout = false;
 #endif
@@ -39,6 +40,11 @@ struct PacketLatencyConfig
 #endif
         return max_time > CLOCK_ZERO;
     }
+
+    bool force_enabled() const
+    {
+        return force_enable;
+    }
 };
 
 #endif
index d30fa382d322c07664fdbd7f66a7672355154b85..b4a0bbf9329d414a7e3383b16d07797a2ae03a18 100644 (file)
@@ -761,6 +761,16 @@ void SnortConfig::set_overlay_trace_config(TraceConfig* tc)
     overlay_trace_config = tc;
 }
 
+bool SnortConfig::set_latency_enable()
+{
+    if (latency)
+    {
+        latency->packet_latency.force_enable = true;
+        return true;
+    }
+    return false;
+}
+
 void SnortConfig::set_tunnel_verdicts(const char* args)
 {
     char* tmp, * tok;
index eacd1184e97c12c99e501ba94512ce177645f0db..da791bc493e361d7c5da572d527d98b88f639d0d 100644 (file)
@@ -482,6 +482,7 @@ public:
     void set_umask(uint32_t);
     void set_utc(bool);
     void set_overlay_trace_config(TraceConfig*);
+    SO_PUBLIC bool set_latency_enable();
 
     //------------------------------------------------------
     // accessor methods