From: Shanmugam S (shanms) Date: Mon, 27 Sep 2021 09:50:46 +0000 (+0000) Subject: Merge pull request #3066 in SNORT/snort3 from ~ABHPAL/snort3:efd to master X-Git-Tag: 3.1.14.0~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eda0cc2edf73980f27d2d374094e1b2dce465547;p=thirdparty%2Fsnort3.git Merge pull request #3066 in SNORT/snort3 from ~ABHPAL/snort3:efd to master Squashed commit of the following: commit a7546af7ffbfe398895275113b8647ebc1f8ca4d Author: abhpal Date: Tue Sep 21 14:45:08 2021 +0530 latency: adding configuration for implicit enable commit 56dd75b7fc2ea8b87a58fbd7745ffbf35a977c04 Author: abhpal Date: Tue Sep 21 14:43:41 2021 +0530 snort_config: adding api for enabling latency module commit cd88ec50a401f9badd105ed22fe62739c44496de Author: abhpal Date: Thu Sep 16 20:09:57 2021 +0530 flow: add total flow latency to flowstats --- diff --git a/src/flow/flow.h b/src/flow/flow.h index 2f94a7a66..2d248fa4d 100644 --- a/src/flow/flow.h +++ b/src/flow/flow.h @@ -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 diff --git a/src/latency/latency_module.cc b/src/latency/latency_module.cc index f4c61d632..9a89161d3 100644 --- a/src/latency/latency_module.cc +++ b/src/latency/latency_module.cc @@ -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; } diff --git a/src/latency/latency_module.h b/src/latency/latency_module.h index 81f43b497..0796a5abf 100644 --- a/src/latency/latency_module.h +++ b/src/latency/latency_module.h @@ -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; diff --git a/src/latency/packet_latency.cc b/src/latency/packet_latency.cc index 559447ee2..84ce294fd 100644 --- a/src/latency/packet_latency.cc +++ b/src/latency/packet_latency.cc @@ -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; } } diff --git a/src/latency/packet_latency_config.h b/src/latency/packet_latency_config.h index f5a0d4e06..06628294c 100644 --- a/src/latency/packet_latency_config.h +++ b/src/latency/packet_latency_config.h @@ -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 diff --git a/src/main/snort_config.cc b/src/main/snort_config.cc index d30fa382d..b4a0bbf93 100644 --- a/src/main/snort_config.cc +++ b/src/main/snort_config.cc @@ -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; diff --git a/src/main/snort_config.h b/src/main/snort_config.h index eacd1184e..da791bc49 100644 --- a/src/main/snort_config.h +++ b/src/main/snort_config.h @@ -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