]> git.proxmox.com Git - mirror_frr.git/blame - ldpd/ldp_vty_cmds.c
sharpd: Add missing yang route-map callbacks
[mirror_frr.git] / ldpd / ldp_vty_cmds.c
CommitLineData
c740f7d3
RW
1/*
2 * Copyright (C) 2016 by Open Source Routing.
3 *
180fc2cd
RW
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
c740f7d3 8 *
180fc2cd 9 * This program is distributed in the hope that it will be useful, but
c740f7d3
RW
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
180fc2cd
RW
14 * You should have received a copy of the GNU General Public License
15 * along with this program; see the file COPYING; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
17 * MA 02110-1301 USA
c740f7d3
RW
18 */
19
20#include <zebra.h>
21
22#include "command.h"
23#include "vty.h"
6d53d24c
DS
24#include "json.h"
25
935029cd 26#include "ldpd/ldpd.h"
c740f7d3 27#include "ldpd/ldp_vty.h"
ab59f4f7 28#ifndef VTYSH_EXTRACT_PL
1224e5c4 29#include "ldpd/ldp_vty_cmds_clippy.c"
ab59f4f7 30#endif
c740f7d3 31
281bd4dd 32DEFPY_NOSH(ldp_mpls_ldp,
c740f7d3 33 ldp_mpls_ldp_cmd,
fc4ea5c2
RW
34 "mpls ldp",
35 "Global MPLS configuration subcommands\n"
36 "Label Distribution Protocol\n")
37{
1224e5c4 38 return (ldp_vty_mpls_ldp(vty, NULL));
fc4ea5c2
RW
39}
40
1224e5c4 41DEFPY (no_ldp_mpls_ldp,
fc4ea5c2
RW
42 no_ldp_mpls_ldp_cmd,
43 "no mpls ldp",
45506658 44 NO_STR
c740f7d3
RW
45 "Global MPLS configuration subcommands\n"
46 "Label Distribution Protocol\n")
fc4ea5c2 47{
1224e5c4 48 return (ldp_vty_mpls_ldp(vty, "no"));
fc4ea5c2
RW
49}
50
281bd4dd 51DEFPY_NOSH(ldp_l2vpn,
fc4ea5c2 52 ldp_l2vpn_cmd,
281bd4dd 53 "l2vpn WORD$l2vpn_name type vpls",
fc4ea5c2
RW
54 "Configure l2vpn commands\n"
55 "L2VPN name\n"
56 "L2VPN type\n"
57 "Virtual Private LAN Service\n")
c740f7d3 58{
281bd4dd 59 return (ldp_vty_l2vpn(vty, NULL, l2vpn_name));
c740f7d3
RW
60}
61
1224e5c4 62DEFPY (no_ldp_l2vpn,
fc4ea5c2 63 no_ldp_l2vpn_cmd,
935029cd 64 "no l2vpn WORD$l2vpn_name type vpls",
45506658 65 NO_STR
c740f7d3
RW
66 "Configure l2vpn commands\n"
67 "L2VPN name\n"
68 "L2VPN type\n"
69 "Virtual Private LAN Service\n")
70{
935029cd 71 return (ldp_vty_l2vpn(vty, "no", l2vpn_name));
c740f7d3
RW
72}
73
281bd4dd 74DEFPY_NOSH(ldp_address_family,
c740f7d3 75 ldp_address_family_cmd,
281bd4dd 76 "address-family <ipv4|ipv6>$af",
fc4ea5c2
RW
77 "Configure Address Family and its parameters\n"
78 "IPv4\n"
79 "IPv6\n")
80{
281bd4dd 81 return (ldp_vty_address_family(vty, NULL, af));
fc4ea5c2
RW
82}
83
1224e5c4 84DEFPY (no_ldp_address_family,
fc4ea5c2 85 no_ldp_address_family_cmd,
1224e5c4 86 "no address-family <ipv4|ipv6>$af",
45506658 87 NO_STR
c740f7d3
RW
88 "Configure Address Family and its parameters\n"
89 "IPv4\n"
90 "IPv6\n")
91{
1224e5c4 92 return (ldp_vty_address_family(vty, "no", af));
c740f7d3
RW
93}
94
281bd4dd 95DEFPY_NOSH(ldp_exit_address_family,
983bd6f7
RW
96 ldp_exit_address_family_cmd,
97 "exit-address-family",
98 "Exit from Address Family configuration mode\n")
99{
100 if (vty->node == LDP_IPV4_NODE || vty->node == LDP_IPV6_NODE)
101 vty->node = LDP_NODE;
102 return CMD_SUCCESS;
103}
104
16cd3d9d
RW
105DEFPY (ldp_discovery_link_holdtime,
106 ldp_discovery_link_holdtime_cmd,
107 "[no] discovery hello holdtime (1-65535)$holdtime",
45506658 108 NO_STR
c740f7d3
RW
109 "Configure discovery parameters\n"
110 "LDP Link Hellos\n"
16cd3d9d
RW
111 "Hello holdtime\n"
112 "Time (seconds) - 65535 implies infinite\n")
113{
114 return (ldp_vty_disc_holdtime(vty, no, HELLO_LINK, holdtime));
115}
116
117DEFPY (ldp_discovery_targeted_holdtime,
118 ldp_discovery_targeted_holdtime_cmd,
119 "[no] discovery targeted-hello holdtime (1-65535)$holdtime",
120 NO_STR
121 "Configure discovery parameters\n"
c740f7d3
RW
122 "LDP Targeted Hellos\n"
123 "Hello holdtime\n"
124 "Time (seconds) - 65535 implies infinite\n")
125{
16cd3d9d 126 return (ldp_vty_disc_holdtime(vty, no, HELLO_TARGETED, holdtime));
c740f7d3
RW
127}
128
16cd3d9d
RW
129DEFPY (ldp_discovery_link_interval,
130 ldp_discovery_link_interval_cmd,
131 "[no] discovery hello interval (1-65535)$interval",
45506658 132 NO_STR
c740f7d3
RW
133 "Configure discovery parameters\n"
134 "LDP Link Hellos\n"
16cd3d9d
RW
135 "Hello interval\n"
136 "Time (seconds)\n")
137{
138 return (ldp_vty_disc_interval(vty, no, HELLO_LINK, interval));
139}
140
141DEFPY (ldp_discovery_targeted_interval,
142 ldp_discovery_targeted_interval_cmd,
143 "[no] discovery targeted-hello interval (1-65535)$interval",
144 NO_STR
145 "Configure discovery parameters\n"
c740f7d3
RW
146 "LDP Targeted Hellos\n"
147 "Hello interval\n"
148 "Time (seconds)\n")
149{
16cd3d9d 150 return (ldp_vty_disc_interval(vty, no, HELLO_TARGETED, interval));
c740f7d3
RW
151}
152
1224e5c4 153DEFPY (ldp_dual_stack_transport_connection_prefer_ipv4,
c740f7d3
RW
154 ldp_dual_stack_transport_connection_prefer_ipv4_cmd,
155 "[no] dual-stack transport-connection prefer ipv4",
45506658 156 NO_STR
c740f7d3
RW
157 "Configure dual stack parameters\n"
158 "Configure TCP transport parameters\n"
0437e105 159 "Configure preferred address family for TCP transport connection with neighbor\n"
c740f7d3
RW
160 "IPv4\n")
161{
1224e5c4 162 return (ldp_vty_trans_pref_ipv4(vty, no));
c740f7d3
RW
163}
164
1224e5c4 165DEFPY (ldp_dual_stack_cisco_interop,
c740f7d3
RW
166 ldp_dual_stack_cisco_interop_cmd,
167 "[no] dual-stack cisco-interop",
45506658 168 NO_STR
c740f7d3
RW
169 "Configure dual stack parameters\n"
170 "Use Cisco non-compliant format to send and interpret the Dual-Stack capability TLV\n")
171{
1224e5c4 172 return (ldp_vty_ds_cisco_interop(vty, no));
c740f7d3
RW
173}
174
1224e5c4 175DEFPY (ldp_neighbor_password,
c740f7d3 176 ldp_neighbor_password_cmd,
1224e5c4 177 "[no] neighbor A.B.C.D$neighbor password WORD$password",
45506658 178 NO_STR
c740f7d3
RW
179 "Configure neighbor parameters\n"
180 "LDP Id of neighbor\n"
181 "Configure password for MD5 authentication\n"
182 "The password\n")
183{
1224e5c4 184 return (ldp_vty_neighbor_password(vty, no, neighbor, password));
c740f7d3
RW
185}
186
1224e5c4 187DEFPY (ldp_neighbor_session_holdtime,
c740f7d3 188 ldp_neighbor_session_holdtime_cmd,
1224e5c4 189 "[no] neighbor A.B.C.D$neighbor session holdtime (15-65535)$holdtime",
45506658 190 NO_STR
c740f7d3
RW
191 "Configure neighbor parameters\n"
192 "LDP Id of neighbor\n"
193 "Configure session parameters\n"
194 "Configure session holdtime\n"
195 "Time (seconds)\n")
196{
1224e5c4 197 return (ldp_vty_nbr_session_holdtime(vty, no, neighbor, holdtime));
c740f7d3
RW
198}
199
1224e5c4 200DEFPY (ldp_neighbor_ttl_security,
c740f7d3 201 ldp_neighbor_ttl_security_cmd,
1224e5c4 202 "[no] neighbor A.B.C.D$neighbor ttl-security <disable|hops (1-254)$hops>",
45506658 203 NO_STR
c740f7d3
RW
204 "Configure neighbor parameters\n"
205 "LDP Id of neighbor\n"
206 "LDP ttl security check\n"
207 "Disable ttl security\n"
208 "IP hops\n"
209 "maximum number of hops\n")
210{
1224e5c4 211 return (ldp_vty_neighbor_ttl_security(vty, no, neighbor, hops_str));
c740f7d3
RW
212}
213
1224e5c4 214DEFPY (ldp_router_id,
c740f7d3 215 ldp_router_id_cmd,
1224e5c4 216 "[no] router-id A.B.C.D$address",
45506658 217 NO_STR
c740f7d3
RW
218 "Configure router Id\n"
219 "LSR Id (in form of an IPv4 address)\n")
220{
1224e5c4 221 return (ldp_vty_router_id(vty, no, address));
c740f7d3
RW
222}
223
1224e5c4 224DEFPY (ldp_discovery_targeted_hello_accept,
c740f7d3 225 ldp_discovery_targeted_hello_accept_cmd,
1224e5c4 226 "[no] discovery targeted-hello accept [from <(1-199)|(1300-2699)|WORD>$from_acl]",
45506658 227 NO_STR
c740f7d3
RW
228 "Configure discovery parameters\n"
229 "LDP Targeted Hellos\n"
230 "Accept and respond to targeted hellos\n"
231 "Access list to specify acceptable targeted hello source\n"
232 "IP access-list number\n"
233 "IP access-list number (expanded range)\n"
234 "IP access-list name\n")
235{
1224e5c4 236 return (ldp_vty_targeted_hello_accept(vty, no, from_acl));
c740f7d3
RW
237}
238
1224e5c4 239DEFPY (ldp_discovery_transport_address_ipv4,
c740f7d3 240 ldp_discovery_transport_address_ipv4_cmd,
1224e5c4 241 "[no] discovery transport-address A.B.C.D$address",
45506658 242 NO_STR
c740f7d3
RW
243 "Configure discovery parameters\n"
244 "Specify transport address for TCP connection\n"
245 "IP address to be used as transport address\n")
246{
1224e5c4 247 return (ldp_vty_trans_addr(vty, no, address_str));
c740f7d3
RW
248}
249
1224e5c4 250DEFPY (ldp_discovery_transport_address_ipv6,
c740f7d3 251 ldp_discovery_transport_address_ipv6_cmd,
1224e5c4 252 "[no] discovery transport-address X:X::X:X$address",
45506658 253 NO_STR
c740f7d3
RW
254 "Configure discovery parameters\n"
255 "Specify transport address for TCP connection\n"
256 "IPv6 address to be used as transport address\n")
257{
1224e5c4 258 return (ldp_vty_trans_addr(vty, no, address_str));
c740f7d3
RW
259}
260
1224e5c4 261DEFPY (ldp_label_local_advertise,
c740f7d3 262 ldp_label_local_advertise_cmd,
1224e5c4 263 "[no] label local advertise [{to <(1-199)|(1300-2699)|WORD>$to_acl|for <(1-199)|(1300-2699)|WORD>$for_acl}]",
45506658 264 NO_STR
c740f7d3
RW
265 "Configure label control and policies\n"
266 "Configure local label control and policies\n"
267 "Configure outbound label advertisement control\n"
268 "IP Access-list specifying controls on LDP Peers\n"
269 "IP access-list number\n"
270 "IP access-list number (expanded range)\n"
271 "IP access-list name\n"
272 "IP access-list for destination prefixes\n"
273 "IP access-list number\n"
274 "IP access-list number (expanded range)\n"
275 "IP access-list name\n")
276{
1224e5c4 277 return (ldp_vty_label_advertise(vty, no, to_acl, for_acl));
c740f7d3
RW
278}
279
1224e5c4 280DEFPY (ldp_label_local_advertise_explicit_null,
c740f7d3 281 ldp_label_local_advertise_explicit_null_cmd,
1224e5c4 282 "[no] label local advertise explicit-null [for <(1-199)|(1300-2699)|WORD>$for_acl]",
45506658 283 NO_STR
c740f7d3
RW
284 "Configure label control and policies\n"
285 "Configure local label control and policies\n"
286 "Configure outbound label advertisement control\n"
287 "Configure explicit-null advertisement\n"
288 "IP access-list for destination prefixes\n"
289 "IP access-list number\n"
290 "IP access-list number (expanded range)\n"
291 "IP access-list name\n")
292{
1224e5c4 293 return (ldp_vty_label_expnull(vty, no, for_acl));
c740f7d3
RW
294}
295
1224e5c4 296DEFPY (ldp_label_local_allocate,
c740f7d3 297 ldp_label_local_allocate_cmd,
1224e5c4 298 "[no] label local allocate <host-routes$host_routes|for <(1-199)|(1300-2699)|WORD>$for_acl>",
45506658 299 NO_STR
c740f7d3
RW
300 "Configure label control and policies\n"
301 "Configure local label control and policies\n"
302 "Configure label allocation control\n"
303 "allocate local label for host routes only\n"
304 "IP access-list\n"
305 "IP access-list number\n"
306 "IP access-list number (expanded range)\n"
307 "IP access-list name\n")
308{
1224e5c4 309 return (ldp_vty_label_allocate(vty, no, host_routes, for_acl));
c740f7d3
RW
310}
311
1224e5c4 312DEFPY (ldp_label_remote_accept,
c740f7d3 313 ldp_label_remote_accept_cmd,
1224e5c4 314 "[no] label remote accept {from <(1-199)|(1300-2699)|WORD>$from_acl|for <(1-199)|(1300-2699)|WORD>$for_acl}",
45506658 315 NO_STR
c740f7d3
RW
316 "Configure label control and policies\n"
317 "Configure remote/peer label control and policies\n"
318 "Configure inbound label acceptance control\n"
319 "Neighbor from whom to accept label advertisement\n"
320 "IP access-list number\n"
321 "IP access-list number (expanded range)\n"
322 "IP access-list name\n"
323 "IP access-list for destination prefixes\n"
324 "IP access-list number\n"
325 "IP access-list number (expanded range)\n"
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,
08e4b244 541 "[no] debug mpls ldp <errors|event|labels|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"
c740f7d3
RW
549 "LDP zebra information\n")
550{
1224e5c4 551 return (ldp_vty_debug(vty, no, type, NULL, NULL));
c740f7d3
RW
552}
553
1224e5c4 554DEFPY (ldp_debug_mpls_ldp_messages_recv,
c740f7d3 555 ldp_debug_mpls_ldp_messages_recv_cmd,
1224e5c4 556 "[no] debug mpls ldp messages recv [all]$all",
45506658 557 NO_STR
c740f7d3
RW
558 "Debugging functions\n"
559 "MPLS information\n"
560 "Label Distribution Protocol\n"
561 "Messages\n"
562 "Received messages, excluding periodic Keep Alives\n"
563 "Received messages, including periodic Keep Alives\n")
564{
1224e5c4 565 return (ldp_vty_debug(vty, no, "messages", "recv", all));
c740f7d3
RW
566}
567
1224e5c4 568DEFPY (ldp_debug_mpls_ldp_messages_sent,
c740f7d3 569 ldp_debug_mpls_ldp_messages_sent_cmd,
1224e5c4 570 "[no] debug mpls ldp messages sent [all]$all",
45506658 571 NO_STR
c740f7d3
RW
572 "Debugging functions\n"
573 "MPLS information\n"
574 "Label Distribution Protocol\n"
575 "Messages\n"
576 "Sent messages, excluding periodic Keep Alives\n"
577 "Sent messages, including periodic Keep Alives\n")
578{
1224e5c4 579 return (ldp_vty_debug(vty, no, "messages", "sent", all));
c740f7d3
RW
580}
581
1224e5c4 582DEFPY (ldp_show_mpls_ldp_binding,
c740f7d3 583 ldp_show_mpls_ldp_binding_cmd,
f0722791
RW
584 "show mpls ldp [<ipv4|ipv6>]$af binding\
585 [<A.B.C.D/M|X:X::X:X/M>$prefix [longer-prefixes$longer_prefixes]]\
586 [{\
587 neighbor A.B.C.D$nbr\
588 |local-label (0-1048575)$local_label\
589 |remote-label (0-1048575)$remote_label\
590 }]\
591 [detail]$detail [json]$json",
c740f7d3
RW
592 "Show running system information\n"
593 "MPLS information\n"
594 "Label Distribution Protocol\n"
595 "IPv4 Address Family\n"
596 "IPv6 Address Family\n"
597 "Label Information Base (LIB) information\n"
f0722791
RW
598 "Destination prefix (IPv4)\n"
599 "Destination prefix (IPv6)\n"
600 "Include longer matches\n"
601 "Display labels from LDP neighbor\n"
602 "Neighbor LSR-ID\n"
603 "Match locally assigned label values\n"
604 "Locally assigned label value\n"
605 "Match remotely assigned label values\n"
606 "Remotely assigned label value\n"
c740f7d3 607 "Show detailed information\n"
6d53d24c 608 JSON_STR)
c740f7d3 609{
f0722791
RW
610 if (!local_label_str)
611 local_label = NO_LABEL;
612 if (!remote_label_str)
613 remote_label = NO_LABEL;
614 return (ldp_vty_show_binding(vty, af, prefix_str, !!longer_prefixes,
615 nbr_str, local_label, remote_label, detail, json));
c740f7d3
RW
616}
617
1224e5c4 618DEFPY (ldp_show_mpls_ldp_discovery,
c740f7d3 619 ldp_show_mpls_ldp_discovery_cmd,
1224e5c4 620 "show mpls ldp [<ipv4|ipv6>]$af discovery [detail]$detail [json]$json",
c740f7d3
RW
621 "Show running system information\n"
622 "MPLS information\n"
623 "Label Distribution Protocol\n"
624 "IPv4 Address Family\n"
625 "IPv6 Address Family\n"
626 "Discovery Hello Information\n"
627 "Show detailed information\n"
6d53d24c 628 JSON_STR)
c740f7d3 629{
c740f7d3
RW
630 return (ldp_vty_show_discovery(vty, af, detail, json));
631}
632
1224e5c4 633DEFPY (ldp_show_mpls_ldp_interface,
c740f7d3 634 ldp_show_mpls_ldp_interface_cmd,
1224e5c4 635 "show mpls ldp [<ipv4|ipv6>]$af interface [json]$json",
c740f7d3
RW
636 "Show running system information\n"
637 "MPLS information\n"
638 "Label Distribution Protocol\n"
639 "IPv4 Address Family\n"
640 "IPv6 Address Family\n"
641 "interface information\n"
6d53d24c 642 JSON_STR)
c740f7d3 643{
c740f7d3
RW
644 return (ldp_vty_show_interface(vty, af, json));
645}
646
1224e5c4 647DEFPY (ldp_show_mpls_ldp_capabilities,
c740f7d3 648 ldp_show_mpls_ldp_capabilities_cmd,
1224e5c4 649 "show mpls ldp capabilities [json]$json",
c740f7d3
RW
650 "Show running system information\n"
651 "MPLS information\n"
652 "Label Distribution Protocol\n"
653 "Display LDP Capabilities information\n"
6d53d24c 654 JSON_STR)
c740f7d3 655{
c740f7d3
RW
656 return (ldp_vty_show_capabilities(vty, json));
657}
658
1224e5c4 659DEFPY (ldp_show_mpls_ldp_neighbor,
c740f7d3 660 ldp_show_mpls_ldp_neighbor_cmd,
f0722791 661 "show mpls ldp neighbor [A.B.C.D]$lsr_id [detail]$detail [json]$json",
c740f7d3
RW
662 "Show running system information\n"
663 "MPLS information\n"
664 "Label Distribution Protocol\n"
665 "Neighbor information\n"
f0722791 666 "Neighbor LSR-ID\n"
c740f7d3 667 "Show detailed information\n"
6d53d24c 668 JSON_STR)
c740f7d3 669{
f0722791 670 return (ldp_vty_show_neighbor(vty, lsr_id_str, 0, detail, json));
c740f7d3
RW
671}
672
1224e5c4 673DEFPY (ldp_show_mpls_ldp_neighbor_capabilities,
c740f7d3 674 ldp_show_mpls_ldp_neighbor_capabilities_cmd,
f0722791 675 "show mpls ldp neighbor [A.B.C.D]$lsr_id capabilities [json]$json",
c740f7d3
RW
676 "Show running system information\n"
677 "MPLS information\n"
678 "Label Distribution Protocol\n"
679 "Neighbor information\n"
f0722791 680 "Neighbor LSR-ID\n"
c740f7d3 681 "Display neighbor capability information\n"
6d53d24c 682 JSON_STR)
c740f7d3 683{
f0722791 684 return (ldp_vty_show_neighbor(vty, lsr_id_str, 1, NULL, json));
c740f7d3
RW
685}
686
1224e5c4 687DEFPY (ldp_show_l2vpn_atom_binding,
c740f7d3 688 ldp_show_l2vpn_atom_binding_cmd,
f0722791
RW
689 "show l2vpn atom binding\
690 [{\
691 A.B.C.D$peer\
692 |local-label (16-1048575)$local_label\
693 |remote-label (16-1048575)$remote_label\
694 }]\
695 [json]$json",
c740f7d3
RW
696 "Show running system information\n"
697 "Show information about Layer2 VPN\n"
698 "Show Any Transport over MPLS information\n"
699 "Show AToM label binding information\n"
f0722791
RW
700 "Destination address of the VC\n"
701 "Match locally assigned label values\n"
702 "Locally assigned label value\n"
703 "Match remotely assigned label values\n"
704 "Remotely assigned label value\n"
6d53d24c 705 JSON_STR)
c740f7d3 706{
f0722791
RW
707 if (!local_label_str)
708 local_label = NO_LABEL;
709 if (!remote_label_str)
710 remote_label = NO_LABEL;
711 return (ldp_vty_show_atom_binding(vty, peer_str, local_label,
712 remote_label, json));
c740f7d3
RW
713}
714
1224e5c4 715DEFPY (ldp_show_l2vpn_atom_vc,
c740f7d3 716 ldp_show_l2vpn_atom_vc_cmd,
f0722791
RW
717 "show l2vpn atom vc\
718 [{\
719 A.B.C.D$peer\
720 |interface IFNAME$ifname\
721 |vc-id (1-4294967295)$vcid\
722 }]\
723 [json]$json",
c740f7d3
RW
724 "Show running system information\n"
725 "Show information about Layer2 VPN\n"
726 "Show Any Transport over MPLS information\n"
727 "Show AToM virtual circuit information\n"
f0722791
RW
728 "Destination address of the VC\n"
729 "Local interface of the pseudowire\n"
730 "Interface's name\n"
731 "VC ID\n"
732 "VC ID\n"
6d53d24c 733 JSON_STR)
c740f7d3 734{
f0722791 735 return (ldp_vty_show_atom_vc(vty, peer_str, ifname, vcid_str, json));
c740f7d3
RW
736}
737
281bd4dd 738DEFPY_NOSH (ldp_show_debugging_mpls_ldp,
87f6dc50
DS
739 ldp_show_debugging_mpls_ldp_cmd,
740 "show debugging [mpls ldp]",
741 "Show running system information\n"
742 "Debugging functions\n"
743 "MPLS information\n"
744 "Label Distribution Protocol\n")
c740f7d3
RW
745{
746 return (ldp_vty_show_debugging(vty));
747}
748
935029cd
RW
749static void
750l2vpn_autocomplete(vector comps, struct cmd_token *token)
751{
752 struct l2vpn *l2vpn;
753
754 RB_FOREACH(l2vpn, l2vpn_head, &vty_conf->l2vpn_tree)
755 vector_set(comps, XSTRDUP(MTYPE_COMPLETION, l2vpn->name));
756}
757
758static const struct cmd_variable_handler l2vpn_var_handlers[] = {
759 {
760 .varname = "l2vpn_name",
761 .completions = l2vpn_autocomplete
762 },
763 {
764 .completions = NULL
765 }
766};
767
c740f7d3
RW
768void
769ldp_vty_init (void)
770{
935029cd
RW
771 cmd_variable_handler_register(l2vpn_var_handlers);
772
c740f7d3
RW
773 install_node(&ldp_node, ldp_config_write);
774 install_node(&ldp_ipv4_node, NULL);
775 install_node(&ldp_ipv6_node, NULL);
776 install_node(&ldp_ipv4_iface_node, NULL);
777 install_node(&ldp_ipv6_iface_node, NULL);
778 install_node(&ldp_l2vpn_node, ldp_l2vpn_config_write);
779 install_node(&ldp_pseudowire_node, NULL);
780 install_node(&ldp_debug_node, ldp_debug_config_write);
781 install_default(LDP_NODE);
782 install_default(LDP_IPV4_NODE);
783 install_default(LDP_IPV6_NODE);
784 install_default(LDP_IPV4_IFACE_NODE);
785 install_default(LDP_IPV6_IFACE_NODE);
786 install_default(LDP_L2VPN_NODE);
787 install_default(LDP_PSEUDOWIRE_NODE);
788
789 install_element(CONFIG_NODE, &ldp_mpls_ldp_cmd);
fc4ea5c2 790 install_element(CONFIG_NODE, &no_ldp_mpls_ldp_cmd);
c740f7d3 791 install_element(CONFIG_NODE, &ldp_l2vpn_cmd);
fc4ea5c2 792 install_element(CONFIG_NODE, &no_ldp_l2vpn_cmd);
c740f7d3
RW
793 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
794 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_type_cmd);
795 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
796 install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
797
798 install_element(LDP_NODE, &ldp_address_family_cmd);
fc4ea5c2 799 install_element(LDP_NODE, &no_ldp_address_family_cmd);
16cd3d9d
RW
800 install_element(LDP_NODE, &ldp_discovery_link_holdtime_cmd);
801 install_element(LDP_NODE, &ldp_discovery_targeted_holdtime_cmd);
802 install_element(LDP_NODE, &ldp_discovery_link_interval_cmd);
803 install_element(LDP_NODE, &ldp_discovery_targeted_interval_cmd);
c740f7d3
RW
804 install_element(LDP_NODE, &ldp_dual_stack_transport_connection_prefer_ipv4_cmd);
805 install_element(LDP_NODE, &ldp_dual_stack_cisco_interop_cmd);
806 install_element(LDP_NODE, &ldp_neighbor_password_cmd);
807 install_element(LDP_NODE, &ldp_neighbor_session_holdtime_cmd);
808 install_element(LDP_NODE, &ldp_neighbor_ttl_security_cmd);
809 install_element(LDP_NODE, &ldp_router_id_cmd);
810
16cd3d9d
RW
811 install_element(LDP_IPV4_NODE, &ldp_discovery_link_holdtime_cmd);
812 install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_holdtime_cmd);
813 install_element(LDP_IPV4_NODE, &ldp_discovery_link_interval_cmd);
814 install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_interval_cmd);
c740f7d3
RW
815 install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_hello_accept_cmd);
816 install_element(LDP_IPV4_NODE, &ldp_discovery_transport_address_ipv4_cmd);
817 install_element(LDP_IPV4_NODE, &ldp_label_local_advertise_cmd);
818 install_element(LDP_IPV4_NODE, &ldp_label_local_advertise_explicit_null_cmd);
819 install_element(LDP_IPV4_NODE, &ldp_label_local_allocate_cmd);
820 install_element(LDP_IPV4_NODE, &ldp_label_remote_accept_cmd);
821 install_element(LDP_IPV4_NODE, &ldp_ttl_security_disable_cmd);
822 install_element(LDP_IPV4_NODE, &ldp_interface_cmd);
fc4ea5c2 823 install_element(LDP_IPV4_NODE, &no_ldp_interface_cmd);
c740f7d3
RW
824 install_element(LDP_IPV4_NODE, &ldp_session_holdtime_cmd);
825 install_element(LDP_IPV4_NODE, &ldp_neighbor_ipv4_targeted_cmd);
983bd6f7 826 install_element(LDP_IPV4_NODE, &ldp_exit_address_family_cmd);
c740f7d3 827
16cd3d9d
RW
828 install_element(LDP_IPV6_NODE, &ldp_discovery_link_holdtime_cmd);
829 install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_holdtime_cmd);
830 install_element(LDP_IPV6_NODE, &ldp_discovery_link_interval_cmd);
831 install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_interval_cmd);
c740f7d3
RW
832 install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_hello_accept_cmd);
833 install_element(LDP_IPV6_NODE, &ldp_discovery_transport_address_ipv6_cmd);
834 install_element(LDP_IPV6_NODE, &ldp_label_local_advertise_cmd);
835 install_element(LDP_IPV6_NODE, &ldp_label_local_advertise_explicit_null_cmd);
836 install_element(LDP_IPV6_NODE, &ldp_label_local_allocate_cmd);
837 install_element(LDP_IPV6_NODE, &ldp_label_remote_accept_cmd);
838 install_element(LDP_IPV6_NODE, &ldp_ttl_security_disable_cmd);
839 install_element(LDP_IPV6_NODE, &ldp_interface_cmd);
3c549c10 840 install_element(LDP_IPV6_NODE, &no_ldp_interface_cmd);
c740f7d3
RW
841 install_element(LDP_IPV6_NODE, &ldp_session_holdtime_cmd);
842 install_element(LDP_IPV6_NODE, &ldp_neighbor_ipv6_targeted_cmd);
983bd6f7 843 install_element(LDP_IPV6_NODE, &ldp_exit_address_family_cmd);
c740f7d3 844
16cd3d9d
RW
845 install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
846 install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_link_interval_cmd);
c740f7d3 847
16cd3d9d
RW
848 install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_holdtime_cmd);
849 install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_link_interval_cmd);
c740f7d3
RW
850
851 install_element(LDP_L2VPN_NODE, &ldp_bridge_cmd);
852 install_element(LDP_L2VPN_NODE, &ldp_mtu_cmd);
853 install_element(LDP_L2VPN_NODE, &ldp_member_interface_cmd);
854 install_element(LDP_L2VPN_NODE, &ldp_member_pseudowire_cmd);
fc4ea5c2 855 install_element(LDP_L2VPN_NODE, &no_ldp_member_pseudowire_cmd);
c740f7d3
RW
856 install_element(LDP_L2VPN_NODE, &ldp_vc_type_cmd);
857
858 install_element(LDP_PSEUDOWIRE_NODE, &ldp_control_word_cmd);
859 install_element(LDP_PSEUDOWIRE_NODE, &ldp_neighbor_address_cmd);
860 install_element(LDP_PSEUDOWIRE_NODE, &ldp_neighbor_lsr_id_cmd);
861 install_element(LDP_PSEUDOWIRE_NODE, &ldp_pw_id_cmd);
862 install_element(LDP_PSEUDOWIRE_NODE, &ldp_pw_status_disable_cmd);
863
864 install_element(ENABLE_NODE, &ldp_clear_mpls_ldp_neighbor_cmd);
865 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
866 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_type_cmd);
867 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
868 install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
869
870 install_element(VIEW_NODE, &ldp_show_mpls_ldp_binding_cmd);
871 install_element(VIEW_NODE, &ldp_show_mpls_ldp_discovery_cmd);
872 install_element(VIEW_NODE, &ldp_show_mpls_ldp_interface_cmd);
873 install_element(VIEW_NODE, &ldp_show_mpls_ldp_capabilities_cmd);
874 install_element(VIEW_NODE, &ldp_show_mpls_ldp_neighbor_cmd);
875 install_element(VIEW_NODE, &ldp_show_mpls_ldp_neighbor_capabilities_cmd);
876 install_element(VIEW_NODE, &ldp_show_l2vpn_atom_binding_cmd);
877 install_element(VIEW_NODE, &ldp_show_l2vpn_atom_vc_cmd);
878 install_element(VIEW_NODE, &ldp_show_debugging_mpls_ldp_cmd);
879}