Site icon Karneliuk

MPLS/LDP for IPv4 and IPv6 in Nokia (Alcatel-Lucent) SR and Cisco IOS XR

Hello my friend,

Up to know we were discussing configuration of routing protocols to establish connectivity between network elements: OSPF for IPv4, OSPFv3 for IPv6, ISIS both for IPv4/IPv6 and BGP both for IPv4/IPv6 are already covered. Now we’ll take a look at the next key point of service provider network, which is MPLS. We’ll start with LDP.

Disclaimer

As you know, LDP is used for numerous application in networks besides pure MPLS/LDP forwarding. It’s used also in MPLS L2 VPNs like VPWS and VPLS. In the latter applications targeted LDP session is used. We won’t cover their configuration in this article, because they must be reviewed together with their applications. In this article we’ll cover only ordinary LDP that is used for establishment of MPLS forwarding plane for all kind of applications.

Topology

The physical topology remains the same, as we have used it previously. We are using only one physical interface, so you can omit VMNet4-eth3-br3:

For the logical topology we’ll use the same topology, as we have used previously in ISIS. The only difference is that all routers will reside in level-2 and each router has its own area, which corresponds to the last digit in IPv4 address of system interface or loopback0:

Usually in the core of the network you will use only one-layer level-2 infrastructure, with level-1 used in aggregation domains. This is the typical architecture for seamless MPLS, what is the most robust topology service providers’ networks now.

Don’t forget to activate ECMP in Nokia (Alcatel-Lucent) SR OS if you don’t use our initial configuration files

Initial configuration is available here: linux SR1_initial SR3_initial XR1_initial

LDP for IPv4

In order to turn on any kind of protocol that will form MPLS forwarding plane, we should get routing protocol converged. We’ have used ISIS as our IGP, so let’s check if we have all routes in routing tables in our Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR routers. SR1 has the following routing table:

A:SR1# show router route-table ipv4
============================================================================
Route Table (Router: Base)
============================================================================
Dest Prefix[Flags]                        Type    Proto    Age       Pref
Next Hop[Interface Name]                                 Metric
—————————————————————————-
10.0.0.0/31                               Local   Local    00h18m37s 0
toXR1_p1                                                 0
10.0.0.2/31                               Local   Local    00h18m37s 0
toXR1_p2                                                 0
10.0.102.1/32                             Remote  ISIS     00h01m05s 18
10.0.0.1                                                 10
10.0.202.1/32                             Remote  ISIS     00h01m05s 18
10.0.0.1                                                 10
10.0.255.1/32                             Local   Local    00h18m46s 0
system                                                   0
10.0.255.2/32                             Remote  ISIS     00h14m41s 18
10.0.0.1                                                 10
10.0.255.3/32                             Remote  ISIS     00h17m11s 18
10.1.0.1                                                 10
10.1.0.0/31                               Local   Local    00h18m37s 0
toSR3                                                    0
10.1.101.0/24                             Local   Local    00h18m47s 0
Lo1                                                      0
10.1.201.0/24                             Local   Local    00h18m47s 0
Lo2                                                      0
—————————————————————————-
No. of Routes: 10

You can mention that we announce only system interface/loopback 0 and loopback 1/2 in ISIS. For MPLS data plane the interconnect prefixes are usually isn’t interesting, because the MPLS label is needed only for next hop (transport label) and customer services (service label).

More information about concept of labels you can find in this article.

Let’s establish the simplest MPLS forwarding plane by configuring LDP in our multi-vendor core network with Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR and compare their operation:

Nokia (Alcatel-Lucent) VSR (SR 7750) Cisco IOS XR (ASR 9000)
SR1 XR1

*A:SR1>config>router>ldp$ info
—————————–
interface-parameters
interface “toSR3” dual-stack
ipv4
no shutdown
exit
no shutdown
exit
interface “toXR1_p1” dual-stack
ipv4
no shutdown
exit
no shutdown
exit
interface “toXR1_p2” dual-stack
ipv4
no shutdown
exit
no shutdown
exit
exit
targeted-session
exit
no shutdown
—————————–

RP/0/0/CPU0:XR1(config)#show conf
mpls ldp
log
hello-adjacency
neighbor
session-protection
!
router-id 10.0.255.2
address-family ipv4
!
interface GigabitEthernet0/0/0/0.10
address-family ipv4
!
!
interface GigabitEthernet0/0/0/0.11
address-family ipv4
!
!
interface GigabitEthernet0/0/0/0.23
address-family ipv4
!
!
!
end

SR3

