* process.daemon
* process.set_gid
* process.set_uid
+* stream.footprint
+* stream.ip_cache.max_sessions
+* stream.ip_cache.pruning_timeout
+* stream.ip_cache.idle_timeout
+* stream.icmp_cache.max_sessions
+* stream.icmp_cache.pruning_timeout
+* stream.icmp_cache.idle_timeout
+* stream.tcp_cache.max_sessions
+* stream.tcp_cache.pruning_timeout
+* stream.tcp_cache.idle_timeout
+* stream.udp_cache.max_sessions
+* stream.udp_cache.pruning_timeout
+* stream.udp_cache.idle_timeout
+* stream.user_cache.max_sessions
+* stream.user_cache.pruning_timeout
+* stream.user_cache.idle_timeout
+* stream.file_cache.max_sessions
+* stream.file_cache.pruning_timeout
+* stream.file_cache.idle_timeout
In addition, the following scenarios require a restart:
#include "stream_module.h"
#include "detection/rules.h"
+#include "log/messages.h"
+#include "main/snort.h"
#include "main/snort_debug.h"
using namespace snort;
return true;
}
+static int check_cache_change(const char* fqn, const char* name, const FlowConfig& new_cfg,
+ const FlowConfig& saved_cfg)
+{
+ int ret = 0;
+ if ( saved_cfg.max_sessions and strstr(fqn, name) )
+ {
+ if ( saved_cfg.max_sessions != new_cfg.max_sessions
+ or saved_cfg.pruning_timeout != new_cfg.pruning_timeout
+ or saved_cfg.nominal_timeout != new_cfg.nominal_timeout )
+ {
+ ParseError("Changing of %s requires a restart\n", name);
+ ret = 1;
+ }
+ }
+ return ret;
+}
+
+// FIXIT-L the detection of stream.xxx_cache changes below is a temporary workaround
+// remove this check when stream.xxx_cache params become reloadable
+bool StreamModule::end(const char* fqn, int, SnortConfig*)
+{
+ static StreamModuleConfig saved_config = {};
+ static int issue_found = 0;
+
+ issue_found += check_cache_change(fqn, "ip_cache", config.ip_cfg, saved_config.ip_cfg);
+ issue_found += check_cache_change(fqn, "icmp_cache", config.icmp_cfg, saved_config.icmp_cfg);
+ issue_found += check_cache_change(fqn, "tcp_cache", config.tcp_cfg, saved_config.tcp_cfg);
+ issue_found += check_cache_change(fqn, "udp_cache", config.udp_cfg, saved_config.udp_cfg);
+ issue_found += check_cache_change(fqn, "user_cache", config.ip_cfg, saved_config.user_cfg);
+ issue_found += check_cache_change(fqn, "file_cache", config.ip_cfg, saved_config.file_cfg);
+
+ if ( !strcmp(fqn, "stream") )
+ {
+ if ( saved_config.ip_cfg.max_sessions // saved config is valid
+ and config.footprint != saved_config.footprint )
+ {
+ ParseError("Changing of stream.footprint requires a restart\n");
+ issue_found++;
+ }
+ if ( issue_found == 0 )
+ saved_config = config;
+ issue_found = 0;
+ }
+ return true;
+}
+
void StreamModule::sum_stats(bool)
{ base_sum(); }