Hi all,

I’m trying to run Babel over a GRE tunnel on VPP, but inbound Hellos from the 
neighbor are being dropped with *“Multicast RPF check failed.”* The same Babel 
setup works without VPP, so basic connectivity and host config look good.

I’ve attached detailed configs and packet traces from VPP1 and VPP2.

As a test, I explicitly allowed the Babel IPv6 multicast group (ff02::1:6) on 
both WAN interfaces:

vppctl ip mroute add ff02:: 1 : 6 / 128 via :: WAN00
vppctl ip mroute add ff02:: 1 : 6 / 128 via :: WAN01

Unfortunately, the issue persists. Any pointers on what I might be missing on 
the VPP side would be much appreciated.

Thanks
Nivethi
#**********VPP1 (ubuntu 22.04.5 LTS) ***************
vppctl sh version
#-> vpp v25.10-rc0~210-g8941f9ade built by root on VPP2 at 2025-08-06T17:20:06


#vppctl lcp default
vppctl lcp lcp-sync  enable
vppctl lcp lcp-sync  on


#WAN00 <- TenGigabitEthernetc/0/0
#WAN01 <- TenGigabitEthernetc/0/1
#LAN00 <- TenGigabitEthernetb/0/0
#LAN01 <- TenGigabitEthernetb/0/1

# Bringup the WAN interfaces
# Assign IP address for WAN Interfaces
vppctl lcp create WAN00 host-if hWAN00
vppctl set int ip address WAN00 10.130.0.1/24
vppctl set int ip address WAN00 2001::1/64
vppctl lcp create WAN01 host-if hWAN01
vppctl set int ip address WAN01 10.140.0.1/24
vppctl set int ip address WAN01 2002::1/64

vppctl set int state WAN00 up
vppctl set int state WAN01 up

# Create a Loopback interfaces
vppctl create loopback interface mac aa:bb:cc:00:00:01 instance 0
vppctl lcp create loop0 host-if vxlanloop0
vppctl set int ip address loop0 10.0.1.0/30
vppctl set int state loop0 up

# As the Loopback interface doesn't learn MAC using ARP, add the remote IP & MAC manually
vppctl set ip neighbor loop0 10.0.2.0 aa:bb:cc:00:00:02


#expect Babel to create this route after learing from VPP2 neighbor
  #vppctl ip route add 10.0.2.0/32 via 10.130.0.2 WAN00
  #vppctl ip route add 10.0.2.0/32 via 10.140.0.2 WAN01

# Create or overwrite the babeld conf file
cat << 'EOF' > "/etc/babeld.conf"
# For more information about this configuration file, refer to
# babeld(8)
# babeld -c /etc/babeld.conf -d 10
# Enable babel on specific interfaces

local-port 33123

interface hWAN00
interface hWAN01

#export-table 100

#default unicast true

# Redistribute connected routes
#redistribute connected

# Redistribute static routes
#redistribute static

# Redistribute a specific IP prefix
redistribute ip 10.0.1.0/30

redistribute local deny
# Optional: Define filter rules (in/out)
# in filter allows controlling what you accept
# out filter allows controlling what you announce

EOF

#OSPF HOST SIDE
ip link set vxlanloop0 up
ip link set hWAN00 up
ip link set hWAN00 up

exit 0


hWAN00           UNKNOWN        10.130.0.1/24 2001::1/64 fe80::227c:14ff:fef4:34bf/64
hWAN01           UP             10.140.0.1/24 2002::1/64 fe80::227c:14ff:fef4:34c0/64
vxlanloop0       UP             10.0.1.0/30 fe80::a8bb:ccff:fe00:1/64

root@VPP1:/home/zwan# ping 2001::2
PING 2001::2(2001::2) 56 data bytes
64 bytes from 2001::2: icmp_seq=1 ttl=64 time=1.54 ms
64 bytes from 2001::2: icmp_seq=2 ttl=64 time=0.171 ms
^C

#RUN babeld
babeld -c /etc/babeld.conf -d 10
My id 22:7c:14:ff:fe:f4:34:b8 seqno 50388
10.0.1.0/30 from 0.0.0.0/0 metric 0 (exported)
Sending hello 7586 (400) to hWAN00.

My id 22:7c:14:ff:fe:f4:34:b8 seqno 50388
10.0.1.0/30 from 0.0.0.0/0 metric 0 (exported)
Sending hello 24590 (400) to hWAN01.



root@VPP1:/home/zwan# vppctl sh ip fib
ipv4-VRF:0, fib_index:0, flow hash:[src dst sport dport proto flowlabel ] epoch:0 flags:none locks:[adjacency:1, default-route:1, ]
0.0.0.0/0
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:1 buckets:1 uRPF:0 to:[0:0]]
    [0] [@0]: dpo-drop ip4
0.0.0.0/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:2 buckets:1 uRPF:1 to:[0:0]]
    [0] [@0]: dpo-drop ip4
10.0.1.0/30
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:27 buckets:1 uRPF:38 to:[0:0]]
    [0] [@4]: ipv4-glean: [src:10.0.1.0/30] loop0: mtu:9000 next:3 flags:[] ffffffffffffaabbcc0000010806
10.0.1.0/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:29 buckets:1 uRPF:39 to:[0:0]]
    [0] [@13]: dpo-receive: 10.0.1.0 on loop0
10.0.1.3/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:28 buckets:1 uRPF:37 to:[0:0]]
    [0] [@0]: dpo-drop ip4
10.0.2.0/32
  UNRESOLVED
10.130.0.0/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:18 buckets:1 uRPF:23 to:[0:0]]
    [0] [@0]: dpo-drop ip4
10.130.0.0/24
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:17 buckets:1 uRPF:22 to:[0:0]]
    [0] [@4]: ipv4-glean: [src:10.130.0.0/24] WAN00: mtu:9000 next:1 flags:[] ffffffffffff207c14f434bf0806
10.130.0.1/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:20 buckets:1 uRPF:27 to:[4:336]]
    [0] [@13]: dpo-receive: 10.130.0.1 on WAN00
10.130.0.2/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:30 buckets:1 uRPF:34 to:[0:0]]
    [0] [@5]: ipv4 via 10.130.0.2 WAN00: mtu:9000 next:5 flags:[] 207c14f434b6207c14f434bf0800
10.130.0.255/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:19 buckets:1 uRPF:25 to:[0:0]]
    [0] [@0]: dpo-drop ip4
10.140.0.0/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:24 buckets:1 uRPF:31 to:[0:0]]
    [0] [@0]: dpo-drop ip4
10.140.0.0/24
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:23 buckets:1 uRPF:41 to:[0:0]]
    [0] [@4]: ipv4-glean: [src:10.140.0.0/24] WAN01: mtu:9000 next:2 flags:[] ffffffffffff207c14f434c00806
10.140.0.1/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:26 buckets:1 uRPF:35 to:[0:0]]
    [0] [@13]: dpo-receive: 10.140.0.1 on WAN01
10.140.0.255/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:25 buckets:1 uRPF:33 to:[0:0]]
    [0] [@0]: dpo-drop ip4
224.0.0.0/4
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:4 buckets:1 uRPF:3 to:[0:0]]
    [0] [@0]: dpo-drop ip4
240.0.0.0/4
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:3 buckets:1 uRPF:2 to:[0:0]]
    [0] [@0]: dpo-drop ip4
255.255.255.255/32
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:5 buckets:1 uRPF:4 to:[0:0]]
    [0] [@0]: dpo-drop ip4
	
	
root@VPP1:/home/zwan# vppctl sh ip mfib
ipv4-VRF:0, fib_index:0 flags:none
(*, 0.0.0.0/0):  flags:Drop,
  Interfaces:
  multicast-ip4-chain
  [@0]: dpo-drop ip4
(*, 224.0.0.1/32):
  Interfaces:
   WAN01: Accept,
   loop0: Accept,
   WAN00: Accept,
  multicast-ip4-chain
  [@1]: dpo-replicate: [index:0 buckets:1 flags:[has-local ] to:[0:0]]
    [0] [@1]: dpo-receive
(*, 224.0.0.2/32):
  Interfaces:
   WAN01: Accept,
   loop0: Accept,
   WAN00: Accept,
  multicast-ip4-chain
  [@1]: dpo-replicate: [index:1 buckets:1 flags:[has-local ] to:[0:0]]
    [0] [@1]: dpo-receive
	
	
root@VPP1:/home/zwan# vppctl sh ip6 fib
ipv6-VRF:0, fib_index:0, flow hash:[src dst sport dport proto flowlabel ] epoch:0 flags:none locks:[adjacency:1, default-route:1, ]
::/0
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:6 buckets:1 uRPF:5 to:[0:0]]
    [0] [@0]: dpo-drop ip6
2001::/64
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:15 buckets:1 uRPF:20 to:[0:0]]
    [0] [@4]: ipv6-glean: [src:2001::/64] WAN00: mtu:9000 next:2 flags:[] ffffffffffff207c14f434bf86dd
2001::1/128
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:16 buckets:1 uRPF:21 to:[3:280]]
    [0] [@20]: dpo-receive: 2001::1 on WAN00
2001::2/128
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:31 buckets:1 uRPF:40 to:[0:0]]
    [0] [@5]: ipv6 via 2001::2 WAN00: mtu:9000 next:5 flags:[] 207c14f434b6207c14f434bf86dd
2002::/64
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:21 buckets:1 uRPF:26 to:[0:0]]
    [0] [@4]: ipv6-glean: [src:2002::/64] WAN01: mtu:9000 next:3 flags:[] ffffffffffff207c14f434c086dd
2002::1/128
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:22 buckets:1 uRPF:29 to:[0:0]]
    [0] [@20]: dpo-receive: 2002::1 on WAN01
fe80::/10
  unicast-ip6-chain
  [@0]: dpo-load-balance: [proto:ip6 index:7 buckets:1 uRPF:6 to:[0:0]]
    [0] [@14]: ip6-link-local
	
	
root@VPP1:/home/zwan# vppctl sh ip6 mfib
ipv6-VRF:0, fib_index 0
(*, ::/0):  flags:Drop,
  Interfaces:
  multicast-ip6-chain
  [@0]: dpo-drop ip6
(*, ff02::1/128):
  Interfaces:
   WAN01: Accept,
   WAN00: Accept,
  multicast-ip6-chain
  [@1]: dpo-replicate: [index:4 buckets:1 flags:[has-local ] to:[0:0]]
    [0] [@1]: dpo-receive
(*, ff02::2/128):
  Interfaces:
   WAN01: Accept,
   WAN00: Accept,
  multicast-ip6-chain
  [@1]: dpo-replicate: [index:3 buckets:1 flags:[has-local ] to:[0:0]]
    [0] [@1]: dpo-receive
(*, ff02::16/128):
  Interfaces:
   WAN01: Accept,
   WAN00: Accept,
  multicast-ip6-chain
  [@1]: dpo-replicate: [index:5 buckets:1 flags:[has-local ] to:[17:1972]]
    [0] [@1]: dpo-receive
(*, ff02::1:ff00:0/104):
  Interfaces:
   WAN01: Accept,
   WAN00: Accept,
  multicast-ip6-chain
  [@1]: dpo-replicate: [index:2 buckets:1 flags:[has-local ] to:[4:288]]
    [0] [@1]: dpo-receive



Trace at VPP1:
-------------
root@VPP1:/home/zwan# ./showtrace.sh
------------------- Start of thread 0 vpp_main -------------------
Packet 1

