From: Russ Combs (rucombs) Date: Tue, 8 Mar 2016 21:50:44 +0000 (-0500) Subject: Merge pull request #322 in SNORT/snort3 from perf_underflow to master X-Git-Tag: 3.0.0-233~551 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=686e5099e7b74c2cbb5aa27e376d60a78af101cb;p=thirdparty%2Fsnort3.git Merge pull request #322 in SNORT/snort3 from perf_underflow to master Squashed commit of the following: commit 195da6822ddf943445246efd5144b5744454012c Author: Carter Waxman Date: Tue Mar 8 12:19:27 2016 -0500 fixed ip session stats underflow commit fb8df2a87f2c49221c03d04df08e7afa8591f83a Author: Carter Waxman Date: Tue Mar 8 09:47:24 2016 -0500 fixed session counters in perfmon --- diff --git a/src/flow/session.h b/src/flow/session.h index 3c96a84b2..2125fbb78 100644 --- a/src/flow/session.h +++ b/src/flow/session.h @@ -75,9 +75,6 @@ public: /* These should be tracked by all Session subclasses. Add to top of peg list. * Having these predefined stats improves consistency and provides convenience. - * Some useful derived stats: - * current = created - released - * normal closes = released - timeouts - prunes */ #define SESSION_PEGS(module) \ { "sessions", "total " module " sessions" }, \ @@ -98,12 +95,10 @@ public: #define SESSION_STATS_ADD(stats) \ { \ - PegCount current; \ stats.sessions++; \ stats.created++; \ - current = (stats).created - (stats).released; \ - if ( (stats).max < current ) \ - (stats).max = current; \ + if ( (stats).max < (stats).sessions ) \ + (stats).max = (stats).sessions; \ } #endif diff --git a/src/stream/icmp/icmp_module.cc b/src/stream/icmp/icmp_module.cc index cc76e2e9e..33cbaefe0 100644 --- a/src/stream/icmp/icmp_module.cc +++ b/src/stream/icmp/icmp_module.cc @@ -83,3 +83,13 @@ const PegInfo* StreamIcmpModule::get_pegs() const PegCount* StreamIcmpModule::get_counts() const { return (PegCount*)&icmpStats; } +void StreamIcmpModule::sum_stats() +{ + PegCount sessions = icmpStats.sessions; + + Module::sum_stats(); + + icmpStats.sessions = sessions; + icmpStats.max = sessions; +} + diff --git a/src/stream/icmp/icmp_module.h b/src/stream/icmp/icmp_module.h index b775bc203..447bdf51f 100644 --- a/src/stream/icmp/icmp_module.h +++ b/src/stream/icmp/icmp_module.h @@ -32,6 +32,11 @@ extern THREAD_LOCAL ProfileStats icmp_perf_stats; struct SnortConfig; +struct IcmpStats +{ + SESSION_STATS; +}; + //------------------------------------------------------------------------- // stream_icmp module //------------------------------------------------------------------------- @@ -55,6 +60,8 @@ public: StreamIcmpConfig* get_data(); + void sum_stats() override; + private: StreamIcmpConfig* config; }; diff --git a/src/stream/icmp/icmp_session.cc b/src/stream/icmp/icmp_session.cc index 89af4e1b1..7ae84e0f8 100644 --- a/src/stream/icmp/icmp_session.cc +++ b/src/stream/icmp/icmp_session.cc @@ -44,11 +44,6 @@ #include "icmp_module.h" #include "icmp_session.h" -struct IcmpStats -{ - SESSION_STATS; -}; - const PegInfo icmp_pegs[] = { SESSION_PEGS("icmp"), diff --git a/src/stream/ip/ip_module.cc b/src/stream/ip/ip_module.cc index 9085bddf7..13dbb4dd2 100644 --- a/src/stream/ip/ip_module.cc +++ b/src/stream/ip/ip_module.cc @@ -216,3 +216,15 @@ const PegInfo* StreamIpModule::get_pegs() const PegCount* StreamIpModule::get_counts() const { return (PegCount*)&ip_stats; } +void StreamIpModule::sum_stats() +{ + PegCount sessions = ip_stats.sessions; + PegCount current = ip_stats.current; + + Module::sum_stats(); + + ip_stats.sessions = sessions; + ip_stats.max = sessions; + ip_stats.current = current; +} + diff --git a/src/stream/ip/ip_module.h b/src/stream/ip/ip_module.h index 994c943cc..808131b16 100644 --- a/src/stream/ip/ip_module.h +++ b/src/stream/ip/ip_module.h @@ -54,6 +54,32 @@ struct SnortConfig; #define DEFRAG_EXCESSIVE_OVERLAP 12 #define DEFRAG_TINY_FRAGMENT 13 +/* statistics tracking struct */ +struct IpStats +{ + SESSION_STATS; + PegCount total; //total_ipfragmented_packets + PegCount current; //iCurrentFrags + PegCount max_frags; //iMaxFrags + PegCount reassembles; //total_ipreassembled_packets / iFragFlushes + PegCount discards; + PegCount frag_prunes; //FIXIT-M: this isn't used. iFragFaults + PegCount frag_timeouts; //iFragTimeouts + PegCount overlaps; + PegCount anomalies; + PegCount alerts; + PegCount drops; + PegCount trackers_created; //iFragCreates + PegCount trackers_released; + PegCount trackers_cleared; //iFragDeletes - delete meant dump the frag list + PegCount trackers_completed;//iFragComplete + PegCount nodes_created; //iFragInserts tracked a similar stat (# calls to insert) + PegCount nodes_released; + PegCount mem_in_use; //frag_mem_in_use + PegCount reassembled_bytes; //total_ipreassembled_bytes + PegCount fragmented_bytes; //total_ipfragmented_bytes +}; + extern const PegInfo ip_pegs[]; extern THREAD_LOCAL struct IpStats ip_stats; extern THREAD_LOCAL ProfileStats ip_perf_stats; @@ -89,6 +115,8 @@ public: unsigned get_gid() const override { return GID_DEFRAG; } + void sum_stats() override; + private: StreamIpConfig* config; }; diff --git a/src/stream/ip/ip_session.cc b/src/stream/ip/ip_session.cc index 2c813a414..f374b8705 100644 --- a/src/stream/ip/ip_session.cc +++ b/src/stream/ip/ip_session.cc @@ -152,6 +152,7 @@ bool IpSession::setup(Packet*) memset(&tracker, 0, sizeof(tracker)); SESSION_STATS_ADD(ip_stats); ip_stats.trackers_created++; + ip_stats.current++; #ifdef ENABLE_EXPECTED_IP if ( flow_con->expected_session(flow, p)) diff --git a/src/stream/ip/ip_session.h b/src/stream/ip/ip_session.h index bb266f598..69b833a69 100644 --- a/src/stream/ip/ip_session.h +++ b/src/stream/ip/ip_session.h @@ -20,6 +20,8 @@ #ifndef IP_SESSION_H #define IP_SESSION_H +#include "ip_module.h" + #include #include "flow/session.h" #include "framework/counts.h" @@ -90,32 +92,6 @@ public: FragTracker tracker; }; -/* statistics tracking struct */ -struct IpStats -{ - SESSION_STATS; - PegCount total; //total_ipfragmented_packets - PegCount current; //iCurrentFrags - PegCount max_frags; //iMaxFrags - PegCount reassembles; //total_ipreassembled_packets / iFragFlushes - PegCount discards; - PegCount frag_prunes; //FIXIT-M: this isn't used. iFragFaults - PegCount frag_timeouts; //iFragTimeouts - PegCount overlaps; - PegCount anomalies; - PegCount alerts; - PegCount drops; - PegCount trackers_created; //iFragCreates - PegCount trackers_released; - PegCount trackers_cleared; //iFragDeletes - delete meant dump the frag list - PegCount trackers_completed;//iFragComplete - PegCount nodes_created; //iFragInserts tracked a similar stat (# calls to insert) - PegCount nodes_released; - PegCount mem_in_use; //frag_mem_in_use - PegCount reassembled_bytes; //total_ipreassembled_bytes - PegCount fragmented_bytes; //total_ipfragmented_bytes -}; - extern THREAD_LOCAL IpStats ip_stats; #endif diff --git a/src/stream/tcp/tcp_module.cc b/src/stream/tcp/tcp_module.cc index a141aaa87..4a1447087 100644 --- a/src/stream/tcp/tcp_module.cc +++ b/src/stream/tcp/tcp_module.cc @@ -371,11 +371,14 @@ void StreamTcpModule::sum_stats() PegCount init = tcpStats.sessions_initializing; PegCount est = tcpStats.sessions_established; PegCount closing = tcpStats.sessions_closing; + PegCount sessions = tcpStats.sessions; Module::sum_stats(); tcpStats.sessions_initializing = init; tcpStats.sessions_established = est; tcpStats.sessions_closing = closing; + tcpStats.sessions = sessions; + tcpStats.max = sessions; } diff --git a/src/stream/tcp/tcp_session.cc b/src/stream/tcp/tcp_session.cc index ce8522c2f..fab42e760 100644 --- a/src/stream/tcp/tcp_session.cc +++ b/src/stream/tcp/tcp_session.cc @@ -163,7 +163,7 @@ bool TcpSession::setup(Packet*) ingress_group = egress_group = 0; daq_flags = address_space_id = 0; - tcpStats.sessions++; + SESSION_STATS_ADD(tcpStats); return true; } diff --git a/src/stream/udp/udp_module.cc b/src/stream/udp/udp_module.cc index a3251e871..952817e7a 100644 --- a/src/stream/udp/udp_module.cc +++ b/src/stream/udp/udp_module.cc @@ -91,3 +91,13 @@ const PegInfo* StreamUdpModule::get_pegs() const PegCount* StreamUdpModule::get_counts() const { return (PegCount*)&udpStats; } +void StreamUdpModule::sum_stats() +{ + PegCount sessions = udpStats.sessions; + + Module::sum_stats(); + + udpStats.sessions = sessions; + udpStats.max = sessions; +} + diff --git a/src/stream/udp/udp_module.h b/src/stream/udp/udp_module.h index ec7553909..8f4c96566 100644 --- a/src/stream/udp/udp_module.h +++ b/src/stream/udp/udp_module.h @@ -31,6 +31,11 @@ struct SnortConfig; +struct UdpStats +{ + SESSION_STATS; +}; + extern const PegInfo udp_pegs[]; extern THREAD_LOCAL struct UdpStats udpStats; extern THREAD_LOCAL ProfileStats udp_perf_stats; @@ -57,6 +62,8 @@ public: PegCount* get_counts() const override; StreamUdpConfig* get_data(); + void sum_stats() override; + private: StreamUdpConfig* config; }; diff --git a/src/stream/udp/udp_session.cc b/src/stream/udp/udp_session.cc index eb4125836..4ef85a44b 100644 --- a/src/stream/udp/udp_session.cc +++ b/src/stream/udp/udp_session.cc @@ -45,11 +45,6 @@ // NOTE: sender is assumed to be client // responder is assumed to be server -struct UdpStats -{ - SESSION_STATS; -}; - const PegInfo udp_pegs[] = { SESSION_PEGS("udp"),