FRR suggests using macvlan interface in Anycast Gateway implementation.
https://docs.frrouting.org/en/latest/evpn.html#anycast-gateways-with-single-vxlan-device
But arp entry on macvlan interface does not transfer to BGP EVPN routes type 2 with IP.
Example
Topology:
HOST1:
IP/MASK : 192.168.1.20/24 GATEWAY : 192.168.1.1 MAC : 00:50:79:66:68:0e
HOST3
IP/MASK : 192.168.2.10/24 GATEWAY : 192.168.2.1 MAC : 00:50:79:66:68:11
Switch1 and Switch2
e0 - 802.1q trunk e1- vlan 100 e2 - vlan 200
R1:
set interfaces bridge br0 enable-vlan set interfaces bridge br0 ip enable-arp-accept set interfaces bridge br0 member interface eth1 allowed-vlan '100' set interfaces bridge br0 member interface eth1 allowed-vlan '200' set interfaces bridge br0 member interface vxlan0 set interfaces bridge br0 vif 100 ip enable-arp-accept set interfaces bridge br0 vif 100 vrf 'RED' set interfaces bridge br0 vif 200 ip enable-arp-accept set interfaces bridge br0 vif 200 vrf 'RED' set interfaces bridge br0 vif 1000 vrf 'RED' set interfaces ethernet eth0 address '10.0.0.1/30' set interfaces loopback lo address '1.1.1.1/32' set interfaces pseudo-ethernet peth100 address '192.168.1.1/24' set interfaces pseudo-ethernet peth100 ip enable-arp-accept set interfaces pseudo-ethernet peth100 mac '00:aa:aa:aa:aa:aa' set interfaces pseudo-ethernet peth100 source-interface 'br0.100' set interfaces pseudo-ethernet peth100 vrf 'RED' set interfaces pseudo-ethernet peth200 address '192.168.2.1/24' set interfaces pseudo-ethernet peth200 ip enable-arp-accept set interfaces pseudo-ethernet peth200 mac '00:aa:aa:aa:aa:aa' set interfaces pseudo-ethernet peth200 source-interface 'br0.200' set interfaces pseudo-ethernet peth200 vrf 'RED' set interfaces vxlan vxlan0 parameters external set interfaces vxlan vxlan0 parameters neighbor-suppress set interfaces vxlan vxlan0 parameters nolearning set interfaces vxlan vxlan0 parameters vni-filter set interfaces vxlan vxlan0 source-address '1.1.1.1' set interfaces vxlan vxlan0 source-interface 'lo' set interfaces vxlan vxlan0 vlan-to-vni 100 vni '100' set interfaces vxlan vxlan0 vlan-to-vni 200 vni '200' set interfaces vxlan vxlan0 vlan-to-vni 1000 vni '1000' set protocols bgp address-family l2vpn-evpn advertise-all-vni set protocols bgp address-family l2vpn-evpn vni 100 rd '1000:100' set protocols bgp address-family l2vpn-evpn vni 100 route-target both '1000:100' set protocols bgp address-family l2vpn-evpn vni 200 rd '1000:200' set protocols bgp address-family l2vpn-evpn vni 200 route-target both '1000:200' set protocols bgp neighbor 1.1.1.2 address-family l2vpn-evpn set protocols bgp neighbor 1.1.1.2 ebgp-multihop '3' set protocols bgp neighbor 1.1.1.2 remote-as '65002' set protocols bgp neighbor 1.1.1.2 update-source 'lo' set protocols bgp system-as '65001' set protocols static route 1.1.1.2/32 next-hop 10.0.0.2 set vrf name RED protocols bgp address-family ipv4-unicast redistribute connected set vrf name RED protocols bgp address-family ipv4-unicast redistribute static set vrf name RED protocols bgp address-family l2vpn-evpn advertise ipv4 unicast set vrf name RED protocols bgp address-family l2vpn-evpn rd '1000:1000' set vrf name RED protocols bgp address-family l2vpn-evpn route-target both '1000:1000' set vrf name RED protocols bgp system-as '65001' set vrf name RED table '111' set vrf name RED vni '1000'
R2:
set interfaces bridge br0 enable-vlan set interfaces bridge br0 ip enable-arp-accept set interfaces bridge br0 member interface eth1 allowed-vlan '100' set interfaces bridge br0 member interface eth1 allowed-vlan '200' set interfaces bridge br0 member interface vxlan0 set interfaces bridge br0 vif 100 ip enable-arp-accept set interfaces bridge br0 vif 100 vrf 'RED' set interfaces bridge br0 vif 200 ip enable-arp-accept set interfaces bridge br0 vif 200 vrf 'RED' set interfaces bridge br0 vif 1000 vrf 'RED' set interfaces ethernet eth0 address '10.0.0.2/30' set interfaces loopback lo address '1.1.1.2/32' set interfaces pseudo-ethernet peth100 address '192.168.1.1/24' set interfaces pseudo-ethernet peth100 ip enable-arp-accept set interfaces pseudo-ethernet peth100 mac '00:aa:aa:aa:aa:aa' set interfaces pseudo-ethernet peth100 source-interface 'br0.100' set interfaces pseudo-ethernet peth100 vrf 'RED' set interfaces pseudo-ethernet peth200 address '192.168.2.1/24' set interfaces pseudo-ethernet peth200 ip enable-arp-accept set interfaces pseudo-ethernet peth200 mac '00:aa:aa:aa:aa:aa' set interfaces pseudo-ethernet peth200 source-interface 'br0.200' set interfaces pseudo-ethernet peth200 vrf 'RED' set interfaces vxlan vxlan0 parameters external set interfaces vxlan vxlan0 parameters neighbor-suppress set interfaces vxlan vxlan0 parameters nolearning set interfaces vxlan vxlan0 parameters vni-filter set interfaces vxlan vxlan0 source-address '1.1.1.2' set interfaces vxlan vxlan0 source-interface 'lo' set interfaces vxlan vxlan0 vlan-to-vni 100 vni '100' set interfaces vxlan vxlan0 vlan-to-vni 200 vni '200' set interfaces vxlan vxlan0 vlan-to-vni 1000 vni '1000' set protocols bgp address-family l2vpn-evpn advertise-all-vni set protocols bgp address-family l2vpn-evpn vni 100 rd '1000:100' set protocols bgp address-family l2vpn-evpn vni 100 route-target both '1000:100' set protocols bgp address-family l2vpn-evpn vni 200 rd '1000:200' set protocols bgp address-family l2vpn-evpn vni 200 route-target both '1000:200' set protocols bgp neighbor 1.1.1.1 address-family l2vpn-evpn set protocols bgp neighbor 1.1.1.1 ebgp-multihop '3' set protocols bgp neighbor 1.1.1.1 remote-as '65001' set protocols bgp neighbor 1.1.1.1 update-source 'lo' set protocols bgp system-as '65002' set protocols static route 1.1.1.1/32 next-hop 10.0.0.1 set vrf name RED protocols bgp address-family ipv4-unicast redistribute connected set vrf name RED protocols bgp address-family ipv4-unicast redistribute static set vrf name RED protocols bgp address-family l2vpn-evpn advertise ipv4 unicast set vrf name RED protocols bgp address-family l2vpn-evpn rd '1000:1000' set vrf name RED protocols bgp address-family l2vpn-evpn route-target both '1000:1000' set vrf name RED protocols bgp system-as '65002' set vrf name RED table '111' set vrf name RED vni '1000'
Need to add two Linux command manually, because VyOS does not have them in CLI
#stop forward arp request to this mac through vxlan sudo bridge fdb add 00:aa:aa:aa:aa:aa dev br0 self local #stop learning MAC via vxlan sudo ip link set vxlan0 type bridge_slave learning off
How to reproduce the issue.
ping HOST3 from HOST1
HOST1> ping 192.168.2.10 192.168.2.10 icmp_seq=1 timeout 192.168.2.10 icmp_seq=2 timeout 192.168.2.10 icmp_seq=3 timeout 192.168.2.10 icmp_seq=4 timeout 192.168.2.10 icmp_seq=5 timeout
OUTPUT from R1:
vyos@vyos:~$ show bgp l2vpn evpn route type 2
BGP table version is 3, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]:[Frag-id]
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]
Network Next Hop Metric LocPrf Weight Path
Extended Community
Route Distinguisher: 1000:100
*> [2]:[0]:[48]:[00:50:79:66:68:0e]
1.1.1.1 32768 i
ET:8 RT:1000:100
Route Distinguisher: 1000:200
*> [2]:[0]:[48]:[00:50:79:66:68:11]
1.1.1.2 0 65002 i
RT:1000:200 ET:8
Displayed 2 prefixes (2 paths) (of requested type)As we see, there is a route type 2 with the MAC of HOST1 and HOST3, but there is no route type2 with MAC/IP of HOST1 and HOST2.
And arp cache of evpn is empty
vyos@vyos:~$ show evpn arp-cache vni all VNI 200 #ARP (IPv4 and IPv6, local and remote) 0 VNI 100 #ARP (IPv4 and IPv6, local and remote) 0
But ARP entry of HOST1 is on R1
vyos@vyos:~$ show arp Address Interface Link layer address State ------------ ----------- -------------------- --------- 192.168.2.10 peth200 FAILED 192.168.1.20 peth100 00:50:79:66:68:0e REACHABLE 10.0.0.2 eth0 0c:63:75:a8:00:00 REACHABLE
The same situation is on R2
vyos@vyos:~$ show bgp l2vpn evpn route type 2
BGP table version is 3, local router ID is 1.1.1.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-1 prefix: [1]:[EthTag]:[ESI]:[IPlen]:[VTEP-IP]:[Frag-id]
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]
Network Next Hop Metric LocPrf Weight Path
Extended Community
Route Distinguisher: 1000:100
*> [2]:[0]:[48]:[00:50:79:66:68:0e]
1.1.1.1 0 65001 i
RT:1000:100 ET:8
Route Distinguisher: 1000:200
*> [2]:[0]:[48]:[00:50:79:66:68:11]
1.1.1.2 32768 i
ET:8 RT:1000:200
Displayed 2 prefixes (2 paths) (of requested type)vyos@vyos:~$ show evpn arp-cache vni all VNI 200 #ARP (IPv4 and IPv6, local and remote) 0 VNI 100 #ARP (IPv4 and IPv6, local and remote) 0
vyos@vyos:~$ show arp Address Interface Link layer address State ------------ ----------- -------------------- --------- 10.0.0.1 eth0 0c:65:63:c1:00:00 REACHABLE 192.168.2.10 peth200 00:50:79:66:68:11 REACHABLE
The problem looks like that FRR does not install Route Type 2 MAC/IP if interface of ARP entry is not a bridge.
