I have a problem implementing Multicast in a small provider with some VRFs.
Attached is a diagram that can be used to better understand the typology.
As you can see we have two types of routers R1 is an XR and R2 is an xe, in both routers we have the vrf XXX.
The two routers are connected in MPLS through a cisco dwdm.
The client of vrf XXX needs to install a device that needs multicast traffic.
I configured the two nodes as per the extract, but something is missing in my opinion.
R1 --------------------- multicast-routing address-family ipv4 interface Loopback86 enable ! interface TenGigE0/1/1/4 enable ! ! vrf XXX address-family ipv4 interface Loopback20 enable ! interface TenGigE0/1/1/1 enable ! ! ! ! router igmp interface Loopback86 version 2 ! interface TenGigE0/1/1/4 version 2 ! vrf XXX interface Loopback20 join-group 184.108.40.206 version 2 ! interface TenGigE0/1/1/1 version 2 ! ! ! R2 --------------------- ip multicast-routing distributed ip multicast-routing vrf XXX distributed interface Loopback20 description Loopback vrf XXX ip vrf forwarding XXX ip address aaa.aaa.aaa.aaa 255.255.255.255 ip pim sparse-dense-mode ! interface Loopback86 description Loopback global ip address bbb.bbb.bbb.bbb 255.255.255.255 ip pim sparse-dense-mode ! interface TenGigabitEthernet0/1/1 mtu 9148 ip address ccc.ccc.ccc.ccc 255.255.255.252 ip pim sparse-dense-mode ip ospf network point-to-point mpls ip cdp enable ! ip pim vrf XXX rp-address <Loopback 20 R1 >
In R2 I can't see the route for group 220.127.116.11 Do you think I am missing something?
sh ip mroute vrf XXX IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 18.104.22.168), 00:55:59/00:02:30, RP 10.86.20.1, flags: SJCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Loopback20, Forward/Sparse-Dense, 00:55:59/00:02:30
"Do you think I am missing something?"
Yes! I think quite a few things. I would start by saying that you have to clarify what profile you are using or intending to use? To have a better idea you should start by looking at the IOS XR documentation and IOS XE documentation. In general my feeling is that there's a little bit of confusion here (IGMP join commands on PEs as well as terminology is not super clear).
The following examples are based on the assumption that we are working in a MPLS L3VPN environment where things work and LDP is the protocol used to assign/distribute labels in the core. If that's not the case then we should probably start from building the backbone for L3VPN.
When it comes to Multicast VPNs (that's what you want yeah?) let's assume you want PIM in the core, here's the config of one PE (the other will be practically the same thing):
router bgp 123 address-family ipv4 mdt ! neighbor 22.214.171.124 <-- other PE or RR for the IPv4 mdt AF address-family ipv4 mdt ! multicast-routing address-family ipv4 mdt source Loopback0 <-- loopback 0 is used for MPLS reachability and needs to be enabled interface all enable ! vrf XXX address-family ipv4 mdt data 126.96.36.199/24 mdt default ipv4 188.8.131.52 interface all enable <-- enable all the interfaces in the vrf XXX ! end
Now just to make another example let's assume you do not want PIM in the core, but rather implement MLDP here's the config of one PE (the other will be practically the same thing:
! vrf XXX vpn id 1:1 ! mpls ldp mldp logging notifications address-family ipv4 ! ! ! multicast-routing address-family ipv4 interface lo0 enable ! vrf XXX address-family ipv4 mdt source lo0 mdt default mldp ipv4 184.108.40.206 interface all enable ! ! ! router pim vrf cust_2 address-family ipv4 rpf topology route-policy rpf-for-XXX ! ! ! ! route-policy rpf-for-XXX set core-tree mldp-default end-policy end
I would rather skip the rest of profile configuration examples as each might slightly differ from the rest based on specific requirements and different scenarios.
IGMP join should not be on PEs but rather on the client itself, not sure why you would have it on the PE to be honest.
Thanks for your help.
I confirm that we are working in a fully functional MPLS L3VPN network and LDP is the protocol we are using for the distribution of the labels in the core.
This scenario is a lab created in EVE-NG to test multicast, for this reason I perform the join from the PE but in reality it will be in the CE (C9400).
The network in production is made up of 20 routers which have a relationship in BGP with the RR.
The purpose of my LAB is to carry the multicast through MLDP, I believe the profile is 6.
I try to configure and update you, thanks again