PERFORCE change 166462 for review
Andre Oppermann
andre at FreeBSD.org
Thu Jul 23 17:07:19 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166462
Change 166462 by andre at andre_flirtbox on 2009/07/23 17:07:03
Simplify D-SACK handling tcp_reass_sack() and remove
code duplication.
Affected files ...
.. //depot/projects/tcp_reass/netinet/tcp_reass.c#41 edit
Differences ...
==== //depot/projects/tcp_reass/netinet/tcp_reass.c#41 (text+ko) ====
@@ -594,7 +594,7 @@
{
int nsacks = 0;
tcp_seq sack_seq;
- struct tcp_reass_block *trb;
+ struct tcp_reass_block *trb, trbs;
INP_WLOCK_ASSERT(tp->t_inpcb);
KASSERT(numsacks > 0,
@@ -602,18 +602,12 @@
KASSERT(!LIST_EMPTY(&tp->rcv_reass_sack),
("%s: sack list empty", __func__));
- /* DSACK */
- if (tp->rcv_reass_dsack.start == tp->rcv_reass_dsack.end) {
- sack_seq = htonl(tp->rcv_reass_dsack.start);
- bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
- optp += sizeof(sack_seq);
- sack_seq = htonl(tp->rcv_reass_dsack.end);
- bcopy((u_char *)&sack_seq, optp, sizeof(sack_seq));
- optp += sizeof(sack_seq);
- tp->rcv_reass_dsack.start = 0;
- tp->rcv_reass_dsack.end = 0;
- numsacks--;
- nsacks++;
+ /* Create D-SACK block and temporarily insert it. */
+ if (tp->rcv_reass_dsack.start != tp->rcv_reass_dsack.end) {
+ bzero(&trbs, sizeof(trbs));
+ trbs.trb_seqs = htonl(tp->rcv_reass_dsack.start);
+ trbs.trb_seqe = htonl(tp->rcv_reass_dsack.end);
+ LIST_INSERT_HEAD(&tp->rcv_reass_sack, &trbs, trb_sack);
}
/*
@@ -634,6 +628,13 @@
nsacks++;
}
+ /* Remove D-SACK block again. */
+ if (LIST_FIRST(&tp->rcv_reass_sack) == &trbs) {
+ LIST_REMOVE(&trbs, trb_sack);
+ tp->rcv_reass_dsack.start = 0;
+ tp->rcv_reass_dsack.end = 0;
+ }
+
return (nsacks);
}
More information about the p4-projects
mailing list