*A:SR3>config>router>ldp$ info
—————————–
interface-parameters
interface “toSR1” dual-stack
ipv4
no shutdown
exit
no shutdown
exit
interface “toXR1” dual-stack
ipv4
no shutdown
exit
no shutdown
exit
exit
targeted-session
exit
no shutdown

The router-id from LDP isn’t explicitly configured in Nokia (Alcatel-Lucent) SR OS, because we have configured it initially in global routing configuration. In Cisco it’s necessary to configure it explicitly per protocol.

Just after applying the configuration above you can see LDP coming up:

Cisco IOS XR:
Jun 18 14:22:17.868 : mpls_ldp[1049]: %ROUTING-LDP-5-NBR_CHANGE : VRF ‘default’ (0x60000000), Neighbor 10.0.255.3:0 is UP (IPv4 connection)

Even with configured logging I haven’t managed to catch the log message for LDP sessions establishment in Nokia (Alcatel-Lucent) SR OS

As we haven’t seen the logs, we need another way to check if the LDP session is established. Frankly speaking we should do it in all cases. The SR1 has the following picture regarding LDP neighbors:

A:SR1# show router ldp session
===========================================================================
LDP IPv4 Sessions
===========================================================================
Peer LDP Id     Adj Type     State        Msg Sent  Msg Recv  Up Time
—————————————————————————
10.0.255.2:0    Link         Established  2539      2200      0d 01:06:16
10.0.255.3:0    Link         Established  244       246       0d 00:10:31
—————————————————————————
No. of IPv4 Sessions: 2

In Cisco IOS XR you can check LDP neighbors with the following command:

RP/0/0/CPU0:XR1#show mpls ldp neighbor brief
Peer            GR   NSR   Up Time   Discovery    Addresses    Labels
.                                    ipv4 ipv6    ipv4 ipv6    ipv4 ipv6
————— —   —   ——— ———-   ———-   ————
10.0.255.1:0    N    N     01:06:59  2    0       6    0       2    0
10.0.255.3:0    N    N     00:11:12  1    0       3    0       2    0

Remember that regardless of the number of interfaces that is used to interconnect neighboring LDP routers, only one LDP TCP session is established. This session is used for label distribution, whereas LDP hello (over UDP) packets are being sent/received over each interface:

A:SR1# show router ldp interface
============================================================================
LDP Interfaces
============================================================================
Interface          Adm/Opr
. Sub-Interface(s)  Adm/Opr     Hello    Hold    KA    KA    Transport
.                               Fctr     Time    Fctr  Time  Address
—————————————————————————-
toSR3              Up/Up
. ipv4              Up/Up       3        15      3     30    System
toXR1_p1           Up/Up
. ipv4              Up/Up       3        15      3     30    System
toXR1_p2           Up/Up
. ipv4              Up/Up       3        15      3     30    System
—————————————————————————-
No. of Interfaces: 3

In Cisco IOS XR there is a little bit another command is used to display the same information:

RP/0/0/CPU0:XR1#show mpls ldp discovery
Local LDP Identifier: 10.0.255.2:0
Discovery Sources:
. Interfaces:
.   GigabitEthernet0/0/0/0.10 : xmit/recv
.     VRF: ‘default’ (0x60000000)
.     LDP Id: 10.0.255.1:0, Transport address: 10.0.255.1
.       Hold time: 15 sec (local:15 sec, peer:15 sec)
.   GigabitEthernet0/0/0/0.11 : xmit/recv
.    VRF: ‘default’ (0x60000000)
.    LDP Id: 10.0.255.1:0, Transport address: 10.0.255.1
.      Hold time: 15 sec (local:15 sec, peer:15 sec)
.   GigabitEthernet0/0/0/0.23 : xmit/recv
.    VRF: ‘default’ (0x60000000)
.    LDP Id: 10.0.255.3:0, Transport address: 10.0.255.3
.      Hold time: 15 sec (local:15 sec, peer:15 sec)

As usual there is a lot of possibilities to see the necessary information. I provide the more useful from my point of view.

So far so good. We have checked that LDP peering is established between all our routers and all necessary interfaces are enabled for LDP operation. Let’s check the actual labels that are used for MPLS forwarding. First of all let’s check the LFIB (label forwarding information base) in SR1, which is Nokia (Alcatel-Lucent) SR OS routers:

