Hello,

At Julien Goodwin's talk in April, he said, if I understand correctly, Internode has a bug in their implementation of PPPoA and IPv6 in that 1500 size packets will get silently dropped. Only for IPv4, not IPv6.

I am not seeing this however, and just want to check my calculations are correct.

(just to be confusing: with IPv4, both tcpdump (with -v) and ping will quote the ethernet packet size of 1492 or 1500, but this doesn't happen with IPv6)



TEST #1: 1472 + 8 bytes ICMP + 20 bytes IPv4 header = 1500

huey:~# ping -s 1472 -M do hqrouter.vpac.org
PING hqrouter.vpac.org (202.158.218.252) 1472(1500) bytes of data.
1480 bytes from hqrouter.vpac.org (202.158.218.252): icmp_req=1 ttl=57 time=35.3 ms
^C
--- hqrouter.vpac.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 35.350/35.350/35.350/0.000 ms

13:11:27.668571 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 1500)
    59.167.180.194 > 202.158.218.252: ICMP echo request, id 18672, seq 1, length 1480
13:11:27.703559 IP (tos 0x0, ttl 57, id 33509, offset 0, flags [+], proto ICMP (1), length 1492)
    202.158.218.252 > 59.167.180.194: ICMP echo reply, id 18672, seq 1, length 1472
13:11:27.703628 IP (tos 0x0, ttl 57, id 33509, offset 1472, flags [none], proto ICMP (1), length 28)
    202.158.218.252 > 59.167.180.194: icmp

I can confirm that the outgoing packets are not fragmented in this case, by running tcpdump on remote system:

13:11:27.694702 IP (tos 0x20, ttl 57, id 0, offset 0, flags [DF], proto ICMP (1), length 1500)
    huey.microcomaustralia.com.au > hqrouter.vpac.org: ICMP echo request, id 18672, seq 1, length 1480
13:11:27.694728 IP (tos 0x20, ttl 64, id 33509, offset 0, flags [none], proto ICMP (1), length 1500)
    hqrouter.vpac.org > huey.microcomaustralia.com.au: ICMP echo reply, id 18672, seq 1, length 1480




TEST #2: 1464 + 8 bytes ICMP + 20 bytes IPv4 header + 8 bytes PPPoE overheard = 1500

huey:~# ping -s 1464 -M do hqrouter.vpac.org
PING hqrouter.vpac.org (202.158.218.252) 1464(1492) bytes of data.
1472 bytes from hqrouter.vpac.org (202.158.218.252): icmp_req=1 ttl=57 time=34.3 ms
1472 bytes from hqrouter.vpac.org (202.158.218.252): icmp_req=2 ttl=57 time=33.6 ms
^C
--- hqrouter.vpac.org ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 33.642/34.010/34.378/0.368 ms

In this case no fragmentation occurs:

13:13:00.502010 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 1492)
    59.167.180.194 > 202.158.218.252: ICMP echo request, id 18683, seq 1, length 1472
13:13:00.536331 IP (tos 0x0, ttl 57, id 33510, offset 0, flags [none], proto ICMP (1), length 1492)
    202.158.218.252 > 59.167.180.194: ICMP echo reply, id 18683, seq 1, length 1472




TEST#3: 1452 + 8 bytes ICMP + 40 bytes IPv6 header = 1500

huey:~# ping6 -s 1452 -M do hqrouter.vpac.org
PING hqrouter.vpac.org(hqrouter.vpac.org) 1452 data bytes
1460 bytes from hqrouter.vpac.org: icmp_seq=1 ttl=57 time=35.2 ms
1460 bytes from hqrouter.vpac.org: icmp_seq=2 ttl=57 time=36.9 ms
^C
--- hqrouter.vpac.org ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 35.263/36.128/36.994/0.886 ms

In this case fragmentation occurs on the returned packets (like test #1):

13:14:17.853662 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 1460) 2001:44b8:4112:8a04::2 > 2001:388:60ac::5: [icmp6 sum ok] ICMP6, echo request, length 1460, seq 1
13:14:17.888746 IP6 (hlim 57, next-header Fragment (44) payload length: 1448) 2001:388:60ac::5 > 2001:44b8:4112:8a04::2: frag (0xd268db04:0|1440) ICMP6, echo reply, length 1440, seq 1
13:14:17.888839 IP6 (hlim 57, next-header Fragment (44) payload length: 28) 2001:388:60ac::5 > 2001:44b8:4112:8a04::2: frag (0xd268db04:1440|20)

In this case though, unlike test #1, the response packets are fragmented by the sender:

13:14:17.880311 IP6 (hlim 57, next-header ICMPv6 (58) payload length: 1460) huey.microcomaustralia.com.au > hqrouter.vpac.org: [icmp6 sum ok] ICMP6, echo request, length 1460, seq 1
13:14:17.880340 IP6 (hlim 64, next-header Fragment (44) payload length: 1448) hqrouter.vpac.org > huey.microcomaustralia.com.au: frag (0xd268db04:0|1440) ICMP6, echo reply, length 1440, seq 1
13:14:17.880343 IP6 (hlim 64, next-header Fragment (44) payload length: 28) hqrouter.vpac.org > huey.microcomaustralia.com.au: frag (0xd268db04:1440|20)


So somehow the sender must be working out the reduced MTU.



TEST#4: 1444 + 8 bytes ICMP + 40 bytes IPv6 header + 8 bytes PPPoE overhead = 1500

huey:~# ping6 -s 1444 -M do hqrouter.vpac.org
PING hqrouter.vpac.org(hqrouter.vpac.org) 1444 data bytes
1452 bytes from hqrouter.vpac.org: icmp_seq=1 ttl=57 time=34.3 ms
1452 bytes from hqrouter.vpac.org: icmp_seq=2 ttl=57 time=35.7 ms
1452 bytes from hqrouter.vpac.org: icmp_seq=3 ttl=57 time=34.4 ms
^C
--- hqrouter.vpac.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 34.348/34.852/35.721/0.617 ms

Like #2 no fragmentation:

13:16:03.105321 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 1452) 2001:44b8:4112:8a04::2 > 2001:388:60ac::5: [icmp6 sum ok] ICMP6, echo request, length 1452, seq 1
13:16:03.139572 IP6 (hlim 57, next-header ICMPv6 (58) payload length: 1452) 2001:388:60ac::5 > 2001:44b8:4112:8a04::2: [icmp6 sum ok] ICMP6, echo reply, length 1452, seq 1




Maybe this is a bug that Internode has fixed? Or maybe I have got something wrong?

It does appear that PPPoE limitations apply even for PPPoA, at least with received packets. For both IPv6 and IPv4.
-- 
Brian May <brian@microcomaustralia.com.au>