From: Masud Hasan (mashasan) Date: Thu, 9 Jun 2022 19:16:05 +0000 (+0000) Subject: Pull request #3462: netflow: supporting memcap reconfiguration upon reload X-Git-Tag: 3.1.32.0~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44eeacee0b74a0c17da01d89b507c34d094a93d5;p=thirdparty%2Fsnort3.git Pull request #3462: netflow: supporting memcap reconfiguration upon reload Merge in SNORT/snort3 from ~MASHASAN/snort3:netflow_reload to master Squashed commit of the following: commit 653f9bee6693c19554061c1297db0236687172be Author: Masud Hasan Date: Fri Jun 3 21:53:43 2022 -0400 netflow: supporting memcap reconfiguration upon reload --- diff --git a/src/service_inspectors/netflow/netflow.cc b/src/service_inspectors/netflow/netflow.cc index d2f92a338..0c1c2d976 100644 --- a/src/service_inspectors/netflow/netflow.cc +++ b/src/service_inspectors/netflow/netflow.cc @@ -31,6 +31,7 @@ #include "log/messages.h" #include "managers/module_manager.h" +#include "main/reload_tuner.h" #include "profiler/profiler.h" #include "protocols/packet.h" #include "pub_sub/netflow_event.h" @@ -704,6 +705,7 @@ public: void eval(snort::Packet*) override; void show(const snort::SnortConfig*) const override; + void install_reload_handler(snort::SnortConfig*) override; private: const NetflowConfig *config; @@ -712,6 +714,16 @@ private: void stringify(std::ofstream&); }; +class NetflowReloadSwapper : public snort::ReloadSwapper +{ +public: + explicit NetflowReloadSwapper(NetflowInspector& ins) : inspector(ins) { } + void tswap() override; + +private: + NetflowInspector& inspector; +}; + static std::string to_string(const std::vector & networks) { std::string nets; @@ -939,11 +951,11 @@ void NetflowInspector::eval(Packet* p) void NetflowInspector::tinit() { - if ( !netflow_cache ) - netflow_cache = new NetflowCache(config->flow_memcap, netflow_stats); + delete netflow_cache; + netflow_cache = new NetflowCache(config->flow_memcap, netflow_stats); - if ( !template_cache ) - template_cache = new TemplateFieldCache(config->template_memcap, netflow_stats); + delete template_cache; + template_cache = new TemplateFieldCache(config->template_memcap, netflow_stats); } void NetflowInspector::tterm() @@ -958,6 +970,16 @@ void NetflowInspector::tterm() delete template_cache; } +void NetflowInspector::install_reload_handler(SnortConfig* sc) +{ + sc->register_reload_handler(new NetflowReloadSwapper(*this)); +} + +void NetflowReloadSwapper::tswap() +{ + inspector.tinit(); +} + //------------------------------------------------------------------------- // api stuff //-------------------------------------------------------------------------