Multicast VPN - The New Way

Multicast VPN - The New Way

The new way refers to the setting up of Multipoint LSP in the MPLS VPN environment to carry multicast traffic in the VPN. Here, all CE routers belong to a single customer at different branches. There is no multicast receiver behind CE3 router. The MPLS core is PIM-free. Only PE routers will run PIM with the CE routers.

PE routers configuration

The Loopback 0 interface of PE1 router is configured to be used as the Root Node IP address. The Opaque value for the multipoint LSP is constructed based on the VPN ID value of 1:1. The mdt default mpls mldp command creates the MP2MP LSP known to all PE routers for that particular VRF. This LSP is used to forward all customer multicast traffic by default.

PE1 router

ip vrf CUST1
 rd 1:1
 vpn id 1:1                             ! This is used to construct the Opaque value
 route-target both 1:1

mdt default mpls mldp 1.1.1.1 ! 1.1.1.1 indicates the Root node and creates the shared MP2MP LSP between PE2 and PE3 routers for vrf CUST1

!
interface Loopback 0
 ip address 1.1.1.1 255.255.255.255
 ip ospf 1 area 0
!
ip multicast-routing vrf CUST1          ! Enabled Multicast routing for VRF CUST1
!
ip pim vrf CUST1 rp-address 12.1.1.1
!
interface fastethernet 1/1
 ip vrf forwarding CUST1
 ip address 192.168.1.1 255.255.255.0
 ip pim sparse-mode
!
router bgp 100
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback 0
 neighbor 4.4.4.4 remote-as 100
 neighbor 4.4.4.4 update-source Loopback 0
 !
 address-family vpnv4
 neighbor 3.3.3.3 activate
 neighbor 4.4.4.4 activate
 exit-address-family
 !
 address-family ipv4 vrf CUST1
 redistribute connected
 exit-address-family
!

The configuration of PE2 and PE3 is same as PE1 router.

PE2 router

ip vrf CUST1
 rd 1:1
 vpn id 1:1       
 route-target both 1:1

mdt default mpls mldp 1.1.1.1

!
interface Loopback 0
 ip address 3.3.3.3 255.255.255.255
 ip ospf 1 area 0
!
ip multicast-routing vrf CUST1        
!
ip pim vrf CUST1 rp-address 12.1.1.1
!
interface fastethernet 1/1
 ip vrf forwarding CUST1
 ip address 192.168.2.1 255.255.255.0
 ip pim sparse-mode
!
router bgp 100
 neighbor 1.1.1.1 remote-as 100
 neighbor 1.1.1.1 update-source Loopback 0
 neighbor 4.4.4.4 remote-as 100
 neighbor 4.4.4.4 update-source Loopback 0
 !
 address-family vpnv4
 neighbor 1.1.1.1 activate
 neighbor 4.4.4.4 activate
 exit-address-family
 !
 address-family ipv4 vrf CUST1
 redistribute connected
 exit-address-family
!

PE3 router

ip vrf CUST1
 rd 1:1
 vpn id 1:1       
 route-target both 1:1

mdt default mpls mldp 1.1.1.1

!
interface Loopback 0
 ip address 4.4.4.4 255.255.255.255
 ip ospf 1 area 0
!
ip multicast-routing vrf CUST1        
!
ip pim vrf CUST1 rp-address 12.1.1.1
!
interface fastethernet 1/1
 ip vrf forwarding CUST1
 ip address 192.168.3.1 255.255.255.0
 ip pim sparse-mode
!
router bgp 100
 neighbor 1.1.1.1 remote-as 100
 neighbor 1.1.1.1 update-source Loopback 0
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback 0
 !
 address-family vpnv4
 neighbor 1.1.1.1 activate
 neighbor 3.3.3.3 activate
 exit-address-family
 !
 address-family ipv4 vrf CUST1
 redistribute connected
 exit-address-family
!

No multicast traffic is sent by CE routers at this stage.

MP2MP LSP (Default MDT)

