https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=287229

Timo Voelker <timo.voel...@fh-muenster.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |timo.voel...@fh-muenster.de

--- Comment #10 from Timo Voelker <timo.voel...@fh-muenster.de> ---
Hi Lucas,

In cooperation with Michael, I built a setup for your minimal testing tool. I
executed a couple of runs and saw the same issue: the results of the runs
differ. It looks like the FreeBSD machine is running against an IP fragment
limit.

For IP reassembly, FreeBSD uses a hash table. For each hash value (bucket), it
holds a list of reassembly entries. In each entry, it holds the fragments of
one packet until all data has arrived (and reassembly can be completed) or a
timeout (after 30s by default).

The number of list entries (net.inet.ip.maxfragbucketsize) seems relevant here.
Out of the box, your FreeBSD VM has set maxfragbucketsize=1. This means if the
FreeBSD VM must insert a new entry (i.e., when the first fragment of a packet
has been received) in a bucket that already contains an entry, it removes this
one first. In consequence, FreeBSD is probably unable to reassemble that packet
with the removed fragments.

The value for maxfragbucketsize is set based on the available memory. Usually
on a 2 GB machine, like your FreeBSD VM, this value is set to 7, which seems
enough to not run into this issue. However, in /boot/loader.conf of your
FreeBSD VM, the size of the kernel memory is reduced:

vm.kmem_size="200M"
vm.kmem_size_max="200M"

After commenting out these two lines and a reboot, maxfragbucketsize is 7 and
the results of multiple runs are the same.

For the sake of completeness, these are other limits that might be relevant
here:

net.inet.ip.maxfragpackets 
net.inet.ip.maxfrags

Timo

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to