Nick Reilly
2011-07-04 18:37:25 UTC
Hi,
I have run in to an issue with my IPv6 TCP MSS getting set too high
causing IPv6 to drop large frames. The root cause is that the MTU of the
pflog0 is being used for the IPv6 MSS. Searching around I found the same
issue reported back in 2007
http://osdir.com/ml/os.netbsd.ports.sparc64/2007-06/msg00029.html
The reason this affects v6 and not v4 is due to the difference in
in6_setmaxmtu() and in_setmaxmtu(), the v6 version only checks for
loopback whilst the v4 version checks for not loopback and also that the
interface is up. I think the v6 version should change to the same as the
v4.
At the same time, I wonder if the pflog interface type should have the
LOOPBACK flag set on it? There are currently no flags on it and given
that in6_setmaxmtu() / in_setmaxmtu() seem to base real vs virtual
network interface on the LOOPBACK flag and pflog seems to be a sort of
virtual interface type. If this interface were to be brought up then
IPv4 would similarly have an excessive MSS on it. Are there any
drawbacks to setting the LOOPBACK flag on an interface type that I might
be missing?
Of course the simple workaround of setting net.inet6.tcp6.mss_ifmtu=1
works around the issue, but I'm looking at the root cause.
Thanks,
Nick Reilly.
--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-***@muc.de
I have run in to an issue with my IPv6 TCP MSS getting set too high
causing IPv6 to drop large frames. The root cause is that the MTU of the
pflog0 is being used for the IPv6 MSS. Searching around I found the same
issue reported back in 2007
http://osdir.com/ml/os.netbsd.ports.sparc64/2007-06/msg00029.html
The reason this affects v6 and not v4 is due to the difference in
in6_setmaxmtu() and in_setmaxmtu(), the v6 version only checks for
loopback whilst the v4 version checks for not loopback and also that the
interface is up. I think the v6 version should change to the same as the
v4.
At the same time, I wonder if the pflog interface type should have the
LOOPBACK flag set on it? There are currently no flags on it and given
that in6_setmaxmtu() / in_setmaxmtu() seem to base real vs virtual
network interface on the LOOPBACK flag and pflog seems to be a sort of
virtual interface type. If this interface were to be brought up then
IPv4 would similarly have an excessive MSS on it. Are there any
drawbacks to setting the LOOPBACK flag on an interface type that I might
be missing?
Of course the simple workaround of setting net.inet6.tcp6.mss_ifmtu=1
works around the issue, but I'm looking at the root cause.
Thanks,
Nick Reilly.
--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-***@muc.de