From: "David S. Miller" <davem@dm.cobaltmicro.com>
To: mrj@i2k.com
Cc: linux-kernel@vger.rutgers.edu
Subject: Re: Very poor TCP/SACK performance
Date: Tue, 8 Sep 1998 18:14:54 -0700 [thread overview]
Message-ID: <199809090114.SAA05738@dm.cobaltmicro.com> (raw)
In-Reply-To: <Pine.LNX.4.02.9809081543110.334-100000@jeffd.i2k.net> (message from Jeff DeFouw on Tue, 8 Sep 1998 17:10:10 -0400 (EDT))
Date: Tue, 8 Sep 1998 17:10:10 -0400 (EDT)
From: Jeff DeFouw <mrj@i2k.com>
On Tue, 8 Sep 1998, David S. Miller wrote:
> But if you provide more dumps to help me debug this problem could
> you please rebuild tcpdump with the patch I have appended at the end?
> The stock tcpdump does not output SACK information from TCP packets
> properly without the patch. The stock tcpdump uses the pre-RFC format
> of the SACKS which is nothing like real modern SACKs in use today :-)
Did you forget to append the patch, or is there somewhere I can get it?
Sorry, here it is:
--- tcpdump-3.3/tcpdump-3.3/print-tcp.c.orig Tue Dec 10 23:26:08 1996
+++ tcpdump-3.3/tcpdump-3.3/print-tcp.c Thu Mar 19 23:46:33 1998
@@ -103,8 +103,8 @@
register int hlen;
register char ch;
u_short sport, dport, win, urp;
- u_int32_t seq, ack;
-
+ u_int32_t seq, ack,thseq,thack;
+ int threv;
tp = (struct tcphdr *)bp;
ip = (struct ip *)bp2;
ch = '\0';
@@ -162,7 +162,7 @@
tha.port = dport << 16 | sport;
rev = 1;
}
-
+ threv = rev;
for (th = &tcp_seq_hash[tha.port % TSEQ_HASHSIZE];
th->nxt; th = th->nxt)
if (!memcmp((char *)&tha, (char *)&th->addr,
@@ -183,6 +183,10 @@
else
th->seq = seq, th->ack = ack - 1;
} else {
+
+ thseq = th->seq;
+ thack = th->ack;
+
if (rev)
seq -= th->ack, ack -= th->seq;
else
@@ -263,18 +267,32 @@
break;
case TCPOPT_SACK:
- (void)printf("sack");
- datalen = len - 2;
- for (i = 0; i < datalen; i += 4) {
- LENCHECK(i + 4);
- /* block-size@relative-origin */
- (void)printf(" %u@%u",
- EXTRACT_16BITS(cp + i + 2),
- EXTRACT_16BITS(cp + i));
+ {
+ u_int32_t s, e;
+
+ datalen = len - 2;
+ if (datalen % 8 != 0) {
+ (void)printf(" malformed sack ");
+ } else {
+ (void)printf(" sack %d ", datalen / 8);
+ for (i = 0; i < datalen; i += 8) {
+ LENCHECK(i + 4);
+ s = EXTRACT_32BITS(cp + i);
+ LENCHECK(i + 8);
+ e = EXTRACT_32BITS(cp + i + 4);
+ if (threv) {
+ s -= thseq;
+ e -= thseq;
+ } else {
+ s -= thack;
+ e -= thack;
+ }
+ (void)printf("{%u:%u}", s, e);
}
- if (datalen % 4)
- (void)printf("[len %d]", len);
- break;
+ (void)printf(" ");
+ }
+ break;
+ }
case TCPOPT_ECHO:
(void)printf("echo");
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/faq.html
next parent reply other threads:[~1998-09-09 4:11 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <Pine.LNX.4.02.9809081543110.334-100000@jeffd.i2k.net>
1998-09-09 1:14 ` David S. Miller [this message]
[not found] <Pine.LNX.4.02.9809062347430.3952-100000@jeffd.i2k.net>
[not found] ` <19980908232117.A859@math.fu-berlin.de>
1998-09-09 22:33 ` Very poor TCP/SACK performance Chris Wedgwood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=199809090114.SAA05738@dm.cobaltmicro.com \
--to=davem@dm.cobaltmicro.com \
--cc=linux-kernel@vger.rutgers.edu \
--cc=mrj@i2k.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox