Re: ICMPv6 over lo0

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Wed, 16 Nov 2022 03:19:06 UTC
> On Nov 16, 2022, at 5:14 AM, tuexen@freebsd.org wrote:
> 
> Dear all,
> 
> when using the master branch of today (or 13.1) I get when running
> 
> tuexen@ampere128:~ % ping6 -c 1 -b 30000 -s 20000 ::1
> PING6(20048=40+8+20000 bytes) ::1 --> ::1
> 20008 bytes from ::1, icmp_seq=0 hlim=64 time=0.709 ms
> 
> --- ::1 ping6 statistics ---
> 1 packets transmitted, 1 packets received, 0.0% packet loss
> round-trip min/avg/max/std-dev = 0.709/0.709/0.709/0.000 ms
> 
> which is expected. What I don't expect is:
> 
> tuexen@ampere128:~ % tcpdump -i lo0 -n
> tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
> listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
> 22:06:38.835630 IP6 ::1 > ::1: frag (0|1232) ICMP6, echo request, seq 0, length 1232
> 22:06:38.835639 IP6 ::1 > ::1: frag (1232|1232)
> 22:06:38.835641 IP6 ::1 > ::1: frag (2464|1232)
> 22:06:38.835641 IP6 ::1 > ::1: frag (3696|1232)
> 22:06:38.835642 IP6 ::1 > ::1: frag (4928|1232)
> 22:06:38.835642 IP6 ::1 > ::1: frag (6160|1232)
> 22:06:38.835643 IP6 ::1 > ::1: frag (7392|1232)
> 22:06:38.835644 IP6 ::1 > ::1: frag (8624|1232)
> 22:06:38.835644 IP6 ::1 > ::1: frag (9856|1232)
> 22:06:38.835645 IP6 ::1 > ::1: frag (11088|1232)
> 22:06:38.835645 IP6 ::1 > ::1: frag (12320|1232)
> 22:06:38.835646 IP6 ::1 > ::1: frag (13552|1232)
> 22:06:38.835647 IP6 ::1 > ::1: frag (14784|1232)
> 22:06:38.835647 IP6 ::1 > ::1: frag (16016|1232)
> 22:06:38.835648 IP6 ::1 > ::1: frag (17248|1232)
> 22:06:38.835648 IP6 ::1 > ::1: frag (18480|1232)
> 22:06:38.835649 IP6 ::1 > ::1: frag (19712|296)
> 22:06:38.836002 IP6 ::1 > ::1: frag (0|16336) ICMP6, echo reply, seq 0, length 16336
> 22:06:38.836006 IP6 ::1 > ::1: frag (16336|3672)
> ^C
> 19 packets captured
> 19 packets received by filter
> 0 packets dropped by kernel
> 
> Why is for the Echo Request an MTU of 1280 used, whereas for the response an MTU of 16384
> is used.
> 
> Since
> tuexen@ampere128:~ % ifconfig lo0
> lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
> 	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
> 	inet6 ::1 prefixlen 128
> 	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
> 	inet 127.0.0.1 netmask 0xff000000
> 	groups: lo
> 	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> is used, I would expect an MTU of 16384 also be used for the Echo Request instead of
> the minimum IPv6 MTU of 1280.

I believe MTU of 16384 should be used for Echo Request.

> 
> Is this intended? At least for me, it is not expected...
> 
> Best regards
> Michael