PERFORCE change 166480 for review
Andre Oppermann
andre at FreeBSD.org
Thu Jul 23 21:43:21 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166480
Change 166480 by andre at andre_t61 on 2009/07/23 21:42:30
Add statistics.
Update TODO list.
Affected files ...
.. //depot/projects/tcp_reass/netinet/tcp_reass.c#45 edit
.. //depot/projects/tcp_reass/netinet/tcp_var.h#22 edit
Differences ...
==== //depot/projects/tcp_reass/netinet/tcp_reass.c#45 (text+ko) ====
@@ -62,10 +62,10 @@
* optional parts marked as "SHOULD".
*
* TODO:
- * - Improve comments and RFC references.
+ * - Improve comments and annotate RFC references.
* - Resizing of tcp_reass_globalmaxblocks through sysctl.
- * - TCP statistics.
* - Style improvements.
+ * - Lots of testing.
*/
#include "opt_inet.h"
@@ -379,6 +379,9 @@
else
thflags &= ~TH_FIN;
+ TCPSTAT_INC(tcps_rcvoopack);
+ TCPSTAT_ADD(tcps_rcvoobyte, len);
+
/*
* Get rid of packet header and mtags.
* Trim empty mbufs from head of chain.
@@ -409,19 +412,29 @@
tcp_reass_sacktrack(tp, trb);
tp->rcv_reass_dsack.start = trbs.trb_seqs;
tp->rcv_reass_dsack.end = trbs.trb_seqe;
+ TCPSTAT_INC(tcps_rcvduppack);
+ TCPSTAT_ADD(tcps_rcvdupbyte, len);
goto done;
}
+
tp->rcv_reass_size += SEQ_DELTA(trbs.trb_seqs, trbs.trb_seqe);
/* Merge in the new segment. */
(void)tcp_reass_merge(trb, &trbs);
tcp_reass_sacktrack(tp, trb);
+ if ((len = SEQ_DELTA(trbs.trb_seqs, trbs.trb_seqe)) > 0) {
+ tp->rcv_reass_size -= len;
+ TCPSTAT_INC(tcps_rcvpartduppack);
+ TCPSTAT_ADD(tcps_rcvpartdupbyte, len);
+ }
+
/* Merge in previous block(s) if there is overlap. */
while ((trbn = RB_PREV(tcp_ra, &tp->rcv_reass, trb)) != NULL &&
SEQ_LEQ(trb->trb_seqs, trbn->trb_seqe)) {
trbn = tcp_reass_merge(trb, trbn);
tcp_reass_free(tp, trbn);
+ TCPSTAT_INC(tcps_reass_merge);
}
/* Merge in next block(s) if there is overlap. */
@@ -429,6 +442,7 @@
SEQ_GEQ(trb->trb_seqe, trbn->trb_seqs)) {
trbn = tcp_reass_merge(trb, trbn);
tcp_reass_free(tp, trbn);
+ TCPSTAT_INC(tcps_reass_merge);
}
} else if (tp->rcv_nxt == th_seq) {
@@ -442,8 +456,10 @@
KASSERT(trbn == NULL, ("%s: RB_INSERT failed", __func__));
LIST_INSERT_HEAD(&tp->rcv_reass_sack, trb, trb_sack);
tp->rcv_reass_blocks++;
+ TCPSTAT_INC(tcps_reass_blocks);
} else {
/* Memory allocation failure. */
+ TCPSTAT_INC(tcps_rcvmemdrop);
goto done;
}
KASSERT(tcp_reass_verify(tp, 1),
@@ -462,6 +478,7 @@
("%s: queue empty at present", __func__));
KASSERT(trb->trb_seqs == tp->rcv_nxt,
("%s: first block does not match rcv_nxt", __func__));
+
TCPSTAT_INC(tcps_reass_missingseg);
SOCKBUF_LOCK(&so->so_rcv);
@@ -544,6 +561,8 @@
trb->trb_m = trbn->trb_m;
trb->trb_mt = trbn->trb_mt;
+ TCPSTAT_INC(tcps_reass_replace);
+
} else if (SEQ_LT(trbn->trb_seqs, trb->trb_seqs)) {
if ((i = SEQ_DELTA(trb->trb_seqs, trbn->trb_seqe)) > 0)
==== //depot/projects/tcp_reass/netinet/tcp_var.h#22 (text+ko) ====
@@ -444,9 +444,6 @@
u_long tcps_reass_overflow; /* reassembly queue overflows */
u_long tcps_reass_tail; /* packet appends to tail block */
u_long tcps_reass_merge; /* reassembly block merges */
- u_long tcps_reass_prepend; /* packet prepends block */
- u_long tcps_reass_append; /* packet appends block */
- u_long tcps_reass_covered; /* block covered and removed */
u_long tcps_reass_replace; /* block replaced */
u_long tcps_reass_flush; /* queue flushes due to timeout */
More information about the p4-projects
mailing list