]> git.proxmox.com Git - mirror_frr.git/blame - ldpd/ldp_vty_cmds.c
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / ldpd / ldp_vty_cmds.c
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
c740f7d3
RW
2/*
3 * Copyright (C) 2016 by Open Source Routing.
c740f7d3
RW
4 */
5
6#include <zebra.h>
7
8#include "command.h"
9#include "vty.h"
6d53d24c
DS
10#include "json.h"
11
935029cd 12#include "ldpd/ldpd.h"
c740f7d3 13#include "ldpd/ldp_vty.h"
1224e5c4 14#include "ldpd/ldp_vty_cmds_clippy.c"
c740f7d3 15
281bd4dd 16DEFPY_NOSH(ldp_mpls_ldp,
c740f7d3 17 ldp_mpls_ldp_cmd,
fc4ea5c2
RW
18 "mpls ldp",
19 "Global MPLS configuration subcommands\n"
20 "Label Distribution Protocol\n")
21{
1224e5c4 22 return (ldp_vty_mpls_ldp(vty, NULL));
fc4ea5c2
RW
23}
24
1224e5c4 25DEFPY (no_ldp_mpls_ldp,
fc4ea5c2
RW
26 no_ldp_mpls_ldp_cmd,
27 "no mpls ldp",
45506658 28 NO_STR
c740f7d3
RW
29 "Global MPLS configuration subcommands\n"
30 "Label Distribution Protocol\n")
fc4ea5c2 31{
1224e5c4 32 return (ldp_vty_mpls_ldp(vty, "no"));
fc4ea5c2
RW
33}
34
281bd4dd 35DEFPY_NOSH(ldp_l2vpn,
fc4ea5c2 36 ldp_l2vpn_cmd,
281bd4dd 37 "l2vpn WORD$l2vpn_name type vpls",
fc4ea5c2
RW
38 "Configure l2vpn commands\n"
39 "L2VPN name\n"
40 "L2VPN type\n"
41 "Virtual Private LAN Service\n")
c740f7d3 42{
281bd4dd 43 return (ldp_vty_l2vpn(vty, NULL, l2vpn_name));
c740f7d3
RW
44}
45
1224e5c4 46DEFPY (no_ldp_l2vpn,
fc4ea5c2 47 no_ldp_l2vpn_cmd,
935029cd 48 "no l2vpn WORD$l2vpn_name type vpls",
45506658 49 NO_STR
c740f7d3
RW
50 "Configure l2vpn commands\n"
51 "L2VPN name\n"
52 "L2VPN type\n"
53 "Virtual Private LAN Service\n")
54{
935029cd 55 return (ldp_vty_l2vpn(vty, "no", l2vpn_name));
c740f7d3
RW
56}
57
281bd4dd 58DEFPY_NOSH(ldp_address_family,
c740f7d3 59 ldp_address_family_cmd,
281bd4dd 60 "address-family <ipv4|ipv6>$af",
fc4ea5c2
RW
61 "Configure Address Family and its parameters\n"
62 "IPv4\n"
63 "IPv6\n")
64{
281bd4dd 65 return (ldp_vty_address_family(vty, NULL, af));
fc4ea5c2
RW
66}
67
1224e5c4 68DEFPY (no_ldp_address_family,
fc4ea5c2 69 no_ldp_address_family_cmd,
1224e5c4 70 "no address-family <ipv4|ipv6>$af",
45506658 71 NO_STR
c740f7d3
RW
72 "Configure Address Family and its parameters\n"
73 "IPv4\n"
74 "IPv6\n")
75{
1224e5c4 76 return (ldp_vty_address_family(vty, "no", af));
c740f7d3
RW
77}
78
281bd4dd 79DEFPY_NOSH(ldp_exit_address_family,
983bd6f7
RW
80 ldp_exit_address_family_cmd,
81 "exit-address-family",
82 "Exit from Address Family configuration mode\n")
83{
84 if (vty->node == LDP_IPV4_NODE || vty->node == LDP_IPV6_NODE)
85 vty->node = LDP_NODE;
86 return CMD_SUCCESS;
87}
88
16cd3d9d
RW
89DEFPY (ldp_discovery_link_holdtime,
90 ldp_discovery_link_holdtime_cmd,
91 "[no] discovery hello holdtime (1-65535)$holdtime",
45506658 92 NO_STR
c740f7d3
RW
93 "Configure discovery parameters\n"
94 "LDP Link Hellos\n"
16cd3d9d
RW
95 "Hello holdtime\n"
96 "Time (seconds) - 65535 implies infinite\n")
97{
98 return (ldp_vty_disc_holdtime(vty, no, HELLO_LINK, holdtime));
99}
100
101DEFPY (ldp_discovery_targeted_holdtime,
102 ldp_discovery_targeted_holdtime_cmd,
103 "[no] discovery targeted-hello holdtime (1-65535)$holdtime",
104 NO_STR
105 "Configure discovery parameters\n"
c740f7d3
RW
106 "LDP Targeted Hellos\n"
107 "Hello holdtime\n"
108 "Time (seconds) - 65535 implies infinite\n")
109{
16cd3d9d 110 return (ldp_vty_disc_holdtime(vty, no, HELLO_TARGETED, holdtime));
c740f7d3
RW
111}
112
16cd3d9d
RW
113DEFPY (ldp_discovery_link_interval,
114 ldp_discovery_link_interval_cmd,
115 "[no] discovery hello interval (1-65535)$interval",
45506658 116 NO_STR
c740f7d3
RW
117 "Configure discovery parameters\n"
118 "LDP Link Hellos\n"
16cd3d9d
RW
119 "Hello interval\n"
120 "Time (seconds)\n")
121{
122 return (ldp_vty_disc_interval(vty, no, HELLO_LINK, interval));
123}
124
125DEFPY (ldp_discovery_targeted_interval,
126 ldp_discovery_targeted_interval_cmd,
127 "[no] discovery targeted-hello interval (1-65535)$interval",
128 NO_STR
129 "Configure discovery parameters\n"
c740f7d3
RW
130 "LDP Targeted Hellos\n"
131 "Hello interval\n"
132 "Time (seconds)\n")
133{
16cd3d9d 134 return (ldp_vty_disc_interval(vty, no, HELLO_TARGETED, interval));
c740f7d3
RW
135}
136
1224e5c4 137DEFPY (ldp_dual_stack_transport_connection_prefer_ipv4,
c740f7d3
RW
138 ldp_dual_stack_transport_connection_prefer_ipv4_cmd,
139 "[no] dual-stack transport-connection prefer ipv4",
45506658 140 NO_STR
c740f7d3
RW
141 "Configure dual stack parameters\n"
142 "Configure TCP transport parameters\n"
0437e105 143 "Configure preferred address family for TCP transport connection with neighbor\n"
c740f7d3
RW
144 "IPv4\n")
145{
1224e5c4 146 return (ldp_vty_trans_pref_ipv4(vty, no));
c740f7d3
RW
147}
148
1224e5c4 149DEFPY (ldp_dual_stack_cisco_interop,
c740f7d3
RW
150 ldp_dual_stack_cisco_interop_cmd,
151 "[no] dual-stack cisco-interop",
45506658 152 NO_STR
c740f7d3
RW
153 "Configure dual stack parameters\n"
154 "Use Cisco non-compliant format to send and interpret the Dual-Stack capability TLV\n")
155{
1224e5c4 156 return (ldp_vty_ds_cisco_interop(vty, no));
c740f7d3
RW
157}
158
1224e5c4 159DEFPY (ldp_neighbor_password,
c740f7d3 160 ldp_neighbor_password_cmd,
1224e5c4 161 "[no] neighbor A.B.C.D$neighbor password WORD$password",
45506658 162 NO_STR
c740f7d3
RW
163 "Configure neighbor parameters\n"
164 "LDP Id of neighbor\n"
165 "Configure password for MD5 authentication\n"
166 "The password\n")
167{
1224e5c4 168 return (ldp_vty_neighbor_password(vty, no, neighbor, password));
c740f7d3
RW
169}
170
1224e5c4 171DEFPY (ldp_neighbor_session_holdtime,
c740f7d3 172 ldp_neighbor_session_holdtime_cmd,
1224e5c4 173 "[no] neighbor A.B.C.D$neighbor session holdtime (15-65535)$holdtime",
45506658 174 NO_STR
c740f7d3
RW
175 "Configure neighbor parameters\n"
176 "LDP Id of neighbor\n"
177 "Configure session parameters\n"
178 "Configure session holdtime\n"
179 "Time (seconds)\n")
180{
1224e5c4 181 return (ldp_vty_nbr_session_holdtime(vty, no, neighbor, holdtime));
c740f7d3
RW
182}
183
1224e5c4 184DEFPY (ldp_neighbor_ttl_security,
c740f7d3 185 ldp_neighbor_ttl_security_cmd,
1224e5c4 186 "[no] neighbor A.B.C.D$neighbor ttl-security <disable|hops (1-254)$hops>",
45506658 187 NO_STR
c740f7d3
RW
188 "Configure neighbor parameters\n"
189 "LDP Id of neighbor\n"
190 "LDP ttl security check\n"
191 "Disable ttl security\n"
192 "IP hops\n"
193 "maximum number of hops\n")
194{
1224e5c4 195 return (ldp_vty_neighbor_ttl_security(vty, no, neighbor, hops_str));
c740f7d3
RW
196}
197
1224e5c4 198DEFPY (ldp_router_id,
c740f7d3 199 ldp_router_id_cmd,
1224e5c4 200 "[no] router-id A.B.C.D$address",
45506658 201 NO_STR
c740f7d3
RW
202 "Configure router Id\n"
203 "LSR Id (in form of an IPv4 address)\n")
204{
1224e5c4 205 return (ldp_vty_router_id(vty, no, address));
c740f7d3
RW
206}
207
aff1743c
KS
208DEFPY (ldp_ordered_control,
209 ldp_ordered_control_cmd,
210 "[no] ordered-control",
211 NO_STR
212 "Configure LDP ordered label distribution control mode\n")
213{
214 return (ldp_vty_ordered_control(vty, no));
215}
216
e1894ff7
KS
217DEFPY (ldp_wait_for_sync,
218 ldp_wait_for_sync_cmd,
219 "[no] wait-for-sync (1-10000)$waitforsync",
220 NO_STR
221 "Time to wait for LDP-IGP Sync to complete label exchange\n"
222 "Time (seconds)\n")
223{
224 return (ldp_vty_wait_for_sync_interval(vty, no, waitforsync));
225
226}
227
ff5279ba 228DEFPY (ldp_allow_broken_lsps,
229 ldp_allow_broken_lsps_cmd,
230 "[no] install allow-broken-lsps",
231 NO_STR
232 "install lsps\n"
a0dfca37 233 "if no remote-label install with imp-null\n")
ff5279ba 234{
235 return (ldp_vty_allow_broken_lsp(vty, no));
236}
237
1224e5c4 238DEFPY (ldp_discovery_targeted_hello_accept,
c740f7d3 239 ldp_discovery_targeted_hello_accept_cmd,
c60dec36 240 "[no] discovery targeted-hello accept [from ACCESSLIST_NAME$from_acl]",
45506658 241 NO_STR
c740f7d3
RW
242 "Configure discovery parameters\n"
243 "LDP Targeted Hellos\n"
244 "Accept and respond to targeted hellos\n"
245 "Access list to specify acceptable targeted hello source\n"
c740f7d3
RW
246 "IP access-list name\n")
247{
1224e5c4 248 return (ldp_vty_targeted_hello_accept(vty, no, from_acl));
c740f7d3
RW
249}
250
1224e5c4 251DEFPY (ldp_discovery_transport_address_ipv4,
c740f7d3 252 ldp_discovery_transport_address_ipv4_cmd,
1224e5c4 253 "[no] discovery transport-address A.B.C.D$address",
45506658 254 NO_STR
c740f7d3
RW
255 "Configure discovery parameters\n"
256 "Specify transport address for TCP connection\n"
257 "IP address to be used as transport address\n")
258{
1224e5c4 259 return (ldp_vty_trans_addr(vty, no, address_str));
c740f7d3
RW
260}
261
1224e5c4 262DEFPY (ldp_discovery_transport_address_ipv6,
c740f7d3 263 ldp_discovery_transport_address_ipv6_cmd,
1224e5c4 264 "[no] discovery transport-address X:X::X:X$address",
45506658 265 NO_STR
c740f7d3
RW
266 "Configure discovery parameters\n"
267 "Specify transport address for TCP connection\n"
268 "IPv6 address to be used as transport address\n")
269{
1224e5c4 270 return (ldp_vty_trans_addr(vty, no, address_str));
c740f7d3
RW
271}
272
1224e5c4 273DEFPY (ldp_label_local_advertise,
c740f7d3 274 ldp_label_local_advertise_cmd,
c60dec36 275 "[no] label local advertise [{to ACCESSLIST_NAME$to_acl|for ACCESSLIST_NAME$for_acl}]",
45506658 276 NO_STR
c740f7d3
RW
277 "Configure label control and policies\n"
278 "Configure local label control and policies\n"
279 "Configure outbound label advertisement control\n"
280 "IP Access-list specifying controls on LDP Peers\n"
c740f7d3
RW
281 "IP access-list name\n"
282 "IP access-list for destination prefixes\n"
c740f7d3
RW
283 "IP access-list name\n")
284{
1224e5c4 285 return (ldp_vty_label_advertise(vty, no, to_acl, for_acl));
c740f7d3
RW
286}
287
1224e5c4 288DEFPY (ldp_label_local_advertise_explicit_null,
c740f7d3 289 ldp_label_local_advertise_explicit_null_cmd,
c60dec36 290 "[no] label local advertise explicit-null [for ACCESSLIST_NAME$for_acl]",
45506658 291 NO_STR
c740f7d3
RW
292 "Configure label control and policies\n"
293 "Configure local label control and policies\n"
294 "Configure outbound label advertisement control\n"
295 "Configure explicit-null advertisement\n"
296 "IP access-list for destination prefixes\n"
c740f7d3
RW
297 "IP access-list name\n")
298{
1224e5c4 299 return (ldp_vty_label_expnull(vty, no, for_acl));
c740f7d3
RW
300}
301
1224e5c4 302DEFPY (ldp_label_local_allocate,
c740f7d3 303 ldp_label_local_allocate_cmd,
c60dec36 304 "[no] label local allocate <host-routes$host_routes|for ACCESSLIST_NAME$for_acl>",
45506658 305 NO_STR
c740f7d3
RW
306 "Configure label control and policies\n"
307 "Configure local label control and policies\n"
308 "Configure label allocation control\n"
309 "allocate local label for host routes only\n"
310 "IP access-list\n"
c740f7d3
RW
311 "IP access-list name\n")
312{
1224e5c4 313 return (ldp_vty_label_allocate(vty, no, host_routes, for_acl));
c740f7d3
RW
314}
315
1224e5c4 316DEFPY (ldp_label_remote_accept,
c740f7d3 317 ldp_label_remote_accept_cmd,
c60dec36 318 "[no] label remote accept {from ACCESSLIST_NAME$from_acl|for ACCESSLIST_NAME$for_acl}",
45506658 319 NO_STR
c740f7d3
RW
320 "Configure label control and policies\n"
321 "Configure remote/peer label control and policies\n"
322 "Configure inbound label acceptance control\n"
323 "Neighbor from whom to accept label advertisement\n"
c740f7d3
RW
324 "IP access-list name\n"
325 "IP access-list for destination prefixes\n"
c740f7d3
RW
326 "IP access-list name\n")
327{
1224e5c4 328 return (ldp_vty_label_accept(vty, no, from_acl, for_acl));
c740f7d3
RW
329}
330
1224e5c4 331DEFPY (ldp_ttl_security_disable,
c740f7d3
RW
332 ldp_ttl_security_disable_cmd,
333 "[no] ttl-security disable",
45506658 334 NO_STR
c740f7d3
RW
335 "LDP ttl security check\n"
336 "Disable ttl security\n")
337{
1224e5c4 338 return (ldp_vty_ttl_security(vty, no));
c740f7d3
RW
339}
340
1224e5c4 341DEFPY (ldp_session_holdtime,
c740f7d3 342 ldp_session_holdtime_cmd,
1224e5c4 343 "[no] session holdtime (15-65535)$holdtime",
45506658 344 NO_STR
c740f7d3
RW
345 "Configure session parameters\n"
346 "Configure session holdtime\n"
347 "Time (seconds)\n")
348{
1224e5c4 349 return (ldp_vty_af_session_holdtime(vty, no, holdtime));
c740f7d3
RW
350}
351
281bd4dd 352DEFPY_NOSH(ldp_interface,
c740f7d3 353 ldp_interface_cmd,
281bd4dd 354 "interface IFNAME$ifname",
c740f7d3
RW
355 "Enable LDP on an interface and enter interface submode\n"
356 "Interface's name\n")
357{
281bd4dd 358 return (ldp_vty_interface(vty, NULL, ifname));
fc4ea5c2
RW
359}
360
1224e5c4 361DEFPY (no_ldp_interface,
fc4ea5c2 362 no_ldp_interface_cmd,
1224e5c4 363 "no interface IFNAME$ifname",
45506658 364 NO_STR
fc4ea5c2
RW
365 "Enable LDP on an interface and enter interface submode\n"
366 "Interface's name\n")
367{
1224e5c4 368 return (ldp_vty_interface(vty, "no", ifname));
c740f7d3
RW
369}
370
1224e5c4 371DEFPY (ldp_neighbor_ipv4_targeted,
c740f7d3 372 ldp_neighbor_ipv4_targeted_cmd,
1224e5c4 373 "[no] neighbor A.B.C.D$address targeted",
45506658 374 NO_STR
c740f7d3
RW
375 "Configure neighbor parameters\n"
376 "IP address of neighbor\n"
377 "Establish targeted session\n")
378{
1224e5c4 379 return (ldp_vty_neighbor_targeted(vty, no, address_str));
c740f7d3
RW
380}
381
1224e5c4 382DEFPY (ldp_neighbor_ipv6_targeted,
c740f7d3 383 ldp_neighbor_ipv6_targeted_cmd,
1224e5c4 384 "[no] neighbor X:X::X:X$address targeted",
45506658 385 NO_STR
c740f7d3
RW
386 "Configure neighbor parameters\n"
387 "IPv6 address of neighbor\n"
388 "Establish targeted session\n")
389{
1224e5c4 390 return (ldp_vty_neighbor_targeted(vty, no, address_str));
c740f7d3
RW
391}
392
1224e5c4 393DEFPY (ldp_bridge,
c740f7d3 394 ldp_bridge_cmd,
1224e5c4 395 "[no] bridge IFNAME$ifname",
45506658 396 NO_STR
c740f7d3
RW
397 "Bridge interface\n"
398 "Interface's name\n")
399{
1224e5c4 400 return (ldp_vty_l2vpn_bridge(vty, no, ifname));
c740f7d3
RW
401}
402
1224e5c4 403DEFPY (ldp_mtu,
c740f7d3 404 ldp_mtu_cmd,
1224e5c4 405 "[no] mtu (1500-9180)$mtu",
45506658 406 NO_STR
c740f7d3
RW
407 "Set Maximum Transmission Unit\n"
408 "Maximum Transmission Unit value\n")
409{
1224e5c4 410 return (ldp_vty_l2vpn_mtu(vty, no, mtu));
c740f7d3
RW
411}
412
1224e5c4 413DEFPY (ldp_member_interface,
c740f7d3 414 ldp_member_interface_cmd,
1224e5c4 415 "[no] member interface IFNAME$ifname",
45506658 416 NO_STR
c740f7d3
RW
417 "L2VPN member configuration\n"
418 "Local interface\n"
419 "Interface's name\n")
420{
1224e5c4 421 return (ldp_vty_l2vpn_interface(vty, no, ifname));
c740f7d3
RW
422}
423
281bd4dd 424DEFPY_NOSH(ldp_member_pseudowire,
c740f7d3 425 ldp_member_pseudowire_cmd,
281bd4dd 426 "member pseudowire IFNAME$ifname",
fc4ea5c2
RW
427 "L2VPN member configuration\n"
428 "Pseudowire interface\n"
429 "Interface's name\n")
430{
281bd4dd 431 return (ldp_vty_l2vpn_pseudowire(vty, NULL, ifname));
fc4ea5c2
RW
432}
433
1224e5c4 434DEFPY (no_ldp_member_pseudowire,
fc4ea5c2 435 no_ldp_member_pseudowire_cmd,
1224e5c4 436 "no member pseudowire IFNAME$ifname",
45506658 437 NO_STR
c740f7d3
RW
438 "L2VPN member configuration\n"
439 "Pseudowire interface\n"
440 "Interface's name\n")
441{
1224e5c4 442 return (ldp_vty_l2vpn_pseudowire(vty, "no", ifname));
c740f7d3
RW
443}
444
1224e5c4 445DEFPY (ldp_vc_type,
c740f7d3 446 ldp_vc_type_cmd,
1224e5c4 447 "[no] vc type <ethernet|ethernet-tagged>$vc_type",
45506658 448 NO_STR
c740f7d3
RW
449 "Virtual Circuit options\n"
450 "Virtual Circuit type to use\n"
451 "Ethernet (type 5)\n"
452 "Ethernet-tagged (type 4)\n")
453{
1224e5c4 454 return (ldp_vty_l2vpn_pwtype(vty, no, vc_type));
c740f7d3
RW
455}
456
1224e5c4 457DEFPY (ldp_control_word,
c740f7d3 458 ldp_control_word_cmd,
1224e5c4 459 "[no] control-word <exclude|include>$preference",
45506658 460 NO_STR
c740f7d3
RW
461 "Control-word options\n"
462 "Exclude control-word in pseudowire packets\n"
463 "Include control-word in pseudowire packets\n")
464{
1224e5c4 465 return (ldp_vty_l2vpn_pw_cword(vty, no, preference));
c740f7d3
RW
466}
467
1224e5c4 468DEFPY (ldp_neighbor_address,
c740f7d3 469 ldp_neighbor_address_cmd,
1224e5c4 470 "[no] neighbor address <A.B.C.D|X:X::X:X>$pw_address",
45506658 471 NO_STR
c740f7d3
RW
472 "Remote endpoint configuration\n"
473 "Specify the IPv4 or IPv6 address of the remote endpoint\n"
474 "IPv4 address\n"
475 "IPv6 address\n")
476{
1224e5c4 477 return (ldp_vty_l2vpn_pw_nbr_addr(vty, no, pw_address_str));
c740f7d3
RW
478}
479
1224e5c4 480DEFPY (ldp_neighbor_lsr_id,
c740f7d3 481 ldp_neighbor_lsr_id_cmd,
1224e5c4 482 "[no] neighbor lsr-id A.B.C.D$address",
45506658 483 NO_STR
c740f7d3
RW
484 "Remote endpoint configuration\n"
485 "Specify the LSR-ID of the remote endpoint\n"
486 "IPv4 address\n")
487{
1224e5c4 488 return (ldp_vty_l2vpn_pw_nbr_id(vty, no, address));
c740f7d3
RW
489}
490
1224e5c4 491DEFPY (ldp_pw_id,
c740f7d3 492 ldp_pw_id_cmd,
1224e5c4 493 "[no] pw-id (1-4294967295)$pwid",
45506658 494 NO_STR
c740f7d3
RW
495 "Set the Virtual Circuit ID\n"
496 "Virtual Circuit ID value\n")
497{
1224e5c4 498 return (ldp_vty_l2vpn_pw_pwid(vty, no, pwid));
c740f7d3
RW
499}
500
1224e5c4 501DEFPY (ldp_pw_status_disable,
c740f7d3
RW
502 ldp_pw_status_disable_cmd,
503 "[no] pw-status disable",
45506658 504 NO_STR
c740f7d3
RW
505 "Configure PW status\n"
506 "Disable PW status\n")
507{
1224e5c4 508 return (ldp_vty_l2vpn_pw_pwstatus(vty, no));
c740f7d3
RW
509}
510
1224e5c4 511DEFPY (ldp_clear_mpls_ldp_neighbor,
c740f7d3 512 ldp_clear_mpls_ldp_neighbor_cmd,
1224e5c4 513 "clear mpls ldp neighbor [<A.B.C.D|X:X::X:X>]$address",
c740f7d3
RW
514 "Reset functions\n"
515 "Reset MPLS statistical information\n"
516 "Clear LDP state\n"
517 "Clear LDP neighbor sessions\n"
518 "IPv4 address\n"
519 "IPv6 address\n")
520{
1224e5c4 521 return (ldp_vty_clear_nbr(vty, address_str));
c740f7d3
RW
522}
523
1224e5c4 524DEFPY (ldp_debug_mpls_ldp_discovery_hello,
c740f7d3 525 ldp_debug_mpls_ldp_discovery_hello_cmd,
1224e5c4 526 "[no] debug mpls ldp discovery hello <recv|sent>$dir",
45506658 527 NO_STR
c740f7d3
RW
528 "Debugging functions\n"
529 "MPLS information\n"
530 "Label Distribution Protocol\n"
531 "Discovery messages\n"
532 "Discovery hello message\n"
533 "Received messages\n"
534 "Sent messages\n")
535{
1224e5c4 536 return (ldp_vty_debug(vty, no, "discovery", dir, NULL));
c740f7d3
RW
537}
538
1224e5c4 539DEFPY (ldp_debug_mpls_ldp_type,
c740f7d3 540 ldp_debug_mpls_ldp_type_cmd,
e1894ff7 541 "[no] debug mpls ldp <errors|event|labels|sync|zebra>$type",
45506658 542 NO_STR
c740f7d3
RW
543 "Debugging functions\n"
544 "MPLS information\n"
545 "Label Distribution Protocol\n"
546 "Errors\n"
547 "LDP event information\n"
08e4b244 548 "LDP label allocation information\n"
e1894ff7 549 "LDP sync information\n"
c740f7d3
RW
550 "LDP zebra information\n")
551{
1224e5c4 552 return (ldp_vty_debug(vty, no, type, NULL, NULL));
c740f7d3
RW
553}
554
1224e5c4 555DEFPY (ldp_debug_mpls_ldp_messages_recv,
c740f7d3 556 ldp_debug_mpls_ldp_messages_recv_cmd,
1224e5c4 557 "[no] debug mpls ldp messages recv [all]$all",
45506658 558 NO_STR
c740f7d3
RW
559 "Debugging functions\n"
560 "MPLS information\n"
561 "Label Distribution Protocol\n"
562 "Messages\n"
563 "Received messages, excluding periodic Keep Alives\n"
564 "Received messages, including periodic Keep Alives\n")
565{
1224e5c4 566 return (ldp_vty_debug(vty, no, "messages", "recv", all));
c740f7d3
RW
567}
568
1224e5c4 569DEFPY (ldp_debug_mpls_ldp_messages_sent,
c740f7d3 570 ldp_debug_mpls_ldp_messages_sent_cmd,
1224e5c4 571 "[no] debug mpls ldp messages sent [all]$all",
45506658 572 NO_STR
c740f7d3
RW
573 "Debugging functions\n"
574 "MPLS information\n"
575 "Label Distribution Protocol\n"
576 "Messages\n"
577 "Sent messages, excluding periodic Keep Alives\n"
578 "Sent messages, including periodic Keep Alives\n")
579{
1224e5c4 580 return (ldp_vty_debug(vty, no, "messages", "sent", all));
c740f7d3
RW
581}
582
1224e5c4 583DEFPY (ldp_show_mpls_ldp_binding,
c740f7d3 584 ldp_show_mpls_ldp_binding_cmd,
f0722791
RW
585 "show mpls ldp [<ipv4|ipv6>]$af binding\
586 [<A.B.C.D/M|X:X::X:X/M>$prefix [longer-prefixes$longer_prefixes]]\
587 [{\
588 neighbor A.B.C.D$nbr\
589 |local-label (0-1048575)$local_label\
590 |remote-label (0-1048575)$remote_label\
591 }]\
592 [detail]$detail [json]$json",
c740f7d3
RW
593 "Show running system information\n"
594 "MPLS information\n"
595 "Label Distribution Protocol\n"
596 "IPv4 Address Family\n"
597 "IPv6 Address Family\n"
598 "Label Information Base (LIB) information\n"
f0722791
RW
599 "Destination prefix (IPv4)\n"
600 "Destination prefix (IPv6)\n"
601 "Include longer matches\n"
602 "Display labels from LDP neighbor\n"
603 "Neighbor LSR-ID\n"
604 "Match locally assigned label values\n"
605 "Locally assigned label value\n"
606 "Match remotely assigned label values\n"
607 "Remotely assigned label value\n"
c740f7d3 608 "Show detailed information\n"
6d53d24c 609 JSON_STR)
c740f7d3 610{
95535717 611 if (!(ldpd_conf->flags & F_LDPD_ENABLED))
612 return CMD_SUCCESS;
f0722791
RW
613 if (!local_label_str)
614 local_label = NO_LABEL;
615 if (!remote_label_str)
616 remote_label = NO_LABEL;
617 return (ldp_vty_show_binding(vty, af, prefix_str, !!longer_prefixes,
618 nbr_str, local_label, remote_label, detail, json));
c740f7d3
RW
619}
620
1224e5c4 621DEFPY (ldp_show_mpls_ldp_discovery,
c740f7d3 622 ldp_show_mpls_ldp_discovery_cmd,
1224e5c4 623 "show mpls ldp [<ipv4|ipv6>]$af discovery [detail]$detail [json]$json",
c740f7d3
RW
624 "Show running system information\n"
625 "MPLS information\n"
626 "Label Distribution Protocol\n"
627 "IPv4 Address Family\n"
628 "IPv6 Address Family\n"
629 "Discovery Hello Information\n"
630 "Show detailed information\n"
6d53d24c 631 JSON_STR)
c740f7d3 632{
c740f7d3
RW
633 return (ldp_vty_show_discovery(vty, af, detail, json));
634}
635
1224e5c4 636DEFPY (ldp_show_mpls_ldp_interface,
c740f7d3 637 ldp_show_mpls_ldp_interface_cmd,
1224e5c4 638 "show mpls ldp [<ipv4|ipv6>]$af interface [json]$json",
c740f7d3
RW
639 "Show running system information\n"
640 "MPLS information\n"
641 "Label Distribution Protocol\n"
642 "IPv4 Address Family\n"
643 "IPv6 Address Family\n"
644 "interface information\n"
6d53d24c 645 JSON_STR)
c740f7d3 646{
c740f7d3
RW
647 return (ldp_vty_show_interface(vty, af, json));
648}
649
1224e5c4 650DEFPY (ldp_show_mpls_ldp_capabilities,
c740f7d3 651 ldp_show_mpls_ldp_capabilities_cmd,
1224e5c4 652 "show mpls ldp capabilities [json]$json",
c740f7d3
RW
653 "Show running system information\n"
654 "MPLS information\n"
655 "Label Distribution Protocol\n"
656 "Display LDP Capabilities information\n"
6d53d24c 657 JSON_STR)
c740f7d3 658{
c740f7d3
RW
659 return (ldp_vty_show_capabilities(vty, json));
660}
661
1224e5c4 662DEFPY (ldp_show_mpls_ldp_neighbor,
c740f7d3 663 ldp_show_mpls_ldp_neighbor_cmd,
f0722791 664 "show mpls ldp neighbor [A.B.C.D]$lsr_id [detail]$detail [json]$json",
c740f7d3
RW
665 "Show running system information\n"
666 "MPLS information\n"
667 "Label Distribution Protocol\n"
668 "Neighbor information\n"
f0722791 669 "Neighbor LSR-ID\n"
c740f7d3 670 "Show detailed information\n"
6d53d24c 671 JSON_STR)
c740f7d3 672{
f0722791 673 return (ldp_vty_show_neighbor(vty, lsr_id_str, 0, detail, json));
c740f7d3
RW
674}
675
1224e5c4 676DEFPY (ldp_show_mpls_ldp_neighbor_capabilities,
c740f7d3 677 ldp_show_mpls_ldp_neighbor_capabilities_cmd,
f0722791 678 "show mpls ldp neighbor [A.B.C.D]$lsr_id capabilities [json]$json",
c740f7d3
RW
679 "Show running system information\n"
680 "MPLS information\n"
681 "Label Distribution Protocol\n"
682 "Neighbor information\n"
f0722791 683 "Neighbor LSR-ID\n"
c740f7d3 684 "Display neighbor capability information\n"
6d53d24c 685 JSON_STR)
c740f7d3 686{
f0722791 687 return (ldp_vty_show_neighbor(vty, lsr_id_str, 1, NULL, json));
c740f7d3
RW
688}
689
e1894ff7
KS
690DEFPY (ldp_show_mpls_ldp_igp_sync,
691 ldp_show_mpls_ldp_igp_sync_cmd,
692 "show mpls ldp igp-sync [json]$json",
693 "Show mpls ldp ldp-sync information\n"
694 "MPLS information\n"
695 "Label Distribution Protocol\n"
696 "LDP-IGP Sync information\n"
697 JSON_STR)
698{
699 return (ldp_vty_show_ldp_sync(vty, json));
700}
701
1224e5c4 702DEFPY (ldp_show_l2vpn_atom_binding,
c740f7d3 703 ldp_show_l2vpn_atom_binding_cmd,
f0722791
RW
704 "show l2vpn atom binding\
705 [{\
706 A.B.C.D$peer\
707 |local-label (16-1048575)$local_label\
708 |remote-label (16-1048575)$remote_label\
709 }]\
710 [json]$json",
c740f7d3
RW
711 "Show running system information\n"
712 "Show information about Layer2 VPN\n"
713 "Show Any Transport over MPLS information\n"
714 "Show AToM label binding information\n"
f0722791
RW
715 "Destination address of the VC\n"
716 "Match locally assigned label values\n"
717 "Locally assigned label value\n"
718 "Match remotely assigned label values\n"
719 "Remotely assigned label value\n"
6d53d24c 720 JSON_STR)
c740f7d3 721{
f0722791
RW
722 if (!local_label_str)
723 local_label = NO_LABEL;
724 if (!remote_label_str)
725 remote_label = NO_LABEL;
726 return (ldp_vty_show_atom_binding(vty, peer_str, local_label,
727 remote_label, json));
c740f7d3
RW
728}
729
1224e5c4 730DEFPY (ldp_show_l2vpn_atom_vc,
c740f7d3 731 ldp_show_l2vpn_atom_vc_cmd,
f0722791
RW
732 "show l2vpn atom vc\
733 [{\
734 A.B.C.D$peer\
735 |interface IFNAME$ifname\
736 |vc-id (1-4294967295)$vcid\
737 }]\
738 [json]$json",
c740f7d3
RW
739 "Show running system information\n"
740 "Show information about Layer2 VPN\n"
741 "Show Any Transport over MPLS information\n"
742 "Show AToM virtual circuit information\n"
f0722791
RW
743 "Destination address of the VC\n"
744 "Local interface of the pseudowire\n"
745 "Interface's name\n"
746 "VC ID\n"
747 "VC ID\n"
6d53d24c 748 JSON_STR)
c740f7d3 749{
f0722791 750 return (ldp_vty_show_atom_vc(vty, peer_str, ifname, vcid_str, json));
c740f7d3
RW
751}
752
281bd4dd 753DEFPY_NOSH (ldp_show_debugging_mpls_ldp,
87f6dc50
DS
754 ldp_show_debugging_mpls_ldp_cmd,
755 "show debugging [mpls ldp]",
756 "Show running system information\n"
757 "Debugging functions\n"
758 "MPLS information\n"
759 "Label Distribution Protocol\n")
c740f7d3 760{
cf00164b
DS
761 ldp_vty_show_debugging(vty);
762
763 cmd_show_lib_debugs(vty);
764
765 return CMD_SUCCESS;
c740f7d3
RW
766}
767
935029cd
RW
768static void
769l2vpn_autocomplete(vector comps, struct cmd_token *token)
770{
771 struct l2vpn *l2vpn;
772
773 RB_FOREACH(l2vpn, l2vpn_head, &vty_conf->l2vpn_tree)
774 vector_set(comps, XSTRDUP(MTYPE_COMPLETION, l2vpn->name));
775}
776
777static const struct cmd_variable_handler l2vpn_var_handlers[] = {
778 {
779 .varname = "l2vpn_name",
780 .completions = l2vpn_autocomplete
781 },
782 {
783 .completions = NULL
784 }
785};
786
c740f7d3
RW
787void
788ldp_vty_init (void)
789{
935029cd
RW
790 cmd_variable_handler_register(l2vpn_var_handlers);
791
612c2c15
DL
792 install_node(&ldp_node);
793 install_node(&ldp_ipv4_node);
794 install_node(&ldp_ipv6_node);
795 install_node(&ldp_ipv4_iface_node);
796 install_node(&ldp_ipv6_iface_node);
797 install_node(&ldp_l2vpn_node);
798 install_node(&ldp_pseudowire_node);
799 install_node(&ldp_debug_node);
c740f7d3
RW
800 install_default(LDP_NODE);
801 install_default(LDP_IPV4_NODE);
802 install_default(LDP_IPV6_NODE);
803 install_default(LDP_IPV4_IFACE_NODE);
804 install_default(LDP_IPV6_IFACE_NODE);
805 install_default(LDP_L2VPN_NODE);
806 install_default(LDP_PSEUDOWIRE_NODE);
807
808 install_element(CONFIG_NODE, &ldp_mpls_ldp_cmd);
fc4ea5c2 809 install_element(CONFIG_NODE, &no_ldp_mpls_ldp_cmd);
c740f7d3 810 install_element(CONFIG_NODE, &ldp_l2vpn_cmd);
fc4ea5c2 811 install_element(CONFIG_NODE, &no_ldp_l2vpn_cmd);
c740f7d3
RW
812 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
813 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_type_cmd);
814 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
815 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
816
817 install_element(LDP_NODE, &ldp_address_family_cmd);
fc4ea5c2 818 install_element(LDP_NODE, &no_ldp_address_family_cmd);
16cd3d9d
RW
819 install_element(LDP_NODE, &ldp_discovery_link_holdtime_cmd);
820 install_element(LDP_NODE, &ldp_discovery_targeted_holdtime_cmd);
821 install_element(LDP_NODE, &ldp_discovery_link_interval_cmd);
822 install_element(LDP_NODE, &ldp_discovery_targeted_interval_cmd);
c740f7d3
RW
823 install_element(LDP_NODE, &ldp_dual_stack_transport_connection_prefer_ipv4_cmd);
824 install_element(LDP_NODE, &ldp_dual_stack_cisco_interop_cmd);
825 install_element(LDP_NODE, &ldp_neighbor_password_cmd);
826 install_element(LDP_NODE, &ldp_neighbor_session_holdtime_cmd);
827 install_element(LDP_NODE, &ldp_neighbor_ttl_security_cmd);
828 install_element(LDP_NODE, &ldp_router_id_cmd);
aff1743c 829 install_element(LDP_NODE, &ldp_ordered_control_cmd);
e1894ff7 830 install_element(LDP_NODE, &ldp_wait_for_sync_cmd);
ff5279ba 831 install_element(LDP_NODE, &ldp_allow_broken_lsps_cmd);
c740f7d3 832
16cd3d9d
RW
833 install_element(LDP_IPV4_NODE, &ldp_discovery_link_holdtime_cmd);
834 install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_holdtime_cmd);
835 install_element(LDP_IPV4_NODE, &ldp_discovery_link_interval_cmd);
836 install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_interval_cmd);
c740f7d3
RW
837 install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_hello_accept_cmd);
838 install_element(LDP_IPV4_NODE, &ldp_discovery_transport_address_ipv4_cmd);
839 install_element(LDP_IPV4_NODE, &ldp_label_local_advertise_cmd);
840 install_element(LDP_IPV4_NODE, &ldp_label_local_advertise_explicit_null_cmd);
841 install_element(LDP_IPV4_NODE, &ldp_label_local_allocate_cmd);
842 install_element(LDP_IPV4_NODE, &ldp_label_remote_accept_cmd);
843 install_element(LDP_IPV4_NODE, &ldp_ttl_security_disable_cmd);
844 install_element(LDP_IPV4_NODE, &ldp_interface_cmd);
fc4ea5c2 845 install_element(LDP_IPV4_NODE, &no_ldp_interface_cmd);
c740f7d3
RW
846 install_element(LDP_IPV4_NODE, &ldp_session_holdtime_cmd);
847 install_element(LDP_IPV4_NODE, &ldp_neighbor_ipv4_targeted_cmd);
983bd6f7 848 install_element(LDP_IPV4_NODE, &ldp_exit_address_family_cmd);
c740f7d3 849
16cd3d9d
RW
850 install_element(LDP_IPV6_NODE, &ldp_discovery_link_holdtime_cmd);
851 install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_holdtime_cmd);
852 install_element(LDP_IPV6_NODE, &ldp_discovery_link_interval_cmd);
853 install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_interval_cmd);
c740f7d3
RW
854 install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_hello_accept_cmd);
855 install_element(LDP_IPV6_NODE, &ldp_discovery_transport_address_ipv6_cmd);
856 install_element(LDP_IPV6_NODE, &ldp_label_local_advertise_cmd);
857 install_element(LDP_IPV6_NODE, &ldp_label_local_advertise_explicit_null_cmd);
858 install_element(LDP_IPV6_NODE, &ldp_label_local_allocate_cmd);
859 install_element(LDP_IPV6_NODE, &ldp_label_remote_accept_cmd);
860 install_element(LDP_IPV6_NODE, &ldp_ttl_security_disable_cmd);
861 install_element(LDP_IPV6_NODE, &ldp_interface_cmd);
3c549c10 862 install_element(LDP_IPV6_NODE, &no_ldp_interface_cmd);
c740f7d3
RW
863 install_element(LDP_IPV6_NODE, &ldp_session_holdtime_cmd);
864 install_element(LDP_IPV6_NODE, &ldp_neighbor_ipv6_targeted_cmd);
983bd6f7 865 install_element(LDP_IPV6_NODE, &ldp_exit_address_family_cmd);
c740f7d3 866
16cd3d9d
RW
867 install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
868 install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_interval_cmd);
c740f7d3 869
16cd3d9d
RW
870 install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
871 install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_interval_cmd);
c740f7d3
RW
872
873 install_element(LDP_L2VPN_NODE, &ldp_bridge_cmd);
874 install_element(LDP_L2VPN_NODE, &ldp_mtu_cmd);
875 install_element(LDP_L2VPN_NODE, &ldp_member_interface_cmd);
876 install_element(LDP_L2VPN_NODE, &ldp_member_pseudowire_cmd);
fc4ea5c2 877 install_element(LDP_L2VPN_NODE, &no_ldp_member_pseudowire_cmd);
c740f7d3
RW
878 install_element(LDP_L2VPN_NODE, &ldp_vc_type_cmd);
879
880 install_element(LDP_PSEUDOWIRE_NODE, &ldp_control_word_cmd);
881 install_element(LDP_PSEUDOWIRE_NODE, &ldp_neighbor_address_cmd);
882 install_element(LDP_PSEUDOWIRE_NODE, &ldp_neighbor_lsr_id_cmd);
883 install_element(LDP_PSEUDOWIRE_NODE, &ldp_pw_id_cmd);
884 install_element(LDP_PSEUDOWIRE_NODE, &ldp_pw_status_disable_cmd);
885
886 install_element(ENABLE_NODE, &ldp_clear_mpls_ldp_neighbor_cmd);
887 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
888 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_type_cmd);
889 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
890 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
891
892 install_element(VIEW_NODE, &ldp_show_mpls_ldp_binding_cmd);
893 install_element(VIEW_NODE, &ldp_show_mpls_ldp_discovery_cmd);
894 install_element(VIEW_NODE, &ldp_show_mpls_ldp_interface_cmd);
895 install_element(VIEW_NODE, &ldp_show_mpls_ldp_capabilities_cmd);
896 install_element(VIEW_NODE, &ldp_show_mpls_ldp_neighbor_cmd);
897 install_element(VIEW_NODE, &ldp_show_mpls_ldp_neighbor_capabilities_cmd);
898 install_element(VIEW_NODE, &ldp_show_l2vpn_atom_binding_cmd);
899 install_element(VIEW_NODE, &ldp_show_l2vpn_atom_vc_cmd);
900 install_element(VIEW_NODE, &ldp_show_debugging_mpls_ldp_cmd);
e1894ff7 901 install_element(VIEW_NODE, &ldp_show_mpls_ldp_igp_sync_cmd);
c740f7d3 902}