/31, RFC 3021

Most vendors have support for /31 by now. RouterOS however has some peculiarities. I would really like RouterOS to ARP for the remote address, to avoid flooding the network with broadcasts and to interop with other vendors.

Testing against a Fortigate with 1.2.3.5/31, but I believe most vendors behave the same.

First option:
/ip address add interface=ether2 address=1.2.3.4/31

/ping 1.2.3.5
Ping is sent to broadcast without ARP
ether2 2.102 1 → CC:2D:E0:B5:C8:8A FF:FF:FF:FF:FF:FF 1.2.3.4 1.2.3.5 ip:icmp 70 3 no
Fortigate tries to ARP for 1.2.3.4, that is ignored
ether2 2.102 2 ← 90:6C:AC:A9:50:91 FF:FF:FF:FF:FF:FF 1.2.3.5: who has 1.2.3.4? arp 60 2 no

Second option:
/ip address add interface=ether2 address=1.2.3.4/32 network=1.2.3.5
RouterOS pings broadcast but also accepts ARP
ether2 16.569 36 → CC:2D:E0:B5:C8:8A FF:FF:FF:FF:FF:FF 1.2.3.4 1.2.3.5 ip:icmp 70 2 no
ether2 16.569 37 ← 90:6C:AC:A9:50:91 FF:FF:FF:FF:FF:FF 1.2.3.5: who has 1.2.3.4? arp 60 2 no
ether2 16.569 38 → CC:2D:E0:B5:C8:8A 90:6C:AC:A9:50:91 1.2.3.4: at CC:2D:E0:B5:C8:8A arp 42 2 no
ether2 16.569 39 ← 90:6C:AC:A9:50:91 CC:2D:E0:B5:C8:8A 1.2.3.5 1.2.3.4 ip:icmp 70 1 no

Third option:
/ip address add interface=ether2 address=1.2.3.4/32
/ip route add dst-address=1.2.3.5/32 gateway=ether2
Same results as the second option.

Is there a way to get RouterOS to ARP for the peer address, so traffic is not flooded and proper conformance to RFC 3021 is achieved?

I tried only a quick test, but I don’t see icmp to ff:ff:ff:ff:ff:ff with /32, only arp queries and waiting for answer.

And with /31 there’s a difference between lower and upper address, if RouterOS has the upper one, it seems to work. I had .4 on v6 device and .5 on v7 device and it fooled me into thinking that it’s fixed in v7. But it’s not, when I swap them, v6 seems to work and v7 doesn’t.

https://forum.mikrotik.com/search.php?keywords=RFC+3021