16.11.2022 00:14, tue...@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

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to