if (!SFDAQ::unprivileged())
{
ParseError("Cannot drop privileges - %s DAQ does not support unprivileged operation.\n",
- SFDAQ::get_type());
+ SFDAQ::get_type());
return false;
}
if (!SetUidGid(SnortConfig::get_uid(), SnortConfig::get_gid()))
bool Snort::initializing = true;
bool Snort::reloading = false;
bool Snort::privileges_dropped = false;
+bool Snort::pause = false;
+bool Snort::was_paused = false;
bool Snort::is_starting()
{ return initializing; }
s_data = new uint8_t[65535];
show_source(intf);
- SnortConfig::get_conf()->thread_config->implement_thread_affinity(STHREAD_TYPE_PACKET, get_instance_id());
+ SnortConfig::get_conf()->thread_config->implement_thread_affinity(STHREAD_TYPE_PACKET,
+ get_instance_id());
// FIXIT-M the start-up sequence is a little off due to dropping privs
- SFDAQInstance *daq_instance = new SFDAQInstance(intf);
+ SFDAQInstance* daq_instance = new SFDAQInstance(intf);
SFDAQ::set_local_instance(daq_instance);
if (!daq_instance->configure(SnortConfig::get_conf()))
{
HighAvailabilityManager::thread_init(); // must be before InspectorManager::thread_init();
InspectorManager::thread_init(SnortConfig::get_conf());
PacketTracer::thread_init();
-
+
// in case there are HA messages waiting, process them first
HighAvailabilityManager::process_receive();
PacketManager::thread_init();
s_packet = nullptr;
- SFDAQInstance *daq_instance = SFDAQ::get_local_instance();
+ SFDAQInstance* daq_instance = SFDAQ::get_local_instance();
if ( daq_instance->was_started() )
daq_instance->stop();
SFDAQ::set_local_instance(nullptr);
if ( SnortConfig::get_conf()->pkt_cnt && pc.total_from_daq >= SnortConfig::get_conf()->pkt_cnt )
SFDAQ::break_loop(-1);
-
+#ifdef REG_TEST
+ else if ( SnortConfig::get_conf()->pkt_pause_cnt && !was_paused &&
+ pc.total_from_daq >= SnortConfig::get_conf()->pkt_pause_cnt )
+ {
+ SFDAQ::break_loop(0);
+ was_paused = pause = true;
+ }
+#endif
else if ( break_time() )
SFDAQ::break_loop(0);
{ "--pause", Parameter::PT_IMPLIED, nullptr, nullptr,
"wait for resume/quit command before processing packets/terminating", },
+#ifdef REG_TEST
+ { "--pause-after-n", Parameter::PT_INT, "1:", nullptr,
+ "<count> pause after count packets, to be used with single packet thread only", },
+#endif
+
{ "--parsing-follows-files", Parameter::PT_IMPLIED, nullptr, nullptr,
"parse relative paths from the perspective of the current configuration file" },
"use drop, sdrop, and reject rules to ignore session traffic when not inline" },
{ "--tweaks", Parameter::PT_STRING, nullptr, nullptr,
- "tune configuration" },
+ "tune configuration" },
#ifdef UNIT_TEST
{ "--catch-test", Parameter::PT_STRING, nullptr, nullptr,
- "comma separated list of cat unit test tags or 'all'" },
+ "comma separated list of cat unit test tags or 'all'" },
#endif
{ "--version", Parameter::PT_IMPLIED, nullptr, nullptr,
"show version number (same as -V)" },
{ "--x2s", Parameter::PT_STRING, nullptr, nullptr,
"output ASCII string for given byte code (see also --x2c)" },
-
+
{ "--trace", Parameter::PT_IMPLIED, nullptr, nullptr,
"turn on main loop debug trace" },
{ return proc_names; }
PegCount* get_counts() const override
- { return (PegCount*) &proc_stats; }
+ { return (PegCount*)&proc_stats; }
bool global_stats() const override
{ return true; }
stringstream ss { v.get_string() };
string path;
- while( getline(ss, path, ':') )
+ while ( getline(ss, path, ':') )
sc->daq_config->add_module_dir(path.c_str());
}
-
else if ( v.is("--daq-list") )
list_daqs(sc);
else
sc->daq_config->set_variable(v.get_string(), instance_id);
}
-
else if ( v.is("--dirty-pig") )
sc->set_dirty_pig(true);
else if ( v.is("--pause") )
sc->run_flags |= RUN_FLAG__PAUSE;
+#ifdef REG_TEST
+ else if ( v.is("--pause-after-n") )
+ sc->pkt_pause_cnt = v.get_long();
+#endif
+
else if ( v.is("--parsing-follows-files") )
parsing_follows_files = true;