]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/ldpd.rst
doc: strip trailing whitespace
[mirror_frr.git] / doc / user / ldpd.rst
1 .. _ldp:
2
3 ***
4 LDP
5 ***
6
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
14 broadcast domain.
15
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`,
18 :rfc:`4447`.
19 Because MPLS is already available, FRR also supports :rfc:`3031`.
20
21 Running Ldpd
22 ============
23
24 The *ldpd* daemon can be invoked with any of the common
25 options (:ref:`common-invocation-options`).
26
27 The *zebra* daemon must be running before *ldpd* is invoked.
28
29 Configuration of *ldpd* is done in its configuration file
30 :file:`ldpd.conf`.
31
32
33 .. _understanding-ldp:
34
35 Understanding LDP principles
36 ============================
37
38 Let's first introduce some definitions that permit understand better the LDP
39 protocol:
40
41 - `LSR` : Labeled Switch Router. Networking devices handling labels used to
42 forward traffic between and through them.
43
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.
46
47
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.
52
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
57 implementation.
58
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
63 table.
64
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
72 destination.
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
80
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.
86
87 .. _configuring-ldpd:
88
89 .. _ldp-configuration:
90
91 LDP Configuration
92 ===================
93
94 .. index:: [no] mpls ldp
95 .. clicmd:: [no] mpls ldp
96
97 Enable or disable LDP daemon
98
99 .. index:: [no] router-id A.B.C.D
100 .. clicmd:: [no] router-id A.B.C.D
101
102 The following command located under MPLS router node configures the MPLS
103 router-id of the local device.
104
105 .. index:: [no] address-family [ipv4 | ipv6]
106 .. clicmd:: [no] address-family [ipv4 | ipv6]
107
108 Configure LDP for IPv4 or IPv6 address-family. Located under MPLS route node,
109 this subnode permits configuring the LDP neighbors.
110
111 .. index:: [no] interface IFACE
112 .. clicmd:: [no] interface IFACE
113
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.
118
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
121
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
124 interface.
125
126 .. index:: [no] neighbor A.B.C.D password PASSWORD
127 .. clicmd:: [no] neighbor A.B.C.D password PASSWORD
128
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
132 through the network.
133
134 .. index:: [no] neighbor A.B.C.D holdtime HOLDTIME
135 .. clicmd:: [no] neighbor A.B.C.D holdtime HOLDTIME
136
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.
142
143 .. index:: [no] discovery hello holdtime HOLDTIME
144 .. clicmd:: [no] discovery hello holdtime HOLDTIME
145
146 .. index:: [no] discovery hello interval INTERVAL
147 .. clicmd:: [no] discovery hello interval INTERVAL
148
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.
153
154 .. _show-ldp-information:
155
156 Show LDP Information
157 ====================
158
159 These commands dump various parts of *ldpd*.
160
161 .. index:: show mpls ldp neighbor [A.B.C.D]
162 .. clicmd:: show mpls ldp neighbor [A.B.C.D]
163
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.
166
167 ::
168
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
172 west-vm#
173
174 .. index:: show mpls ldp neighbor [A.B.C.D] capabilities
175 .. clicmd:: show mpls ldp neighbor [A.B.C.D] capabilities
176
177 .. index:: show mpls ldp neighbor [A.B.C.D] detail
178 .. clicmd:: show mpls ldp neighbor [A.B.C.D] detail
179
180 Above commands dump other neighbor information.
181
182 .. index:: show mpls ldp discovery [detail]
183 .. clicmd:: show mpls ldp discovery [detail]
184
185 .. index:: show mpls ldp ipv4 discovery [detail]
186 .. clicmd:: show mpls ldp ipv4 discovery [detail]
187
188 .. index:: show mpls ldp ipv6 discovery [detail]
189 .. clicmd:: show mpls ldp ipv6 discovery [detail]
190
191 Above commands dump discovery information.
192
193 .. index:: show mpls ldp ipv4 interface
194 .. clicmd:: show mpls ldp ipv4 interface
195
196 .. index:: show mpls ldp ipv6 interface
197 .. clicmd:: show mpls ldp ipv6 interface
198
199 Above command dumps the IPv4 or IPv6 interface per where LDP is enabled.
200 Below output illustrates what is dumped for IPv4.
201
202 ::
203
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
208
209
210 .. index:: show mpls ldp ipv4|ipv6 binding
211 .. clicmd:: show mpls ldp ipv4|ipv6 binding
212
213 Above command dumps the binding obtained through MPLS exchanges with LDP.
214
215 ::
216
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
225 west-vm#
226
227 LDP debugging commands
228 ========================
229
230 .. index::
231 simple: debug mpls ldp KIND
232 simple: no debug mpls ldp KIND
233
234 .. clicmd:: [no] debug mpls ldp KIND
235
236 Enable or disable debugging messages of a given kind. ``KIND`` can
237 be one of:
238
239 - ``discovery``
240 - ``errors``
241 - ``event``
242 - ``labels``
243 - ``messages``
244 - ``zebra``
245
246 LDP Example Configuration
247 =========================
248
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.
252
253 .. code-block:: frr
254
255 mpls ldp
256 router-id 2.2.2.2
257 neighbor 1.1.1.1 password test
258 neighbor 3.3.3.3 password test
259 !
260 address-family ipv4
261 discovery transport-address 2.2.2.2
262 !
263 interface eth1
264 !
265 interface eth3
266 !
267 exit-address-family
268 !
269
270
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
274 LDP configuration
275
276 .. code-block:: frr
277
278 router ospf
279 ospf router-id 2.2.2.2
280 network 0.0.0.0/0 area 0
281 !
282
283
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.
287
288 ::
289
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,
294 F - PBR,
295 > - selected route, * - FIB route
296
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
308 north-vm#
309