When remote PE routers peer with PE1 router, they discover the Root node. PE2 and PE3 routers allocate a label mapping for {1.1.1.1, 100:1} and sends the MP2MP-D Label Mapping to P router. The P router allocates a label and responds with MP2MP-U Label Mapping. It also sends a MP2MP-D Label Mapping to the PE1 router (Root node) and anticipates an MP2MP-U Label Mapping.

The following shows the output of debug mpls mldp all command. PE1 also forms PIM adjacency with PE2 and PE3 via Lspvif0 interface.

"debug mpls mldp all" on PE1

PE1#
*May 12 23:08:42.243: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet1/0 from LOADING to FULL, Loading Done
PE1#
*May 12 23:08:53.399: %LDP-5-NBRCHG: LDP Neighbor 2.2.2.2:0 (1) is UP
*May 12 23:08:53.431: MLDP-NBR: 2.2.2.2:0 UP sess_hndl: 2, (old ID: 0.0.0.0:0)
*May 12 23:08:53.435: MLDP-NBR: Route watch started for 2.2.2.2 topology: base ipv4
*May 12 23:08:53.439: MLDP-NBR: 2.2.2.2:0 old paths: 0 new paths: 1
*May 12 23:08:53.439: MLDP-NBR: 2.2.2.2:0 ask LDP for adjacencies
*May 12 23:08:53.535: MLDP-NBR: 2.2.2.2:0 LDP update NH: 10.1.1.2, Interface: FastEthernet1/0 Add
*May 12 23:08:53.559: MLDP-NBR: 2.2.2.2:0 Check branches for path change
*May 12 23:08:54.655: MLDP-LDP: [mdt 1:1 0] label mapping from: 2.2.2.2:0 label: 21 root: 1.1.1.1 Opaque_len: 14 sess_hndl: 0x2
*May 12 23:08:54.671: MLDP-MFI: [mdt 1:1 0] allocated upstream label 19
*May 12 23:08:54.675: MLDP-MFI: Bind local upstream label 19 to PSM ID: 4A000005  returned: 19
*May 12 23:08:54.679: MLDP-DB: [mdt 1:1 0] Changing branch 2.2.2.2:0 from Null/0.0.0.0 to FastEthernet1/0/10.1.1.2
*May 12 23:08:54.683: MLDP-DB: [mdt 1:1 0] Added MP2MP branch for 2.2.2.2:0 labePE1# upstream local label 19
*May 12 23:08:54.695: MLDP-MFI: PSM-ID: 8A000001, Add Path type: PKT, Label: 21, Nexthop: 2.2.2.2, Interface: NULL
*May 12 23:08:54.703: MLDP-MFI: PSM-ID: 98000002, Add Path type: PKT, Label: 21, Nexthop: 2.2.2.2, Interface: NULL
*May 12 23:08:54.707: MLDP-MFI: PSM-ID: 4A000005, Add Path type: REC_IF, Interface: Lspvif0
*May 12 23:08:54.715: MLDP: [mdt 1:1 0] label mappping msg sent to 2.2.2.2:0 success
*May 12 23:08:54.719: MLDP: Flush ldp message queue for 2.2.2.2:0 success
*May 12 23:08:57.739: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up

PE1 has no PIM adjacency with P router. However, it has PIM adjacency with PE2 and PE3 routers via Lspvif0 interface.

PIM Adjacencies

!--- The following output shows no PIM adjacencies within MPLS core
PE1# show ip pim neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
PE1#
!--- The following output shows PIM adjacencies with CE1 router, PE2 and PE3 routers
PE1# show ip pim vrf CUST1 neighbor
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
192.168.1.2       FastEthernet1/1          00:01:03/00:01:40 v2    1 / DR S G
4.4.4.4           Lspvif0                  00:26:24/00:01:25 v2    1 / DR S P G
3.3.3.3           Lspvif0                  00:28:36/00:01:23 v2    1 / S P G

The show mpls mldp neighbor command shows mLDP neighbors and the paths taken.

show mpls mldp neighbors

PE1# show mpls mldp neighbors
 MLDP peer ID    : 2.2.2.2:0, uptime 00:06:54 Up,
  Target Adj     : No
  Session hndl   : 2
  Upstream count : 0
  Branch count   : 1
  Path count     : 1
  Path(s)        : 10.1.1.2          LDP FastEthernet1/0
  Nhop count     : 0

The show mpls mldp database command shows the following information. The Replication Clients are the downstream nodes of the MP2MP LSP. They are to receive multipoint replicated traffic. On the Root node and Leaf nodes, the Replication Clients will the Multicast-enabled VRF which uses Lspvif0 interface as the ingress interface.

show mpls mldp database on PE1

PE1# show mpls mldp database
  * Indicates MLDP recursive forwarding is enabled
LSM ID : 4D000001 (RNR LSM ID: 7F000002)   Type: MP2MP   Uptime : 00:28:58
  FEC Root           : 1.1.1.1 (we are the root)
  Opaque decoded     : [mdt 1:1 0]
  Opaque length      : 11 bytes
  Opaque value       : 07 000B 0000010000000100000000
  RNR active LSP     : (this entry)
  Upstream client(s) :
    None
      Expires        : N/A           Path Set ID  : 8A000001
  Replication client(s):
    MDT  (VRF CUST1)
      Uptime         : 00:28:58      Path Set ID  : 98000002
      Interface      : Lspvif0
    2.2.2.2:0
      Uptime         : 00:15:46      Path Set ID  : 4A000005
      Out label (D)  : 21            Interface    : FastEthernet1/0*
      Local label (U): 19            Next Hop     : 10.1.1.2

The same command on P routers shows its Upstream and Downstream nodes, and the labels to be used. On P router, the Upstream Client will be the Root node (PE1) while the Replication Clients will be the Leaf nodes (PE2 and PE3).

show mpls mldp database on P

P# show mpls mldp database
  * Indicates MLDP recursive forwarding is enabled
LSM ID : DA000002   Type: MP2MP   Uptime : 00:16:07
  FEC Root           : 1.1.1.1
  Opaque decoded     : [mdt 1:1 0]
  Opaque length      : 11 bytes
  Opaque value       : 07 000B 0000010000000100000000
  Upstream client(s) :
    1.1.1.1:0    [Active]
      Expires        : Never         Path Set ID  : F9000004
      Out Label (U)  : 19            Interface    : FastEthernet1/0*
      Local Label (D): 21            Next Hop     : 10.1.1.1
  Replication client(s):
    3.3.3.3:0
      Uptime         : 00:16:07      Path Set ID  : 11000005
      Out label (D)  : 16            Interface    : FastEthernet1/1*
      Local label (U): 19            Next Hop     : 10.1.1.6
    4.4.4.4:0
      Uptime         : 00:16:07      Path Set ID  : 5C000006
      Out label (D)  : 17            Interface    : FastEthernet2/0*
      Local label (U): 18            Next Hop     : 10.2.2.2

"show mpls mldp neighbors" on PE2 and PE3

PE2# show mpls mldp database
  * Indicates MLDP recursive forwarding is enabled
LSM ID : 7A000001 (RNR LSM ID: 88000002)   Type: MP2MP   Uptime : 00:25:34
  FEC Root           : 1.1.1.1
  Opaque decoded     : [mdt 1:1 0]
  Opaque length      : 11 bytes
  Opaque value       : 07 000B 0000010000000100000000
  RNR active LSP     : (this entry)
  Upstream client(s) :
    2.2.2.2:0    [Active]
      Expires        : Never         Path Set ID  : 45000001
      Out Label (U)  : 19            Interface    : FastEthernet1/0*
      Local Label (D): 16            Next Hop     : 10.1.1.5
  Replication client(s):
    MDT  (VRF CUST1)
      Uptime         : 00:25:34      Path Set ID  : B9000002
      Interface      : Lspvif0
PE3# show mpls mldp database
  * Indicates MLDP recursive forwarding is enabled
