Skip to content


Tutorial name LDP-based MPLS core
Lab components 3 Nokia SR Linux nodes
Resource requirements 2vCPU
4 GB
Containerlab topology file mpls-ldp.clab.yml
Packet captures · LDP neighborship
· MPLS encapsulation
Main ref documents · RFC 5036 - LDP Specification
· Nokia SR Linux MPLS Guide
Version information1 containerlab:0.24.1, srlinux:21.11.2, docker-ce:20.10.2

Multiprotocol Label Switching (MPLS) is a label switching technology that provides the ability to set up connection-oriented paths over a connection-less IP network. MPLS facilitates network traffic flow and provides a mechanism to engineer network traffic patterns independently from routing tables. MPLS sets up a specific path for a sequence of packets. The packets are identified by a label stack inserted into each packet.

This short tutorial will guide you through the steps required to build an LDP-based MPLS core consisting of three SR Linux routers. LDP-based MPLS tunnels are commonly used to enable BGP-free core network.

The topology we will use for this interactive tutorial is dead simple - three routers connected in a point-to-point fashion:

The MPLS-enabled core will be formed with srl1 and srl3 acting as Label Edge Routers (LER) and srl2 as Label Switch Router (LSR). The loopback lo0 interfaces configured on LERs will emulate clients talking to each other via an established MPLS tunnel.

The tutorial will consist of the following configuration parts:

  • Core routing - configuring interfaces, network instances and IS-IS IGP protocol.
  • LDP-based MPLS - configuring LDP and running control plane and data plane verification steps.

Lab deployment#

The tutorial is augmented with the containerlab-based lab so that you can perform all the steps we do here.
The clab file describing the topology looks like follows:

# topology documentation:
name: mpls-ldp
prefix: ""

    kind: srl
      type: ixr6e # MPLS dataplane is supported on 7250 IXR chassis only as of 23.3.1 release
    # uncomment startup-config option to have lab nodes to boot with a fully provisioned use case
      # startup-config: srl1.cfg
      # startup-config: srl2.cfg
      # startup-config: srl3.cfg

    # link wiring diagram: srl1:e1-1 <--> e1-1:srl2:e1-2 <--> e1-1:srl3
    - endpoints: ["srl1:e1-1", "srl2:e1-1"]
    - endpoints: ["srl2:e1-2", "srl3:e1-1"]

Save2 the contents of this file under mpls-ldp.clab.yml name, and you are ready to deploy:

$ containerlab deploy -t clab-ldp.clab.yml

# output omitted for brevity

| # | Name | Container ID |            Image             | Kind |  State  |  IPv4 Address  |     IPv6 Address     |
| 1 | srl1 | e2056be1382d | | srl  | running | | 2001:172:20:20::4/64 |
| 2 | srl2 | 99579a0827d4 | | srl  | running | | 2001:172:20:20::3/64 |
| 3 | srl3 | 747a4d80cf9d | | srl  | running | | 2001:172:20:20::7/64 |

A few seconds later, containerlab finishes the deployment by providing a summary table that outlines connection details of the deployed nodes. In the "Name" column we have the names of the deployed containers which can be used to reach the nodes. For example to connect to the SSH server of srl1:

# default credentials admin:NokiaSrl1!
ssh admin@srl1

With the lab deployed, we are ready to embark on our learn-by-doing LDP-based MPLS configuration journey!

  1. the following versions have been used to create this tutorial. The newer versions might work; please pin the version to the mentioned ones if they don't. 

  2. Or download it with curl -LO