diff --git a/etc/schema.json b/etc/schema.json index 4cff77cefb..b0addfe8f8 100644 --- a/etc/schema.json +++ b/etc/schema.json @@ -9023,6 +9023,10 @@ "active_sessions": { "type": "integer" }, + "async_stream": { + "type": "integer", + "description": "Number of times the engine inspected an asynchronous TCP stream (if stream.async-oneside enabled)" + }, "insert_data_normal_fail": { "type": "integer" }, diff --git a/src/stream-tcp.c b/src/stream-tcp.c index c7ccea7b35..28c40c4149 100644 --- a/src/stream-tcp.c +++ b/src/stream-tcp.c @@ -1263,6 +1263,7 @@ static int StreamTcpPacketStateNone( if (stream_config.async_oneside) { SCLogDebug("ssn %p: =~ ASYNC", ssn); ssn->flags |= STREAMTCP_FLAG_ASYNC; + StatsCounterIncr(&tv->stats, stt->counter_tcp_async_stream); } /** window scaling for midstream pickups, we can't do much other @@ -1363,6 +1364,7 @@ static int StreamTcpPacketStateNone( if (stream_config.async_oneside) { SCLogDebug("ssn %p: =~ ASYNC", ssn); ssn->flags |= STREAMTCP_FLAG_ASYNC; + StatsCounterIncr(&tv->stats, stt->counter_tcp_async_stream); } /* sequence number & window */ @@ -1532,6 +1534,7 @@ static int StreamTcpPacketStateNone( if (stream_config.async_oneside) { SCLogDebug("ssn %p: =~ ASYNC", ssn); ssn->flags |= STREAMTCP_FLAG_ASYNC; + StatsCounterIncr(&tv->stats, stt->counter_tcp_async_stream); } /** window scaling for midstream pickups, we can't do much other @@ -2425,6 +2428,8 @@ static int StreamTcpPacketStateSynSent( if (!stream_config.async_oneside) return 0; + StatsCounterIncr(&tv->stats, stt->counter_tcp_async_stream); + /* we are in ASYNC (one side) mode now. */ /* one side async means we won't see a SYN/ACK, so we can @@ -5727,6 +5732,8 @@ int StreamTcpPacket (ThreadVars *tv, Packet *p, StreamTcpThread *stt, { SCLogDebug("ssn %p: removing ASYNC flag as we have packets on both sides", ssn); ssn->flags &= ~STREAMTCP_FLAG_ASYNC; + /* since the stream isn't really async, let's decrease the counter */ + StatsCounterDecr(&tv->stats, stt->counter_tcp_async_stream); } } @@ -6210,6 +6217,7 @@ TmEcode StreamTcpThreadInit(ThreadVars *tv, void *initdata, void **data) stt->counter_tcp_wrong_thread = StatsRegisterCounter("tcp.pkt_on_wrong_thread", &tv->stats); stt->counter_tcp_ack_unseen_data = StatsRegisterCounter("tcp.ack_unseen_data", &tv->stats); + stt->counter_tcp_async_stream = StatsRegisterCounter("tcp.async_stream", &tv->stats); /* init reassembly ctx */ stt->ra_ctx = StreamTcpReassembleInitThreadCtx(tv); diff --git a/src/stream-tcp.h b/src/stream-tcp.h index c214a8a478..cb8a9b98c7 100644 --- a/src/stream-tcp.h +++ b/src/stream-tcp.h @@ -112,6 +112,8 @@ typedef struct StreamTcpThread_ { StatsCounterId counter_tcp_wrong_thread; /** ack for unseen data */ StatsCounterId counter_tcp_ack_unseen_data; + /** async sessions */ + StatsCounterId counter_tcp_async_stream; /** tcp reassembly thread data */ TcpReassemblyThreadCtx *ra_ctx;