1Regression tests for path MTU discovery implementation in the kernel. 2 3The test suite runs on the machine LOCAL, the kernel under test is 4running on REMOTE. On LOCAL a Scapy program is simulating a 5connection to REMOTE TCP chargen service. The source address is a 6non existing address on FAKE_NET. The LOCAL machine acts as a 7router between REMOTE and virtual FAKE_NET_ADDR and can create ICMP 8packets. 9 10After the three-way handshake REMOTE fills the virtual TCP receive 11buffer of FAKE_NET_ADDR with generated chars. The data is not 12acknowledged. Then LOCAL sends a fragmentation-needed ICMP packet 13and expects REMOTE to retransmit the TCP data. It is checked that 14the TCP packet from the REMOTE side has the MTU size that was 15announced in the ICMP packet. 16 17The same TCP test is done with IPv6 and a packet too big ICMP6. 18 19An IPv6 UDP packet with 1400 octets payload is sent from FAKE_NET 20to REMOTE. The echo answer triggers an ICMP6 packet too big with 211300 MTU limit from LOCAL. The response to the next UDP echo packet 22has to be fragmented by REMOTE. 23 24After removing the gateway route of the PMTU route on REMOTE, the 25first IPv6 UDP echo must have 1400 octets payload. A single ICMP6 26packet too big must change the existing PMTU route so that the next 27echo is fragmented. 28 29EXAMPLE 30 31To run this test I use the following configuration files. 32You should choose a different set of MAC and IP addresses. 33 34- My local machine where I run the regression test: 35 36/etc/hosts 37# to login to qemu with SSH via IPv6 link-local 38fe80::725f:caff:fe21:8d70%tap0 q70 39 40/etc/hostname.tap0 41lladdr fe:e1:ba:d0:d5:6d up 42inet 10.188.70.17 255.255.255.0 43inet6 fdd7:e83e:66bc:70:3e97:eff:fea7:9b2 44!route add -inet 10.188.219.0/24 127.0.0.1 -blackhole 45!route add -inet6 fdd7:e83e:66bc:219::/64 ::1 -blackhole 46 47- My qemu where the kernel under test is running 48 49/etc/hostname.vio0 50lladdr 70:5f:ca:21:8d:70 51inet 10.188.70.70 255.255.255.0 52inet6 fdd7:e83e:66bc:70:725f:caff:fe21:8d70 53!route add -inet 10.188.219.0/24 10.188.70.17 54!route add -inet6 fdd7:e83e:66bc:219::/64 fdd7:e83e:66bc:70:3e97:eff:fea7:9b2 55 56/etc/inetd.conf 57chargen stream tcp nowait root internal 58chargen stream tcp6 nowait root internal 59echo dgram udp6 wait root internal 60 61/etc/rc.conf.local 62inetd_flags= 63sshd_flags= 64 65- My environment when executing the test 66 67LOCAL_IF=tap0 68LOCAL_MAC=fe:e1:ba:d0:d5:6d 69REMOTE_MAC=70:5f:ca:21:8d:70 70REMOTE_SSH=q70 71 72LOCAL_ADDR=10.188.70.17 73REMOTE_ADDR=10.188.70.70 74FAKE_NET=10.188.219.0/24 75FAKE_NET_ADDR=10.188.219.188 76 77LOCAL_ADDR6=fdd7:e83e:66bc:70:3e97:eff:fea7:9b2 78REMOTE_ADDR6=fdd7:e83e:66bc:70:725f:caff:fe21:8d70 79FAKE_NET6=fdd7:e83e:66bc:219::/64 80FAKE_NET_ADDR6=fdd7:e83e:66bc:219::188 81 82- Fix your configuration until make check-setup passes 83