Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[host] fix defrag buffers reclaim logic
The problem: - let's assume a 2 nodes (A and B) cluster setup - node A sends fragmented packets to node B and there is packet loss on the network. - node B receives all those fragments and attempts to reassemble them. - node A sends packet seq_num X in Y fragments. - node B receives only part of the fragments and stores them in a defrag buf. - packet loss stops. - node A continues to send packets and a seq_num roll-over takes place. - node A sends a new packet seq_num X in Y fragments. - node B gets confused here because the parts of the old packet seq_num X are still stored and the buffer has not been reclaimed. - node B continues to rebuild packet seq_num X with old stale data and new data from after the roll-over. - node B completes reassembling the packet and delivers junk to the application. The solution: Add a much stronger buffer reclaim logic that will apply on each received packet and not only when defrag buffers are needed, as there might be a mix of fragmented and not fragmented packets in-flight. The new logic creates a window of N packets that can be handled at the same time (based on the number of buffers) and clear everything else. Fixes #261 Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
- Loading branch information