]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #3462: netflow: supporting memcap reconfiguration upon reload
authorMasud Hasan (mashasan) <mashasan@cisco.com>
Thu, 9 Jun 2022 19:16:05 +0000 (19:16 +0000)
committerMasud Hasan (mashasan) <mashasan@cisco.com>
Thu, 9 Jun 2022 19:16:05 +0000 (19:16 +0000)
Merge in SNORT/snort3 from ~MASHASAN/snort3:netflow_reload to master

Squashed commit of the following:

commit 653f9bee6693c19554061c1297db0236687172be
Author: Masud Hasan <mashasan@cisco.com>
Date:   Fri Jun 3 21:53:43 2022 -0400

    netflow: supporting memcap reconfiguration upon reload

src/service_inspectors/netflow/netflow.cc

index d2f92a3380b6105a2ca4c8d8403fe53f8fd0522c..0c1c2d976ee2b9a2ea650bb4d7cb8421211e8f53 100644 (file)
@@ -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 <snort::SfCidr>& 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
 //-------------------------------------------------------------------------