PPPoE Server rejects MTU of 1540

Hi everyone, currently I’m setting up PPPoE server to support MTU of 1540 for my PPPoE client (Router/DUT). However, the first connection MTU is 1492 then reconnects with 1540 then suddenly it changes to 1480

Behavior
Router connects with 1492
image (3).png
Router reconnects with 1540
image (2).png
Mikrotik changed it to 1480
img1.png
Configuration

/interface ethernet set [ find default-name=ether6 ] l2mtu=1600 mtu=1600
/interface bridge add mtu=1600 name="Bridge MAP-E"
/interface vlan add interface="Bridge MAP-E" mtu=1596 name=VLAN-422 vlan-id=422
/interface bridge port add bridge="Bridge MAP-E" interface=ether6 internal-path-cost=10 path-cost=10
/interface bridge vlan add bridge="Bridge MAP-E" tagged="Bridge MAP-E,ether6" vlan-ids=422
/interface pppoe-server add name=vlan422-user1 service=PPPoE-VLAN-422 user=vlan422-user1
/interface pppoe-server server add default-profile=PPPoE-VLAN-422 disabled=no interface=VLAN-422 max-mru=1540 max-mtu=1540 service-name=PPPoE-VLAN-422
/ipv6 dhcp-server add dhcp-option="S46 MAP-E Container" interface=vlan422-user1 name=vlan422-user1 prefix-pool=PPPoE-IPv6-PD-422
/ipv6 nd add interface=vlan422-user1 managed-address-configuration=yes mtu=1540 other-configuration=yes

I don’t know why Mikrotik changed the MTU from 1540 to 1480. This environment is for MAP-E.

Thanks in advance for the replies!

Usually that’s because RouterOS could not send a test LCP EchoReq message as large as the specified MTU after establishing the PPPoE connection, which causes it to drop MTU to 1480. And probably the message could not be sent because the produced ethernet frame is too large for the underlying layer 2 network. You have increased L2MTU and MTU on the router to 1600, but are you sure that the adapter on the other side, as well as any switches in between, also support ethernet frame large enough for that? If they don’t then they drop the frame, RouterOS doesn’t get any answer for the LCP EchoReq message and after a few tries + timeout, drops the MTU of the PPPoE connection.

Here is an illustration for the issue:
pppoe-mru-13.png

L2MTU and MTU are not the same thing.

Set PPPoE server/client MTU/MRU to 1540
Set VLAN MTU to 1548
Restore ethernet MTU to 1500.
Do not touch L2MTU, restore to defaults everywhere.

Restore on ipv6 nd the 1500 mtu
Standard IPv6 traffic (non MAP-E) must be keep 1500 or is fragmented on internet.



I think that rather than increasing the MTU to 1540 it would be better to set a clamp for IPv4 at 1460
so that standard IPv6 remains at 1500 without being fragmented
and IPv4 is adequate to be transported via MAP-E without being fragmented or adding overhead to the packet.

L2MTU should be raised as high as possible on every device in the network. They do not need to match, but there is zero justifiable reason NOT set it as high as it'll go
As far as I am aware there are no protocols that inherit or 'detect' what L2MTU has been set on an interface and try to use it. That would be a justifiable reason, but this doesn't happen. The actual L2MTU size of a packet is 'always' explicitly set by the protocol stack and is not inferred by what has been configured on an interface
I have looked far and wide for any reason NOT to raise L2MTU and I cannot work out why it's not the default behavior to simply be set as maximum
The only possibility I can work out is its a really old principle from when memory was extremely tight and expensive, hence you would have to carefully allocate resources and a larger MTU may mean a smaller CAM table or some such. But on any hardware built since the turn of the century, max it. This will never cause an issue

To add more confusion, every vendor refers to MTU differently. Some include ethernet and/or VLAN headers, some don't, some mean L2MTU but just call it 'MTU'. Often you'll find a switch saying '1500 MTU' but it's actually 18 bytes higher than what it says (Includes ethernet + 1x vlan tag). It's incredibly annoying
L3MTU (just called MTU on MikroTik) you do not want to max and is where you can run into issues, as many protocols do look at what has been configured and will inherit it. This is not the case with L2MTU hence just max it out everywhere, no packets will spontaneously get larger, you're just raising the ceiling so nothing bumps into it and giving headroom if its ever needed

There are reasons why it’s not set arbitrarily high, and MikroTik even explained it here:

https://www.youtube.com/watch?v=7a_z1jAdIME&t=182s

The default numbers are chosen based on the hardware buffer, that’s why it varies based on the hardware/switch chip (on my RB5009 it’s 1514, on my old RB750Gr3 it’s 1596, and for hAP ac² it’s 1598), and that is finite resources. And as the video said, the allocated resources are in multiples of the hardware dependent size. Which means increasing the value by one byte doubles the size of buffer used.

Currently, I’ve directly connect my PPPoE client to my Mikrotik

I’ve change the MTU to count for overheads
MTU
Bridge: 1562
VLAN: 1562
Ethernet Port: 1562
PPPoE Server: 1540
PPP LCP.png
However, when I’ve captured the packet and the negotiation. I have PPP LCP packet length of 1566 and that is very large for LCP packet.
MTU.png
Still, there is a LCP missed echo reply. I just want my PPPoE client to have an MTU of 1540.

Have you tried what I wrote to you?

Server side:
Ethernet MTU 1500 (pppoe is not a L3 protocol, useless increase MTU)
Restore original ethernet L2MTU of 1580 (suffice for VLAN + PPPoE)
Bridge MTU AUTO (remove the MTU)
Set VLAN MTU to 1548
Set PPPoE Server Max MRU and MTU to 1540 and do not set MRRU (remove)

Client Side:
i do not think a bridge is involved here
Ethernet MTU 1500 (for the same reason, pppoe is not a L3 protocol, useless increase MTU)
Restore original ethernet L2MTU of 1580 (suffice for VLAN + PPPoE)
Set VLAN MTU to 1548
Set PPPoE Client Max MRU and MTU to 1540 and do not set MRRU (remove)

I've tried this also.
interface mtu.PNG
ethernet.PNG
PPPoE server MTU/MRU both 1540

However, the MTU of the PPPoE client is 1480. From 1540 to 1480.


Also, I don't know why Mikrotik send a PPP LCP packet that have a length of 1566. I think this is why the PPPoE client don't send a Echo Reply because the PPP LCP frame is too large.