top of page

LABEL DISTRIBUTION PROTOCOL

On this topic, we will be using the previous configuration scenario we have established on our last discussion regarding MPLS implementation.

MPLS assigns a local label on each route in a routing table. Once it has been assigned, router can have the tendency to change it and there are several factors that we should consider regarding the change of the label value. Router restart and MPLS reconfiguration are among them and we can also perform a manual label change.

Local Bindings for each route should be visible on each router so that MPLS would work.

Let's verify if MPLS is still running by checking on the local binding entry for each route on each router by using show mpls ldp bindings local

The output shows the local label assigned by MPLS to each of the route going to each router.

Note: MPLS-R1 to MPLS-R5 will also have their own local label bindings.

As i've mentioned, LDP bindings will change based on factors such as router restart or MPLS reconfiguration. With this behavior let's prove from the debug how does the binding takes place.

As of now the value of the local label going to the 33.33.33.33 is 1000.

Then let's disable MPLS on PE-LocationA by using the syntax no mpls ip

At this stage, PE-LocationA is announcing to the MPLS neighbor that LDP is down.

To enable the MPLS, use the syntax mpls ip on the global configuration mode.

PE-LocationA(config)#mpls ip PE-LocationA(config)# *Aug 5 06:51:31.991: LIB: prefix recurs walk start: 33.33.33.33/32, tableid: 0; tib entry not found *Aug 5 06:51:31.991: ldpx_fwdg: path change upcall event from fwdg *Aug 5 06:51:31.991: LIB: get path labels for route 33.33.33.33/32 *Aug 5 06:51:31.991: LIB: get path labels: 33.33.33.33/32(0), nh ctx_id: 0, Se2/0, nh 10.10.10.2 *Aug 5 06:51:31.991: LDP LLAF: 33.33.33.33 accepted, absence of filtering config *Aug 5 06:51:31.995: lcon: tibent(33.33.33.33/32): created; find route labels request *Aug 5 06:51:31.995: tib: Assign 33.33.33.33/32 nh 10.10.10.2 real label *Aug 5 06:51:31.995: lcon: tibent(33.33.33.33/32): label 1025 (#30) assigned *Aug 5 06:51:31.995: LIB: add a route info for 33.33.33.33/32(0, 10.10.10.2, Se2/0), remote label Unknown *Aug 5 06:51:31.995: LIB: update remote label for route info 33.33.33.33/32(0, 10.10.10.2, Se2/0) remote label Unknown *Aug 5 06:51:31.995: lcon: announce labels for: 33.33.33.33/32; nh 10.10.10.2, Se2/0, inlabel 1025, outlabel unknown (from 0.0.0.0:0), fwdg upcall or intf event *Aug 5 06:51:31.995: LIB: announced out label unknown for 33.33.33.33/32 (via 10.10.10.2) *Aug 5 06:51:32.171: lcon: (default) Assign peer id; 1.1.1.1:0: id 0 *Aug 5 06:51:32.175: %LDP-5-NBRCHG: LDP Neighbor 1.1.1.1:0 (1) is UP *Aug 5 06:51:32.231: lcon: 1.1.1.1:0: 10.10.10.2 added to addr<->ldp ident map *Aug 5 06:51:32.231: lcon: 1.1.1.1:0: 1.1.1.1 added to addr<->ldp ident map *Aug 5 06:51:32.231: lcon: 1.1.1.1:0: 10.10.10.5 added to addr<->ldp ident map *Aug 5 06:51:32.235: LIB: 33.33.33.33/32:: learn binding 100 from 1.1.1.1:0 *Aug 5 06:51:32.239: LIB: a new binding 100 to be added *Aug 5 06:51:32.239: lcon: tibent(33.33.33.33/32): label 100 from 1.1.1.1:0 added *Aug 5 06:51:32.239: LIB: next hop for route 33.33.33.33/32(0, 10.10.10.2, Se2/0) is mapped to peer 1.1.1.1:0, program label *Aug 5 06:51:32.239: LIB: 33.33.33.33/32: LIB entry added to remote label programming list *Aug 5 06:51:32.239: ldpx_fwdg: announced path label info for 1.1.1.1/32 *Aug 5 06:51:32.239: ldpx_fwdg: path change upcall event from fwdg *Aug 5 06:51:32.239: LIB: announced out label 3 for 1.1.1.1/32 (via 10.10.10.2) *Aug 5 06:51:32.239: ldpx_fwdg: announced path label info for 10.10.10.0/30 *Aug 5 06:51:32.243: ldpx_fwdg: path change upcall event from fwdg *Aug 5 06:51:32.243: LIB: announced out label 3 for 10.10.10.0/30 (via 0.0.0.0) *Aug 5 06:51:32.243: ldpx_fwdg: announced path label info for 10.10.10.4/30 *Aug 5 06:51:32.243: ldpx_fwdg: path change upcall event from fwdg *Aug 5 06:51:32.243: LIB: announced out label 3 for 10.10.10.4/30 (via 10.10.10.2) *Aug 5 06:51:32.243: lc_handle_rlbl_prgm handle 33.33.33.33/32 *Aug 5 06:51:32.243: ldpx_fwdg: announced path label info for 33.33.33.33/32 *Aug 5 06:51:32.243: LIB: prefix recurs walk start: 33.33.33.33/32, tableid: 0 *Aug 5 06:51:32.243: ldpx_fwdg: path change upcall event from fwdg *Aug 5 06:51:32.243: LIB: get path labels for route 33.33.33.33/32 *Aug 5 06:51:32.243: LIB: get path labels: 33.33.33.33/32(0), nh ctx_id: 0, Se2/0, nh *Aug 5 06:51:32.243: LDP LLAF: 33.33.33.33 accepted, absence of filtering config *Aug 5 06:51:32.243: tib: Assign 33.33.33.33/32 nh 10.10.10.2 real label *Aug 5 06:51:32.243: LIB: found route info for 33.33.33.33/32(0, 10.10.10.2, Se2/0), r *Aug 5 06:51:32.243: lcon: announce labels for: 33.33.33.33/32; nh 10.10.10.2, Se2/0, *Aug 5 06:51:32.243: LIB: announced out label 100 for 33.33.33.33/32 (via 10.10.10.2)

