using namespace snort;
using namespace std;
-BaseTracker::BaseTracker(PerfConfig* perf) : PerfTracker(perf, PERF_NAME "_base")
+BaseTracker::BaseTracker(PerfConfig* perf) : PerfTracker(perf, PERF_NAME "_base"),
+ modules(perf->modules), mods_to_prep(perf->mods_to_prep)
{
- for ( ModuleConfig& mod : config->modules )
+ for ( ModuleConfig& mod : modules )
{
formatter->register_section(mod.ptr->get_name());
void BaseTracker::process(bool summary)
{
- for ( Module* mod : config->mods_to_prep )
+ for ( Module* mod : mods_to_prep )
mod->prep_counts();
write();
- for ( const ModuleConfig& mod : config->modules )
+ for ( const ModuleConfig& mod : modules )
if ( !summary )
mod.ptr->sum_stats(false);
}
BaseTracker(PerfConfig* perf);
void process(bool) override;
+
+private:
+ std::vector<ModuleConfig> modules;
+ std::vector<snort::Module*> mods_to_prep;
};
#endif
return value;
}
-FlowIPTracker::FlowIPTracker(PerfConfig* perf) : PerfTracker(perf, TRACKER_NAME)
+FlowIPTracker::FlowIPTracker(PerfConfig* perf) : PerfTracker(perf, TRACKER_NAME),
+ perf_flags(perf->perf_flags)
{
formatter->register_section("flow_ip");
formatter->register_field("ip_a", ip_a);
write();
}
- if ( !(config->perf_flags & PERF_SUMMARY) )
+ if ( !(perf_flags & PERF_SUMMARY) )
reset();
}
FlowStateValue stats;
snort::XHash* ip_map;
char ip_a[41], ip_b[41];
+ int perf_flags;
FlowStateValue* find_stats(const snort::SfIp* src_addr, const snort::SfIp* dst_addr, int* swapped);
void write_stats();
#define MAX_PKT_LEN 9000
-FlowTracker::FlowTracker(PerfConfig* perf) : PerfTracker(perf, TRACKER_NAME)
+FlowTracker::FlowTracker(PerfConfig* perf) : PerfTracker(perf, TRACKER_NAME),
+ flow_max_port_to_track(perf->flow_max_port_to_track)
{
pkt_len_cnt.resize( MAX_PKT_LEN + 1 );
- tcp.src.resize( config->flow_max_port_to_track + 1, 0 );
- tcp.dst.resize( config->flow_max_port_to_track + 1, 0 );
- udp.src.resize( config->flow_max_port_to_track + 1, 0 );
- udp.dst.resize( config->flow_max_port_to_track + 1, 0 );
+ tcp.src.resize( flow_max_port_to_track + 1, 0 );
+ tcp.dst.resize( flow_max_port_to_track + 1, 0 );
+ udp.src.resize( flow_max_port_to_track + 1, 0 );
+ udp.dst.resize( flow_max_port_to_track + 1, 0 );
type_icmp.resize( UINT8_MAX + 1, 0 );
formatter->register_section("flow");
void FlowTracker::update_transport_flows(int sport, int dport,
FlowProto& proto, int len)
{
- if (sport <= config->flow_max_port_to_track &&
- dport > config->flow_max_port_to_track)
+ if (sport <= flow_max_port_to_track &&
+ dport > flow_max_port_to_track)
{
proto.src[sport] += len;
}
- else if (dport <= config->flow_max_port_to_track &&
- sport > config->flow_max_port_to_track)
+ else if (dport <= flow_max_port_to_track &&
+ sport > flow_max_port_to_track)
{
proto.dst[dport] += len;
}
- else if (sport <= config->flow_max_port_to_track &&
- dport <= config->flow_max_port_to_track)
+ else if (sport <= flow_max_port_to_track &&
+ dport <= flow_max_port_to_track)
{
proto.src[sport] += len;
proto.dst[dport] += len;
private:
PegCount byte_total = 0;
+ int flow_max_port_to_track;
std::vector<PegCount> pkt_len_cnt;
PegCount pkt_len_oversize_cnt = 0;
PerfTracker::PerfTracker(PerfConfig* config, const char* tracker_name)
{
- this->config = config;
+ max_file_size = config->max_file_size;
switch (config->format)
{
{
if (fh && fh != stdout)
{
- if (!rotate_file(fname.c_str(), fh, config->max_file_size))
+ if (!rotate_file(fname.c_str(), fh, max_file_size))
return false;
return open(false);
bool PerfTracker::auto_rotate()
{
- if (fh && fh != stdout && check_file_size(fh, config->max_file_size))
+ if (fh && fh != stdout && check_file_size(fh, max_file_size))
return rotate();
return true;
PerfTracker& operator=(const PerfTracker&) = delete;
protected:
- PerfConfig* config;
+ uint64_t max_file_size = 0;
+
PerfFormatter* formatter;
PerfTracker(PerfConfig*, const char* tracker_name);