LDP to SR Migration : This is an advantage that our network data plane is MPLS as we can achieve many services like MPLS VPN, VPLS and MPLS traffic engineering, but there are many options for the control plane when data plane is MPLS like LDP, RSVP-TE and segment routing.
People used to use LDP or RSVP-TE to provide the control plane function of the MPLS services but today people are trying to migrate to segment routing as their control plane since they can achieve improved services. As a result, it often happens that multiple MPLS control-plane protocols coexist at the same time.
Now the question is, How the coexistence of various different control plane protocols is managed on MPLS network?
To answer this question, we will discuss two important applications of LDP and SR coexistence. In this video we discuss migrating from LDP to SR to achieve a new enhanced function of traffic engineering and protection in segment routing network . This requires all routers in the network to support SR.
In the next video, we will discuss how LDP and SR interwork. This happens when some routers are only supporting LDP control plane protocol and do not support SR.
LDP or Segment Routing
what happens if both LDP and SR are enabled on the network? And labels from which protocol are used for MPLS forwarding? LDP or SR? Where and how exactly it is decided to use LDP labels or SR labels?
The answer to this question is simple. The label range with LDP and SR are different and at the edge of the network where IP traffic enters the MPLS network, we can determine which one to use. By default, LDP labels are preferred, but we have the option to change the preference.
LDP and Segment Routing coexistence
LDP to SR Migration Implementation
To better understand, let’s implement a real LDP to SR migration. In this topology, we suppose that LDP is already running in the network and we are going to migrate to segment routing.
Routers xv1 and xrv6 are our edge routers. The addresses of the loopback interfaces range from 1.1.1.1 to 6.6.6.6 according to the router numbers. The subnet of the links between routers also depends on the router number. For example, 10.1.2.x is selected for the subnet between routers xrv1 and xrv2. The last digit of the IP address is the router number.
In the picture you can see both the initial configuration and the migration process.
!!! migration from LDP to SR process
• Initial state: All nodes run LDP, not SR
• Step1: All nodes are upgraded to SR
– In no particular order
• Step2: All PEs are configured to prefer SR
– In no particular order
• Step3: LDP is removed from the nodes
– In no particular order
• Final state: All nodes run SR, not LDP
At initial, all routers run only LDP.
!!! xrv1
mpls ldp
!
router ospf 1
router-id 1.1.1.1
mpls ldp auto-config
address-family ipv4 unicast
area 0
interface Loopback0
passive enable
!
interface GigabitEthernet0/0/0/0
network point-to-point
At step1 we configure segment routing in all routers in no particular order. Order is not important since by default LDP is preferred and segment routing labels are not used.
At the second step we change the preference from LDP to segment routing just in Edge routers and in no particular orders. Order is not important since it is possible , if in in one edge router, incoming traffic be forwarded with segment routing labels and in other edge, incoming traffic be forwarded with LDP labels. so you can change the preference in edge routers from LDP to SR gradually and in your own plan.
In the next step you can remove LDP from the network if you wish.
The configuration from each step is show here.
Step 0: LDP as Initial State
At initial, LDP is already running in our network with two commands. “mpls ldp” in the global configuration mode and “mpls ldp auto-config” in our IGP, which is OSPF in our scenario.
• Initial state: All nodes run LDP, not SR
mpls ldp
!
router ospf 1
address-family ipv4 unicast
mpls ldp auto-config
now, we trace from xrv1 to xrv6 to see which labels are used.
RP/0/RP0/CPU0:xrv1#traceroute 6.6.6.6 source 1.1.1.1
Sun Jun 27 21:03:11.833 UTC
Type escape sequence to abort.
Tracing the route to 6.6.6.6
1 10.1.2.2 [MPLS: Label 24012 Exp 0] 50 msec 73 msec 45 msec
2 10.2.4.4 [MPLS: Label 24007 Exp 0] 62 msec 63 msec 66 msec
3 10.4.5.5 [MPLS: Label 24004 Exp 0] 64 msec 65 msec 66 msec
4 10.5.6.6 65 msec * 63 msec
these labels belong to the LDP protocol. To make sure, we use “show mpls ldp binding” command.
RP/0/RP0/CPU0:xrv1#show mpls ldp bindings
Mon Jun 28 21:16:46.089 UTC
1.1.1.1/32, rev 2
Local binding: label: ImpNull
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 24008
2.2.2.2/32, rev 60
Local binding: label: 24000
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 ImpNull
4.4.4.4/32, rev 57
Local binding: label: 24002
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 24010
5.5.5.5/32, rev 55
Local binding: label: 24003
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 24011
6.6.6.6/32, rev 24
Local binding: label: 24008
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 24012
10.1.2.0/24, rev 4
Local binding: label: ImpNull
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 ImpNull
10.2.4.0/24, rev 26
Local binding: label: 24010
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 ImpNull
10.4.5.0/24, rev 30
Local binding: label: 24014
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 24016
10.5.6.0/24, rev 32
Local binding: label: 24016
Remote bindings: (1 peers)
Peer Label
----------------- ---------
2.2.2.2:0 24018
RP/0/RP0/CPU0:xrv1#
You can also use “show cef 6.6.6.6/32” to check whether LDP labels are used for incoming IP traffic.
RP/0/RP0/CPU0:xrv1#show cef 6.6.6.6/32
Mon Jun 28 20:40:07.177 UTC
6.6.6.6/32, version 239, internal 0x1000001 0x0 (ptr 0xe029778) [1], 0x0 (0xe1ec2e8), 0xa28 (0xeb79768)
Updated Jun 28 19:53:09.665
remote adjacency to GigabitEthernet0/0/0/0
Prefix Len 32, traffic index 0, precedence n/a, priority 3
via 10.1.2.2/32, GigabitEthernet0/0/0/0, 4 dependencies, weight 0, class 0 [flags 0x0]
path-idx 0 NHID 0x0 [0xf104380 0x0]
next hop 10.1.2.2/32
remote adjacency
local label 24008 labels imposed {24012}
Step 1: Enable Segment routing
In step 1, we activate segment routing with two commands in the OSPF configuration mode. “segment routing mpls” and “segment routing forwarding mpls”. The prefix-SID of the loopback interface is also configured from index 1 to index 6 according to the router number.
• Step1: All nodes are upgraded to SR
– In no particular order
router ospf 1
segment-routing mpls
segment-routing forwarding mpls
area 0
interface Loopback0
passive enable
prefix-sid index 1
Again we trace from the router xrv1 to xrv6. It is expected that the LDP label will continue to be used for MPLS forwarding as it has a higher priority by default.
RP/0/RP0/CPU0:xrv1#traceroute 6.6.6.6 source 1.1.1.1
Mon Jun 28 20:42:58.540 UTC
Type escape sequence to abort.
Tracing the route to 6.6.6.6
1 10.1.2.2 [MPLS: Label 24012 Exp 0] 122 msec 90 msec 100 msec
2 10.2.4.4 [MPLS: Label 24007 Exp 0] 110 msec 90 msec 95 msec
3 10.4.5.5 [MPLS: Label 24004 Exp 0] 105 msec 88 msec 89 msec
4 10.5.6.6 104 msec * 60 msec
Step 2: Prefer SR to LDP in Edge Routers
in step 2, we change the priority from LDP to SR just in edge routers for example xrv1 with “segment routing sr-prefer” command in OSPF configuration mode. Then again we trace from the router xrv1 to xrv6. This time, it is expected that SR labels will be used.
• Step2: All PEs are configured to prefer SR
– In no particular order
router ospf 1
segment-routing sr-prefer
With “show mpls label table detail”, you can make sure that these labels belong to segment routing protocol.
RP/0/RP0/CPU0:xrv1#show mpls label table detail
Mon Jun 28 20:44:33.622 UTC
Table Label Owner State Rewrite
----- ------- ------------------------------- ------ -------
0 0 LSD(A) InUse Yes
0 1 LSD(A) InUse Yes
0 2 LSD(A) InUse Yes
0 13 LSD(A) InUse Yes
0 16000 ISIS(A):LAB InUse No
OSPF(A):ospf-1 InUse No
(Lbl-blk SRGB, vers:0, (start_label=16000, size=8000)
0 24000 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 2.2.2.2/32)
0 24001 OSPF(A):ospf-1 InUse Yes
(SR Adj Segment IPv4, vers:0, index=0, type=2, intf=Gi0/0/0/0, nh=10.1.2.2)
0 24002 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 4.4.4.4/32)
0 24003 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 5.5.5.5/32)
0 24008 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 6.6.6.6/32)
0 24010 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 10.2.4.0/24)
0 24014 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 10.4.5.0/24)
0 24016 LDP(A) InUse Yes
(IPv4, vers:0, 'default':4U, 10.5.6.0/24)
also you can check CEF table to check whether segment routing label is used.
RP/0/RP0/CPU0:xrv1#show cef 6.6.6.6/32
Mon Jun 28 20:44:56.722 UTC
6.6.6.6/32, version 715, labeled SR, internal 0x1000001 0x83 (ptr 0xe029778) [1], 0x0 (0xe1eb4e8), 0xa28 (0xeb79a28)
Updated Jun 28 20:43:53.784
remote adjacency to GigabitEthernet0/0/0/0
Prefix Len 32, traffic index 0, precedence n/a, priority 1
via 10.1.2.2/32, GigabitEthernet0/0/0/0, 12 dependencies, weight 0, class 0 [flags 0x0]
path-idx 0 NHID 0x0 [0xf104380 0x0]
next hop 10.1.2.2/32
remote adjacency
local label 16006 labels imposed {16006}