Let's verify if the LDP has changed due to the restart of MPLS.

Note: All of the Local Label of PE-LocationA will also change.

LDP will send its hello packet on a multicast address of 224.0.0.2 and uses UDP-646. The hello packet will have inside the transport address on which the MPLS builds the LDP session with. LDP uses TCP-646 to establish the 3-way handshake for a TCP session.

Note: This is a packet capture from MPLS hello conversation using wireshark.

TCP session will have three (3) stages:

11.11.11.11 will send SYN request to 1.1.1.1

1.1.1.1 will send and ACK reply to 11.11.11.11

11.11.11.11 will confirm by sending SYN-ACK to 1.1.1.1

After the TCP session has been completed. LDP is now ready to initialize by mapping all the MPLS labels.

The details of the label mapping message includes all the LSR ID on your LSP.

MPLS will select its LDP router ID using the following options:

-Manually configured

-highest loopback interface

-highest IP interface

The router-id will then be use as the transport address to advertise its hello messages. LDP uses transport address to establish the TCP session via port 646.

To check the LDP identifier, you can issue show mpls ldp discovery detail

To manually change the transport address of the router you can use the syntax mpls ldp router-id <interface> force

To manually change the transport address of the interface of the router, go to the interface then issue the syntax mpls ldp discovery transport –address interface

During the MPLS TCP session, the higher LDP will be the first to initialize the session to its lower LDP neighbor.

To verify, let’s restart the MPLS on MPLS-R3. Then we’ll capture the packets connecting the MPLS-R3 (3.3.3.3) to MPLS-R2 (2.2.2.2) and MPLS-R4 (4.4.4.4)

Let check the packet trace from MPLS-R3 to MPLS-R2

As you can see, 3.3.3.3 started the initialize message to 2.2.2.2

Also from 4.4.4.4 to 3.3.3.3 using a wireshark capture.

 

bottom of page