A:SR1# show router ldp bindings active
============================================================================
LDP Bindings (IPv4 LSR ID 10.0.255.1:0)
(IPv6 LSR ID fc00::10:0:255:1[0])
============================================================================
Legend: U – Label In Use, N – Label Not In Use, W – Label Withdrawn
WP – Label Withdraw Pending, BU – Alternate For Fast Re-Route
(S) – Static (M) – Multi-homed Secondary Support
(B) – BGP Next Hop (BU) – Alternate Next-hop for Fast Re-Route
============================================================================
LDP IPv4 Prefix Bindings (Active)
============================================================================
Prefix                                 Op         IngLbl       EgrLbl
EgrNextHop                             EgrIf/LspId
—————————————————————————-
10.0.102.1/32                          Push       —           3
10.0.0.1                               1/1/1:10
10.0.102.1/32                          Swap       262138       3
10.0.0.1                               1/1/1:10
10.0.202.1/32                          Push       —           3
10.0.0.1                               1/1/1:10
10.0.202.1/32                          Swap       262137       3
10.0.0.1                               1/1/1:10
10.0.255.1/32                          Pop        262143       —
— —
10.0.255.2/32                          Push       —           3
10.0.0.1                               1/1/1:10
10.0.255.2/32                          Swap       262139       3
10.0.0.1                               1/1/1:10
10.0.255.3/32                          Push       —           262143
10.1.0.1                               1/1/1:13
10.0.255.3/32                          Swap       262141       262143
10.1.0.1                               1/1/1:13
—————————————————————————-
No. of IPv4 Prefix Active Bindings: 9
============================================================================
LDP IPv6 Prefix Bindings (Active)
============================================================================
Prefix                                 Op         IngLbl       EgrLbl
EgrNextHop                             EgrIf/LspId
—————————————————————————-
fc00::10:0:255:1/128                   Pop        262142       —
— —
fc00::10:0:255:3/128                   Push       —           262142
fe80::3:1301                           1/1/1:13
—————————————————————————-
No. of IPv6 Prefix Active Bindings: 2

Before analyzing it let’s check the XR1’s LFIB, which is Cisco IOS XR router:

RP/0/0/CPU0:XR1#show mpls forwarding
Local   Outgoing     Prefix                 Outgoing       Next Hop    Bytes
Label   Label        or ID                  Interface                  Switched
——  ———-   ——————     ———-     ——–    ———-
24000   262143       10.0.255.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       262143       10.0.255.1/32          Gi0/0/0/0.11   10.0.0.2    62826
24001   Unlabelled   10.1.201.0/24          Gi0/0/0/0.10   10.0.0.0    0
.       Unlabelled   10.1.201.0/24          Gi0/0/0/0.11   10.0.0.2    0
24002   Unlabelled   10.1.101.0/24          Gi0/0/0/0.10   10.0.0.0    0
.       Unlabelled   10.1.101.0/24          Gi0/0/0/0.11   10.0.0.2    0
24003   262143       10.0.255.3/32          Gi0/0/0/0.23   10.1.0.2    22508

You can spot three major differences in default operation of LDP between Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR:

Parameter Nokia (Alcatel-Lucent) SR OS Cisco IOS XR
Label allocation VSR (SR 7750) generates the label only for system interface by default XRv (ASR 9000) generates label for all known prefixes in routing table
IPv4 and IPv6 VSR (SR 7750) by default implements dual stack label allocation both for IPv4 and IPv6 In XRv (ASR 9000) LDP operates for IPv4 address family by default only
PHP VSR (SR 7750) doesn’t use PHP by default XRv (ASR 9000) implements PHP

The first difference is visible through “Unlabeled” in MPLS LFIB in Cisco. It means that there is no label from next-hop router that is LDP neighbor as well. Alternatively in SR1’s output you see that there is only one prefix with “Pop” operation meaning that only this LSP terminates here.

The second difference is more interesting. Up to the recent version of Cisco IOS XR there were no support for IPv6 LDP. We’ll cover IPv6 LDP later in this article.

The third difference refers to optimization of forwarding lookup. If PHP (Penultimate Hop Popping) is disabled:

When PHP is enabled:

Both of the cases above have their pros and cons. Enabled PHP increases the efficiency of the router, but it makes the end-to-end QoS in the MPLS backbone more difficult to implement. It’s totally up to you, whether use PHP or not. You can see in output from SR1 that Cisco announces all its connected prefixes with label of value 3.

Let’s align the operation of MPLS in our network. To do it we’ll configure the allocation of labels only for host routes (prefix 32 for IPv4 and 128 for IPv6) both in Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR. Also we’ll activate PHP at Nokia (Alcatel-Lucent) routers:

