]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2674 in SNORT/snort3 from ~SMINUT/snort3:rna_misc to master
authorMasud Hasan (mashasan) <mashasan@cisco.com>
Thu, 17 Dec 2020 21:29:17 +0000 (21:29 +0000)
committerMasud Hasan (mashasan) <mashasan@cisco.com>
Thu, 17 Dec 2020 21:29:17 +0000 (21:29 +0000)
Squashed commit of the following:

commit 284465093b36806f241318cd9e68ac8be2b03f89
Author: Silviu Minut <sminut@cisco.com>
Date:   Wed Dec 16 18:14:42 2020 -0500

    rna:
    * do null check on the RnaInspector rather than the RnaModule in the control commands
    * make the mac cache persist over reload config

src/network_inspectors/rna/data_purge_cmd.cc
src/network_inspectors/rna/data_purge_cmd.h
src/network_inspectors/rna/rna_inspector.cc
src/network_inspectors/rna/rna_module.cc
src/network_inspectors/rna/rna_module.h
src/network_inspectors/rna/rna_pnd.cc
src/network_inspectors/rna/rna_pnd.h
src/network_inspectors/rna/test/rna_module_mock.h

index 67b05adc936d5b9b79794d07630cb14b1a1c8515..bb1db13b6633fe66e2fcd89c406030cdaa708a8f 100644 (file)
 
 using namespace snort;
 
+extern HostCacheMac* host_cache_mac_ptr;
+
 DataPurgeAC::~DataPurgeAC()
 {
-    auto rna_ins = (RnaInspector*) InspectorManager::get_inspector(RNA_NAME, true);
-    RnaPnd* pnd = rna_ins->get_pnd();
-    delete pnd->host_cache_mac_ptr;
-    pnd->host_cache_mac_ptr = host_cache_mac;
-    set_host_cache_mac(host_cache_mac);
+    delete host_cache_mac_ptr;
+    host_cache_mac_ptr = mac_cache;
+    set_host_cache_mac(mac_cache);
 }
 
 bool DataPurgeAC::execute(Analyzer&, void**)
 {
-    set_host_cache_mac(host_cache_mac);
+    set_host_cache_mac(mac_cache);
     return true;
 }
-
index dfca23ac5ef3e62d66b536677586a1d546ce658a..a0b5c1c86ca112c62a5b119edb01bb08685322f2 100644 (file)
@@ -29,7 +29,8 @@ class DataPurgeAC : public snort::AnalyzerCommand
 {
 public:
 
-    DataPurgeAC(HostCacheMac* hcm) : host_cache_mac(hcm) { }
+    DataPurgeAC(HostCacheMac* new_cache) : mac_cache(new_cache) { }
+
     ~DataPurgeAC() override;
 
     bool execute(Analyzer&, void**) override;
@@ -37,7 +38,7 @@ public:
     const char* stringify() override { return "DATA_PURGE"; }
 
 private:
-    HostCacheMac* host_cache_mac;
+    HostCacheMac* mac_cache;
 };
 
 #endif
index 6c6fe299168d9199ed94e36a6e26b569c4f80760..d227d0bef189a30630d2834c29694152f85a1bfa 100644 (file)
@@ -39,6 +39,7 @@
 #include "rna_fingerprint_tcp.h"
 #include "rna_fingerprint_ua.h"
 #include "rna_fingerprint_udp.h"
+#include "rna_mac_cache.h"
 #include "rna_module.h"
 #include "rna_pnd.h"
 
@@ -56,6 +57,8 @@ THREAD_LOCAL ProfileStats rna_perf_stats;
 // class stuff
 //-------------------------------------------------------------------------
 
+HostCacheMac* host_cache_mac_ptr = nullptr;
+
 RnaInspector::RnaInspector(RnaModule* mod)
 {
     mod_conf = mod->get_config();
@@ -102,7 +105,7 @@ bool RnaInspector::configure(SnortConfig* sc)
 
     // tinit is not called during reload, so pass processor pointers to threads via reload tuner
     if ( Snort::is_reloading() && InspectorManager::get_inspector(RNA_NAME, true) )
-        sc->register_reload_resource_tuner(new FpProcReloadTuner(*mod_conf, pnd->host_cache_mac_ptr));
+        sc->register_reload_resource_tuner(new FpProcReloadTuner(*mod_conf));
 
     return true;
 }
@@ -145,7 +148,7 @@ void RnaInspector::tinit()
     set_tcp_fp_processor(mod_conf->tcp_processor);
     set_ua_fp_processor(mod_conf->ua_processor);
     set_udp_fp_processor(mod_conf->udp_processor);
-    set_host_cache_mac(pnd->host_cache_mac_ptr);
+    set_host_cache_mac(host_cache_mac_ptr);
 }
 
 void RnaInspector::tterm()
@@ -253,11 +256,14 @@ static void rna_inspector_pinit()
 {
     // global initialization
     RNAFlow::init();
+    host_cache_mac_ptr = new HostCacheMac(MAC_CACHE_INITIAL_SIZE);
+    set_host_cache_mac(host_cache_mac_ptr);
 }
 
 static void rna_inspector_pterm()
 {
     // global cleanup
+    delete host_cache_mac_ptr;
 }
 
 static Inspector* rna_inspector_ctor(Module* m)