LSM ID : 78000001 (RNR LSM ID: DC000002)   Type: MP2MP   Uptime : 00:23:40
  FEC Root           : 1.1.1.1
  Opaque decoded     : [mdt 1:1 0]
  Opaque length      : 11 bytes
  Opaque value       : 07 000B 0000010000000100000000
  RNR active LSP     : (this entry)
  Upstream client(s) :
    2.2.2.2:0    [Active]
      Expires        : Never         Path Set ID  : E6000001
      Out Label (U)  : 18            Interface    : FastEthernet1/0*
      Local Label (D): 17            Next Hop     : 10.2.2.1
  Replication client(s):
    MDT  (VRF CUST1)
      Uptime         : 00:23:40      Path Set ID  : B1000002
      Interface      : Lspvif0

The show mpls mldp bindings command shows the Upstream and Downstream label assignment on the routers.

show mpls mldp bindings

PE1# show mpls mldp bindings
System ID: 4D000001
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 2.2.2.2:0, local binding[U]: 21, remote binding[D]: 21
P# show mpls mldp bindings
System ID: DA000002
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 1.1.1.1:0, remote binding[U]: 21, local binding[D]: 21 active
lsr: 3.3.3.3:0, local binding[U]: 16, remote binding[D]: 16
lsr: 4.4.4.4:0, local binding[U]: 17, remote binding[D]: 17
PE2# show mpls mldp bindings
System ID: 7A000001
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 2.2.2.2:0, remote binding[U]: 16, local binding[D]: 16 active
PE3# show mpls mldp bindings
System ID: 78000001
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 2.2.2.2:0, remote binding[U]: 17, local binding[D]: 17 active

Now multicast traffic is sourced from CE1 router with CE2 being the multicast receiver. For PE1 router, the incoming interface is the interface connected to the CE1 router. The outgoing interface will be Lspvif0.

PE1# show ip mroute vrf CUST1 239.10.10.1
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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.10.10.1), 00:00:55/stopped, RP 12.1.1.1, flags: SP
  Incoming interface: Lspvif0, RPF nbr 3.3.3.3
  Outgoing interface list: Null
(192.168.1.2, 239.10.10.1), 00:00:55/00:02:04, flags: T
  Incoming interface: FastEthernet1/1, RPF nbr 192.168.1.2
  Outgoing interface list:
    Lspvif0, Forward/Sparse, 00:00:50/00:02:39

PE2 router will receive the multicast traffic on incoming interface Lspvif0 and outgoing interface will be Fa 1/1 connected to CE2 router.

show ip mroute vrf CUST1 on PE2

PE2# show ip mroute vrf CUST1 239.10.10.1
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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.10.10.1), 00:02:48/stopped, RP 12.1.1.1, flags: SP
  Incoming interface: FastEthernet1/1, RPF nbr 192.168.2.2
  Outgoing interface list: Null
(192.168.1.2, 239.10.10.1), 00:01:51/00:01:38, flags: T
  Incoming interface: Lspvif0, RPF nbr 1.1.1.1
  Outgoing interface list:
    FastEthernet1/1, Forward/Sparse, 00:01:51/00:03:01

P2MP LSP (Data MDT)

The P2MP LSP can be configured as follows.

PE1 router

ip vrf CUST1
 rd 1:1
 vpn id 1:1
 route-target both 1:1
 mdt default mpls mldp 1.1.1.1
 mdt data threshold 1            ! This will cause Leaf nodes to switchover to P2MP LSP (Data MDT) when the traffic crosses the threshold of 1 kbps
 mdt data mpls mldp 10           ! Only 10 P2MP LSPs are allowed per VRF using this           
!

Now when multicast traffic from CE1 router to CE2 router crosses the threshold of 1 kbps (default), Leaf nodes initiates P2MP LSP set up.

P2MP LSP setup

