Squashed commit of the following:
commit
9b53cbafd6645a86e1665d53f58cd614e0773d74
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 19:06:46 2020 -0400
rna: Update rna to use instance based reload tuner
commit
c217dfd4694b63b5e2ff5967afc6d817b720c964
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 18:57:22 2020 -0400
stream: Update stream to use instance based reload tuner
commit
bb8a5b14ba4c136adfbe629a8a877c7c4260f6b5
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 18:39:37 2020 -0400
port_scan: Update port scan to use instance based reload tuner
commit
23d389d7f2b10e63d1107672e49ec2ce569055f4
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 18:39:14 2020 -0400
perf_monitor: Update perf monitor to use instance based reload tuner
commit
32e23d8e8731580f396924a000e0ccdcccbcdea9
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 18:38:50 2020 -0400
appid: Update appid to use instance based reload tuner
commit
395f4974a4f0613546dc03002e7b270add17b48b
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Tue Oct 6 12:54:04 2020 -0400
host_tracker: Update host tracker to use instance based reload tuner
commit
a5d808b82e0e68d8b2979fa765e608ded4e397c5
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 18:37:44 2020 -0400
main: Update host attribute class to use instance based reload tuner
commit
2746eb3fdf7e2e0125770237bb53af94f5ec3324
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date: Mon Oct 5 18:36:26 2020 -0400
main: Change reload memcap framework to use object instances
dump_file = snort_strdup(v.get_string());
}
else if ( v.is("memcap") )
- hc_rrt.memcap = v.get_size();
+ memcap = v.get_size();
else
return false;
return true;
}
-bool HostCacheModule::begin(const char*, int, SnortConfig*)
-{
- hc_rrt.memcap = 0;
- return true;
-}
-
bool HostCacheModule::end(const char* fqn, int, SnortConfig* sc)
{
- if ( hc_rrt.memcap && !strcmp(fqn, HOST_CACHE_NAME) )
+ if ( memcap && !strcmp(fqn, HOST_CACHE_NAME) )
{
if ( Snort::is_reloading() )
- sc->register_reload_resource_tuner(hc_rrt);
+ sc->register_reload_resource_tuner(new HostCacheReloadTuner(memcap));
else
- host_cache.set_max_size(hc_rrt.memcap);
+ host_cache.set_max_size(memcap);
}
return true;
class HostCacheReloadTuner : public snort::ReloadResourceTuner
{
public:
+ explicit HostCacheReloadTuner(size_t memcap) : memcap(memcap) { }
bool tinit() override
{ return host_cache.reload_resize(memcap); }
bool tune_packet_context() override
{ return host_cache.reload_prune(memcap, max_work); }
+private:
size_t memcap;
};
HostCacheModule();
~HostCacheModule() override;
- bool begin(const char*, int, snort::SnortConfig*) override;
bool end(const char*, int, snort::SnortConfig*) override;
bool set(const char*, snort::Value&, snort::SnortConfig*) override;
private:
const char* dump_file = nullptr;
- HostCacheReloadTuner hc_rrt;
+ size_t memcap = 0;
};
#endif
}
time_t packet_time() { return 0; }
bool Snort::is_reloading() { return false; }
+void SnortConfig::register_reload_resource_tuner(ReloadResourceTuner* rrt) { delete rrt; }
} // end of namespace snort
extern "C"
private:
HostServiceDescriptor service;
HostAttributesEntry host;
- HostAttributesReloadTuner hart;
};
bool HostsModule::set(const char*, Value& v, SnortConfig* sc)
if ( HostAttributesManager::activate() )
{
if ( Snort::is_reloading() )
- sc->register_reload_resource_tuner(hart);
+ sc->register_reload_resource_tuner(new HostAttributesReloadTuner);
}
}
#include "profiler/profiler.h"
#include "protocols/packet.h"
#include "sfip/sf_ip.h"
+#include "main/snort.h"
#include "target_based/host_attributes.h"
#include "target_based/snort_protocols.h"
#include "trace/trace_config.h"
delete so_rules;
if ( plugins )
delete plugins;
- reload_tuners.clear();
+ clear_reload_resource_tuner_list();
trim_heap();
}
}
}
+void SnortConfig::register_reload_resource_tuner(ReloadResourceTuner* rrt)
+{
+ if (Snort::is_reloading())
+ reload_tuners.push_back(rrt);
+ else
+ delete rrt;
+}
+
+void SnortConfig::clear_reload_resource_tuner_list()
+{
+ for (ReloadResourceTuner* rrt : reload_tuners)
+ delete rrt;
+ reload_tuners.clear();
+}
+
void SnortConfig::cleanup_fatal_error()
{
// FIXIT-L need a generic way to manage type other threads
const std::list<ReloadResourceTuner*>& get_reload_resource_tuners() const
{ return reload_tuners; }
- void clear_reload_resource_tuner_list()
- { reload_tuners.clear(); }
+ void clear_reload_resource_tuner_list();
bool get_default_rule_state() const;
static void set_conf(const SnortConfig*);
- SO_PUBLIC void register_reload_resource_tuner(ReloadResourceTuner& rrt)
- { reload_tuners.push_back(&rrt); }
+ SO_PUBLIC void register_reload_resource_tuner(ReloadResourceTuner*);
static void cleanup_fatal_error();
};
assert(odp_thread_local_ctxt);
delete odp_thread_local_ctxt;
odp_thread_local_ctxt = new OdpThreadContext(true);
-
+
OdpContext& odp_ctxt = ctxt.get_odp_ctxt();
odp_ctxt.get_client_disco_mgr().initialize();
odp_ctxt.get_service_disco_mgr().initialize();
{
assert(config);
- if ( strcmp(fqn, "appid") == 0 )
- {
- appid_rrt.memcap = config->memcap;
- if ( Snort::is_reloading() )
- sc->register_reload_resource_tuner(appid_rrt);
- }
+ if ( Snort::is_reloading() && strcmp(fqn, "appid") == 0 )
+ sc->register_reload_resource_tuner(new AppIdReloadTuner(config->memcap));
if ( !config->app_detector_dir )
{
class AppIdReloadTuner : public snort::ReloadResourceTuner
{
public:
- AppIdReloadTuner() = default;
+ explicit AppIdReloadTuner(size_t memcap) : memcap(memcap) { }
+ ~AppIdReloadTuner() override = default;
bool tinit() override;
bool tune_packet_context() override
friend class AppIdModule;
private:
- size_t memcap = 0;
+ size_t memcap;
bool tune_resources(unsigned work_limit);
};
private:
AppIdConfig* config;
- AppIdReloadTuner appid_rrt;
};
#endif
bool PerfMonModule::end(const char* fqn, int idx, SnortConfig* sc)
{
- if ( strcmp(fqn, "perf_monitor") == 0 )
- {
- perfmon_rrt.set_memcap(config->flowip_memcap);
-
- if ( Snort::is_reloading() )
- {
- sc->register_reload_resource_tuner(perfmon_rrt);
- }
- }
+ if ( Snort::is_reloading() && strcmp(fqn, "perf_monitor") == 0 )
+ sc->register_reload_resource_tuner(new PerfMonReloadTuner(config->flowip_memcap));
if ( idx != 0 && strcmp(fqn, "perf_monitor.modules") == 0 )
return config->modules.back().confirm_parse();
private:
PerfConfig* config = nullptr;
- PerfMonReloadTuner perfmon_rrt;
};
extern THREAD_LOCAL PerfPegStats pmstats;
class PerfMonReloadTuner : public snort::ReloadResourceTuner
{
public:
- PerfMonReloadTuner() = default;
+ explicit PerfMonReloadTuner(size_t memcap) : memcap(memcap) { }
+ ~PerfMonReloadTuner() override = default;
bool tinit() override;
bool tune_resources(unsigned work_limit);
- void set_memcap(size_t new_memcap)
- { memcap = new_memcap; }
-
- size_t get_memcap()
- { return memcap; }
-
private:
- size_t memcap = 0;
+ size_t memcap;
};
bool PortScanModule::end(const char* fqn, int, SnortConfig* sc)
{
- if ( strcmp(fqn, "port_scan") == 0 )
- {
- ps_rrt.memcap = config->memcap;
- if ( Snort::is_reloading() )
- sc->register_reload_resource_tuner(ps_rrt);
- }
+ if ( Snort::is_reloading() && strcmp(fqn, "port_scan") == 0 )
+ sc->register_reload_resource_tuner(new PortScanReloadTuner(config->memcap));
return true;
}
class PortScanReloadTuner : public snort::ReloadResourceTuner
{
public:
+ explicit PortScanReloadTuner(size_t memcap) : memcap(memcap) { }
+ ~PortScanReloadTuner() override = default;
+
bool tinit() override
{ return ps_init_hash(memcap); }
bool tune_packet_context() override
{ return ps_prune_hash(max_work); }
- size_t memcap = 0;
+private:
+ size_t memcap;
};
//-------------------------------------------------------------------------
private:
PS_ALERT_CONF* get_alert_conf(const char* fqn);
PortscanConfig* config;
- PortScanReloadTuner ps_rrt;
};
#endif
bool FpProcReloadTuner::tinit()
{
- set_tcp_fp_processor(mod_conf->tcp_processor);
- set_ua_fp_processor(mod_conf->ua_processor);
+ set_tcp_fp_processor(mod_conf.tcp_processor);
+ set_ua_fp_processor(mod_conf.ua_processor);
return false; // no work to do after this
}
mod_conf->ua_processor->make_mpse(sc);
if ( (mod_conf->tcp_processor || mod_conf->ua_processor) && Snort::is_reloading() )
- {
- fprt.mod_conf = mod_conf;
- sc->register_reload_resource_tuner(fprt);
- }
-
+ sc->register_reload_resource_tuner(new FpProcReloadTuner(*mod_conf));
}
if ( index > 0 and mod_conf->tcp_processor and !strcmp(fqn, "rna.tcp_fingerprints") )
class FpProcReloadTuner : public snort::ReloadResourceTuner
{
public:
- FpProcReloadTuner() = default;
+ explicit FpProcReloadTuner(RnaModuleConfig& mod_conf) : mod_conf(mod_conf) { }
+ ~FpProcReloadTuner() override = default;
bool tinit() override;
bool tune_idle_context() override
{ return true; }
- RnaModuleConfig* mod_conf = nullptr;
+private:
+ RnaModuleConfig& mod_conf;
};
class RnaModule : public snort::Module
RawFingerprint fingerprint;
- FpProcReloadTuner fprt;
-
bool is_valid_fqn(const char* fqn) const;
};
namespace snort
{
bool Snort::is_reloading() { return false; }
+ void SnortConfig::register_reload_resource_tuner(ReloadResourceTuner* rrt) { delete rrt; }
}
TEST_GROUP(rna_module_test)
return true;
}
-bool StreamModule::end(const char*, int, SnortConfig* sc)
+bool StreamModule::end(const char* fqn, int, SnortConfig* sc)
{
- if ( reload_resource_manager.initialize(config) )
- sc->register_reload_resource_tuner(reload_resource_manager);
+ if ( Snort::is_reloading() && strcmp(fqn, MOD_NAME) == 0 )
+ {
+ StreamReloadResourceManager* reload_resource_manager = new StreamReloadResourceManager;
+ if (reload_resource_manager->initialize(config))
+ sc->register_reload_resource_tuner(reload_resource_manager);
+ else
+ delete reload_resource_manager;
- if ( hpq_rrt.initialize(config.held_packet_timeout) )
- sc->register_reload_resource_tuner(hpq_rrt);
+ sc->register_reload_resource_tuner(new HPQReloadTuner(config.held_packet_timeout));
+ }
return true;
}
{
// saving a copy of the config only works here because there is only
// one stream inspector per packet thread...
- if ( !Snort::is_reloading() )
- {
- config = config_;
- return false;
- }
-
#ifdef REG_TEST
if ( config.footprint != config_.footprint )
{
}
}
-bool HPQReloadTuner::initialize(uint32_t new_timeout_ms)
-{
- held_packet_timeout = new_timeout_ms;
- return Snort::is_reloading();
-}
-
bool HPQReloadTuner::tinit()
{
packet_gettimeofday(&reload_time);
class HPQReloadTuner : public snort::ReloadResourceTuner
{
public:
- HPQReloadTuner() = default;
+ explicit HPQReloadTuner(uint32_t packet_timeout) : held_packet_timeout(packet_timeout) { }
+ ~HPQReloadTuner() override = default;
bool tinit() override;
bool tune_packet_context() override;
bool tune_idle_context() override;
- bool initialize(uint32_t new_timeout_ms);
private:
uint32_t held_packet_timeout;
- timeval reload_time;
+ timeval reload_time{};
};
class StreamModule : public snort::Module
private:
StreamModuleConfig config;
- StreamReloadResourceManager reload_resource_manager;
- HPQReloadTuner hpq_rrt;
};
extern void base_prep();