PERFORCE change 166271 for review
Andre Oppermann
andre at FreeBSD.org
Sun Jul 19 16:26:28 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166271
Change 166271 by andre at andre_flirtbox on 2009/07/19 16:25:31
Fixup typos. Compile.
Affected files ...
.. //depot/projects/tcp_reass/netinet/tcp_input.c#13 edit
.. //depot/projects/tcp_reass/netinet/tcp_output.c#15 edit
.. //depot/projects/tcp_reass/netinet/tcp_reass.c#35 edit
.. //depot/projects/tcp_reass/netinet/tcp_subr.c#12 edit
.. //depot/projects/tcp_reass/netinet/tcp_var.h#19 edit
Differences ...
==== //depot/projects/tcp_reass/netinet/tcp_input.c#13 (text+ko) ====
@@ -1245,7 +1245,7 @@
tp->snd_nxt == tp->snd_max &&
tiwin && tiwin == tp->snd_wnd &&
((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) &&
- TAILQ_EMPTY(&tp->t_trq) &&
+ RB_EMPTY(&tp->rcv_reass) &&
((to.to_flags & TOF_TS) == 0 ||
TSTMP_GEQ(to.to_tsval, tp->ts_recent)) ) {
@@ -2570,7 +2570,7 @@
* fast retransmit can work).
*/
if (th->th_seq == tp->rcv_nxt &&
- TAILQ_EMPTY(&tp->t_trq) &&
+ RB_EMPTY(&tp->rcv_reass) &&
TCPS_HAVEESTABLISHED(tp->t_state)) {
if (DELAY_ACK(tp))
tp->t_flags |= TF_DELACK;
==== //depot/projects/tcp_reass/netinet/tcp_output.c#15 (text+ko) ====
@@ -479,7 +479,7 @@
if (len > tp->t_maxseg) {
if ((tp->t_flags & TF_TSO) && V_tcp_do_tso &&
((tp->t_flags & TF_SIGNATURE) == 0) &&
- TAILQ_EMPTY(&tp->t_trq) && sack_rxmit == 0 &&
+ RB_EMPTY(&tp->rcv_reass) && sack_rxmit == 0 &&
tp->t_inpcb->inp_options == NULL &&
tp->t_inpcb->in6p_options == NULL
#ifdef IPSEC
@@ -686,7 +686,7 @@
to.to_flags |= TOF_SACKPERM;
else if (TCPS_HAVEESTABLISHED(tp->t_state) &&
(tp->t_flags & TF_SACK_PERMIT) &&
- !TAILQ_EMPTY(&tp->t_trq)) {
+ !RB_EMPTY(&tp->rcv_reass)) {
to.to_flags |= TOF_SACK;
to.to_sacks = (u_char *)tp;
}
==== //depot/projects/tcp_reass/netinet/tcp_reass.c#35 (text+ko) ====
@@ -127,8 +127,8 @@
&tcp_reass_spacetime, 0,
"Reassembly Queue strategy of space vs. time efficiency");
-static struct tcp_reass_block
- tcp_reass_merge(struct tcpcb *, struct tcp_reass_block *, struct tcp_reass_block *);
+static struct tcp_reass_block *
+ tcp_reass_merge(struct tcp_reass_block *, struct tcp_reass_block *);
/* Trim empty mbufs from head of chain. */
static struct mbuf *
@@ -144,6 +144,7 @@
return (m);
}
+#if 0
static u_int
m_storagesize(struct mbuf *m)
{
@@ -154,6 +155,7 @@
m->m_ext.ext_size + MSIZE : MSIZE;
return (mcnt);
}
+#endif
/*
* Adjust TCP reassembly zone limits when the nmbclusters zone changes.
@@ -175,7 +177,7 @@
TUNABLE_INT_FETCH("net.inet.tcp.reass.maxblocks",
&tcp_reass_maxblocks);
- tcp_reass_zone = uma_zcreate("tcpreass", sizeof(struct trb),
+ tcp_reass_zone = uma_zcreate("tcpreass", sizeof(struct tcp_reass_block),
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
uma_zone_set_max(tcp_reass_zone, tcp_reass_maxblocks);
EVENTHANDLER_REGISTER(nmbclusters_change,
@@ -208,7 +210,7 @@
struct mbuf *m;
struct tcp_reass_block *trb, *trbn;
- RB_FOREACH_SAFE(trb, tcp_rb, &tp->rcv_reass, trbn) {
+ RB_FOREACH_SAFE(trb, tcp_ra, &tp->rcv_reass, trbn) {
KASSERT(SEQ_LT(trb->trb_seqs, trb->trb_seqe),
("%s: trb_seqs >= trb_seqe", __func__));
KASSERT(SEQ_GT(trb->trb_seqs, tp->rcv_nxt),
@@ -217,12 +219,12 @@
("%s: trb_m == NULL", __func__));
KASSERT(trb->trb_mt != NULL,
("%s: trb_mt == NULL", __func__));
- size = SEQ_DELTA(trb->trb_seqs, tsb->trb_seqe);
+ size = SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
KASSERT(size == m_length(trb->trb_m, &m),
("%s: seq# size != actual mbuf size", __func__));
KASSERT(trb->trb_mt == m,
("%s: trb_mt is not last mbuf", __func__));
- KASSERT(tsbn == NULL || SEQ_LT(tsb->trb_seqe, tsbn->trb_seqs),
+ KASSERT(trbn == NULL || SEQ_LT(trb->trb_seqe, trbn->trb_seqs),
("%s: overlaps into next block", __func__));
total += size;
i++;
@@ -230,7 +232,7 @@
KASSERT(tp->rcv_reass_size == total,
("%s: total not correct", __func__));
- LIST_FOREACH(tcp_reass_block, &tp->rcv_reass_sack, trb_sack) {
+ LIST_FOREACH(trb, &tp->rcv_reass_sack, trb_sack) {
i--;
}
KASSERT(i == 0,
@@ -262,7 +264,7 @@
KASSERT(tcp_reass_verify(tp),
("%s: reassembly queue inconsistent", __func__));
- RB_FOREACH_SAFE(trb, tcp_rb, &tp->rcv_reass, trbn) {
+ RB_FOREACH_SAFE(trb, tcp_ra, &tp->rcv_reass, trbn) {
tcp_reass_free(tp, trb);
}
KASSERT(tp->rcv_reass_size == 0, ("%s: snd_sacked not zero", __func__));
@@ -287,7 +289,7 @@
int
tcp_reass(struct tcpcb *tp, struct tcphdr *th, int *tlenp, struct mbuf *m)
{
- int i, thflags = 0;
+ int thflags = 0;
tcp_seq th_seq;
struct socket *so = tp->t_inpcb->inp_socket;
struct tcp_reass_block *trb, *trbn;
@@ -302,7 +304,7 @@
*/
if (th == NULL) {
if (!TCPS_HAVEESTABLISHED(tp->t_state) ||
- RB_EMPTY(&tp->t_trq) ||
+ RB_EMPTY(&tp->rcv_reass) ||
((trb = RB_MIN(tcp_ra, &tp->rcv_reass)) &&
trb->trb_seqs != tp->rcv_nxt))
return (0);
@@ -388,10 +390,10 @@
tcp_timer_activate(tp, TT_REASS, 0);
return (thflags);
}
- } else if (*tlenp = 0) {
+ } else if (*tlenp == 0) {
m_freem(m);
return (0);
- else
+ } else
thflags &= ~TH_FIN;
/* Get rid of packet header and mtags. */
@@ -413,7 +415,7 @@
* Return match that has at least partial overlap to either side or
* insert a new reassembly block.
*/
- if ((trb = RB_FIND(tcp_rb, &tp->rcv_reass, &trbs)) != NULL) {
+ if ((trb = RB_FIND(tcp_ra, &tp->rcv_reass, &trbs)) != NULL) {
/* Within an already known block. */
if (SEQ_GEQ(trbs.trb_seqs, trb->trb_seqs) &&
SEQ_LEQ(trbs.trb_seqe, trb->trb_seqe)) {
@@ -430,7 +432,7 @@
tcp_reass_sacktrack(tp, trb);
/* Merge in next blocks if there is overlap. */
- while ((trbn = RB_NEXT(tcp_rb, &tp->rcv_reass, trb)) != NULL &&
+ while ((trbn = RB_NEXT(tcp_ra, &tp->rcv_reass, trb)) != NULL &&
SEQ_GEQ(trbn->trb_seqs, trb->trb_seqe)) {
trbn = tcp_reass_merge(trb, trbn);
tcp_reass_free(tp, trbn);
@@ -443,9 +445,9 @@
tcp_reass_sacktrack(tp, trb);
/* Merge in previous blocks if there is overlap. */
- while ((trbn = RB_PREV(tcp_rb, &tp->rcv_reass, trb)) != NULL &&
+ while ((trbn = RB_PREV(tcp_ra, &tp->rcv_reass, trb)) != NULL &&
SEQ_GEQ(trbn->trb_seqe, trb->trb_seqs)) {
- trbn = tcp_reass_merge(tp, trb, trbn);
+ trbn = tcp_reass_merge(trb, trbn);
tcp_reass_free(tp, trbn);
}
}
@@ -454,12 +456,12 @@
trb->trb_seqe = trbs.trb_seqe;
trb->trb_m = trbs.trb_m;
trb->trb_mt = trbs.trb_mt;
- trbn = RB_INSERT(tcp_rb, &tp->rcv_reass, trb);
+ trbn = RB_INSERT(tcp_ra, &tp->rcv_reass, trb);
KASSERT(trbn == NULL, ("%s: RB_INSERT failed", __func__));
tcp_reass_sacktrack(tp, trb);
tp->rcv_reass_size += SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
} else if (tp->rcv_nxt == th_seq) {
- trbn = RB_INSERT(tcp_rb, &tp->rcv_reass, &trbs);
+ trbn = RB_INSERT(tcp_ra, &tp->rcv_reass, &trbs);
KASSERT(trbn == NULL, ("%s: RB_INSERT failed", __func__));
}
if (tp->rcv_nxt == th_seq)
@@ -485,7 +487,7 @@
trb = RB_MIN(tcp_ra, &tp->rcv_reass);
if (!(so->so_rcv.sb_state & SBS_CANTRCVMORE)) {
sbappendstream_locked(&so->so_rcv, trb->trb_m);
- tp->rcv_nxt += tqe->trq_len;
+ tp->rcv_nxt += SEQ_DELTA(trb->trb_seqs, trb->trb_seqe);
trb->trb_m = NULL;
trb->trb_mt = NULL;
}
@@ -519,7 +521,7 @@
* Always merge trbn into trb!
*/
static struct tcp_reass_block *
-tcp_reass_merge(struct tcpcb *tp, struct tcp_reass_block *trb, struct tcp_reass_block *trbn)
+tcp_reass_merge(struct tcp_reass_block *trb, struct tcp_reass_block *trbn)
{
int i;
@@ -538,7 +540,7 @@
trb->trb_mt->m_next = trbn->trb_m;
trb->trb_mt = trbn->trb_mt;
} else if (SEQ_LEQ(trb->trb_seqs, trbn->trb_seqe)) {
- if (SEQ_LEQ(trb->trb_seqs, trbn->trb_seqs)
+ if (SEQ_LEQ(trb->trb_seqs, trbn->trb_seqs))
return (trbn);
if ((i = SEQ_DELTA(trb->trb_seqs, trbn->trb_seqe)) > 0) {
m_adj(trb->trb_m, i);
@@ -564,27 +566,27 @@
int
tcp_reass_sack(struct tcpcb *tp, u_char *optp, int numsacks)
{
- struct trq *tqe;
+ struct tcp_reass_block *trb;
tcp_seq sack_seq;
int nsacks = 0;
INP_WLOCK_ASSERT(tp->t_inpcb);
KASSERT(numsacks > 0,
("%s: zero sack blocks to add", __func__));
- KASSERT(!LIST_EMPTY(&tp->t_trq_sack),
+ KASSERT(!LIST_EMPTY(&tp->rcv_reass_sack),
("%s: sack list empty", __func__));
/*
* The most recent block must appear first. RFC2018, Section 4.
* Add the other blocks in most recent created or updated order.
*/
- LIST_FOREACH(tqe, &tp->t_trq_sack, trq_s) {
+ LIST_FOREACH(trb, &tp->rcv_reass_sack, trb_sack) {
if (numsacks < 1)
break;
- sack_seq = htonl(tqe->trq_seq);
+ sack_seq = htonl(trb->trb_seqs);
bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
optp += sizeof(sack_seq);
- sack_seq = htonl(tqe->trq_seq + tqe->trq_len);
+ sack_seq = htonl(trb->trb_seqe);
bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
optp += sizeof(sack_seq);
numsacks--;
@@ -605,4 +607,4 @@
trb->trb_seqs, trb->trb_seqe);
}
}
-#endif+#endif
==== //depot/projects/tcp_reass/netinet/tcp_subr.c#12 (text+ko) ====
@@ -749,8 +749,8 @@
tp->t_flags = (TF_REQ_SCALE|TF_REQ_TSTMP);
if (V_tcp_do_sack)
tp->t_flags |= TF_SACK_PERMIT;
- TAILQ_INIT(&tp->t_trq);
- LIST_INIT(&tp->t_trq_sack);
+ RB_INIT(&tp->rcv_reass);
+ LIST_INIT(&tp->rcv_reass_sack);
TAILQ_INIT(&tp->snd_holes);
tp->t_inpcb = inp; /* XXX */
/*
@@ -883,7 +883,7 @@
}
/* Free the reassembly queue and other data structures. */
- tcp_reass_qfree(tp);
+ tcp_reass_flush(tp);
tcp_free_sackholes(tp);
/* Disconnect offload device, if any. */
@@ -958,7 +958,7 @@
continue;
INP_WLOCK(inpb);
if ((tcpb = intotcpcb(inpb)) != NULL)
- tcp_reass_qfree(tcpb);
+ tcp_reass_flush(tcpb);
INP_WUNLOCK(inpb);
}
INP_INFO_RUNLOCK(&V_tcbinfo);
==== //depot/projects/tcp_reass/netinet/tcp_var.h#19 (text+ko) ====
@@ -34,6 +34,7 @@
#define _NETINET_TCP_VAR_H_
#include <netinet/tcp.h>
+#include <sys/tree.h>
#ifdef _KERNEL
#include <net/vnet.h>
@@ -105,7 +106,7 @@
*/
struct tcpcb {
RB_HEAD(tcp_ra, tcp_reass_block) rcv_reass; /* segment reassembly queue */
- LIST_HEAD(trq_shead, trq) rcv_reass_sack; /* last additions to reass queue */
+ LIST_HEAD(tcp_ras, tcp_reass_block) rcv_reass_sack; /* last additions to reass queue */
int rcv_reass_size; /* segment reassembly memory usage */
int t_dupacks; /* consecutive dup acks recd */
More information about the p4-projects
mailing list