*May 12 23:41:42.907: MLDP-MDT: [mdt 1:1 1] wavl insert success
*May 12 23:41:42.923: MLDP-MDT: [mdt 1:1 1] client update: We are the root
*May 12 23:41:42.927: MLDP-MDT: [mdt 1:1 1] create adjacency for root update, success
*May 12 23:41:42.931: MLDP-MFI: Attached adj 225.0.0.0 to 3A000006
*May 12 23:41:42.935: MLDP-DB: [mdt 1:1 1] Added P2MP branch for MDT label
*May 12 23:41:42.939: MLDP-MDT: [mdt 1:1 1] client update: We are the root
*May 12 23:41:42.943: MLDP-MFI: Attached adj 225.0.0.0 to 3A000006
*May 12 23:41:44.035: MLDP-LDP: [mdt 1:1 1] label mapping from: 2.2.2.2:0 label: 22 root: 1.1.1.1 Opaque_len: 14 sess_hndl: 0x2
*May 12 23:41:44.051: MLDP-DB: [mdt 1:1 1] Changing branch 2.2.2.2:0 from Null/0.0.0.0 to FastEthernet1/0/10.1.1.2
*May 12 23:41:44.055: MLDP-DB: [mdt 1:1 1] Added P2MP branch for 2.2.2.2:0 label 22
*May 12 23:41:44.063: MLDP-MFI: PSM-ID: 3A000006, Add Path type: PKT, Label: 22, Nexthop: 2.2.2.2, Interface: NULL

The following output shows that PE2 router joined MDT-data group. The flag "Y" indicates this.

Text Box

PE2# show ip mroute vrf CUST1 239.10.10.1
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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.10.10.1), 00:07:10/stopped, RP 12.1.1.1, flags: SP
  Incoming interface: FastEthernet1/1, RPF nbr 192.168.2.2
  Outgoing interface list: Null
(192.168.1.2, 239.10.10.1), 00:00:55/00:02:34, flags: TY
  Incoming interface: Lspvif0, RPF nbr 1.1.1.1, MDT: [1, 1.1.1.1]/00:02:10
  Outgoing interface list:
    FastEthernet1/1, Forward/Sparse, 00:00:55/00:02:40

The PE1 router then sends all multicast traffic to P2MP LSP. The flag "y" indicates this.

PE1 sends multicast traffic to MDT-data group

PE1# show ip mroute vrf CUST1 239.10.10.1
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,
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.10.10.1), 00:06:04/stopped, RP 12.1.1.1, flags: SP
  Incoming interface: Lspvif0, RPF nbr 3.3.3.3
  Outgoing interface list: Null
(192.168.1.2, 239.10.10.1), 00:00:35/00:00:26, flags: Ty
  Incoming interface: FastEthernet1/1, RPF nbr 192.168.1.2
  Outgoing interface list:
    Lspvif0, Forward/Sparse, 00:03:03/00:02:49

The show mpls mldp bindings command shows new labels assigned for P2MP LSP.

P2MP LSP labels

PE1# show mpls mldp bindings
System ID: 4
Type: P2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 1]
lsr: 2.2.2.2:0, remote binding[D]: 22
System ID: 4D000001
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 2.2.2.2:0, local binding[U]: 21, remote binding[D]: 21
PE2# show mpls mldp bindings
System ID: E2000004
Type: P2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 1]
lsr: 2.2.2.2:0, local binding[D]: 22 active
System ID: 7A000001
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 2.2.2.2:0, remote binding[U]: 16, local binding[D]: 16 active
PE3# show mpls mldp bindings
System ID: 78000001
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 2.2.2.2:0, remote binding[U]: 17, local binding[D]: 17 active
P# show mpls mldp bindings
System ID: 41000004
Type: P2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 1]
lsr: 1.1.1.1:0, local binding[D]: 22 active
lsr: 3.3.3.3:0, remote binding[D]: 22
System ID: DA000002
Type: MP2MP, Root Node: 1.1.1.1, Opaque Len: 14
Opaque value: [mdt 1:1 0]
lsr: 1.1.1.1:0, remote binding[U]: 21, local binding[D]: 21 active
lsr: 3.3.3.3:0, local binding[U]: 16, remote binding[D]: 16
lsr: 4.4.4.4:0, local binding[U]: 17, remote binding[D]: 17