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.
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] +