]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1378 in SNORT/snort3 from perfmon_segfault to master
authorTom Peters (thopeter) <thopeter@cisco.com>
Fri, 5 Oct 2018 15:13:34 +0000 (11:13 -0400)
committerTom Peters (thopeter) <thopeter@cisco.com>
Fri, 5 Oct 2018 15:13:34 +0000 (11:13 -0400)
Squashed commit of the following:

commit c2e34ca15b12faa98a6e0090fa403d331c0076df
Author: mdagon <mdagon@cisco.com>
Date:   Mon Sep 24 15:08:47 2018 -0400

    perf_monitor: trackers keep copy of the relevant config items from the inspector

src/network_inspectors/perf_monitor/base_tracker.cc
src/network_inspectors/perf_monitor/base_tracker.h
src/network_inspectors/perf_monitor/flow_ip_tracker.cc
src/network_inspectors/perf_monitor/flow_ip_tracker.h
src/network_inspectors/perf_monitor/flow_tracker.cc
src/network_inspectors/perf_monitor/flow_tracker.h
src/network_inspectors/perf_monitor/perf_tracker.cc
src/network_inspectors/perf_monitor/perf_tracker.h

index 02ab65ae03aa6d4f78605d1a3249e2fe3b0355b5..fa43edc7ccd72f506f45a1f652cd63fb0e375610 100644 (file)
 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());
 
@@ -46,12 +47,12 @@ BaseTracker::BaseTracker(PerfConfig* perf) : PerfTracker(perf, PERF_NAME "_base"
 
 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);
 }
index 3a0735bfd33112e58de3c1305b62455ce063a40c..d801c40d71222a5de89020cd3292315db8412943 100644 (file)
@@ -29,6 +29,10 @@ public:
     BaseTracker(PerfConfig* perf);
 
     void process(bool) override;
+
+private:
+    std::vector<ModuleConfig> modules;
+    std::vector<snort::Module*> mods_to_prep;
 };
 
 #endif
index da61cb4a808376c21d1ab6b68c5570dfc469a27e..2750ff9695cb214cec06423f7b0cffb165949267 100644 (file)
@@ -72,7 +72,8 @@ FlowStateValue* FlowIPTracker::find_stats(const SfIp* src_addr, const SfIp* dst_
     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);
@@ -178,7 +179,7 @@ void FlowIPTracker::process(bool)
         write();
     }
 
-    if ( !(config->perf_flags & PERF_SUMMARY) )
+    if ( !(perf_flags & PERF_SUMMARY) )
         reset();
 }
 
index eaccf2cbf4e60e0d262e4e2023b379c2af56d3bc..258e2b7962efa82c78bcdec1bafd1b25e4cf611f 100644 (file)
@@ -73,6 +73,7 @@ private:
     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();
index d5484b949b5c6d569927205ff558b2fab6044679..1256ca7692c8f8734e7583de23460aab63ccd011 100644 (file)
@@ -39,13 +39,14 @@ using namespace snort;
 
 #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");
@@ -120,20 +121,20 @@ void FlowTracker::clear()
 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;
index cbf85bb0d033f8be47012add0c046ec9d2a9033b..6894aea42fd4befa4425522086b07006a6d11cca 100644 (file)
@@ -43,6 +43,7 @@ protected:
 
 private:
     PegCount byte_total = 0;
+    int flow_max_port_to_track;
 
     std::vector<PegCount> pkt_len_cnt;
     PegCount pkt_len_oversize_cnt = 0;
index 2d2b44f798dbe1879d6bc397c13d3345844abd70..3fe2f1470b9156c98e3adb6205e990898befb845 100644 (file)
@@ -62,7 +62,7 @@ static inline bool check_file_size(FILE* fh, uint64_t max_file_size)
 
 PerfTracker::PerfTracker(PerfConfig* config, const char* tracker_name)
 {
-    this->config = config;
+    max_file_size = config->max_file_size;
 
     switch (config->format)
     {
@@ -342,7 +342,7 @@ bool PerfTracker::rotate()
 {
     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);
@@ -352,7 +352,7 @@ bool PerfTracker::rotate()
 
 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;
index 1162eee777ce3cc495f3fc589b61a75703aaa10d..b84a39cabbc10ad37165432078bea03d8236d8a1 100644 (file)
@@ -69,7 +69,8 @@ public:
     PerfTracker& operator=(const PerfTracker&) = delete;
 
 protected:
-    PerfConfig* config;
+    uint64_t max_file_size = 0;
+
     PerfFormatter* formatter;
 
     PerfTracker(PerfConfig*, const char* tracker_name);