]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #322 in SNORT/snort3 from perf_underflow to master
authorRuss Combs (rucombs) <rucombs@cisco.com>
Tue, 8 Mar 2016 21:50:44 +0000 (16:50 -0500)
committerRuss Combs (rucombs) <rucombs@cisco.com>
Tue, 8 Mar 2016 21:50:44 +0000 (16:50 -0500)
Squashed commit of the following:

commit 195da6822ddf943445246efd5144b5744454012c
Author: Carter Waxman <cwaxman@cisco.com>
Date:   Tue Mar 8 12:19:27 2016 -0500

    fixed ip session stats underflow

commit fb8df2a87f2c49221c03d04df08e7afa8591f83a
Author: Carter Waxman <cwaxman@cisco.com>
Date:   Tue Mar 8 09:47:24 2016 -0500

    fixed session counters in perfmon

13 files changed:
src/flow/session.h
src/stream/icmp/icmp_module.cc
src/stream/icmp/icmp_module.h
src/stream/icmp/icmp_session.cc
src/stream/ip/ip_module.cc
src/stream/ip/ip_module.h
src/stream/ip/ip_session.cc
src/stream/ip/ip_session.h
src/stream/tcp/tcp_module.cc
src/stream/tcp/tcp_session.cc
src/stream/udp/udp_module.cc
src/stream/udp/udp_module.h
src/stream/udp/udp_session.cc

index 3c96a84b2508cf130aad8e8a658898666170e577..2125fbb78146df6899b52a40a17fa474f1219203 100644 (file)
@@ -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
index cc76e2e9e8904769d10238177465065f4b7c2c5c..33cbaefe0f9f72a7d06ffe7e4e15940e9a0a1c75 100644 (file)
@@ -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;
+}
+
index b775bc203aff9fdfad972f56b4c218f682656d4e..447bdf51f7ecbc8a28f388bb2508859d15bc2e5e 100644 (file)
@@ -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;
 };
index 89af4e1b129ad4918ba529bde213fe15212dadff..7ae84e0f8ceeca431658212f0e54898c37512425 100644 (file)
 #include "icmp_module.h"
 #include "icmp_session.h"
 
-struct IcmpStats
-{
-    SESSION_STATS;
-};
-
 const PegInfo icmp_pegs[] =
 {
     SESSION_PEGS("icmp"),
index 9085bddf7ab05b333ccc3297684b43e8ecb276f1..13dbb4dd2cb5c79b079046ba1db7ddfd5bb57fcf 100644 (file)
@@ -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;
+}
+
index 994c943cc5f5b62022673e65e2cd60f2f394cafd..808131b16ffba8ab20668bd5928f7f7a56f2a038 100644 (file)
@@ -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;
 };
index 2c813a414c2f0656c4d30a0a6c85dcad8f0ac81e..f374b870515c2cb1eae053519c0c950f72e03f2a 100644 (file)
@@ -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))
index bb266f5984d990caf403a97469b0b5a179c8d220..69b833a69bbedaa0a1aa8d91af9d06ea0e3209d9 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef IP_SESSION_H
 #define IP_SESSION_H
 
+#include "ip_module.h"
+
 #include <sys/time.h>
 #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
index a141aaa87366fee6254d5713cbbb8db4c41d3fda..4a14470879c3acd1c8326a0be715ed2949a68586 100644 (file)
@@ -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;
 }
 
index ce8522c2f2de7fbac92944e8304797bd8b9b175e..fab42e760c7c8f8cf12786f4be6ea2fdf3b2031a 100644 (file)
@@ -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;
 }
 
index a3251e871a9cf0a345403283f95fa36d963c666b..952817e7a116b51f0ae0dfae62a11041fa653072 100644 (file)
@@ -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;
+}
+
index ec7553909383b93c7b75ecf848dcf2ba5e4baddf..8f4c96566a596f7afebe773047649696c7b45072 100644 (file)
 
 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;
 };
index eb4125836feeff177e209ece68df8feb3f423344..4ef85a44b579fd839c509611306fbcf8cc1a3db5 100644 (file)
 // NOTE:  sender is assumed to be client
 //        responder is assumed to be server
 
-struct UdpStats
-{
-    SESSION_STATS;
-};
-
 const PegInfo udp_pegs[] =
 {
     SESSION_PEGS("udp"),