From d8d83f590bb9836205f71a596b2868ffb6d486f4 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Wed, 4 Apr 2012 15:27:43 -0500 Subject: [PATCH] Fix handling of IPv6 atomic fragments. The FragReassembler expire_timer was left uninitialized until after the first fragment is added, but since the atomic fragment is also the last, the reassembler thought expire_timer needed to be deleted. This fix just initializes expire_timer before the first fragment is added. --- src/Frag.cc | 4 ++-- .../btest/Baseline/core.ipv6-atomic-frag/output | 4 ++++ testing/btest/Traces/ipv6-http-atomic-frag.trace | Bin 0 -> 4040 bytes testing/btest/core/ipv6-atomic-frag.test | 7 +++++++ 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 testing/btest/Baseline/core.ipv6-atomic-frag/output create mode 100644 testing/btest/Traces/ipv6-http-atomic-frag.trace create mode 100644 testing/btest/core/ipv6-atomic-frag.test diff --git a/src/Frag.cc b/src/Frag.cc index 9bd16a71c9..04298e14ad 100644 --- a/src/Frag.cc +++ b/src/Frag.cc @@ -52,8 +52,6 @@ FragReassembler::FragReassembler(NetSessions* arg_s, frag_size = 0; // flag meaning "not known" next_proto = ip->NextProto(); - AddFragment(t, ip, pkt); - if ( frag_timeout != 0.0 ) { expire_timer = new FragTimer(this, t + frag_timeout); @@ -61,6 +59,8 @@ FragReassembler::FragReassembler(NetSessions* arg_s, } else expire_timer = 0; + + AddFragment(t, ip, pkt); } FragReassembler::~FragReassembler() diff --git a/testing/btest/Baseline/core.ipv6-atomic-frag/output b/testing/btest/Baseline/core.ipv6-atomic-frag/output new file mode 100644 index 0000000000..4a628a4bdc --- /dev/null +++ b/testing/btest/Baseline/core.ipv6-atomic-frag/output @@ -0,0 +1,4 @@ +[orig_h=2001:db8:1::2, orig_p=36951/tcp, resp_h=2001:db8:1::1, resp_p=80/tcp] +[orig_h=2001:db8:1::2, orig_p=59694/tcp, resp_h=2001:db8:1::1, resp_p=80/tcp] +[orig_h=2001:db8:1::2, orig_p=27393/tcp, resp_h=2001:db8:1::1, resp_p=80/tcp] +[orig_h=2001:db8:1::2, orig_p=45805/tcp, resp_h=2001:db8:1::1, resp_p=80/tcp] diff --git a/testing/btest/Traces/ipv6-http-atomic-frag.trace b/testing/btest/Traces/ipv6-http-atomic-frag.trace new file mode 100644 index 0000000000000000000000000000000000000000..d5d9db276cc668c51dc6289a25628db8fd3786cd GIT binary patch literal 4040 zcmchZUr19?9LIn6y3M&%wA>nKvZ4pYoSBrN!_>$iOmAu~(A3Fhn{Gz9C|_dzH3&kX z2#Ub$Ee&B$MT~+B!=3_PLL{>%B{S`%ddPmia}?HXjjemv;NZEtXTQ(ye1E_5^-RAE zJ`h0z8=ucw00AFbhy3;Dx{{$8=QJS0e7m^&5w0|7uFZDPHJFmsal*)v9+>24lu)t9)FYV!SiXM(&{xl*elohi=M$ErW$}k0* zCwb&ngC0gOD2)h_y>Ui1n*uEh05-SZ=dCcL*xW9M6aS{z{2ss8RZ;D5ZnqWjIle98 zuW{CS+S$+6xr^5q;e=N37r2rIBrV*ig#(kN5uu(1ao3ZpZMJ}ZH^AXTO_righto>H zGy?(eqC~2Q?_=U;qWHaB{F^m;bz8Fy8^=eDQ@hLwm#!v&&?{vkVTlulkf4e>y{Jw* zYfT@(Nz`3?N*h(3T`?S7>S}-mD@dM;{b-*6ba35WoM1$PQsY^${;b)v38U-Cc=Bhs z@lgJ+Z>gNW4oRt0-Ti1sMA$K*jd~Q~R)`buD6G!@aTEx+4}nUH%>+wD!O-DMfvU57 zD~lLesSkxkPOuM=7P+rf(!$BKKwGHF;ac2C(y80{Mr<4>HBRY$PROfF0KrAJPONp5|r9PkMO<2-GI^O z$rf7BEa^T%eG|$|S2zE8BsEfXyG=a*7uD%eZ6R)jI00>8=a-1K@D_nei_HXUM8Q_5 z*nI0Vtpe^)SxfbUysN6U!*f^uqIG%A%2!#?r7$aNo zJm!QcB&ed!7^<_%I;9Yx4Ug6MCr#92RS<(MkP!d`mq5y%?0!#kx-I;`UL?YEBq+6o z;L_Lp<7F6qj%?xKBDV#KUYi&Fwh(vzb4V(u>IS#){Dd dl@^-`R*r%#Q?Z|2;ak~uLiueWEOLTv;TKT4;Youtput +# @TEST-EXEC: btest-diff output + +event new_connection(c: connection) + { + print c$id; + }