]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/ldpd.rst
Merge pull request #7162 from opensourcerouting/zebra-human-netlink
[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 ..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
33 The *zebra* daemon must be running before *ldpd* is invoked.
34
35 Configuration of *ldpd* is done in its configuration file
36 :file:`ldpd.conf`.
37
38
39 .. _understanding-ldp:
40
41 Understanding LDP principles
42 ============================
43
44 Let's first introduce some definitions that permit understand better the LDP
45 protocol:
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
55 peering 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
57 label information is shared, through label advertisements.
58
59 There are different methods to send label advertisement modes. The
60 implementation actually supports the following : Liberal Label Retention +
61 Downstream Unsolicited + Independent Control.
62 The other advertising modes are depicted below, and compared with the current
63 implementation.
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
97 LDP Configuration
98 ===================
99
100 .. index:: mpls ldp
101 .. clicmd:: [no] mpls ldp
102
103 Enable or disable LDP daemon
104
105 .. index:: 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:: ordered-control
112 .. clicmd:: [no] ordered-control
113
114 Configure LDP Ordered Label Distribution Control.
115
116 .. index:: address-family [ipv4 | ipv6]
117 .. clicmd:: [no] address-family [ipv4 | ipv6]
118
119 Configure LDP for IPv4 or IPv6 address-family. Located under MPLS route node,
120 this subnode permits configuring the LDP neighbors.
121
122 .. index:: interface IFACE
123 .. clicmd:: [no] interface IFACE
124
125 Located under MPLS address-family node, use this command to enable or disable
126 LDP discovery per interface. IFACE stands for the interface name where LDP is
127 enabled. By default it is disabled. Once this command executed, the
128 address-family interface node is configured.
129
130 .. index:: discovery transport-address A.B.C.D | A:B::C:D
131 .. clicmd:: [no] discovery transport-address A.B.C.D | A:B::C:D
132
133 Located under mpls address-family interface node, use this command to set
134 the IPv4 or IPv6 transport-address used by the LDP protocol to talk on this
135 interface.
136
137 .. index:: neighbor A.B.C.D password PASSWORD
138 .. clicmd:: [no] neighbor A.B.C.D password PASSWORD
139
140 The following command located under MPLS router node configures the router
141 of a LDP device. This device, if found, will have to comply with the
142 configured password. PASSWORD is a clear text password wit its digest sent
143 through the network.
144
145 .. index:: neighbor A.B.C.D holdtime HOLDTIME
146 .. clicmd:: [no] neighbor A.B.C.D holdtime HOLDTIME
147
148 The following command located under MPLS router node configures the holdtime
149 value in seconds of the LDP neighbor ID. Configuring it triggers a keepalive
150 mechanism. That value can be configured between 15 and 65535 seconds. After
151 this time of non response, the LDP established session will be considered as
152 set to down. By default, no holdtime is configured for the LDP devices.
153
154 .. index:: discovery hello holdtime HOLDTIME
155 .. clicmd:: [no] discovery hello holdtime HOLDTIME
156
157 .. index:: discovery hello interval INTERVAL
158 .. clicmd:: [no] discovery hello interval INTERVAL
159
160 INTERVAL value ranges from 1 to 65535 seconds. Default value is 5 seconds.
161 This is the value between each hello timer message sent.
162 HOLDTIME value ranges from 1 to 65535 seconds. Default value is 15 seconds.
163 That value is added as a TLV in the LDP messages.
164
165 .. index:: dual-stack transport-connection prefer ipv4
166 .. clicmd:: [no] dual-stack transport-connection prefer ipv4
167
168 When *ldpd* is configured for dual-stack operation, the transport connection
169 preference is IPv6 by default (as specified by :rfc:`7552`). On such
170 circumstances, *ldpd* will refuse to establish TCP connections over IPv4.
171 You can use above command to change the transport connection preference to
172 IPv4. In this case, it will be possible to distribute label mappings for
173 IPv6 FECs over TCPv4 connections.
174
175 .. _show-ldp-information:
176
177 Show LDP Information
178 ====================
179
180 These commands dump various parts of *ldpd*.
181
182 .. index:: show mpls ldp neighbor [A.B.C.D]
183 .. clicmd:: show mpls ldp neighbor [A.B.C.D]
184
185 This command dumps the various neighbors discovered. Below example shows that
186 local machine has an operation neighbor with ID set to 1.1.1.1.
187
188 ::
189
190 west-vm# show mpls ldp neighbor
191 AF ID State Remote Address Uptime
192 ipv4 1.1.1.1 OPERATIONAL 1.1.1.1 00:01:37
193 west-vm#
194
195 .. index:: show mpls ldp neighbor [A.B.C.D] capabilities
196 .. clicmd:: show mpls ldp neighbor [A.B.C.D] capabilities
197
198 .. index:: show mpls ldp neighbor [A.B.C.D] detail
199 .. clicmd:: show mpls ldp neighbor [A.B.C.D] detail
200
201 Above commands dump other neighbor information.
202
203 .. index:: show mpls ldp discovery [detail]
204 .. clicmd:: show mpls ldp discovery [detail]
205
206 .. index:: show mpls ldp ipv4 discovery [detail]
207 .. clicmd:: show mpls ldp ipv4 discovery [detail]
208
209 .. index:: show mpls ldp ipv6 discovery [detail]
210 .. clicmd:: show mpls ldp ipv6 discovery [detail]
211
212 Above commands dump discovery information.
213
214 .. index:: show mpls ldp ipv4 interface
215 .. clicmd:: show mpls ldp ipv4 interface
216
217 .. index:: show mpls ldp ipv6 interface
218 .. clicmd:: show mpls ldp ipv6 interface
219
220 Above command dumps the IPv4 or IPv6 interface per where LDP is enabled.
221 Below output illustrates what is dumped for IPv4.
222
223 ::
224
225 west-vm# show mpls ldp ipv4 interface
226 AF Interface State Uptime Hello Timers ac
227 ipv4 eth1 ACTIVE 00:08:35 5/15 0
228 ipv4 eth3 ACTIVE 00:08:35 5/15 1
229
230
231 .. index:: show mpls ldp ipv4|ipv6 binding
232 .. clicmd:: show mpls ldp ipv4|ipv6 binding
233
234 Above command dumps the binding obtained through MPLS exchanges with LDP.
235
236 ::
237
238 west-vm# show mpls ldp ipv4 binding
239 AF Destination Nexthop Local Label Remote Label In Use
240 ipv4 1.1.1.1/32 1.1.1.1 16 imp-null yes
241 ipv4 2.2.2.2/32 1.1.1.1 imp-null 16 no
242 ipv4 10.0.2.0/24 1.1.1.1 imp-null imp-null no
243 ipv4 10.115.0.0/24 1.1.1.1 imp-null 17 no
244 ipv4 10.135.0.0/24 1.1.1.1 imp-null imp-null no
245 ipv4 10.200.0.0/24 1.1.1.1 17 imp-null yes
246 west-vm#
247
248 LDP debugging commands
249 ========================
250
251 .. index::
252 simple: debug mpls ldp KIND
253 simple: no debug mpls ldp KIND
254
255 .. clicmd:: [no] debug mpls ldp KIND
256
257 Enable or disable debugging messages of a given kind. ``KIND`` can
258 be one of:
259
260 - ``discovery``
261 - ``errors``
262 - ``event``
263 - ``labels``
264 - ``messages``
265 - ``zebra``
266
267 LDP Example Configuration
268 =========================
269
270 Below configuration gives a typical MPLS configuration of a device located in a
271 MPLS backbone. LDP is enabled on two interfaces and will attempt to peer with
272 two neighbors with router-id set to either 1.1.1.1 or 3.3.3.3.
273
274 .. code-block:: frr
275
276 mpls ldp
277 router-id 2.2.2.2
278 neighbor 1.1.1.1 password test
279 neighbor 3.3.3.3 password test
280 !
281 address-family ipv4
282 discovery transport-address 2.2.2.2
283 !
284 interface eth1
285 !
286 interface eth3
287 !
288 exit-address-family
289 !
290
291
292 Deploying LDP across a backbone generally is done in a full mesh configuration
293 topology. LDP is typically deployed with an IGP like OSPF, that helps discover
294 the remote IPs. Below example is an OSPF configuration extract that goes with
295 LDP configuration
296
297 .. code-block:: frr
298
299 router ospf
300 ospf router-id 2.2.2.2
301 network 0.0.0.0/0 area 0
302 !
303
304
305 Below output shows the routing entry on the LER side. The OSPF routing entry
306 (10.200.0.0) is associated with Label entry (17), and shows that MPLS push action
307 that traffic to that destination will be applied.
308
309 ::
310
311 north-vm# show ip route
312 Codes: K - kernel route, C - connected, S - static, R - RIP,
313 O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
314 T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
315 F - PBR,
316 > - selected route, * - FIB route
317
318 O>* 1.1.1.1/32 [110/120] via 10.115.0.1, eth2, label 16, 00:00:15
319 O>* 2.2.2.2/32 [110/20] via 10.115.0.1, eth2, label implicit-null, 00:00:15
320 O 3.3.3.3/32 [110/10] via 0.0.0.0, loopback1 onlink, 00:01:19
321 C>* 3.3.3.3/32 is directly connected, loopback1, 00:01:29
322 O>* 10.0.2.0/24 [110/11] via 10.115.0.1, eth2, label implicit-null, 00:00:15
323 O 10.100.0.0/24 [110/10] is directly connected, eth1, 00:00:32
324 C>* 10.100.0.0/24 is directly connected, eth1, 00:00:32
325 O 10.115.0.0/24 [110/10] is directly connected, eth2, 00:00:25
326 C>* 10.115.0.0/24 is directly connected, eth2, 00:00:32
327 O>* 10.135.0.0/24 [110/110] via 10.115.0.1, eth2, label implicit-null, 00:00:15
328 O>* 10.200.0.0/24 [110/210] via 10.115.0.1, eth2, label 17, 00:00:15
329 north-vm#
330