00:04:24:142986: virtio-input
  virtio: hw_if_index 5 next-index 4 vring 0 len 74
    hdr: flags 0x00 gso_type 0x00 hdr_len 0 gso_size 0 csum_start 0 csum_offset 0 num_buffers 1
00:04:24:143000: ethernet-input
  frame: flags 0x1, hw-if-index 5, sw-if-index 5
  IP6: 20:7c:14:f4:34:bf -> 33:33:00:01:00:06
00:04:24:143014: ip6-input
  UDP: fe80::227c:14ff:fef4:34bf -> ff02::1:6
    tos 0xc0, flow label 0xf2ebe, hop limit 1, payload length 20
00:04:24:143023: linux-cp-xc-ip6
  lcp-xc: itf:3 adj:1
00:04:24:143029: WAN00-output
  WAN00 flags 0x00180005
  IP6: 20:7c:14:f4:34:bf -> 33:33:00:01:00:06
  UDP: fe80::227c:14ff:fef4:34bf -> ff02::1:6
    tos 0xc0, flow label 0xf2ebe, hop limit 1, payload length 20
00:04:24:143039: WAN00-tx
  WAN00 tx queue 0
  buffer 0x9e453: current data 0, length 74, buffer-pool 0, ref-count 1, trace handle 0x0
                  l2-hdr-offset 0 l3-hdr-offset 14
  PKT MBUF: port 65535, nb_segs 1, pkt_len 74
    buf_len 2176, data_len 74, ol_flags 0x0, data_off 128, phys_addr 0x2791540
    packet_type 0x0 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0
    rss 0x0 fdir.hi 0x0 fdir.lo 0x0
  IP6: 20:7c:14:f4:34:bf -> 33:33:00:01:00:06
  UDP: fe80::227c:14ff:fef4:34bf -> ff02::1:6
    tos 0xc0, flow label 0xf2ebe, hop limit 1, payload length 20

Packet 2

00:04:24:608684: dpdk-input
  WAN00 rx queue 0
  buffer 0x97a24: current data 0, length 74, buffer-pool 0, ref-count 1, trace handle 0x1
                  ext-hdr-valid
  PKT MBUF: port 2, nb_segs 1, pkt_len 74
    buf_len 2176, data_len 74, ol_flags 0x180, data_off 128, phys_addr 0x25e8980
    packet_type 0x241 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0
    rss 0x0 fdir.hi 0x0 fdir.lo 0x0
    Packet Offload Flags
      PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid
      PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid
    Packet Types
      RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet
      RTE_PTYPE_L3_IPV6 (0x0040) IPv6 packet without extension headers
      RTE_PTYPE_L4_UDP (0x0200) UDP packet
  IP6: 20:7c:14:f4:34:b6 -> 33:33:00:01:00:06
  UDP: fe80::227c:14ff:fef4:34b6 -> ff02::1:6
    tos 0xc0, flow label 0x3d12, hop limit 1, payload length 20
00:04:24:608699: ethernet-input
  frame: flags 0x3, hw-if-index 3, sw-if-index 3
  IP6: 20:7c:14:f4:34:b6 -> 33:33:00:01:00:06
00:04:24:608709: ip6-input
  UDP: fe80::227c:14ff:fef4:34b6 -> ff02::1:6
    tos 0xc0, flow label 0x3d12, hop limit 1, payload length 20
00:04:24:608712: ip6-mfib-forward-lookup
  fib 0 entry 3
00:04:24:608718: ip6-mfib-forward-rpf
  entry 3 itf -1 flags
00:04:24:608721: ip6-drop
    fib:0 adj:3 flow:0x00000000
  UDP: fe80::227c:14ff:fef4:34b6 -> ff02::1:6
    tos 0xc0, flow label 0x3d12, hop limit 1, payload length 20
00:04:24:608727: error-drop
  rx:WAN00
00:04:24:608732: drop
  ip6-input: Multicast RPF check failed


------

Without VPP, babeld worked over host interfaces:

