Date: Thu, 2 Jul 2009 14:22:15 GMT From: Andre Oppermann <andre@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 165543 for review Message-ID: <200907021422.n62EMF6N003336@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=165543 Change 165543 by andre@andre_flirtbox on 2009/07/02 14:21:57 Use TCPSTAT_INC/ADD macro to update tcp statistics. Move empty queue test up and remove chained if test in later tests. Affected files ... .. //depot/projects/tcp_reass/netinet/tcp_reass.c#26 edit Differences ... ==== //depot/projects/tcp_reass/netinet/tcp_reass.c#26 (text+ko) ==== @@ -295,8 +295,8 @@ */ if (th_seq != tp->rcv_nxt && tp->t_trqmcnt > (sbspace(&so->so_rcv) / 8 * 11)) { - tcpstat.tcps_reass_overflow++; - tcpstat.tcps_rcvmemdrop++; + TCPSTAT_INC(tcps_reass_overflow); + TCPSTAT_INC(tcps_rcvmemdrop); m_freem(m); *tlenp = 0; return (0); @@ -336,11 +336,15 @@ } else thflags &= ~TH_FIN; + /* Check if this is the first segment. */ + if (TAILQ_EMPTY(&tp->t_trq)) + goto insert; + /* Starting point for the following tests. */ tqe = TAILQ_LAST(&tp->t_trq, trq_head); /* Check if this segment directly attaches to the end. */ - if (tqe && tqe->trq_seq + tqe->trq_len == th_seq) { + if (tqe->trq_seq + tqe->trq_len == th_seq) { tqe->trq_len += *tlenp; tqe->trq_mcnt += mcnt; tp->t_trqmcnt += mcnt; @@ -357,18 +361,14 @@ LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s); } /* TCP statistics. */ - tcpstat.tcps_rcvoopack++; - tcpstat.tcps_rcvoobyte += *tlenp; - tcpstat.tcps_reass_tail++; + TCPSTAT_INC(tcps_rcvoopack); + TCPSTAT_ADD(tcps_rcvoobyte, *tlenp); + TCPSTAT_INC(tcps_reass_tail); return (0); } /* Check if beyond last block. */ - if (tqe && SEQ_LT(tqe->trq_seq + tqe->trq_len, th_seq)) - goto insert; - - /* Check if this is the first segment. */ - if (TAILQ_EMPTY(&tp->t_trq)) + if (SEQ_LT(tqe->trq_seq + tqe->trq_len, th_seq)) goto insert; /* Check if this is the missing segment. */ @@ -383,8 +383,8 @@ m_adj(m, -i); *tlenp -= i; /* TCP statistics. */ - tcpstat.tcps_rcvpartduppack++; - tcpstat.tcps_rcvpartdupbyte += i; + TCPSTAT_INC(tcps_rcvpartduppack); + TCPSTAT_ADD(tcps_rcvpartdupbyte, i); /* Update accounting. */ mcnt = m_storagesize(m); } @@ -399,9 +399,10 @@ } goto insert; /* No statistics, this segment is in line. */ } + + /* TCP statistics. */ TCPSTAT_INC(tcps_rcvoopack); TCPSTAT_ADD(tcps_rcvoobyte, *tlenp); - /* TCP statistics. */ /* See where it fits. */ TAILQ_FOREACH_SAFE(tqe, &tp->t_trq, trq_q, tqen) { @@ -415,10 +416,13 @@ /* Segment is already fully covered. */ if (SEQ_LEQ(tqe->trq_seq, th_seq) && SEQ_GEQ(tqe->trq_seq + tqe->trq_len, th_seq + *tlenp)) { - tcpstat.tcps_rcvduppack++; - tcpstat.tcps_rcvdupbyte += *tlenp; - tcpstat.tcps_reass_covered++; - /* XXXAO: What to SACK report when duplicate? */ + TCPSTAT_INC(tcps_rcvduppack); + TCPSTAT_ADD(tcps_rcvdupbyte, *tlenp); + TCPSTAT_INC(tcps_reass_covered); + /* + * XXXAO: What to SACK report when duplicate? + * See RFC2883: D-SACK (Duplicate SACK) + */ if (LIST_FIRST(&tp->t_trq_sack) != tqe) { LIST_REMOVE(tqe, trq_s); LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s); @@ -448,7 +452,7 @@ LIST_REMOVE(tqe, trq_s); LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s); } - tcpstat.tcps_reass_replace++; + TCPSTAT_INC(tcps_reass_replace); return (0); } @@ -463,8 +467,8 @@ m_adj(m, -i); *tlenp -= i; /* TCP statistics. */ - tcpstat.tcps_rcvpartduppack++; - tcpstat.tcps_rcvpartdupbyte += i; + TCPSTAT_INC(tcps_rcvpartduppack); + TCPSTAT_ADD(tcps_rcvpartdupbyte, i); /* Update accounting. */ mcnt = m_storagesize(m); } @@ -479,7 +483,7 @@ LIST_REMOVE(tqe, trq_s); LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s); } - tcpstat.tcps_reass_prepend++; + TCPSTAT_INC(tcps_reass_prepend); return (0); } @@ -492,8 +496,8 @@ m_adj(m, i); *tlenp -= i; /* TCP Statistics. */ - tcpstat.tcps_rcvpartduppack++; - tcpstat.tcps_rcvpartdupbyte += i; + TCPSTAT_INC(tcps_rcvpartduppack); + TCPSTAT_ADD(tcps_rcvpartdupbyte, i); } tqe->trq_len += *tlenp; tqe->trq_mcnt += mcnt; @@ -508,7 +512,7 @@ LIST_REMOVE(tqe, trq_s); LIST_INSERT_HEAD(&tp->t_trq_sack, tqe, trq_s); } - tcpstat.tcps_reass_append++; + TCPSTAT_INC(tcps_reass_append); return (0); } } @@ -525,12 +529,12 @@ } else { tqen = uma_zalloc(tcp_reass_zone, (M_NOWAIT|M_ZERO)); if (tqen == NULL) { - tcpstat.tcps_rcvmemdrop++; + TCPSTAT_INC(tcps_rcvmemdrop); m_freem(m); *tlenp = 0; return (0); } - tcpstat.tcps_reass_blocks++; + TCPSTAT_INC(tcps_reass_blocks); } tcp_reass_qsize++; if (tcp_reass_spacetime) { @@ -576,7 +580,7 @@ ("%s: queue empty at present", __func__)); KASSERT((TAILQ_FIRST(&tp->t_trq))->trq_seq == tp->rcv_nxt, ("%s: first block does not match rcv_nxt", __func__)); - tcpstat.tcps_reass_missingseg++; + TCPSTAT_INC(tcps_reass_missingseg); SOCKBUF_LOCK(&so->so_rcv); TAILQ_FOREACH_SAFE(tqe, &tp->t_trq, trq_q, tqen) { @@ -634,8 +638,8 @@ /* Appended block may reach beyond next block. */ while (SEQ_GEQ(tqe->trq_seq + tqe->trq_len, tqen->trq_seq + tqen->trq_len)) { /* TCP Statistics. */ - tcpstat.tcps_rcvpartdupbyte += tqen->trq_len; - tcpstat.tcps_reass_covered++; + TCPSTAT_ADD(tcps_rcvpartdupbyte, tqen->trq_len); + TCPSTAT_INC(tcps_reass_covered); tp->t_trqmcnt -= tqe->trq_mcnt; m_freem(tqen->trq_m); TAILQ_REMOVE(&tp->t_trq, tqen, trq_q); @@ -651,7 +655,7 @@ if ((i = SEQ_DELTA(tqe->trq_seq + tqe->trq_len, tqen->trq_seq))) { m_adj(tqen->trq_m, i); tqen->trq_len -= i; - tcpstat.tcps_rcvpartdupbyte += i; /* Statistics */ + TCPSTAT_ADD(tcps_rcvpartdupbyte, i); /* Statistics */ /* Dispose of empty mbufs. */ if (tcp_reass_spacetime) { tqen->trq_m = m_trimhead(tqen->trq_m); @@ -670,7 +674,7 @@ LIST_REMOVE(tqen, trq_s); uma_zfree(tcp_reass_zone, tqen); tcp_reass_qsize--; - tcpstat.tcps_reass_merge++; + TCPSTAT_INC(tcps_reass_merge); } /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907021422.n62EMF6N003336>