Nokia (Alcatel-Lucent) VSR (SR 7750) Cisco IOS XR (ASR 9000)
SR1 XR1

*A:SR1>config>router>policy-options# info
—————————–
prefix-list “PL_LDP_IPV4_PREF”
prefix 0.0.0.0/0 prefix-length-range 32-32
exit
policy-statement “RP_HOST_ROUTES”
entry 10
from
prefix-list “PL_LDP_IPV4_PREF”
exit
action accept
exit
exit
default-action reject
exit
—————————–
*A:SR1>config>router>ldp$ info
—————————–
implicit-null-label
—————————–

RP/0/0/CPU0:XR1(config)#show conf
mpls ldp
address-family ipv4
label
local
allocate for host-routes
!
!
!
!
end

SR3

*A:SR3>config>router>ldp# info
—————————–
implicit-null-label
—————————–

We don’t need such policy at SR3, because we announce there only system interface.

After changes in the configuration, you see that MPLS data plane has changed. Cisco IOS XR shows now that its operation is to pop the label for all egress packets:

RP/0/0/CPU0:XR1#show mpls forwarding
Local   Outgoing     Prefix                 Outgoing       Next Hop    Bytes
Label   Label        or ID                  Interface                  Switched
——  ———-   ——————     ———-     ——–    ———-
24000   Pop          10.0.255.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       Pop          10.0.255.1/32          Gi0/0/0/0.11   10.0.0.2    25762
24003   Pop          10.0.255.3/32          Gi0/0/0/0.23   10.1.0.2    26432
24004   Pop          10.1.101.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       Pop          10.1.101.1/32          Gi0/0/0/0.11   10.0.0.2    0
24006   Pop          10.0.201.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       Pop          10.0.201.1/32          Gi0/0/0/0.11   10.0.0.2    0

You can see that there is no locally generated prefixes in LFIB, because due to PHP there is no LFIB lookup. In order to see the label for local prefixes in Cisco IOS XR you should issue another command:

RP/0/0/CPU0:XR1#show mpls ldp bindings
10.0.201.1/32, rev 56
Local binding: label: 24006
Remote bindings: (2 peers)
Peer               Label
—————–  ———
10.0.255.1:0       ImpNull
10.0.255.3:0       262137
.
10.0.202.1/32, rev 6
Local binding: label: ImpNull
No remote bindings
.
10.0.255.1/32, rev 18
Local binding: label: 24000
Remote bindings: (2 peers)
Peer               Label
—————–  ———
10.0.255.1:0       ImpNull
10.0.255.3:0       262135
.
10.0.255.2/32, rev 2
Local binding: label: ImpNull
No remote bindings
.
10.0.255.3/32, rev 37
Local binding: label: 24003
Remote bindings: (2 peers)
Peer               Label
—————–  ———
10.0.255.1:0       262141
10.0.255.3:0       ImpNull
.
10.1.101.1/32, rev 41
Local binding: label: 24004
Remote bindings: (2 peers)
Peer               Label
—————–  ———
10.0.255.1:0       ImpNull
10.0.255.3:0       262132
.
10.1.102.1/32, rev 52
Local binding: label: ImpNull
No remote bindings

This command is more similar to “show router ldp bindings active” in Nokia (Alcatel-Lucent) SR OS

And now we see that there are much more “Pop” operations at SR1:

A:SR1# show router ldp bindings active | match expression “Pop|Prefix|Egres|=”
============================================================================
LDP IPv4 Prefix Bindings (Active)
============================================================================
Prefix                                 Op         IngLbl       EgrLbl
10.0.201.1/32                          Pop        3            —
10.0.255.1/32                          Pop        3            —
10.1.101.1/32                          Pop        3            —
============================================================================

Now it’s time to make some tests. There is a special MPLS OAM toolset that helps to check MPLS forwarding plane. Both Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR have this functionality. Let’ check from SR3 side first of all:

A:SR3# oam lsp-trace prefix 10.0.255.1/32 detail
lsp-trace to 10.0.255.1/32: 0 hops min, 0 hops max, 104 byte packets
1 10.0.255.1 rtt=22.3ms rc=3(EgressRtr) rsc=1
!
A:SR3# oam lsp-trace prefix 10.0.255.2/32 detail
lsp-trace to 10.0.255.2/32: 0 hops min, 0 hops max, 104 byte packets
1 10.1.0.3 rtt=10.8ms rc=3(EgressRtr) rsc=1

And from XR1:

RP/0/0/CPU0:XR1#traceroute mpls ipv4 10.0.255.1/32 source 10.0.255.2
Tracing MPLS Label Switched Path to 10.0.255.1/32, timeout is 2 seconds
. 0 10.0.0.3 MRU 1500 [Labels: implicit-null Exp: 0]
! 1 10.0.255.1 50 ms
———————————————————————-
RP/0/0/CPU0:XR1#traceroute mpls ipv4 10.0.255.3/32 source 10.0.255.2
Tracing MPLS Label Switched Path to 10.0.255.3/32, timeout is 2 seconds
. 0 10.1.0.3 MRU 1500 [Labels: implicit-null Exp: 0]
! 1 10.0.255.3 1 ms

MPLS OAM is activated by default in Nokia (Alcatel-Lucent) SR OS, but in Cisco IOS XR you have to do it explicitly by issuing “mpls oam” from global configuration.

As all our routers are connected to each other we can’t see the label swap operation. Let’s bring down links between SR3 and XR1 to force all the traffic pass the SR1 and then repeat the tests:

A:SR3# oam lsp-trace prefix 10.0.255.1/32 detail
lsp-trace to 10.0.255.1/32: 0 hops min, 0 hops max, 104 byte packets
1 10.0.255.1 rtt=18.2ms rc=3(EgressRtr) rsc=1
!
!
A:SR3# oam lsp-trace prefix 10.0.255.2/32 detail
lsp-trace to 10.0.255.2/32: 0 hops min, 0 hops max, 104 byte packets
1 10.0.255.1 rtt=3.15ms rc=8(DSRtrMatchLabel) rsc=1
DS 1: ipaddr=10.0.0.1 ifaddr=10.0.0.1 iftype=ipv4Numbered MRU=1500
label[1]=3 protocol=3(LDP)
DS 2: ipaddr=10.0.0.3 ifaddr=10.0.0.3 iftype=ipv4Numbered MRU=1500
label[1]=3 protocol=3(LDP)
2 10.0.0.1 rtt=16.3ms rc=3(EgressRtr) rsc=1

Cisco IOS XR side:

RP/0/0/CPU0:XR1#traceroute mpls ipv4 10.0.255.1/32 source 10.0.255.2
Tracing MPLS Label Switched Path to 10.0.255.1/32, timeout is 2 seconds
. 0 10.0.0.3 MRU 1500 [Labels: implicit-null Exp: 0]
! 1 10.0.255.1 50 ms
———————————————————————-
RP/0/0/CPU0:XR1#traceroute mpls ipv4 10.0.255.3/32 source 10.0.255.2
Tracing MPLS Label Switched Path to 10.0.255.3/32, timeout is 2 seconds
. 0 10.0.0.3 MRU 1500 [Labels: 262141 Exp: 0]
L 1 10.0.255.1 MRU 1500 [Labels: implicit-null Exp: 0] 50 ms
! 2 10.0.255.3 10 ms

You see that there is a difference between Cisco IOS XR and Nokia (Alcatel-Lucent) SR OS:

RP/0/0/CPU0:XR1#show mpls forwarding
Local   Outgoing     Prefix                 Outgoing       Next Hop    Bytes
Label   Label        or ID                  Interface                  Switched
——  ———-   ——————     ———-     ——–    ———-
24000   Pop          10.0.255.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       Pop          10.0.255.1/32          Gi0/0/0/0.11   10.0.0.2    97484
24003   262141       10.0.255.3/32          Gi0/0/0/0.10   10.0.0.0    560
.       262141       10.0.255.3/32          Gi0/0/0/0.11   10.0.0.2    448
24004   Pop          10.1.101.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       Pop          10.1.101.1/32          Gi0/0/0/0.11   10.0.0.2    0
24006   Pop          10.0.201.1/32          Gi0/0/0/0.10   10.0.0.0    0
.       Pop          10.0.201.1/32          Gi0/0/0/0.11   10.0.0.2    0

We’ll bring back disabled link between SR3 and XR1 and go further.

LDP for IPv6

