]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/ldpd.rst
doc: Add rfc8212 to supported RFCs list
[mirror_frr.git] / doc / user / ldpd.rst
CommitLineData
4535bb2c
PG
1.. _ldp:
2
3***
4LDP
5***
6
7The *ldpd* daemon is a standardised protocol that permits exchanging MPLS label
8information between MPLS devices. The LDP protocol creates peering between
9devices, so as to exchange that label information. This information is stored in
10MPLS table of *zebra*, and it injects that MPLS information in the underlying
11system (Linux kernel or OpenBSD system for instance).
12*ldpd* provides necessary options to create a Layer 2 VPN across MPLS network.
13For instance, it is possible to interconnect several sites that share the same
14broadcast domain.
15
16FRR implements LDP as described in :rfc:`5036`; other LDP standard are the
17following ones: :rfc:`6720`, :rfc:`6667`, :rfc:`5919`, :rfc:`5561`, :rfc:`7552`,
18:rfc:`4447`.
19Because MPLS is already available, FRR also supports :rfc:`3031`.
20
21Running Ldpd
22============
23
24The *ldpd* daemon can be invoked with any of the common
25options (:ref:`common-invocation-options`).
26
6ed85950
DS
27..option:: --ctl_socket
28
29 This option allows you to override the path to the ldpd.sock file
30 used to control this daemon. If specified this option overrides
31 the -N option path addition.
32
4535bb2c
PG
33The *zebra* daemon must be running before *ldpd* is invoked.
34
35Configuration of *ldpd* is done in its configuration file
36:file:`ldpd.conf`.
37
38
39.. _understanding-ldp:
40
41Understanding LDP principles
42============================
43
44Let's first introduce some definitions that permit understand better the LDP
45protocol:
46
47- `LSR` : Labeled Switch Router. Networking devices handling labels used to
48 forward traffic between and through them.
49
50- `LER` : Labeled Edge Router. A Labeled edge router is located at the edge of
51 an MPLS network, generally between an IP network and an MPLS network.
52
53
54``LDP`` aims at sharing label information across devices. It tries to establish
55peering with remote LDP capable devices, first by discovering using UDP port 646
56, then by peering using TCP port 646. Once the TCP session is established, the
57label information is shared, through label advertisements.
58
59There are different methods to send label advertisement modes. The
60implementation actually supports the following : Liberal Label Retention +
61Downstream Unsolicited + Independent Control.
62The other advertising modes are depicted below, and compared with the current
63implementation.
64
65- Liberal label retention versus conservative mode
66 In liberal mode, every label sent by every LSR is stored in the MPLS table.
67 In conservative mode, only the label that was sent by the best next hop
68 (determined by the IGP metric) for that particular FEC is stored in the MPLS
69 table.
70
71- Independent LSP Control versus ordered LSP Control
72 MPLS has two ways of binding labels to FEC’s; either through ordered LSP
73 control, or independent LSP control.
74 Ordered LSP control only binds a label to a FEC if it is the egress LSR, or
75 the router received a label binding for a FEC from the next hop router. In
76 this mode, an MPLS router will create a label binding for each FEC and
77 distribute it to its neighbors so long as he has a entry in the RIB for the
78 destination.
79 In the other mode, label bindings are made without any dependencies on another
80 router advertising a label for a particular FEC. Each router makes it own
81 independent decision to create a label for each FEC.
82 By default IOS uses Independent LSP Control, while Juniper implements the
83 Ordered Control. Both modes are interoperable, the difference is that Ordered
84 Control prevent blackholing during the LDP convergence process, at cost of
85 slowing down the convergence itself
86
87- unsolicited downstream versus downstream on demand
88 Downstream on demand label distribution is where an LSR must explicitly
89 request that a label be sent from its downstream router for a particular FEC.
90 Unsolicited label distribution is where a label is sent from the downstream
91 router without the original router requesting it.
92
93.. _configuring-ldpd:
94
95.. _ldp-configuration:
96
97LDP Configuration
98===================
99
100.. index:: [no] mpls ldp
101.. clicmd:: [no] mpls ldp
102
103 Enable or disable LDP daemon
104
105.. index:: [no] router-id A.B.C.D
106.. clicmd:: [no] router-id A.B.C.D
107
108 The following command located under MPLS router node configures the MPLS
109 router-id of the local device.
110
111.. index:: [no] address-family [ipv4 | ipv6]
112.. clicmd:: [no] address-family [ipv4 | ipv6]
113
114 Configure LDP for IPv4 or IPv6 address-family. Located under MPLS route node,
115 this subnode permits configuring the LDP neighbors.
116
117.. index:: [no] interface IFACE
118.. clicmd:: [no] interface IFACE
119
120 Located under MPLS address-family node, use this command to enable or disable
121 LDP discovery per interface. IFACE stands for the interface name where LDP is
122 enabled. By default it is disabled. Once this command executed, the
123 address-family interface node is configured.
124
125.. index:: [no] discovery transport-address A.B.C.D | A:B::C:D
126.. clicmd:: [no] discovery transport-address A.B.C.D | A:B::C:D
127
128 Located under mpls address-family interface node, use this command to set
129 the IPv4 or IPv6 transport-address used by the LDP protocol to talk on this
130 interface.
131
132.. index:: [no] neighbor A.B.C.D password PASSWORD
133.. clicmd:: [no] neighbor A.B.C.D password PASSWORD
134
135 The following command located under MPLS router node configures the router
136 of a LDP device. This device, if found, will have to comply with the
137 configured password. PASSWORD is a clear text password wit its digest sent
138 through the network.
139
140.. index:: [no] neighbor A.B.C.D holdtime HOLDTIME
141.. clicmd:: [no] neighbor A.B.C.D holdtime HOLDTIME
142
143 The following command located under MPLS router node configures the holdtime
144 value in seconds of the LDP neighbor ID. Configuring it triggers a keepalive
145 mechanism. That value can be configured between 15 and 65535 seconds. After
146 this time of non response, the LDP established session will be considered as
147 set to down. By default, no holdtime is configured for the LDP devices.
148
149.. index:: [no] discovery hello holdtime HOLDTIME
150.. clicmd:: [no] discovery hello holdtime HOLDTIME
151
152.. index:: [no] discovery hello interval INTERVAL
153.. clicmd:: [no] discovery hello interval INTERVAL
154
155 INTERVAL value ranges from 1 to 65535 seconds. Default value is 5 seconds.
156 This is the value between each hello timer message sent.
157 HOLDTIME value ranges from 1 to 65535 seconds. Default value is 15 seconds.
158 That value is added as a TLV in the LDP messages.
159
a305be43
PG
160.. index:: [no] dual-stack transport-connection prefer ipv4
161.. clicmd:: [no] dual-stack transport-connection prefer ipv4
162
163 When *ldpd* is configured for dual-stack operation, the transport connection
164 preference is IPv6 by default (as specified by :rfc:`7552`). On such
165 circumstances, *ldpd* will refuse to establish TCP connections over IPv4.
166 You can use above command to change the transport connection preference to
167 IPv4. In this case, it will be possible to distribute label mappings for
168 IPv6 FECs over TCPv4 connections.
169
4535bb2c
PG
170.. _show-ldp-information:
171
172Show LDP Information
173====================
174
175These commands dump various parts of *ldpd*.
176
177.. index:: show mpls ldp neighbor [A.B.C.D]
178.. clicmd:: show mpls ldp neighbor [A.B.C.D]
179
180 This command dumps the various neighbors discovered. Below example shows that
181 local machine has an operation neighbor with ID set to 1.1.1.1.
182
183 ::
184
185 west-vm# show mpls ldp neighbor
186 AF ID State Remote Address Uptime
187 ipv4 1.1.1.1 OPERATIONAL 1.1.1.1 00:01:37
188 west-vm#
189
190.. index:: show mpls ldp neighbor [A.B.C.D] capabilities
191.. clicmd:: show mpls ldp neighbor [A.B.C.D] capabilities
192
193.. index:: show mpls ldp neighbor [A.B.C.D] detail
194.. clicmd:: show mpls ldp neighbor [A.B.C.D] detail
195
196 Above commands dump other neighbor information.
197
198.. index:: show mpls ldp discovery [detail]
199.. clicmd:: show mpls ldp discovery [detail]
200
201.. index:: show mpls ldp ipv4 discovery [detail]
202.. clicmd:: show mpls ldp ipv4 discovery [detail]
203
204.. index:: show mpls ldp ipv6 discovery [detail]
205.. clicmd:: show mpls ldp ipv6 discovery [detail]
206
207 Above commands dump discovery information.
208
209.. index:: show mpls ldp ipv4 interface
210.. clicmd:: show mpls ldp ipv4 interface
211
212.. index:: show mpls ldp ipv6 interface
213.. clicmd:: show mpls ldp ipv6 interface
214
215 Above command dumps the IPv4 or IPv6 interface per where LDP is enabled.
216 Below output illustrates what is dumped for IPv4.
217
218 ::
219
220 west-vm# show mpls ldp ipv4 interface
221 AF Interface State Uptime Hello Timers ac
222 ipv4 eth1 ACTIVE 00:08:35 5/15 0
223 ipv4 eth3 ACTIVE 00:08:35 5/15 1
224
225
226.. index:: show mpls ldp ipv4|ipv6 binding
227.. clicmd:: show mpls ldp ipv4|ipv6 binding
228
229 Above command dumps the binding obtained through MPLS exchanges with LDP.
230
231 ::
232
233 west-vm# show mpls ldp ipv4 binding
234 AF Destination Nexthop Local Label Remote Label In Use
235 ipv4 1.1.1.1/32 1.1.1.1 16 imp-null yes
236 ipv4 2.2.2.2/32 1.1.1.1 imp-null 16 no
237 ipv4 10.0.2.0/24 1.1.1.1 imp-null imp-null no
238 ipv4 10.115.0.0/24 1.1.1.1 imp-null 17 no
239 ipv4 10.135.0.0/24 1.1.1.1 imp-null imp-null no
240 ipv4 10.200.0.0/24 1.1.1.1 17 imp-null yes
241 west-vm#
242
243LDP debugging commands
244========================
245
246.. index::
247 simple: debug mpls ldp KIND
248 simple: no debug mpls ldp KIND
249
250.. clicmd:: [no] debug mpls ldp KIND
251
252 Enable or disable debugging messages of a given kind. ``KIND`` can
253 be one of:
254
255 - ``discovery``
256 - ``errors``
257 - ``event``
258 - ``labels``
259 - ``messages``
260 - ``zebra``
261
262LDP Example Configuration
263=========================
264
265Below configuration gives a typical MPLS configuration of a device located in a
266MPLS backbone. LDP is enabled on two interfaces and will attempt to peer with
267two neighbors with router-id set to either 1.1.1.1 or 3.3.3.3.
268
269.. code-block:: frr
270
271 mpls ldp
272 router-id 2.2.2.2
273 neighbor 1.1.1.1 password test
274 neighbor 3.3.3.3 password test
275 !
276 address-family ipv4
277 discovery transport-address 2.2.2.2
278 !
279 interface eth1
280 !
281 interface eth3
282 !
283 exit-address-family
284 !
285
286
287Deploying LDP across a backbone generally is done in a full mesh configuration
288topology. LDP is typically deployed with an IGP like OSPF, that helps discover
289the remote IPs. Below example is an OSPF configuration extract that goes with
290LDP configuration
291
292.. code-block:: frr
293
294 router ospf
295 ospf router-id 2.2.2.2
296 network 0.0.0.0/0 area 0
297 !
298
299
300Below output shows the routing entry on the LER side. The OSPF routing entry
301(10.200.0.0) is associated with Label entry (17), and shows that MPLS push action
302that traffic to that destination will be applied.
303
304::
305
306 north-vm# show ip route
307 Codes: K - kernel route, C - connected, S - static, R - RIP,
308 O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
309 T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
310 F - PBR,
311 > - selected route, * - FIB route
312
313 O>* 1.1.1.1/32 [110/120] via 10.115.0.1, eth2, label 16, 00:00:15
314 O>* 2.2.2.2/32 [110/20] via 10.115.0.1, eth2, label implicit-null, 00:00:15
315 O 3.3.3.3/32 [110/10] via 0.0.0.0, loopback1 onlink, 00:01:19
316 C>* 3.3.3.3/32 is directly connected, loopback1, 00:01:29
317 O>* 10.0.2.0/24 [110/11] via 10.115.0.1, eth2, label implicit-null, 00:00:15
318 O 10.100.0.0/24 [110/10] is directly connected, eth1, 00:00:32
319 C>* 10.100.0.0/24 is directly connected, eth1, 00:00:32
320 O 10.115.0.0/24 [110/10] is directly connected, eth2, 00:00:25
321 C>* 10.115.0.0/24 is directly connected, eth2, 00:00:32
322 O>* 10.135.0.0/24 [110/110] via 10.115.0.1, eth2, label implicit-null, 00:00:15
323 O>* 10.200.0.0/24 [110/210] via 10.115.0.1, eth2, label 17, 00:00:15
324 north-vm#
325