diff -urN linux-2.4.33-wintrk4/include/linux/netfilter_ipv4/ip_conntrack_tcp.h linux-2.4.33-wintrk5/include/linux/netfilter_ipv4/ip_conntrack_tcp.h --- linux-2.4.33-wintrk4/include/linux/netfilter_ipv4/ip_conntrack_tcp.h Sun Oct 22 13:16:12 2006 +++ linux-2.4.33-wintrk5/include/linux/netfilter_ipv4/ip_conntrack_tcp.h Sun Oct 22 13:14:23 2006 @@ -44,7 +44,9 @@ u_int8_t retrans; /* Number of retransmitted packets */ u_int8_t last_index; /* Index of the last packet */ u_int32_t last_seq; /* Last sequence number seen in dir */ + u_int32_t last_ack; /* Last sequence number seen in opposite dir */ u_int32_t last_end; /* Last seq + len */ + u_int32_t last_win; /* Last window advertisement seen in dir */ }; #endif /* _IP_CONNTRACK_TCP_H */ diff -urN linux-2.4.33-wintrk4/net/ipv4/netfilter/ip_conntrack_proto_tcp.c linux-2.4.33-wintrk5/net/ipv4/netfilter/ip_conntrack_proto_tcp.c --- linux-2.4.33-wintrk4/net/ipv4/netfilter/ip_conntrack_proto_tcp.c Sun Oct 22 13:16:12 2006 +++ linux-2.4.33-wintrk5/net/ipv4/netfilter/ip_conntrack_proto_tcp.c Sun Oct 22 13:13:07 2006 @@ -666,12 +666,16 @@ if (index == TCP_ACK_SET) { if (state->last_dir == dir && state->last_seq == seq - && state->last_end == end) + && state->last_ack == ack + && state->last_end == end + && state->last_win == win) state->retrans++; else { state->last_dir = dir; state->last_seq = seq; + state->last_ack = ack; state->last_end = end; + state->last_win = win; state->retrans = 0; } }