My id 22:7c:14:ff:fe:f4:34:b8 seqno 50393
Neighbour fe80::41bc:6679:8288:7ba9 dev eno4 reach ff80 ureach 0000 rxcost 96 txcost 96 rtt 0.000 rttcost 0 chan -2.
Neighbour fe80::699:5600:b589:efa8 dev eno3 reach ff00 ureach 0000 rxcost 96 txcost 96 rtt 0.000 rttcost 0 chan -2.
172.1.0.0/24 from 0.0.0.0/0 metric 0 (exported)
172.2.0.0/24 metric 96 (154) refmetric 0 id 22:7c:14:ff:fe:f4:34:af seqno 28661 age 11 via eno4 neigh fe80::41bc:6679:8288:7ba9 nexthop 10.140.0.2 (installed)
172.2.0.0/24 metric 96 (205) refmetric 0 id 22:7c:14:ff:fe:f4:34:af seqno 28661 age 4 via eno3 neigh fe80::699:5600:b589:efa8 nexthop 10.130.0.2 (feasible)
Received hello 1327 (400) from fe80::41bc:6679:8288:7ba9 on eno4.

ip r
172.2.0.0/24 via 10.140.0.2 dev eno4 proto babel onlink
#**********VPP2 (ubuntu 22.04.5 LTS) ***************
vppctl sh version
#-> vpp v25.10-rc0~210-g8941f9ade built by root on VPP2 at 2025-08-06T17:20:06

#vppctl lcp default
vppctl lcp lcp-sync  enable
vppctl lcp lcp-sync  on
vppctl lcp lcp-auto-subint enable
vppctl lcp lcp-auto-subint on

#WAN00 <- TenGigabitEthernetc/0/0
#WAN01 <- TenGigabitEthernetc/0/1
#LAN00 <- TenGigabitEthernetb/0/0
#LAN01 <- TenGigabitEthernetb/0/1

# Bringup the WAN interfaces
# Assign IP address for WAN Interfaces
vppctl lcp create WAN00 host-if hWAN00
vppctl set int ip address WAN00 10.130.0.2/24
vppctl set int ip address WAN00 2001::2/64
vppctl lcp create WAN01 host-if hWAN01
vppctl set int ip address WAN01 10.140.0.2/24
vppctl set int ip address WAN01 2002::2/64

vppctl set int state WAN00 up
vppctl set int state WAN01 up

# Create a Loopback interfaces
vppctl create loopback interface mac aa:bb:cc:00:00:02 instance 0
vppctl lcp create loop0 host-if vxlanloop0
vppctl set int ip address loop0 10.0.2.0/30
vppctl set int state loop0 up


# As the Loopback interface doesn't learn MAC using ARP, add the remote IP & MAC manually
vppctl set ip neighbor loop0 10.0.1.0 aa:bb:cc:00:00:01

#expect Babel to create this route after learing from VPP1 neighbor
  #vppctl ip route add 10.0.1.0/32 via 10.130.0.1 WAN00
  #vppctl ip route add 10.0.1.0/32 via 10.140.0.1 WAN01


# Create or overwrite the babeld conf file
cat << 'EOF' > "/etc/babeld.conf"
# For more information about this configuration file, refer to
# babeld(8)
# babeld -c /etc/babeld.conf -d 10
# Enable babel on specific interfaces

local-port 33123

interface hWAN00
interface hWAN01

#export-table 100

#default unicast true

# Redistribute connected routes
#redistribute connected

# Redistribute static routes
#redistribute static

# Redistribute a specific IP prefix
redistribute ip 10.0.2.0/30

redistribute local deny
# Optional: Define filter rules (in/out)
# in filter allows controlling what you accept
# out filter allows controlling what you announce

EOF




-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#26256): https://lists.fd.io/g/vpp-dev/message/26256
Mute This Topic: https://lists.fd.io/mt/114650700/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/14379924/21656/631435203/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to