Re: ICMPv6 over lo0

From: Andrey V. Elsukov <bu7cher_at_yandex.ru>
Date: Wed, 16 Nov 2022 07:54:49 UTC
16.11.2022 00:14, tuexen@freebsd.org пишет:
> 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)
> 
> Why is for the Echo Request an MTU of 1280 used, whereas for the response an MTU of 16384
> is used.
> 
> Is this intended? At least for me, it is not expected...

Hi Michael,

I believe it is default behavior for ping6:
```
-u  By default, ping asks the kernel to fragment packets to fit into
     the minimum IPv6 MTU.  The -u option will suppress the behavior
     in the following two levels: when the option is specified once,
     the behavior will be disabled for unicast packets.  When the
     option is more than once, it will be disabled for both unicast
     and multicast packets.
```

```
% ktrace ping6 -c 1 -b 30000 -s 20000 ::1
% kdump | grep -A1 MIN_MTU
  14793 ping6    CALL 
setsockopt(0x3,IPPROTO_IPV6,IPV6_USE_MIN_MTU,0x7fffffffe614,0x4)
  14793 ping6    RET   setsockopt 0
```

```
         if (mflag != 1) {
                 optval = mflag > 1 ? 0 : 1;

                 if (setsockopt(ssend, IPPROTO_IPV6, IPV6_USE_MIN_MTU,
                     &optval, sizeof(optval)) == -1)
                         err(1, "setsockopt(IPV6_USE_MIN_MTU)");
         }
```
-- 
WBR, Andrey V. Elsukov