]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
added stream_tcp.segs_split
authorRuss Combs <rucombs@cisco.com>
Fri, 7 Nov 2014 19:26:45 +0000 (14:26 -0500)
committerRuss Combs <rucombs@cisco.com>
Fri, 7 Nov 2014 19:26:45 +0000 (14:26 -0500)
ChangeLog
src/stream/tcp/tcp_session.cc

index 87a2efe5d5067298eac9d4385e1958ad8f830043..894eac9edc388db8c10d6be934598c59b1028afa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -36,6 +36,7 @@
 -- fixed stream_ip defaults
 -- fixed binder[2] = { { when = { }, user = { } } } (extra { })
 -- fixed static flush points
+-- added stream_tcp.segs_split peg
 
 126
 -- pulled latest from tom
index 5ba5c9c2c4409d07445fef8a19c3fcb47c6537ae..12ff0fb4a3c26e4a9c09184a9eefe7ba87c96db2 100644 (file)
@@ -116,6 +116,7 @@ struct TcpStats
     PegCount trackers_released;
     PegCount segs_queued;
     PegCount segs_released;
+    PegCount segs_split;
     PegCount segs_used;
     PegCount rebuilt_packets;
     PegCount rebuilt_buffers;
@@ -144,6 +145,7 @@ const char* tcp_pegs[] =
     "trackers released",
     "segs queued",
     "segs released",
+    "segs split",
     "segs used",
     "rebuilt packets",
     "rebuilt buffers",
@@ -3200,6 +3202,7 @@ static int DupStreamNode(Packet *p,
     if ( !ss )
         return STREAM_INSERT_FAILED;
 
+    tcpStats.segs_split++;
     ss->data = ss->pkt + (left->data - left->pkt);
     ss->orig_dsize = left->orig_dsize;
 
@@ -5905,6 +5908,13 @@ static inline uint32_t flush_pdu_ips (
         if ( flush_pt > 0 )
         {
             MODULE_PROFILE_END(s5TcpPAFPerfStats);
+#if 0
+            // for non-paf splitters, flush_pt > 0 means we reached
+            // the minimum required, but we flush what is available 
+            // instead of creating more, but smaller, packets
+            if ( !trk->splitter->is_paf() && avail > flush_pt )
+                return avail;
+#endif
             return flush_pt;
         }
         seg = seg->next;
@@ -6061,6 +6071,17 @@ static inline uint32_t flush_pdu_ackd (
         if ( flush_pt > 0 )
         {
             MODULE_PROFILE_END(s5TcpPAFPerfStats);
+#if 0
+            // for non-paf splitters, flush_pt > 0 means we reached
+            // the minimum required, but we flush what is available 
+            // instead of creating more, but smaller, packets
+            if ( !trk->splitter->is_paf() )
+            {
+                uint32_t avail = get_q_footprint(trk);
+                if ( avail > flush_pt )
+                    return avail;
+            }
+#endif
             return flush_pt;
         }
         seg = seg->next;