Re: ICMPv6 over lo0
- In reply to: Andrey V. Elsukov: "Re: ICMPv6 over lo0"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 16 Nov 2022 08:37:32 UTC
> On 16. Nov 2022, at 08:54, Andrey V. Elsukov <bu7cher@yandex.ru> wrote:
>
> 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)");
> }
> ```
Hi Andrey,
thank you very much for the explanation! I wasn't aware of this.
Best regards
Michael
> --
> WBR, Andrey V. Elsukov