index 6e735bc1fd821173448569e726612970a823e39c..abf7c4257473034f3ef2358eb4fb36396cdbbec4 100644 (file)
@@ -64,7 +64,8 @@ THREAD_LOCAL const Trace* rna_trace = nullptr;
 static int dump_mac_cache(lua_State* L)
 {
     RnaModule* mod = (RnaModule*) ModuleManager::get_module(RNA_NAME);
-    if ( mod )
+    Inspector* rna = InspectorManager::get_inspector(RNA_NAME, true);
+    if ( rna && mod )
         mod->log_mac_cache( luaL_optstring(L, 1, nullptr) );
     return 0;
 }
@@ -86,8 +87,8 @@ static inline string format_dump_mac(const uint8_t mac[MAC_SIZE])
 
 static int purge_data(lua_State* L)
 {
-    RnaModule* mod = (RnaModule*) ModuleManager::get_module(RNA_NAME);
-    if ( mod )
+    Inspector* rna = InspectorManager::get_inspector(RNA_NAME, true);
+    if ( rna )
     {
         HostCacheMac* mac_cache = new HostCacheMac(MAC_CACHE_INITIAL_SIZE);
         main_broadcast_command(new DataPurgeAC(mac_cache), (L != nullptr));
@@ -107,7 +108,6 @@ bool FpProcReloadTuner::tinit()
     set_tcp_fp_processor(mod_conf.tcp_processor);
     set_ua_fp_processor(mod_conf.ua_processor);
     set_udp_fp_processor(mod_conf.udp_processor);
-    set_host_cache_mac(host_cache_mac_ptr);
     return false;  // no work to do after this
 }
 
@@ -161,8 +161,8 @@ static bool get_mac_from_args(lua_State* L, uint8_t* mac_addr)
 
 static int delete_mac_host(lua_State* L)
 {
-    RnaModule* mod = (RnaModule*) ModuleManager::get_module(RNA_NAME);
-    if ( mod )
+    Inspector* rna = InspectorManager::get_inspector(RNA_NAME, true);
+    if ( rna )
     {
         uint8_t mac[MAC_SIZE] = {0};
 
@@ -197,8 +197,8 @@ static int delete_mac_host(lua_State* L)
 
 static int delete_mac_host_proto(lua_State* L)
 {
-    RnaModule* mod = (RnaModule*) ModuleManager::get_module(RNA_NAME);
-    if ( mod )
+    Inspector* rna = InspectorManager::get_inspector(RNA_NAME, true);
+    if ( rna )
     {
         uint8_t mac[MAC_SIZE] = {0};
 
index 581084179ae3835ca6a0d2f9eb9e3deaaa99cf71..09a0e00d93ac8cedb0f2bebc90736ac832ad4b8b 100644 (file)
@@ -58,8 +58,8 @@ extern THREAD_LOCAL const snort::Trace* rna_trace;
 class FpProcReloadTuner : public snort::ReloadResourceTuner
 {
 public:
-    explicit FpProcReloadTuner(RnaModuleConfig& mod_conf, HostCacheMac* ptr = nullptr)
-       : mod_conf(mod_conf), host_cache_mac_ptr(ptr) { }
+    explicit FpProcReloadTuner(RnaModuleConfig& mod_conf)
+        : mod_conf(mod_conf) { }
     ~FpProcReloadTuner() override = default;
 
     bool tinit() override;
@@ -72,7 +72,6 @@ public:
 
 private:
     RnaModuleConfig& mod_conf;
-    HostCacheMac* host_cache_mac_ptr = nullptr;
 };
 
 class RnaModule : public snort::Module
index c50d53a8afd954e133ae1519e6cef94d8c7c1232..b61a7d41ebf4465d7f081e52c68febae5c537224 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <algorithm>
 
+#include "main/snort.h"
 #include "protocols/arp.h"
 #include "protocols/bpdu.h"
 #include "protocols/cdp.h"
@@ -83,16 +84,10 @@ RnaPnd::RnaPnd(const bool en, const std::string& cp, RnaConfig* rc) :
     logger(RnaLogger(en)), filter(DiscoveryFilter(cp)), conf(rc)
 {
     update_timeout = (rc ? rc->update_timeout : 0);
-    host_cache_mac_ptr = new HostCacheMac(MAC_CACHE_INITIAL_SIZE);
-    set_host_cache_mac(host_cache_mac_ptr);
 }
 
 RnaPnd::~RnaPnd()
-{
-    delete host_cache_mac_ptr;
-    host_cache_mac_ptr = nullptr;
-    set_host_cache_mac(nullptr);
-}
+{ }
 
 void RnaPnd::analyze_appid_changes(DataEvent& event)
 {
index c4d8caf5f1aa550dff26140bf37ab035510e0e8a..af76e6e01965d1be58b1ee42807bc55f49c6e08b 100644 (file)
@@ -134,8 +134,6 @@ public:
 
     static HostCacheIp::Data find_or_create_host_tracker(const snort::SfIp&, bool&);
 
-    HostCacheMac* host_cache_mac_ptr = nullptr;
-
 private:
     // generate change event for single host
     void generate_change_host_update(RnaTracker*, const snort::Packet*,
index aeddbade061d0f709b462eb0f7b101a076d50899..918368f12a65d31f3c06809096df78f80afc4384 100644 (file)
@@ -122,5 +122,8 @@ bool DataPurgeAC::execute(Analyzer&, void**) { return true;}
 void snort::main_broadcast_command(AnalyzerCommand*, bool) { }
 void set_host_cache_mac(HostCacheMac*) { }
 
-
+Inspector* InspectorManager::get_inspector(const char*, bool, const SnortConfig*)
+{
+    return nullptr;
+}
 #endif