Hi,
recently I have noticed a problem with re-assembly of some of my
testing data streams. Investigating I have found they were all created
with the text2pcap command. And the problem was only there when I had
selected "tcp/use relative sequence numbers". The root-cause of the
problem appeared to be the fact that a valid sequence number (0) is
used to indicate the base sequence number is not initialized. And
text2pcap actually uses that same sequence number.
The attached patch uses a different criterion to initialize the
base sequence number, it uses the fact that the "unacked list" starts
out empty. My pseudo-caputes are handled correctly now, but they
only contain data flow in one direction, and no packets in the other
direction.....
Please apply if you agree this is a better criterion to initialize
the base sequence number.
Thanks.
--
Regards,
---------------------------------------------------------------- -o)
Matthijs Melchior Maarssen /\\
mmelchior@xxxxxxxxx Netherlands _\_v
---------------------------------------------------------------- ----
--- packet-tcp.c-ORG 2003-09-09 03:22:23.000000000 +0200
+++ packet-tcp.c 2003-10-01 00:15:21.000000000 +0200
@@ -492,23 +492,14 @@
ual1=tcpd->ual1;
ual2=tcpd->ual2;
tnp=&tcpd->pdu_seq2;
- base_seq=tcpd->base_seq1;
- base_ack=tcpd->base_seq2;
+ base_seq = (tcp_relative_seq && (ual1 == 0)) ? seq : tcpd->base_seq1;
+ base_ack = (tcp_relative_seq && (ual2 == 0)) ? ack : tcpd->base_seq2;
} else {
ual1=tcpd->ual2;
ual2=tcpd->ual1;
tnp=&tcpd->pdu_seq1;
- base_seq=tcpd->base_seq2;
- base_ack=tcpd->base_seq1;
- }
-
- if(tcp_relative_seq){
- if(base_seq==0){
- base_seq=seq;
- }
- if(base_ack==0){
- base_ack=ack;
- }
+ base_seq = (tcp_relative_seq && (ual1 == 0)) ? seq : tcpd->base_seq2;
+ base_ack = (tcp_relative_seq && (ual2 == 0)) ? ack : tcpd->base_seq1;
}
/* To handle FIN, just add 1 to the length.