defrag: use IP ID in hash

This patch fixes the collision issue observed on an intensive network
trafic. When there is fragmentation it is the case for all data
exchanged between two hosts. Thus using a hash func only involving
IP addresses (and protocol) was leading to a collision for all
exchanges between the hosts. At a larger scale, it was resulting in
a packet loss. By using the IP ID instead of the protocol family, we
introduce a real difference between the trackers.
remotes/origin/master
Eric Leblond 13 years ago committed by Victor Julien
parent a5587fec2e
commit 4df509f87a

@ -231,12 +231,12 @@ DefragHashFunc(HashListTable *ht, void *data, uint16_t datalen)
uint32_t key;
if (p->af == AF_INET) {
key = (defrag_hash_rand + p->af +
key = (defrag_hash_rand + p->id +
p->src_addr.addr_data32[0] + p->dst_addr.addr_data32[0]) %
defrag_hash_size;
}
else if (p->af == AF_INET6) {
key = (defrag_hash_rand + p->af +
key = (defrag_hash_rand + p->id +
p->src_addr.addr_data32[0] + p->src_addr.addr_data32[1] +
p->src_addr.addr_data32[2] + p->src_addr.addr_data32[3] +
p->dst_addr.addr_data32[0] + p->dst_addr.addr_data32[1] +

Loading…
Cancel
Save