/* 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" }, \
#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
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;
+}
+
struct SnortConfig;
+struct IcmpStats
+{
+ SESSION_STATS;
+};
+
//-------------------------------------------------------------------------
// stream_icmp module
//-------------------------------------------------------------------------
StreamIcmpConfig* get_data();
+ void sum_stats() override;
+
private:
StreamIcmpConfig* config;
};
#include "icmp_module.h"
#include "icmp_session.h"
-struct IcmpStats
-{
- SESSION_STATS;
-};
-
const PegInfo icmp_pegs[] =
{
SESSION_PEGS("icmp"),
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;
+}
+
#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;
unsigned get_gid() const override
{ return GID_DEFRAG; }
+ void sum_stats() override;
+
private:
StreamIpConfig* config;
};
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))
#ifndef IP_SESSION_H
#define IP_SESSION_H
+#include "ip_module.h"
+
#include <sys/time.h>
#include "flow/session.h"
#include "framework/counts.h"
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
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;
}
ingress_group = egress_group = 0;
daq_flags = address_space_id = 0;
- tcpStats.sessions++;
+ SESSION_STATS_ADD(tcpStats);
return true;
}
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;
+}
+
struct SnortConfig;
+struct UdpStats
+{
+ SESSION_STATS;
+};
+
extern const PegInfo udp_pegs[];
extern THREAD_LOCAL struct UdpStats udpStats;
extern THREAD_LOCAL ProfileStats udp_perf_stats;
PegCount* get_counts() const override;
StreamUdpConfig* get_data();
+ void sum_stats() override;
+
private:
StreamUdpConfig* config;
};
// NOTE: sender is assumed to be client
// responder is assumed to be server
-struct UdpStats
-{
- SESSION_STATS;
-};
-
const PegInfo udp_pegs[] =
{
SESSION_PEGS("udp"),