For a long time there was no option to build MPLS forwarding plane over IPv6 addresses, though there were possibility to distribute service labels for IPv6 prefixes in BGP/MPLS VPNs. In the last year (2015) was finally published RFC7552 (https://tools.ietf.org/html/rfc7552) that introduces the operation of LDP for IPv6. So now you can build MPLS forwarding plane over IPv6 core.

In Cisco IOS XR there is support for this technology starting from 5.3.x release. In Nokia (Alcatel-Lucent) it seems to be supported since 13.0.R1, but I might be mistaken.

As you’ve seen before, Nokia (Alcatel-Lucent) SR OS operates both in IPv4/IPv6 mode by default. In the configuration above you might have seen “dual-stack” keyword that says about it. So we need to activate LDP for IPv6 in Cisco IOS XR.

Cisco IOS XR (ASR 9000)
XR1

RP/0/0/CPU0:XR1(config)#show conf
mpls ldp
address-family ipv6
label
local
allocate for host-routes
!
!
!
interface GigabitEthernet0/0/0/0.10
address-family ipv6
!
!
interface GigabitEthernet0/0/0/0.11
address-family ipv6
!
!
interface GigabitEthernet0/0/0/0.23
address-family ipv6
!
!
!
end

So far config seems good, it doesn’t work. You can run LDP IPv6 separately in Nokia (Alcatel-Lucent) SR OS and Cisco IOS XR, but not together at least now. We see the following information at SR3 regarding XR1:

A:SR3# show router ldp session detail | match expression “IPv6|Session”
LDP IPv4 Sessions (Detail)
Session with Peer 10.0.255.1:0, Local 10.0.255.3:0
IPv6 Pfx FEC Sent      : 4                  IPv6 Pfx FEC Recv      : 4
IPv6 P2MP FEC Sent     : 0                  IPv6 P2MP FEC Recv     : 0
IPv6 Addrs Sent        : 2                  IPv6 Addrs Recv        : 4
Local IPv6 Pfx Capabil*: Capable            Peer IPv6 Pfx Capabili*: Capable
IPv6 PfxFecOLoad Sent  : No                 IPv6 PfxFecOLoad Recv  : No
IPv6 P2MPFecOLoad Sent : No                 IPv6 P2MPFecOLoad Recv : No
Session with Peer 10.0.255.2:0, Local 10.0.255.3:0
IPv6 Pfx FEC Sent      : 0                  IPv6 Pfx FEC Recv      : 7
IPv6 P2MP FEC Sent     : 0                  IPv6 P2MP FEC Recv     : 0
IPv6 Addrs Sent        : 0                  IPv6 Addrs Recv        : 7
Local IPv6 Pfx Capabil*: Capable            Peer IPv6 Pfx Capabili*: Not Capable
IPv6 PfxFecOLoad Sent  : No                 IPv6 PfxFecOLoad Recv  : No
IPv6 P2MPFecOLoad Sent : No                 IPv6 P2MPFecOLoad Recv : No

You can see that SR3 considers XR1 to be not IPv6 capable. In the same time you see that SR3 receives prefixes from XR1 for IPv6, but it doesn’t send any single IPv6 prefix over LDP to Cisco IOS XR router. Nevertheless SR3 installs received IPv6 prefixes into LFIB:

A:SR3# show router ldp bindings active ipv6
============================================================================
LDP Bindings (IPv4 LSR ID 10.0.255.3:0)
(IPv6 LSR ID fc00::10:0:255:3[0])
============================================================================
LDP IPv6 Prefix Bindings (Active)
============================================================================
Prefix                                 Op         IngLbl       EgrLbl
EgrNextHop                             EgrIf/LspId
—————————————————————————-
fc00::10:0:202:1/128                   Push       —           3
fe80::2:2301 1/1/1:23
fc00::10:0:202:1/128                   Swap       262138       3
fe80::2:2301 1/1/1:23
fc00::10:0:255:1/128                   Push       —           3
fe80::1:1301 1/1/1:13
fc00::10:0:255:2/128                   Push       —           3
fe80::2:2301 1/1/1:23
fc00::10:0:255:2/128                   Swap       262139 3
fe80::2:2301 1/1/1:23
fc00::10:0:255:3/128                   Pop        3           —
—                                     —
fc00::10:1:102:1/128                   Push       —           3
fe80::2:2301 1/1/1:23
fc00::10:1:102:1/128                   Swap       262137       3
fe80::2:2301 1/1/1:23
—————————————————————————-
No. of IPv6 Prefix Active Bindings: 8

Cisco IOS XR routers has solely its own labels:

RP/0/0/CPU0:XR1#show mpls ldp ipv6 bindings
fc00::10:0:201:1/128, rev 24
Local binding: label: 24005
No remote bindings
.
fc00::10:0:202:1/128, rev 4
Local binding: label: ImpNull
No remote bindings
.
fc00::10:0:255:1/128, rev 22
Local binding: label: 24001
No remote bindings
.
fc00::10:0:255:2/128, rev 2
Local binding: label: ImpNull
No remote bindings
.
fc00::10:0:255:3/128, rev 18
Local binding: label: 24007
No remote bindings
.
fc00::10:1:101:1/128, rev 23
Local binding: label: 24002
No remote bindings
.
fc00::10:1:102:1/128, rev 6
Local binding: label: ImpNull
No remote bindings

Probably in future releases it will be fixes, but in my lab (Nokia (Alcatel-Lucent) SR OS TiMOS-B-13.0.R1 and Cisco IOS XR 5.3.2 I haven’t managed to force SR1/SR3 to send IPv6 prefixes to Cisco IOS XR.

Also I’ve noticed the following output during session establishment between Nokia (Alctel-Lucent) SR OS and Cisco IOS XR:

RP/0/0/CPU0:Jun 18 21:07:11.384 : mpls_ldp[1049]: DBG-MsgRcv[1], VRF(default): Peer(10.0.255.3:0): Peer(10.0.255.3:0): Unsupported/Unknown TLV (type 0x50a, U/F 1/0) rcvd in INIT msg
RP/0/0/CPU0:Jun 18 21:07:11.384 : mpls_ldp[1049]: DBG-MsgRcv[1], VRF(default): Peer(10.0.255.3:0): Peer(10.0.255.3:0): Unsupported/Unknown TLV (type 0x3e03, U/F 1/0) rcvd in INIT msg
RP/0/0/CPU0:Jun 18 21:07:11.384 : mpls_ldp[1049]: DBG-MsgRcv[1], VRF(default): Peer(10.0.255.3:0): Peer(10.0.255.3:0): Unsupported/Unknown TLV (type 0x506, U/F 1/0) rcvd in INIT msg
!
!
RP/0/0/CPU0:XR1#show mpls ldp capabilities
Type    Description                                Owner
——  —————————————-   ————
0x50b   Typed Wildcard FEC                         LDP
0x3eff  Cisco IOS-XR                               LDP
0x508   MP: Point-to-Multipoint (P2MP)             mLDP
0x509   MP: Multipoint-to-Multipoint (MP2MP)       mLDP
0x703   P2MP PW                                    L2VPN-AToM

As you can see there are 3 TLVs that aren’t negotiated between SR1/SR3 and XR1

LDP security and high availability

As with other protocols, there are several mechanisms that can be used to increase the security and resiliency of LDP. In terms of security there is a possibility to implement authentication based on MD5, like BGP.

For high availability there are two options:

There is no necessity to use both mechanisms of high availability simultaneously. So we’ll configure LDP IGP Sync at all routers, because it’s more widely used and seems to make more sense personally for me.

What we will do is to configure router authentication between our LDP router and LDP IGP Sync:

Nokia (Alcatel-Lucent) VSR (SR 7750) Cisco IOS XR (ASR 9000)
SR1 XR1

*A:SR1>config>router$ info
—————————–
ldp
tcp-session-parameters
peer-transport 10.0.255.2
authentication-key MPL$$
exit
peer-transport 10.0.255.3
authentication-key MPL$$
exit
exit
exit
interface “toSR3″
ldp-sync-timer 30
exit
interface ” toXR1_p1″
ldp-sync-timer 30
exit
interface ” toXR1_p1″
ldp-sync-timer 30
exit
—————————–

RP/0/0/CPU0:XR1(config)#show conf
router isis CORE
interface GigabitEthernet0/0/0/0.10
address-family ipv4 unicast
mpls ldp sync
!
!
interface GigabitEthernet0/0/0/0.11
address-family ipv4 unicast
mpls ldp sync
!
!
interface GigabitEthernet0/0/0/0.23
address-family ipv4 unicast
mpls ldp sync
!
!
!
mpls ldp
neighbor
10.0.255.1:0 password clear MPL$$
10.0.255.3:0 password clear MPL$$
!
!
end

SR3

*A:SR3>config>router$ info
—————————–
ldp
tcp-session-parameters
peer-transport 10.0.255.1
authentication-key MPL$$
exit
peer-transport 10.0.255.2
authentication-key MPL$$
exit
exit
exit
interface “toSR1”
ldp-sync-timer 30
exit
interface “toXR1”
ldp-sync-timer 30
exit
—————————–

Before you apply the configuration above, you can see that LDP SYN is disabled at interfaces under IGP interfaces view mode. Here is the output from Nokia (Alcatel-Lucent) SR OS:

A:SR3>config>router>if# show router isis interface toXR1 detail | match expression “Interface|Ldp”
Interface        : toXR1                       Level Capability: L1L2
Ldp Sync         : outOfService                Ldp Sync Wait   : Disabled
Ldp Timer State  : Disabled                    Ldp Tm Left     : 0

And here the output for the same link from Cisco IOS XR:

RP/0/0/CPU0:XR1(config)#do show isis int gig 0/0/0/0.23 | inc LDP
.    MPLS LDP Sync (L1/L2): Disabled/Disabled

After the configuration is allied you will see that in the same outputs. SR3 now tells you that it has LDP Sync enabled:

A:SR3# show router isis interface “toXR1” detail | match expression “Interface|Ldp”
Router Base ISIS Instance 0 Interfaces
Interface        : toXR1                       Level Capability: L1L2
Ldp Sync         : inService                   Ldp Sync Wait   : Disabled
Ldp Timer State  : Timer Expired               Ldp Tm Left     : 0

XR1 says that it has even achieved Sync state:

RP/0/0/CPU0:XR1(config)#do show isis int gig 0/0/0/0.23 | inc LDP
.    MPLS LDP Sync (L1/L2): Enabled/Enabled
.       LDPv4 Sync Status:  Achieved

To check the authentication parameters configured, use the following command in Nokia (Alcatel-Lucent) SR OS:

A:SR1# show router ldp tcp-session-parameters
============================================================================
LDP IPv4 TCP Session Parameters
============================================================================
—————————————————————————-
Peer Transport: 10.0.255.2
—————————————————————————-
Authentication Key : Enabled             Path MTU Discovery : Disabled
Auth key chain     :                     Min-TTL            : 0
—————————————————————————-
Peer Transport: 10.0.255.3
—————————————————————————-
Authentication Key : Enabled             Path MTU Discovery : Disabled
Auth key chain     :                     Min-TTL            : 0
============================================================================
No. of IPv4 Peers: 2

To get this information in Cisco IOS XR you should just issue the standard command for reviewing peer parameters. In order to reduce output, we have applied the basic filter:

RP/0/0/CPU0:XR1#show mpls ldp neighbor | include “Peer|MD5”
Peer LDP Identifier: 10.0.255.1:0
TCP connection: 10.0.255.1:646 – 10.0.255.2:24748; MD5 on
Peer LDP Identifier: 10.0.255.3:0
TCP connection: 10.0.255.3:50787 – 10.0.255.2:646; MD5 on

The files with final configuration you can find here: SR1_final SR3_final XR1_final

Cisco IOS XR LDP config simplification

In Cisco IOS XR (as well as in IOS, IOS XE and NX-OS) there is a mechanism that simplifies a little bit configuration of MPLS LDP, which is called auto configuration. Instead of activating LDP at all necessary interfaces, you can activate it just with one command at all interfaces, where your chosen IGP is already activated. It works as follows:

RP/0/0/CPU0:XR1(config)#show conf
router isis CORE
address-family ipv4 unicast
mpls ldp auto-config
!
!

With such configuration you don’t need to explicitly configure interfaces in MPLS LDP configuration mode. You can see that interfaces are configured through this feature at XR1:

RP/0/0/CPU0:XR1#show mpls ldp interface
Interface GigabitEthernet0/0/0/0.10 (0x2d00)
.  VRF: ‘default’ (0x60000000)
.  Enabled via config: IGP Auto-config
Interface GigabitEthernet0/0/0/0.11 (0x2e00)
.  VRF: ‘default’ (0x60000000)
.  Enabled via config: IGP Auto-config
Interface GigabitEthernet0/0/0/0.23 (0x2f00)
.  VRF: ‘default’ (0x60000000)
.  Enabled via config: IGP Auto-config

The config for your reference is here: XR1_final_autoconfig

Lessons learned

Until this article I wasn’t aware about LDP IPv6. I knew that there is no possibility to run MPLS forwarding plane over IPv6 core. Now I know that it’s possible, though I haven’t managed to run it in multivendor environment. Probably it will be possible to do get LDP IPv6 working with real devices with the latest SROS/IOS versions, but I don’t have such lab now.

Conclusion

LDP is the first possibility that we use to build MPLS data plane. You can see that basic configuration of it is really straightforward. Even some additional features that improves its operation are easy both for understanding and implementing. That’s why LDP is widely used in the networks, where pure MPLS forwarding without Traffic engineering is enough. For MPLS traffic engineering (MPLS-TE) usually RSVP was used and is being used further. Nowadays to the area comes Segment Routing (SR) that just reinvents the MPLS forwarding plane in terms of labels usage. We’ll cover these and other topics later in the next articles. Take care and good bye.

Support us





BR,

Anton Karneliuk

Exit mobile version