mirror of
https://github.com/ntop/ntopng.git
synced 2026-05-05 19:15:03 +00:00
Reworks counters of tcp seqs
This commit is contained in:
parent
64e68011d5
commit
df46dfecfa
3 changed files with 57 additions and 45 deletions
|
|
@ -271,7 +271,7 @@ class Flow : public GenericHashEntry {
|
||||||
void updateTcpFlags(const struct bpf_timeval *when,
|
void updateTcpFlags(const struct bpf_timeval *when,
|
||||||
u_int8_t flags, bool src2dst_direction);
|
u_int8_t flags, bool src2dst_direction);
|
||||||
void incTcpBadStats(bool src2dst_direction,
|
void incTcpBadStats(bool src2dst_direction,
|
||||||
u_int32_t ooo_pkts, u_int32_t retr_pkts, u_int32_t lost_pkts);
|
u_int32_t ooo_pkts, u_int32_t retr_pkts, u_int32_t lost_pkts, u_int32_t keep_alive_pkts);
|
||||||
|
|
||||||
void updateTcpSeqNum(const struct bpf_timeval *when,
|
void updateTcpSeqNum(const struct bpf_timeval *when,
|
||||||
u_int32_t seq_num, u_int32_t ack_seq_num,
|
u_int32_t seq_num, u_int32_t ack_seq_num,
|
||||||
|
|
|
||||||
96
src/Flow.cpp
96
src/Flow.cpp
|
|
@ -2660,27 +2660,58 @@ u_int32_t Flow::getNextTcpSeq ( u_int8_t tcpFlags,
|
||||||
/* *************************************** */
|
/* *************************************** */
|
||||||
|
|
||||||
void Flow::incTcpBadStats(bool src2dst_direction,
|
void Flow::incTcpBadStats(bool src2dst_direction,
|
||||||
u_int32_t ooo_pkts,
|
u_int32_t ooo_pkts,
|
||||||
u_int32_t retr_pkts,
|
u_int32_t retr_pkts,
|
||||||
u_int32_t lost_pkts) {
|
u_int32_t lost_pkts,
|
||||||
|
u_int32_t keep_alive_pkts) {
|
||||||
#ifdef HAVE_NEDGE
|
#ifdef HAVE_NEDGE
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TCPPacketStats * stats;
|
TCPPacketStats * stats;
|
||||||
/*Host * host;*/
|
|
||||||
|
|
||||||
if(src2dst_direction) {
|
if(src2dst_direction)
|
||||||
stats = &tcp_stats_s2d;
|
stats = &tcp_stats_s2d;
|
||||||
/*host = cli_host;*/
|
else
|
||||||
} else {
|
|
||||||
stats = &tcp_stats_d2s;
|
stats = &tcp_stats_d2s;
|
||||||
/*host = srv_host;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
stats->pktKeepAlive += keep_alive_pkts;
|
||||||
stats->pktRetr += retr_pkts;
|
stats->pktRetr += retr_pkts;
|
||||||
stats->pktOOO += ooo_pkts;
|
stats->pktOOO += ooo_pkts;
|
||||||
stats->pktLost += lost_pkts;
|
stats->pktLost += lost_pkts;
|
||||||
|
|
||||||
|
if(retr_pkts) iface->incRetransmittedPkts(retr_pkts);
|
||||||
|
if(lost_pkts) iface->incLostPkts(lost_pkts);
|
||||||
|
if(ooo_pkts) iface->incOOOPkts(ooo_pkts);
|
||||||
|
|
||||||
|
if(cli_host) {
|
||||||
|
if(src2dst_direction) {
|
||||||
|
if(keep_alive_pkts) cli_host->incKeepAliveSent(keep_alive_pkts);
|
||||||
|
if(retr_pkts) cli_host->incRetxSent(retr_pkts);
|
||||||
|
if(lost_pkts) cli_host->incLostSent(lost_pkts);
|
||||||
|
if(ooo_pkts) cli_host->incOOOSent(ooo_pkts);
|
||||||
|
} else {
|
||||||
|
if(keep_alive_pkts) cli_host->incKeepAliveRcvd(keep_alive_pkts);
|
||||||
|
if(retr_pkts) cli_host->incRetxRcvd(retr_pkts);
|
||||||
|
if(lost_pkts) cli_host->incLostRcvd(lost_pkts);
|
||||||
|
if(ooo_pkts) cli_host->incOOORcvd(ooo_pkts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(srv_host) {
|
||||||
|
if(src2dst_direction) {
|
||||||
|
if(keep_alive_pkts) srv_host->incKeepAliveRcvd(keep_alive_pkts);
|
||||||
|
if(retr_pkts) srv_host->incRetxRcvd(retr_pkts);
|
||||||
|
if(lost_pkts) srv_host->incLostRcvd(lost_pkts);
|
||||||
|
if(ooo_pkts) srv_host->incOOORcvd(ooo_pkts);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if(keep_alive_pkts) srv_host->incKeepAliveSent(keep_alive_pkts);
|
||||||
|
if(retr_pkts) srv_host->incRetxSent(retr_pkts);
|
||||||
|
if(lost_pkts) srv_host->incLostSent(lost_pkts);
|
||||||
|
if(ooo_pkts) srv_host->incOOOSent(ooo_pkts);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* *************************************** */
|
/* *************************************** */
|
||||||
|
|
@ -2692,6 +2723,7 @@ void Flow::updateTcpSeqNum(const struct bpf_timeval *when,
|
||||||
u_int32_t next_seq_num;
|
u_int32_t next_seq_num;
|
||||||
bool update_last_seqnum = true;
|
bool update_last_seqnum = true;
|
||||||
bool debug = false;
|
bool debug = false;
|
||||||
|
u_int32_t cnt_keep_alive = 0, cnt_lost = 0, cnt_ooo = 0, cnt_retx = 0;
|
||||||
|
|
||||||
#ifdef HAVE_NEDGE
|
#ifdef HAVE_NEDGE
|
||||||
return;
|
return;
|
||||||
|
|
@ -2701,7 +2733,7 @@ void Flow::updateTcpSeqNum(const struct bpf_timeval *when,
|
||||||
|
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[act: %u][next: %u][next - act (in flight): %d][ack: %u]",
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[act: %u][next: %u][next - act (in flight): %d][ack: %u]",
|
||||||
seq_num, next_seq_num,
|
seq_num, next_seq_num,
|
||||||
next_seq_num - seq_num,
|
next_seq_num - seq_num,
|
||||||
ack_seq_num);
|
ack_seq_num);
|
||||||
|
|
||||||
if(src2dst_direction) {
|
if(src2dst_direction) {
|
||||||
|
|
@ -2715,28 +2747,16 @@ void Flow::updateTcpSeqNum(const struct bpf_timeval *when,
|
||||||
&& (payload_Len == 0 || payload_Len == 1)
|
&& (payload_Len == 0 || payload_Len == 1)
|
||||||
&& ((flags & (TH_SYN|TH_FIN|TH_RST)) == 0)) {
|
&& ((flags & (TH_SYN|TH_FIN|TH_RST)) == 0)) {
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet KeepAlive");
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet KeepAlive");
|
||||||
tcp_stats_s2d.pktKeepAlive++;
|
cnt_keep_alive++;
|
||||||
if(cli_host) cli_host->incKeepAliveSent(1);
|
|
||||||
if(srv_host) srv_host->incKeepAliveRcvd(1);
|
|
||||||
} else if(tcp_stats_s2d.last == seq_num) {
|
} else if(tcp_stats_s2d.last == seq_num) {
|
||||||
tcp_stats_s2d.pktRetr++;
|
cnt_retx++;
|
||||||
if(cli_host) cli_host->incRetxSent(1);
|
|
||||||
if(srv_host) srv_host->incRetxRcvd(1);
|
|
||||||
iface->incRetransmittedPkts(1);
|
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet retransmission");
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet retransmission");
|
||||||
} else if((tcp_stats_s2d.last > seq_num)
|
} else if((tcp_stats_s2d.last > seq_num)
|
||||||
&& (seq_num < tcp_stats_s2d.next)) {
|
&& (seq_num < tcp_stats_s2d.next)) {
|
||||||
tcp_stats_s2d.pktLost++;
|
cnt_lost++;
|
||||||
if(cli_host) cli_host->incLostSent(1);
|
|
||||||
if(srv_host) srv_host->incLostRcvd(1);
|
|
||||||
iface->incLostPkts(1);
|
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet lost [last: %u][act: %u]", tcp_stats_s2d.last, seq_num);
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet lost [last: %u][act: %u]", tcp_stats_s2d.last, seq_num);
|
||||||
} else {
|
} else {
|
||||||
tcp_stats_s2d.pktOOO++;
|
cnt_ooo++;
|
||||||
if(cli_host) cli_host->incOOOSent(1);
|
|
||||||
if(srv_host) srv_host->incOOORcvd(1);
|
|
||||||
iface->incOOOPkts(1);
|
|
||||||
|
|
||||||
update_last_seqnum = ((seq_num - 1) > tcp_stats_s2d.last) ? true : false;
|
update_last_seqnum = ((seq_num - 1) > tcp_stats_s2d.last) ? true : false;
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet OOO [last: %u][act: %u]", tcp_stats_s2d.last, seq_num);
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[src2dst] Packet OOO [last: %u][act: %u]", tcp_stats_s2d.last, seq_num);
|
||||||
}
|
}
|
||||||
|
|
@ -2756,38 +2776,30 @@ void Flow::updateTcpSeqNum(const struct bpf_timeval *when,
|
||||||
&& (payload_Len == 0 || payload_Len == 1)
|
&& (payload_Len == 0 || payload_Len == 1)
|
||||||
&& ((flags & (TH_SYN|TH_FIN|TH_RST)) == 0)) {
|
&& ((flags & (TH_SYN|TH_FIN|TH_RST)) == 0)) {
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet KeepAlive");
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet KeepAlive");
|
||||||
tcp_stats_d2s.pktKeepAlive++;
|
cnt_keep_alive++;
|
||||||
if(cli_host) cli_host->incKeepAliveRcvd(1);
|
|
||||||
if(srv_host) srv_host->incKeepAliveSent(1);
|
|
||||||
} else if(tcp_stats_d2s.last == seq_num) {
|
} else if(tcp_stats_d2s.last == seq_num) {
|
||||||
tcp_stats_d2s.pktRetr++;
|
cnt_retx++;
|
||||||
if(cli_host) cli_host->incRetxRcvd(1);
|
|
||||||
if(srv_host) srv_host->incRetxSent(1);
|
|
||||||
iface->incRetransmittedPkts(1);
|
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet retransmission");
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet retransmission");
|
||||||
// bytes
|
// bytes
|
||||||
} else if((tcp_stats_d2s.last > seq_num)
|
} else if((tcp_stats_d2s.last > seq_num)
|
||||||
&& (seq_num < tcp_stats_d2s.next)) {
|
&& (seq_num < tcp_stats_d2s.next)) {
|
||||||
tcp_stats_d2s.pktLost++;
|
cnt_lost++;
|
||||||
if(cli_host) cli_host->incLostRcvd(1);
|
|
||||||
if(srv_host) srv_host->incLostSent(1);
|
|
||||||
iface->incLostPkts(1);
|
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet lost [last: %u][act: %u]", tcp_stats_d2s.last, seq_num);
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet lost [last: %u][act: %u]", tcp_stats_d2s.last, seq_num);
|
||||||
} else {
|
} else {
|
||||||
tcp_stats_d2s.pktOOO++;
|
cnt_ooo++;
|
||||||
if(cli_host) cli_host->incOOORcvd(1);
|
|
||||||
if(srv_host) srv_host->incOOOSent(1);
|
|
||||||
iface->incOOOPkts(1);
|
|
||||||
update_last_seqnum = ((seq_num - 1) > tcp_stats_d2s.last) ? true : false;
|
update_last_seqnum = ((seq_num - 1) > tcp_stats_d2s.last) ? true : false;
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] [last: %u][next: %u]", tcp_stats_d2s.last, tcp_stats_d2s.next);
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] [last: %u][next: %u]", tcp_stats_d2s.last, tcp_stats_d2s.next);
|
||||||
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet OOO [last: %u][act: %u]", tcp_stats_d2s.last, seq_num);
|
if(debug) ntop->getTrace()->traceEvent(TRACE_WARNING, "[dst2src] Packet OOO [last: %u][act: %u]", tcp_stats_d2s.last, seq_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tcp_stats_d2s.next = next_seq_num;
|
tcp_stats_d2s.next = next_seq_num;
|
||||||
if(update_last_seqnum) tcp_stats_d2s.last = seq_num;
|
if(update_last_seqnum) tcp_stats_d2s.last = seq_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cnt_keep_alive || cnt_lost || cnt_ooo || cnt_retx)
|
||||||
|
incTcpBadStats(src2dst_direction, cnt_ooo, cnt_retx, cnt_lost, cnt_keep_alive);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* *************************************** */
|
/* *************************************** */
|
||||||
|
|
|
||||||
|
|
@ -1299,10 +1299,10 @@ void NetworkInterface::processFlow(ParsedFlow *zflow, bool zmq_flow) {
|
||||||
|
|
||||||
flow->incTcpBadStats(true,
|
flow->incTcpBadStats(true,
|
||||||
zflow->tcp.ooo_in_pkts, zflow->tcp.retr_in_pkts,
|
zflow->tcp.ooo_in_pkts, zflow->tcp.retr_in_pkts,
|
||||||
zflow->tcp.lost_in_pkts);
|
zflow->tcp.lost_in_pkts, 0 /* TODO: add keepalive */);
|
||||||
flow->incTcpBadStats(false,
|
flow->incTcpBadStats(false,
|
||||||
zflow->tcp.ooo_out_pkts, zflow->tcp.retr_out_pkts,
|
zflow->tcp.ooo_out_pkts, zflow->tcp.retr_out_pkts,
|
||||||
zflow->tcp.lost_out_pkts);
|
zflow->tcp.lost_out_pkts, 0 /* TODO: add keepalive */);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NTOPNG_PRO
|
#ifdef NTOPNG_PRO
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue