]>
Commit | Line | Data |
---|---|---|
4535bb2c PG |
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 | ||
c039af97 | 27 | .. option:: --ctl_socket |
6ed85950 DS |
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 |
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 | ||
03750f1e | 100 | .. clicmd:: mpls ldp |
4535bb2c PG |
101 | |
102 | Enable or disable LDP daemon | |
103 | ||
03750f1e | 104 | .. clicmd:: router-id A.B.C.D |
4535bb2c PG |
105 | |
106 | The following command located under MPLS router node configures the MPLS | |
107 | router-id of the local device. | |
108 | ||
03750f1e | 109 | .. clicmd:: ordered-control |
aff1743c KS |
110 | |
111 | Configure LDP Ordered Label Distribution Control. | |
112 | ||
03750f1e | 113 | .. clicmd:: address-family [ipv4 | ipv6] |
4535bb2c PG |
114 | |
115 | Configure LDP for IPv4 or IPv6 address-family. Located under MPLS route node, | |
116 | this subnode permits configuring the LDP neighbors. | |
117 | ||
03750f1e | 118 | .. clicmd:: interface IFACE |
4535bb2c PG |
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 | ||
03750f1e | 125 | .. clicmd:: discovery transport-address A.B.C.D | A:B::C:D |
4535bb2c PG |
126 | |
127 | Located under mpls address-family interface node, use this command to set | |
128 | the IPv4 or IPv6 transport-address used by the LDP protocol to talk on this | |
129 | interface. | |
130 | ||
03750f1e | 131 | .. clicmd:: neighbor A.B.C.D password PASSWORD |
4535bb2c PG |
132 | |
133 | The following command located under MPLS router node configures the router | |
134 | of a LDP device. This device, if found, will have to comply with the | |
135 | configured password. PASSWORD is a clear text password wit its digest sent | |
136 | through the network. | |
137 | ||
03750f1e | 138 | .. clicmd:: neighbor A.B.C.D holdtime HOLDTIME |
4535bb2c PG |
139 | |
140 | The following command located under MPLS router node configures the holdtime | |
141 | value in seconds of the LDP neighbor ID. Configuring it triggers a keepalive | |
142 | mechanism. That value can be configured between 15 and 65535 seconds. After | |
143 | this time of non response, the LDP established session will be considered as | |
144 | set to down. By default, no holdtime is configured for the LDP devices. | |
145 | ||
03750f1e | 146 | .. clicmd:: discovery hello holdtime HOLDTIME |
4535bb2c | 147 | |
03750f1e | 148 | .. clicmd:: discovery hello interval INTERVAL |
4535bb2c PG |
149 | |
150 | INTERVAL value ranges from 1 to 65535 seconds. Default value is 5 seconds. | |
151 | This is the value between each hello timer message sent. | |
152 | HOLDTIME value ranges from 1 to 65535 seconds. Default value is 15 seconds. | |
153 | That value is added as a TLV in the LDP messages. | |
154 | ||
03750f1e | 155 | .. clicmd:: dual-stack transport-connection prefer ipv4 |
a305be43 PG |
156 | |
157 | When *ldpd* is configured for dual-stack operation, the transport connection | |
158 | preference is IPv6 by default (as specified by :rfc:`7552`). On such | |
159 | circumstances, *ldpd* will refuse to establish TCP connections over IPv4. | |
160 | You can use above command to change the transport connection preference to | |
161 | IPv4. In this case, it will be possible to distribute label mappings for | |
162 | IPv6 FECs over TCPv4 connections. | |
163 | ||
4535bb2c PG |
164 | .. _show-ldp-information: |
165 | ||
166 | Show LDP Information | |
167 | ==================== | |
168 | ||
169 | These commands dump various parts of *ldpd*. | |
170 | ||
4535bb2c PG |
171 | .. clicmd:: show mpls ldp neighbor [A.B.C.D] |
172 | ||
173 | This command dumps the various neighbors discovered. Below example shows that | |
174 | local machine has an operation neighbor with ID set to 1.1.1.1. | |
175 | ||
176 | :: | |
177 | ||
178 | west-vm# show mpls ldp neighbor | |
179 | AF ID State Remote Address Uptime | |
180 | ipv4 1.1.1.1 OPERATIONAL 1.1.1.1 00:01:37 | |
181 | west-vm# | |
182 | ||
4535bb2c PG |
183 | .. clicmd:: show mpls ldp neighbor [A.B.C.D] capabilities |
184 | ||
4535bb2c PG |
185 | .. clicmd:: show mpls ldp neighbor [A.B.C.D] detail |
186 | ||
187 | Above commands dump other neighbor information. | |
188 | ||
4535bb2c PG |
189 | .. clicmd:: show mpls ldp discovery [detail] |
190 | ||
4535bb2c PG |
191 | .. clicmd:: show mpls ldp ipv4 discovery [detail] |
192 | ||
4535bb2c PG |
193 | .. clicmd:: show mpls ldp ipv6 discovery [detail] |
194 | ||
195 | Above commands dump discovery information. | |
196 | ||
4535bb2c PG |
197 | .. clicmd:: show mpls ldp ipv4 interface |
198 | ||
4535bb2c PG |
199 | .. clicmd:: show mpls ldp ipv6 interface |
200 | ||
201 | Above command dumps the IPv4 or IPv6 interface per where LDP is enabled. | |
202 | Below output illustrates what is dumped for IPv4. | |
203 | ||
204 | :: | |
205 | ||
206 | west-vm# show mpls ldp ipv4 interface | |
207 | AF Interface State Uptime Hello Timers ac | |
208 | ipv4 eth1 ACTIVE 00:08:35 5/15 0 | |
209 | ipv4 eth3 ACTIVE 00:08:35 5/15 1 | |
210 | ||
211 | ||
4535bb2c PG |
212 | .. clicmd:: show mpls ldp ipv4|ipv6 binding |
213 | ||
214 | Above command dumps the binding obtained through MPLS exchanges with LDP. | |
215 | ||
216 | :: | |
217 | ||
218 | west-vm# show mpls ldp ipv4 binding | |
219 | AF Destination Nexthop Local Label Remote Label In Use | |
220 | ipv4 1.1.1.1/32 1.1.1.1 16 imp-null yes | |
221 | ipv4 2.2.2.2/32 1.1.1.1 imp-null 16 no | |
222 | ipv4 10.0.2.0/24 1.1.1.1 imp-null imp-null no | |
223 | ipv4 10.115.0.0/24 1.1.1.1 imp-null 17 no | |
224 | ipv4 10.135.0.0/24 1.1.1.1 imp-null imp-null no | |
225 | ipv4 10.200.0.0/24 1.1.1.1 17 imp-null yes | |
226 | west-vm# | |
227 | ||
8ed09fbf | 228 | |
4535bb2c PG |
229 | LDP debugging commands |
230 | ======================== | |
231 | ||
4535bb2c | 232 | |
03750f1e | 233 | .. clicmd:: debug mpls ldp KIND |
4535bb2c PG |
234 | |
235 | Enable or disable debugging messages of a given kind. ``KIND`` can | |
236 | be one of: | |
237 | ||
238 | - ``discovery`` | |
239 | - ``errors`` | |
240 | - ``event`` | |
241 | - ``labels`` | |
242 | - ``messages`` | |
243 | - ``zebra`` | |
244 | ||
b832909b QY |
245 | |
246 | Sample configuration | |
247 | ==================== | |
4535bb2c PG |
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 | ||
b832909b QY |
310 | |
311 | Additional example demonstrating use of some miscellaneous config options: | |
312 | ||
313 | .. code-block:: frr | |
314 | ||
315 | interface eth0 | |
316 | ! | |
317 | interface eth1 | |
318 | ! | |
319 | interface lo | |
320 | ! | |
321 | mpls ldp | |
322 | dual-stack cisco-interop | |
323 | neighbor 10.0.1.5 password opensourcerouting | |
324 | neighbor 172.16.0.1 password opensourcerouting | |
325 | ! | |
326 | address-family ipv4 | |
327 | discovery transport-address 10.0.1.1 | |
328 | label local advertise explicit-null | |
329 | ! | |
330 | interface eth0 | |
331 | ! | |
332 | interface eth1 | |
333 | ! | |
334 | ! | |
335 | address-family ipv6 | |
336 | discovery transport-address 2001:db8::1 | |
337 | ! | |
338 | interface eth1 | |
339 | ! | |
340 | ! | |
341 | ! | |
342 | l2vpn ENG type vpls | |
343 | bridge br0 | |
344 | member interface eth2 | |
345 | ! | |
346 | member pseudowire mpw0 | |
347 | neighbor lsr-id 1.1.1.1 | |
348 | pw-id 100 | |
349 | ! | |
350 | ! | |
351 |