7 The *ldpd* daemon is a standardised protocol that permits exchanging MPLS label
8 information between MPLS devices. The LDP protocol creates peering between
9 devices, so as to exchange that label information. This information is stored in
10 MPLS table of *zebra*, and it injects that MPLS information in the underlying
11 system (Linux kernel or OpenBSD system for instance).
12 *ldpd* provides necessary options to create a Layer 2 VPN across MPLS network.
13 For instance, it is possible to interconnect several sites that share the same
16 FRR implements LDP as described in :rfc:`5036`; other LDP standard are the
17 following ones: :rfc:`6720`, :rfc:`6667`, :rfc:`5919`, :rfc:`5561`, :rfc:`7552`,
19 Because MPLS is already available, FRR also supports :rfc:`3031`.
24 The *ldpd* daemon can be invoked with any of the common
25 options (:ref:`common-invocation-options`).
27 The *zebra* daemon must be running before *ldpd* is invoked.
29 Configuration of *ldpd* is done in its configuration file
33 .. _understanding-ldp:
35 Understanding LDP principles
36 ============================
38 Let's first introduce some definitions that permit understand better the LDP
41 - `LSR` : Labeled Switch Router. Networking devices handling labels used to
42 forward traffic between and through them.
44 - `LER` : Labeled Edge Router. A Labeled edge router is located at the edge of
45 an MPLS network, generally between an IP network and an MPLS network.
48 ``LDP`` aims at sharing label information across devices. It tries to establish
49 peering with remote LDP capable devices, first by discovering using UDP port 646
50 , then by peering using TCP port 646. Once the TCP session is established, the
51 label information is shared, through label advertisements.
53 There are different methods to send label advertisement modes. The
54 implementation actually supports the following : Liberal Label Retention +
55 Downstream Unsolicited + Independent Control.
56 The other advertising modes are depicted below, and compared with the current
59 - Liberal label retention versus conservative mode
60 In liberal mode, every label sent by every LSR is stored in the MPLS table.
61 In conservative mode, only the label that was sent by the best next hop
62 (determined by the IGP metric) for that particular FEC is stored in the MPLS
65 - Independent LSP Control versus ordered LSP Control
66 MPLS has two ways of binding labels to FEC’s; either through ordered LSP
67 control, or independent LSP control.
68 Ordered LSP control only binds a label to a FEC if it is the egress LSR, or
69 the router received a label binding for a FEC from the next hop router. In
70 this mode, an MPLS router will create a label binding for each FEC and
71 distribute it to its neighbors so long as he has a entry in the RIB for the
73 In the other mode, label bindings are made without any dependencies on another
74 router advertising a label for a particular FEC. Each router makes it own
75 independent decision to create a label for each FEC.
76 By default IOS uses Independent LSP Control, while Juniper implements the
77 Ordered Control. Both modes are interoperable, the difference is that Ordered
78 Control prevent blackholing during the LDP convergence process, at cost of
79 slowing down the convergence itself
81 - unsolicited downstream versus downstream on demand
82 Downstream on demand label distribution is where an LSR must explicitly
83 request that a label be sent from its downstream router for a particular FEC.
84 Unsolicited label distribution is where a label is sent from the downstream
85 router without the original router requesting it.
89 .. _ldp-configuration:
94 .. index:: [no] mpls ldp
95 .. clicmd:: [no] mpls ldp
97 Enable or disable LDP daemon
99 .. index:: [no] router-id A.B.C.D
100 .. clicmd:: [no] router-id A.B.C.D
102 The following command located under MPLS router node configures the MPLS
103 router-id of the local device.
105 .. index:: [no] address-family [ipv4 | ipv6]
106 .. clicmd:: [no] address-family [ipv4 | ipv6]
108 Configure LDP for IPv4 or IPv6 address-family. Located under MPLS route node,
109 this subnode permits configuring the LDP neighbors.
111 .. index:: [no] interface IFACE
112 .. clicmd:: [no] interface IFACE
114 Located under MPLS address-family node, use this command to enable or disable
115 LDP discovery per interface. IFACE stands for the interface name where LDP is
116 enabled. By default it is disabled. Once this command executed, the
117 address-family interface node is configured.
119 .. index:: [no] discovery transport-address A.B.C.D | A:B::C:D
120 .. clicmd:: [no] discovery transport-address A.B.C.D | A:B::C:D
122 Located under mpls address-family interface node, use this command to set
123 the IPv4 or IPv6 transport-address used by the LDP protocol to talk on this
126 .. index:: [no] neighbor A.B.C.D password PASSWORD
127 .. clicmd:: [no] neighbor A.B.C.D password PASSWORD
129 The following command located under MPLS router node configures the router
130 of a LDP device. This device, if found, will have to comply with the
131 configured password. PASSWORD is a clear text password wit its digest sent
134 .. index:: [no] neighbor A.B.C.D holdtime HOLDTIME
135 .. clicmd:: [no] neighbor A.B.C.D holdtime HOLDTIME
137 The following command located under MPLS router node configures the holdtime
138 value in seconds of the LDP neighbor ID. Configuring it triggers a keepalive
139 mechanism. That value can be configured between 15 and 65535 seconds. After
140 this time of non response, the LDP established session will be considered as
141 set to down. By default, no holdtime is configured for the LDP devices.
143 .. index:: [no] discovery hello holdtime HOLDTIME
144 .. clicmd:: [no] discovery hello holdtime HOLDTIME
146 .. index:: [no] discovery hello interval INTERVAL
147 .. clicmd:: [no] discovery hello interval INTERVAL
149 INTERVAL value ranges from 1 to 65535 seconds. Default value is 5 seconds.
150 This is the value between each hello timer message sent.
151 HOLDTIME value ranges from 1 to 65535 seconds. Default value is 15 seconds.
152 That value is added as a TLV in the LDP messages.
154 .. _show-ldp-information:
159 These commands dump various parts of *ldpd*.
161 .. index:: show mpls ldp neighbor [A.B.C.D]
162 .. clicmd:: show mpls ldp neighbor [A.B.C.D]
164 This command dumps the various neighbors discovered. Below example shows that
165 local machine has an operation neighbor with ID set to 1.1.1.1.
169 west-vm# show mpls ldp neighbor
170 AF ID State Remote Address Uptime
171 ipv4 1.1.1.1 OPERATIONAL 1.1.1.1 00:01:37
174 .. index:: show mpls ldp neighbor [A.B.C.D] capabilities
175 .. clicmd:: show mpls ldp neighbor [A.B.C.D] capabilities
177 .. index:: show mpls ldp neighbor [A.B.C.D] detail
178 .. clicmd:: show mpls ldp neighbor [A.B.C.D] detail
180 Above commands dump other neighbor information.
182 .. index:: show mpls ldp discovery [detail]
183 .. clicmd:: show mpls ldp discovery [detail]
185 .. index:: show mpls ldp ipv4 discovery [detail]
186 .. clicmd:: show mpls ldp ipv4 discovery [detail]
188 .. index:: show mpls ldp ipv6 discovery [detail]
189 .. clicmd:: show mpls ldp ipv6 discovery [detail]
191 Above commands dump discovery information.
193 .. index:: show mpls ldp ipv4 interface
194 .. clicmd:: show mpls ldp ipv4 interface
196 .. index:: show mpls ldp ipv6 interface
197 .. clicmd:: show mpls ldp ipv6 interface
199 Above command dumps the IPv4 or IPv6 interface per where LDP is enabled.
200 Below output illustrates what is dumped for IPv4.
204 west-vm# show mpls ldp ipv4 interface
205 AF Interface State Uptime Hello Timers ac
206 ipv4 eth1 ACTIVE 00:08:35 5/15 0
207 ipv4 eth3 ACTIVE 00:08:35 5/15 1
210 .. index:: show mpls ldp ipv4|ipv6 binding
211 .. clicmd:: show mpls ldp ipv4|ipv6 binding
213 Above command dumps the binding obtained through MPLS exchanges with LDP.
217 west-vm# show mpls ldp ipv4 binding
218 AF Destination Nexthop Local Label Remote Label In Use
219 ipv4 1.1.1.1/32 1.1.1.1 16 imp-null yes
220 ipv4 2.2.2.2/32 1.1.1.1 imp-null 16 no
221 ipv4 10.0.2.0/24 1.1.1.1 imp-null imp-null no
222 ipv4 10.115.0.0/24 1.1.1.1 imp-null 17 no
223 ipv4 10.135.0.0/24 1.1.1.1 imp-null imp-null no
224 ipv4 10.200.0.0/24 1.1.1.1 17 imp-null yes
227 LDP debugging commands
228 ========================
231 simple: debug mpls ldp KIND
232 simple: no debug mpls ldp KIND
234 .. clicmd:: [no] debug mpls ldp KIND
236 Enable or disable debugging messages of a given kind. ``KIND`` can
246 LDP Example Configuration
247 =========================
249 Below configuration gives a typical MPLS configuration of a device located in a
250 MPLS backbone. LDP is enabled on two interfaces and will attempt to peer with
251 two neighbors with router-id set to either 1.1.1.1 or 3.3.3.3.
257 neighbor 1.1.1.1 password test
258 neighbor 3.3.3.3 password test
261 discovery transport-address 2.2.2.2
271 Deploying LDP across a backbone generally is done in a full mesh configuration
272 topology. LDP is typically deployed with an IGP like OSPF, that helps discover
273 the remote IPs. Below example is an OSPF configuration extract that goes with
279 ospf router-id 2.2.2.2
280 network 0.0.0.0/0 area 0
284 Below output shows the routing entry on the LER side. The OSPF routing entry
285 (10.200.0.0) is associated with Label entry (17), and shows that MPLS push action
286 that traffic to that destination will be applied.
290 north-vm# show ip route
291 Codes: K - kernel route, C - connected, S - static, R - RIP,
292 O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
293 T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
295 > - selected route, * - FIB route
297 O>* 1.1.1.1/32 [110/120] via 10.115.0.1, eth2, label 16, 00:00:15
298 O>* 2.2.2.2/32 [110/20] via 10.115.0.1, eth2, label implicit-null, 00:00:15
299 O 3.3.3.3/32 [110/10] via 0.0.0.0, loopback1 onlink, 00:01:19
300 C>* 3.3.3.3/32 is directly connected, loopback1, 00:01:29
301 O>* 10.0.2.0/24 [110/11] via 10.115.0.1, eth2, label implicit-null, 00:00:15
302 O 10.100.0.0/24 [110/10] is directly connected, eth1, 00:00:32
303 C>* 10.100.0.0/24 is directly connected, eth1, 00:00:32
304 O 10.115.0.0/24 [110/10] is directly connected, eth2, 00:00:25
305 C>* 10.115.0.0/24 is directly connected, eth2, 00:00:32
306 O>* 10.135.0.0/24 [110/110] via 10.115.0.1, eth2, label implicit-null, 00:00:15
307 O>* 10.200.0.0/24 [110/210] via 10.115.0.1, eth2, label 17, 00:00:15