summaryrefslogtreecommitdiff
path: root/ldpd
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2017-06-12 11:39:12 -0300
committerRenato Westphal <renato@openbsd.org>2017-06-16 14:43:42 -0300
commitc740f7d3678a8ea2c70a062c1207157e999bd6e8 (patch)
tree43dd4ca1494eb53827854efa1476ee0ae9e5b838 /ldpd
parent62e4232010330e515630399838288f6281d04de6 (diff)
ldpd: convert cli and get rid of the xml interface
The xml2cli.pl script was useful years ago when the vty code was very rudimentary. This is not the case anymore, so convert all ldpd CLI commands to use DEFUNs directly and get rid of the XML interface. The benefits are: * Consistency with the other daemons; * One less build dependency (the LibXML perl module); * Easier to add new commands. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'ldpd')
-rw-r--r--ldpd/.gitignore1
-rw-r--r--ldpd/Makefile.am9
-rw-r--r--ldpd/ldp_debug.c14
-rw-r--r--ldpd/ldp_vty.h81
-rw-r--r--ldpd/ldp_vty.xml466
-rw-r--r--ldpd/ldp_vty_cmds.c1133
-rw-r--r--ldpd/ldp_vty_conf.c259
-rw-r--r--ldpd/ldp_vty_exec.c48
8 files changed, 1241 insertions, 770 deletions
diff --git a/ldpd/.gitignore b/ldpd/.gitignore
index e4ee82587a..35f7740d11 100644
--- a/ldpd/.gitignore
+++ b/ldpd/.gitignore
@@ -15,4 +15,3 @@ TAGS
.arch-ids
*~
*.loT
-ldp_vty_cmds.c
diff --git a/ldpd/Makefile.am b/ldpd/Makefile.am
index b760b44573..6074b53a33 100644
--- a/ldpd/Makefile.am
+++ b/ldpd/Makefile.am
@@ -3,16 +3,12 @@
AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
INSTALL_SDATA=@INSTALL@ -m 600
-EXTRA_DIST=
AM_CFLAGS = $(WERROR)
noinst_LIBRARIES = libldp.a
sbin_PROGRAMS = ldpd
-BUILT_SOURCES = ldp_vty_cmds.c
-EXTRA_DIST += ldp_vty.xml
-
libldp_a_SOURCES = \
accept.c address.c adjacency.c control.c hello.c init.c interface.c \
keepalive.c l2vpn.c labelmapping.c lde.c lde_lib.c ldpd.c \
@@ -23,11 +19,6 @@ libldp_a_SOURCES = \
noinst_HEADERS = \
control.h lde.h ldpd.h ldpe.h ldp.h log.h ldp_debug.h ldp_vty.h
-ldp_vty_cmds.c: $(srcdir)/ldp_vty.xml $(srcdir)/../tools/xml2cli.pl
- @PERL@ $(srcdir)/../tools/xml2cli.pl $(srcdir)/ldp_vty.xml | \
- sed -e 's%DEFUN \((ldp_\(interface_\|mpls_ldp\|address_family\|l2vpn_word\|member_pseudo\)\)%DEFUN_NOSH \1%' \
- > $@
-
ldpd_SOURCES = ldpd.c
ldpd_LDADD = libldp.a ../lib/libfrr.la @LIBCAP@
diff --git a/ldpd/ldp_debug.c b/ldpd/ldp_debug.c
index 4419f853b4..4fc4a3cce0 100644
--- a/ldpd/ldp_debug.c
+++ b/ldpd/ldp_debug.c
@@ -39,16 +39,10 @@ struct cmd_node ldp_debug_node =
};
int
-ldp_vty_debug(struct vty *vty, struct vty_arg *args[])
+ldp_vty_debug(struct vty *vty, int disable, const char *type_str,
+ const char *dir_str, int all)
{
- const char *type_str, *dir_str;
- int disable, all;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- type_str = vty_get_arg_value(args, "type");
-
if (strcmp(type_str, "discovery") == 0) {
- dir_str = vty_get_arg_value(args, "dir");
if (dir_str == NULL)
return (CMD_WARNING);
@@ -74,8 +68,6 @@ ldp_vty_debug(struct vty *vty, struct vty_arg *args[])
else
DEBUG_ON(event, EVENT);
} else if (strcmp(type_str, "messages") == 0) {
- all = (vty_get_arg_value(args, "all")) ? 1 : 0;
- dir_str = vty_get_arg_value(args, "dir");
if (dir_str == NULL)
return (CMD_WARNING);
@@ -112,7 +104,7 @@ ldp_vty_debug(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_show_debugging(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_debugging(struct vty *vty)
{
vty_out(vty, "LDP debugging status:%s", VTY_NEWLINE);
diff --git a/ldpd/ldp_vty.h b/ldpd/ldp_vty.h
index 21a486ff65..1375c3c798 100644
--- a/ldpd/ldp_vty.h
+++ b/ldpd/ldp_vty.h
@@ -37,46 +37,47 @@ int ldp_get_address(const char *, int *, union ldpd_addr *);
int ldp_config_write(struct vty *);
int ldp_l2vpn_config_write(struct vty *);
int ldp_debug_config_write(struct vty *);
-int ldp_vty_mpls_ldp (struct vty *, struct vty_arg *[]);
-int ldp_vty_address_family (struct vty *, struct vty_arg *[]);
-int ldp_vty_disc_holdtime(struct vty *, struct vty_arg *[]);
-int ldp_vty_disc_interval(struct vty *, struct vty_arg *[]);
-int ldp_vty_targeted_hello_accept(struct vty *, struct vty_arg *[]);
-int ldp_vty_session_holdtime(struct vty *, struct vty_arg *[]);
-int ldp_vty_interface(struct vty *, struct vty_arg *[]);
-int ldp_vty_trans_addr(struct vty *, struct vty_arg *[]);
-int ldp_vty_neighbor_targeted(struct vty *, struct vty_arg *[]);
-int ldp_vty_label_advertise(struct vty *, struct vty_arg *[]);
-int ldp_vty_label_allocate(struct vty *, struct vty_arg *[]);
-int ldp_vty_label_expnull(struct vty *, struct vty_arg *[]);
-int ldp_vty_label_accept(struct vty *, struct vty_arg *[]);
-int ldp_vty_ttl_security(struct vty *, struct vty_arg *[]);
-int ldp_vty_router_id(struct vty *, struct vty_arg *[]);
-int ldp_vty_ds_cisco_interop(struct vty *, struct vty_arg *[]);
-int ldp_vty_trans_pref_ipv4(struct vty *, struct vty_arg *[]);
-int ldp_vty_neighbor_password(struct vty *, struct vty_arg *[]);
-int ldp_vty_neighbor_ttl_security(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_bridge(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_mtu(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pwtype(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_interface(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pseudowire(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pw_cword(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pw_nbr_addr(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pw_nbr_id(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pw_pwid(struct vty *, struct vty_arg *[]);
-int ldp_vty_l2vpn_pw_pwstatus(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_binding(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_discovery(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_interface(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_capabilities(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_neighbor(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_atom_binding(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_atom_vc(struct vty *, struct vty_arg *[]);
-int ldp_vty_clear_nbr(struct vty *, struct vty_arg *[]);
-int ldp_vty_debug(struct vty *, struct vty_arg *[]);
-int ldp_vty_show_debugging(struct vty *, struct vty_arg *[]);
+int ldp_vty_mpls_ldp (struct vty *, int);
+int ldp_vty_address_family (struct vty *, int, const char *);
+int ldp_vty_disc_holdtime(struct vty *, int, const char *, const char *);
+int ldp_vty_disc_interval(struct vty *, int, const char *, const char *);
+int ldp_vty_targeted_hello_accept(struct vty *, int, const char *);
+int ldp_vty_nbr_session_holdtime(struct vty *, int, const char *, const char *);
+int ldp_vty_af_session_holdtime(struct vty *, int, const char *);
+int ldp_vty_interface(struct vty *, int, const char *);
+int ldp_vty_trans_addr(struct vty *, int, const char *);
+int ldp_vty_neighbor_targeted(struct vty *, int, const char *);
+int ldp_vty_label_advertise(struct vty *, int, const char *, const char *);
+int ldp_vty_label_allocate(struct vty *, int, int, const char *);
+int ldp_vty_label_expnull(struct vty *, int, const char *);
+int ldp_vty_label_accept(struct vty *, int, const char *, const char *);
+int ldp_vty_ttl_security(struct vty *, int);
+int ldp_vty_router_id(struct vty *, int, const char *);
+int ldp_vty_ds_cisco_interop(struct vty *, int);
+int ldp_vty_trans_pref_ipv4(struct vty *, int);
+int ldp_vty_neighbor_password(struct vty *, int, const char *, const char *);
+int ldp_vty_neighbor_ttl_security(struct vty *, int, const char *, const char *);
+int ldp_vty_l2vpn(struct vty *, int, const char *);
+int ldp_vty_l2vpn_bridge(struct vty *, int, const char *);
+int ldp_vty_l2vpn_mtu(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pwtype(struct vty *, int, const char *);
+int ldp_vty_l2vpn_interface(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pseudowire(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pw_cword(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pw_nbr_addr(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pw_nbr_id(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pw_pwid(struct vty *, int, const char *);
+int ldp_vty_l2vpn_pw_pwstatus(struct vty *, int);
+int ldp_vty_clear_nbr(struct vty *, const char *);
+int ldp_vty_debug(struct vty *, int, const char *, const char *, int);
+int ldp_vty_show_binding(struct vty *, const char *, int, int);
+int ldp_vty_show_discovery(struct vty *, const char *, int, int);
+int ldp_vty_show_interface(struct vty *, const char *, int);
+int ldp_vty_show_capabilities(struct vty *, int);
+int ldp_vty_show_neighbor(struct vty *, int, int, int);
+int ldp_vty_show_atom_binding(struct vty *, int);
+int ldp_vty_show_atom_vc(struct vty *, int);
+int ldp_vty_show_debugging(struct vty *);
void ldp_vty_init(void);
diff --git a/ldpd/ldp_vty.xml b/ldpd/ldp_vty.xml
deleted file mode 100644
index cd5c92c7b1..0000000000
--- a/ldpd/ldp_vty.xml
+++ /dev/null
@@ -1,466 +0,0 @@
-<?xml version="1.0"?>
-<file init="ldp_vty_init" cmdprefix="ldp" header="ldpd/ldp_vty.h">
- <!-- address-family -->
- <options name="address-family">
- <option name="ipv4" help="IPv4 Address Family"/>
- <option name="ipv6" help="IPv6 Address Family"/>
- </options>
-
- <!-- ipv4/ipv6 address -->
- <options name="addr">
- <option input="ipv4" help="IPv4 address"/>
- <option input="ipv6" help="IPv6 address"/>
- </options>
-
- <!-- pseudowire control-word options -->
- <options name="cword">
- <option name="exclude" help="Exclude control-word in pseudowire packets"/>
- <option name="include" help="Include control-word in pseudowire packets"/>
- </options>
-
- <!-- pseudowire types -->
- <options name="pwtype">
- <option name="ethernet" help="Ethernet (type 5)"/>
- <option name="ethernet-tagged" help="Ethernet-tagged (type 4)"/>
- </options>
-
- <!-- packet direction -->
- <options name="dir">
- <option name="recv" help="Received messages"/>
- <option name="sent" help="Sent messages"/>
- </options>
-
- <!-- ACL -->
- <options name="acl">
- <option input="acl_range" help="IP access-list number"/>
- <option input="acl_expanded_range" help="IP access-list number (expanded range)"/>
- <option input="word" help="IP access-list name"/>
- </options>
-
- <!-- shared subtrees -->
- <subtree name="label_local_acls">
- <option name="to" help="IP Access-list specifying controls on LDP Peers">
- <select options="acl" arg="to_acl" function="inherited">
- <option name="for" help="IP access-list for destination prefixes">
- <select options="acl" arg="for_acl" function="inherited"/>
- </option>
- </select>
- </option>
- <option name="for" help="IP access-list for destination prefixes">
- <select options="acl" arg="for_acl" function="inherited">
- <option name="to" help="IP Access-list specifying controls on LDP Peers">
- <select options="acl" arg="to_acl" function="inherited"/>
- </option>
- </select>
- </option>
- </subtree>
-
- <subtree name="label_remote_acls">
- <option name="from" help="Neighbor from whom to accept label advertisement">
- <select options="acl" arg="from_acl" function="inherited">
- <option name="for" help="IP access-list for destination prefixes">
- <select options="acl" arg="for_acl" function="inherited"/>
- </option>
- </select>
- </option>
- <option name="for" help="IP access-list for destination prefixes">
- <select options="acl" arg="for_acl" function="inherited">
- <option name="from" help="Neighbor from whom to accept label advertisement">
- <select options="acl" arg="from_acl" function="inherited"/>
- </option>
- </select>
- </option>
- </subtree>
-
- <subtree name="discovery_link">
- <option name="discovery" help="Configure discovery parameters">
- <option name="hello" arg="hello_type" help="LDP Link Hellos">
- <option name="holdtime" help="Hello holdtime">
- <option input="disc_time" arg="seconds" help="Time (seconds) - 65535 implies infinite" function="ldp_vty_disc_holdtime"/>
- </option>
- <option name="interval" help="Hello interval">
- <option input="disc_time" arg="seconds" help="Time (seconds)" function="ldp_vty_disc_interval"/>
- </option>
- </option>
- </option>
- </subtree>
-
- <subtree name="discovery_targeted">
- <option name="discovery" help="Configure discovery parameters">
- <option name="targeted-hello" arg="hello_type" help="LDP Targeted Hellos">
- <option name="holdtime" help="Targeted hello holdtime">
- <option input="disc_time" arg="seconds" help="Time (seconds) - 65535 implies infinite" function="ldp_vty_disc_holdtime"/>
- </option>
- <option name="interval" help="Targeted hello interval">
- <option input="disc_time" arg="seconds" help="Time (seconds)" function="ldp_vty_disc_interval"/>
- </option>
- </option>
- </option>
- </subtree>
-
- <subtree name="session_holdtime">
- <option name="session" help="Configure session parameters">
- <option name="holdtime" help="Configure session holdtime">
- <option input="session_time" arg="seconds" help="Time (seconds)" function="ldp_vty_session_holdtime"/>
- </option>
- </option>
- </subtree>
-
- <subtree name="af_common">
- <include subtree="discovery_link"/>
- <include subtree="discovery_targeted"/>
- <option name="discovery" help="Configure discovery parameters">
- <option name="targeted-hello" arg="hello_type" help="LDP Targeted Hellos">
- <option name="accept" help="Accept and respond to targeted hellos" function="ldp_vty_targeted_hello_accept">
- <option name="from" help="Access list to specify acceptable targeted hello source">
- <select options="acl" arg="from_acl" function="inherited"/>
- </option>
- </option>
- </option>
- </option>
- <option name="label" help="Configure label control and policies">
- <option name="local" help="Configure local label control and policies">
- <option name="advertise" help="Configure outbound label advertisement control" function="ldp_vty_label_advertise">
- <include subtree="label_local_acls"/>
- <option name="explicit-null" help="Configure explicit-null advertisement" function="ldp_vty_label_expnull">
- <option name="for" help="IP access-list for destination prefixes">
- <select options="acl" arg="for_acl" function="inherited"/>
- </option>
- </option>
- </option>
- <option name="allocate" help="Configure label allocation control">
- <option name="for" help="IP access-list">
- <select options="acl" arg="for_acl" function="ldp_vty_label_allocate"/>
- </option>
- <option name="host-routes" arg="host-routes" help="allocate local label for host routes only" function="ldp_vty_label_allocate"/>
- </option>
- </option>
- <option name="remote" help="Configure remote/peer label control and policies">
- <option name="accept" help="Configure inbound label acceptance control" function="ldp_vty_label_accept">
- <include subtree="label_remote_acls"/>
- </option>
- </option>
- </option>
- <option name="ttl-security" help="LDP ttl security check">
- <option name="disable" help="Disable ttl security" function="ldp_vty_ttl_security"/>
- </option>
- <include subtree="session_holdtime"/>
- <option name="interface" help="Enable LDP on an interface and enter interface submode">
- <option input="ifname" arg="ifname" help="Interface's name" function="ldp_vty_interface"/>
- </option>
- </subtree>
-
- <!-- global -->
- <subtree name="__global">
- <option name="mpls" help="Global MPLS configuration subcommands">
- <option name="ldp" help="Label Distribution Protocol" function="ldp_vty_mpls_ldp"/>
- </option>
- <option name="l2vpn" help="Configure l2vpn commands">
- <option input="word" arg="name" help="L2VPN name">
- <option name="type" help="L2VPN type">
- <option name="vpls" help="Virtual Private LAN Service" function="ldp_vty_l2vpn"/>
- </option>
- </option>
- </option>
- </subtree>
- <tree name="global">
- <include subtree="__global"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__global"/>
- </option>
- </tree>
-
- <!-- ldp node -->
- <subtree name="__ldp_node">
- <option name="address-family" help="Configure Address Family and its parameters">
- <option name="ipv4" arg="address-family" help="IPv4" function="ldp_vty_address_family"/>
- <option name="ipv6" arg="address-family" help="IPv6" function="ldp_vty_address_family"/>
- </option>
- <include subtree="discovery_link"/>
- <include subtree="discovery_targeted"/>
- <option name="dual-stack" help="Configure dual stack parameters">
- <option name="transport-connection" help="Configure TCP transport parameters">
- <option name="prefer" help="Configure prefered address family for TCP transport connection with neighbor">
- <option name="ipv4" help="IPv4" function="ldp_vty_trans_pref_ipv4"/>
- </option>
- </option>
- <option name="cisco-interop" help="Use Cisco non-compliant format to send and interpret the Dual-Stack capability TLV" function="ldp_vty_ds_cisco_interop"/>
- </option>
- <option name="neighbor" help="Configure neighbor parameters">
- <option input="ipv4" arg="lsr_id" help="LDP Id of neighbor">
- <option name="password" help="Configure password for MD5 authentication">
- <option input="word" arg="password" help="The password" function="ldp_vty_neighbor_password"/>
- </option>
- <include subtree="session_holdtime"/>
- <option name="ttl-security" help="LDP ttl security check">
- <option name="disable" help="Disable ttl security" function="ldp_vty_neighbor_ttl_security"/>
- <option name="hops" help="IP hops">
- <option input="hops" arg="hops" help="maximum number of hops" function="ldp_vty_neighbor_ttl_security"/>
- </option>
- </option>
- </option>
- </option>
- <option name="router-id" help="Configure router Id">
- <option input="ipv4" arg="addr" help="LSR Id (in form of an IPv4 address)" function="ldp_vty_router_id"/>
- </option>
- </subtree>
- <tree name="ldp_node">
- <include subtree="__ldp_node"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_node"/>
- </option>
- </tree>
-
- <!-- address-family ipv4 -->
- <subtree name="__ldp_ipv4_node">
- <include subtree="af_common"/>
- <option name="discovery" help="Configure discovery parameters">
- <option name="transport-address" help="Specify transport address for TCP connection">
- <option input="ipv4" arg="addr" help="IP address to be used as transport address" function="ldp_vty_trans_addr"/>
- </option>
- </option>
- <option name="neighbor" help="Configure neighbor parameters">
- <option input="ipv4" arg="addr" help="IP address of neighbor">
- <option name="targeted" help="Establish targeted session" function="ldp_vty_neighbor_targeted"/>
- </option>
- </option>
- </subtree>
- <tree name="ldp_ipv4_node">
- <include subtree="__ldp_ipv4_node"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_ipv4_node"/>
- </option>
- </tree>
-
- <!-- address-family ipv6 -->
- <subtree name="__ldp_ipv6_node">
- <include subtree="af_common"/>
- <option name="discovery" help="Configure discovery parameters">
- <option name="transport-address" help="Specify transport address for TCP connection">
- <option input="ipv6" arg="addr" help="IPv6 address to be used as transport address" function="ldp_vty_trans_addr"/>
- </option>
- </option>
- <option name="neighbor" help="Configure neighbor parameters">
- <option input="ipv6" arg="addr" help="IPv6 address of neighbor">
- <option name="targeted" help="Establish targeted session" function="ldp_vty_neighbor_targeted"/>
- </option>
- </option>
- </subtree>
- <tree name="ldp_ipv6_node">
- <include subtree="__ldp_ipv6_node"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_ipv6_node"/>
- </option>
- </tree>
-
- <!-- ldp ipv4 interface node -->
- <subtree name="__ldp_ipv4_iface_node">
- <include subtree="discovery_link"/>
- </subtree>
- <tree name="ldp_ipv4_iface_node">
- <include subtree="__ldp_ipv4_iface_node"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_ipv4_iface_node"/>
- </option>
- </tree>
-
- <!-- ldp ipv6 interface node -->
- <subtree name="__ldp_ipv6_iface_node">
- <include subtree="discovery_link"/>
- </subtree>
- <tree name="ldp_ipv6_iface_node">
- <include subtree="__ldp_ipv6_iface_node"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_ipv6_iface_node"/>
- </option>
- </tree>
-
- <!-- l2vpn -->
- <subtree name="__ldp_l2vpn">
- <option name="bridge" help="Bridge interface">
- <option input="ifname" arg="ifname" help="Interface's name" function="ldp_vty_l2vpn_bridge"/>
- </option>
- <option name="mtu" help="set Maximum Transmission Unit">
- <option input="mtu" arg="mtu" help="Maximum Transmission Unit value" function="ldp_vty_l2vpn_mtu"/>
- </option>
- <option name="member" help="L2VPN member configuration">
- <option name="interface" help="Local interface">
- <option input="ifname" arg="ifname" help="Interface's name" function="ldp_vty_l2vpn_interface"/>
- </option>
- <option name="pseudowire" help="Pseudowire interface">
- <option input="ifname" arg="ifname" help="Interface's name" function="ldp_vty_l2vpn_pseudowire"/>
- </option>
- </option>
- <option name="vc" help="Virtual Circuit options">
- <option name="type" help="Virtual Circuit type to use">
- <select options="pwtype" arg="type" function="ldp_vty_l2vpn_pwtype"/>
- </option>
- </option>
- </subtree>
- <tree name="ldp_l2vpn">
- <include subtree="__ldp_l2vpn"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_l2vpn"/>
- </option>
- </tree>
-
- <!-- l2vpn pseudowire -->
- <subtree name="__ldp_pseudowire">
- <option name="control-word" help="Control-word options">
- <select options="cword" arg="preference" function="ldp_vty_l2vpn_pw_cword"/>
- </option>
- <option name="neighbor" help="Remote endpoint configuration">
- <option name="address" help="Specify the IPv4 or IPv6 address of the remote endpoint">
- <select options="addr" arg="addr" function="ldp_vty_l2vpn_pw_nbr_addr"/>
- </option>
- <option name="lsr-id" help="Specify the LSR-ID of the remote endpoint">
- <option input="ipv4" arg="lsr-id" help="IPv4 address" function="ldp_vty_l2vpn_pw_nbr_id"/>
- </option>
- </option>
- <option name="pw-id" help="Set the Virtual Circuit ID">
- <option input="pwid" arg="pwid" help="Virtual Circuit ID value" function="ldp_vty_l2vpn_pw_pwid"/>
- </option>
- <option name="pw-status" help="Configure PW status">
- <option name="disable" help="Disable PW status" function="ldp_vty_l2vpn_pw_pwstatus"/>
- </option>
- </subtree>
- <tree name="ldp_pseudowire">
- <include subtree="__ldp_pseudowire"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_pseudowire"/>
- </option>
- </tree>
-
- <!-- exec mode commands -->
- <subtree name="ldp_show_af">
- <option name="binding" help="Label Information Base (LIB) information" function="ldp_vty_show_binding">
- <option name="json" arg="json" help="JavaScript Object Notation" function="ldp_vty_show_binding"/>
- <option name="detail" arg="detail" help="Show detailed information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_binding"/>
- </option>
- </option>
- <option name="discovery" help="Discovery Hello Information" function="ldp_vty_show_discovery">
- <option name="json" arg="json" help="JavaScript Object Notation" function="ldp_vty_show_discovery"/>
- <option name="detail" arg="detail" help="Show detailed information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_discovery"/>
- </option>
- </option>
- <option name="interface" help="interface information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_interface"/>
- </option>
- </subtree>
- <tree name="ldp_exec">
- <option name="show" help="Show running system information">
- <option name="mpls" help="MPLS information">
- <option name="ldp" help="Label Distribution Protocol">
- <option name="capabilities" help="Display LDP Capabilities information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_capabilities"/>
- </option>
- <option name="neighbor" help="Neighbor information" function="ldp_vty_show_neighbor">
- <option name="capabilities" arg="capabilities" help="Display neighbor capability information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_neighbor"/>
- </option>
- <option name="json" arg="json" help="JavaScript Object Notation" function="ldp_vty_show_neighbor"/>
- <option name="detail" arg="detail" help="Show detailed information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_neighbor"/>
- </option>
- </option>
- <include subtree="ldp_show_af"/>
- <select options="address-family" arg="address-family">
- <include subtree="ldp_show_af"/>
- </select>
- </option>
- </option>
- <option name="l2vpn" help="Show information about Layer2 VPN">
- <option name="atom" help="Show Any Transport over MPLS information">
- <option name="binding" help="Show AToM label binding information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_atom_binding"/>
- </option>
- <option name="vc" help="Show AToM virtual circuit information">
- <option name="json" arg="json" optional="true" help="JavaScript Object Notation" function="ldp_vty_show_atom_vc"/>
- </option>
- </option>
- </option>
- <option name="debugging" help="Debugging functions">
- <option name="mpls" help="MPLS information">
- <option name="ldp" help="Label Distribution Protocol" function="ldp_vty_show_debugging"/>
- </option>
- </option>
- </option>
- <option name="clear" help="Reset functions">
- <option name="mpls" help="Reset MPLS statistical information">
- <option name="ldp" help="Clear LDP state">
- <option name="neighbor" help="Clear LDP neighbor sessions" function="ldp_vty_clear_nbr">
- <select options="addr" arg="addr" function="ldp_vty_clear_nbr"/>
- </option>
- </option>
- </option>
- </option>
- </tree>
-
- <!-- debug commands -->
- <subtree name="__ldp_debug">
- <option name="debug" help="Debugging functions">
- <option name="mpls" help="MPLS information">
- <option name="ldp" help="Label Distribution Protocol">
- <option name="discovery" arg="type" help="Discovery messages">
- <option name="hello" help="Discovery hello message">
- <select options="dir" arg="dir" function="ldp_vty_debug"/>
- </option>
- </option>
- <option name="errors" arg="type" help="Errors" function="ldp_vty_debug"/>
- <option name="event" arg="type" help="LDP event information" function="ldp_vty_debug"/>
- <option name="messages" arg="type" help="Messages">
- <option name="recv" arg="dir" help="Received messages, excluding periodic Keep Alives" function="ldp_vty_debug">
- <option name="all" arg="all" help="Received messages, including periodic Keep Alives" function="ldp_vty_debug"/>
- </option>
- <option name="sent" arg="dir" help="Sent messages, excluding periodic Keep Alives" function="ldp_vty_debug">
- <option name="all" arg="all" help="Sent messages, including periodic Keep Alives" function="ldp_vty_debug"/>
- </option>
- </option>
- <option name="zebra" arg="type" help="LDP zebra information" function="ldp_vty_debug"/>
- </option>
- </option>
- </option>
- </subtree>
- <tree name="ldp_debug">
- <include subtree="__ldp_debug"/>
- <option name="no" arg="no" help="Negate a command or set its defaults">
- <include subtree="__ldp_debug"/>
- </option>
- </tree>
-
- <!-- nodes -->
- <node name="CONFIG">
- <include tree="global"/>
- <include tree="ldp_debug"/>
- </node>
- <node install="1" install_default="1" config_write="ldp_config_write" name="LDP">
- <include tree="ldp_node"/>
- </node>
- <node install="1" install_default="1" config_write="NULL" name="LDP_IPV4">
- <include tree="ldp_ipv4_node"/>
- </node>
- <node install="1" install_default="1" config_write="NULL" name="LDP_IPV6">
- <include tree="ldp_ipv6_node"/>
- </node>
- <node install="1" install_default="1" config_write="NULL" name="LDP_IPV4_IFACE">
- <include tree="ldp_ipv4_iface_node"/>
- </node>
- <node install="1" install_default="1" config_write="NULL" name="LDP_IPV6_IFACE">
- <include tree="ldp_ipv6_iface_node"/>
- </node>
- <node install="1" install_default="1" config_write="ldp_l2vpn_config_write" name="LDP_L2VPN">
- <include tree="ldp_l2vpn"/>
- </node>
- <node install="1" install_default="1" config_write="NULL" name="LDP_PSEUDOWIRE">
- <include tree="ldp_pseudowire"/>
- </node>
- <node install="1" config_write="ldp_debug_config_write" name="LDP_DEBUG"/>
- <node name="ENABLE">
- <include tree="ldp_debug"/>
- </node>
- <node name="VIEW">
- <include tree="ldp_exec"/>
- </node>
-</file>
diff --git a/ldpd/ldp_vty_cmds.c b/ldpd/ldp_vty_cmds.c
new file mode 100644
index 0000000000..9f737fa1b2
--- /dev/null
+++ b/ldpd/ldp_vty_cmds.c
@@ -0,0 +1,1133 @@
+/*
+ * Copyright (C) 2016 by Open Source Routing.
+ *
+ * This file is part of GNU Zebra.
+ *
+ * GNU Zebra is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * GNU Zebra is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <zebra.h>
+
+#include "command.h"
+#include "vty.h"
+#include "ldpd/ldp_vty.h"
+
+DEFUN_NOSH(ldp_mpls_ldp,
+ ldp_mpls_ldp_cmd,
+ "[no] mpls ldp",
+ "Negate a command or set its defaults\n"
+ "Global MPLS configuration subcommands\n"
+ "Label Distribution Protocol\n")
+{
+ int idx = 0;
+ int negate = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ return (ldp_vty_mpls_ldp(vty, negate));
+}
+
+DEFUN_NOSH(ldp_l2vpn,
+ ldp_l2vpn_cmd,
+ "[no] l2vpn WORD type vpls",
+ "Negate a command or set its defaults\n"
+ "Configure l2vpn commands\n"
+ "L2VPN name\n"
+ "L2VPN type\n"
+ "Virtual Private LAN Service\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *name;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "WORD", &idx);
+ name = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn(vty, negate, name));
+}
+
+DEFUN_NOSH(ldp_address_family,
+ ldp_address_family_cmd,
+ "[no] address-family <ipv4|ipv6>",
+ "Negate a command or set its defaults\n"
+ "Configure Address Family and its parameters\n"
+ "IPv4\n"
+ "IPv6\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *af;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "address-family", &idx);
+ af = argv[idx + 1]->text;
+
+ return (ldp_vty_address_family(vty, negate, af));
+}
+
+DEFUN (ldp_discovery_holdtime,
+ ldp_discovery_holdtime_cmd,
+ "[no] discovery <hello|targeted-hello> holdtime (1-65535)",
+ "Negate a command or set its defaults\n"
+ "Configure discovery parameters\n"
+ "LDP Link Hellos\n"
+ "LDP Targeted Hellos\n"
+ "Hello holdtime\n"
+ "Time (seconds) - 65535 implies infinite\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *hello_type;
+ const char *holdtime;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "discovery", &idx);
+ hello_type = argv[idx + 1]->text;
+ argv_find(argv, argc, "(1-65535)", &idx);
+ holdtime = argv[idx]->arg;
+
+ return (ldp_vty_disc_holdtime(vty, negate, hello_type, holdtime));
+}
+
+DEFUN (ldp_discovery_interval,
+ ldp_discovery_interval_cmd,
+ "[no] discovery <hello|targeted-hello> interval (1-65535)",
+ "Negate a command or set its defaults\n"
+ "Configure discovery parameters\n"
+ "LDP Link Hellos\n"
+ "LDP Targeted Hellos\n"
+ "Hello interval\n"
+ "Time (seconds)\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *hello_type;
+ const char *interval;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "discovery", &idx);
+ hello_type = argv[idx + 1]->text;
+ argv_find(argv, argc, "(1-65535)", &idx);
+ interval = argv[idx]->arg;
+
+ return (ldp_vty_disc_interval(vty, negate, hello_type, interval));
+}
+
+DEFUN (ldp_dual_stack_transport_connection_prefer_ipv4,
+ ldp_dual_stack_transport_connection_prefer_ipv4_cmd,
+ "[no] dual-stack transport-connection prefer ipv4",
+ "Negate a command or set its defaults\n"
+ "Configure dual stack parameters\n"
+ "Configure TCP transport parameters\n"
+ "Configure prefered address family for TCP transport connection with neighbor\n"
+ "IPv4\n")
+{
+ int idx = 0;
+ int negate = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ return (ldp_vty_trans_pref_ipv4(vty, negate));
+}
+
+DEFUN (ldp_dual_stack_cisco_interop,
+ ldp_dual_stack_cisco_interop_cmd,
+ "[no] dual-stack cisco-interop",
+ "Negate a command or set its defaults\n"
+ "Configure dual stack parameters\n"
+ "Use Cisco non-compliant format to send and interpret the Dual-Stack capability TLV\n")
+{
+ int idx = 0;
+ int negate = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ return (ldp_vty_ds_cisco_interop(vty, negate));
+}
+
+DEFUN (ldp_neighbor_password,
+ ldp_neighbor_password_cmd,
+ "[no] neighbor A.B.C.D password WORD",
+ "Negate a command or set its defaults\n"
+ "Configure neighbor parameters\n"
+ "LDP Id of neighbor\n"
+ "Configure password for MD5 authentication\n"
+ "The password\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *neighbor;
+ const char *password;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ neighbor = argv[idx]->arg;
+ argv_find(argv, argc, "WORD", &idx);
+ password = argv[idx]->arg;
+
+ return (ldp_vty_neighbor_password(vty, negate, neighbor, password));
+}
+
+DEFUN (ldp_neighbor_session_holdtime,
+ ldp_neighbor_session_holdtime_cmd,
+ "[no] neighbor A.B.C.D session holdtime (15-65535)",
+ "Negate a command or set its defaults\n"
+ "Configure neighbor parameters\n"
+ "LDP Id of neighbor\n"
+ "Configure session parameters\n"
+ "Configure session holdtime\n"
+ "Time (seconds)\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *neighbor;
+ const char *holdtime;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ neighbor = argv[idx]->arg;
+ argv_find(argv, argc, "(15-65535)", &idx);
+ holdtime = argv[idx]->arg;
+
+ return (ldp_vty_nbr_session_holdtime(vty, negate, neighbor, holdtime));
+}
+
+DEFUN (ldp_neighbor_ttl_security,
+ ldp_neighbor_ttl_security_cmd,
+ "[no] neighbor A.B.C.D ttl-security <disable|hops (1-254)>",
+ "Negate a command or set its defaults\n"
+ "Configure neighbor parameters\n"
+ "LDP Id of neighbor\n"
+ "LDP ttl security check\n"
+ "Disable ttl security\n"
+ "IP hops\n"
+ "maximum number of hops\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *neighbor;
+ const char *hops = NULL;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ neighbor = argv[idx]->arg;
+ if (argv_find(argv, argc, "(1-254)", &idx))
+ hops = argv[idx]->arg;
+
+ return (ldp_vty_neighbor_ttl_security(vty, negate, neighbor, hops));
+}
+
+DEFUN (ldp_router_id,
+ ldp_router_id_cmd,
+ "[no] router-id A.B.C.D",
+ "Negate a command or set its defaults\n"
+ "Configure router Id\n"
+ "LSR Id (in form of an IPv4 address)\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ address = argv[idx]->arg;
+
+ return (ldp_vty_router_id(vty, negate, address));
+}
+
+DEFUN (ldp_discovery_targeted_hello_accept,
+ ldp_discovery_targeted_hello_accept_cmd,
+ "[no] discovery targeted-hello accept [from <(1-199)|(1300-2699)|WORD>]",
+ "Negate a command or set its defaults\n"
+ "Configure discovery parameters\n"
+ "LDP Targeted Hellos\n"
+ "Accept and respond to targeted hellos\n"
+ "Access list to specify acceptable targeted hello source\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *from_acl = NULL;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ if (argv_find(argv, argc, "from", &idx))
+ from_acl = argv[idx + 1]->arg;
+
+ return (ldp_vty_targeted_hello_accept(vty, negate, from_acl));
+}
+
+DEFUN (ldp_discovery_transport_address_ipv4,
+ ldp_discovery_transport_address_ipv4_cmd,
+ "[no] discovery transport-address A.B.C.D",
+ "Negate a command or set its defaults\n"
+ "Configure discovery parameters\n"
+ "Specify transport address for TCP connection\n"
+ "IP address to be used as transport address\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ address = argv[idx]->arg;
+
+ return (ldp_vty_trans_addr(vty, negate, address));
+}
+
+DEFUN (ldp_discovery_transport_address_ipv6,
+ ldp_discovery_transport_address_ipv6_cmd,
+ "[no] discovery transport-address X:X::X:X",
+ "Negate a command or set its defaults\n"
+ "Configure discovery parameters\n"
+ "Specify transport address for TCP connection\n"
+ "IPv6 address to be used as transport address\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "X:X::X:X", &idx);
+ address = argv[idx]->arg;
+
+ return (ldp_vty_trans_addr(vty, negate, address));
+}
+
+DEFUN (ldp_label_local_advertise,
+ ldp_label_local_advertise_cmd,
+ "[no] label local advertise [{to <(1-199)|(1300-2699)|WORD>|for <(1-199)|(1300-2699)|WORD>}]",
+ "Negate a command or set its defaults\n"
+ "Configure label control and policies\n"
+ "Configure local label control and policies\n"
+ "Configure outbound label advertisement control\n"
+ "IP Access-list specifying controls on LDP Peers\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n"
+ "IP access-list for destination prefixes\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *to_acl = NULL;
+ const char *for_acl = NULL;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ /* arguments within curly braces may be provided in any order */
+ if (argv_find(argv, argc, "to", &idx))
+ to_acl = argv[idx + 1]->arg;
+ idx = 0;
+ if (argv_find(argv, argc, "for", &idx))
+ for_acl = argv[idx + 1]->arg;
+
+ return (ldp_vty_label_advertise(vty, negate, to_acl, for_acl));
+}
+
+DEFUN (ldp_label_local_advertise_explicit_null,
+ ldp_label_local_advertise_explicit_null_cmd,
+ "[no] label local advertise explicit-null [for <(1-199)|(1300-2699)|WORD>]",
+ "Negate a command or set its defaults\n"
+ "Configure label control and policies\n"
+ "Configure local label control and policies\n"
+ "Configure outbound label advertisement control\n"
+ "Configure explicit-null advertisement\n"
+ "IP access-list for destination prefixes\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *for_acl = NULL;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ if (argv_find(argv, argc, "for", &idx))
+ for_acl = argv[idx + 1]->arg;
+
+ return (ldp_vty_label_expnull(vty, negate, for_acl));
+}
+
+DEFUN (ldp_label_local_allocate,
+ ldp_label_local_allocate_cmd,
+ "[no] label local allocate <host-routes|for <(1-199)|(1300-2699)|WORD>>",
+ "Negate a command or set its defaults\n"
+ "Configure label control and policies\n"
+ "Configure local label control and policies\n"
+ "Configure label allocation control\n"
+ "allocate local label for host routes only\n"
+ "IP access-list\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ int host_routes = 0;
+ const char *for_acl = NULL;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ /* arguments within curly braces may be provided in any order */
+ if (argv_find(argv, argc, "host-routes", &idx))
+ host_routes = 1;
+ idx = 0;
+ if (argv_find(argv, argc, "for", &idx))
+ for_acl = argv[idx + 1]->arg;
+
+ return (ldp_vty_label_allocate(vty, negate, host_routes, for_acl));
+}
+
+DEFUN (ldp_label_remote_accept,
+ ldp_label_remote_accept_cmd,
+ "[no] label remote accept {from <(1-199)|(1300-2699)|WORD>|for <(1-199)|(1300-2699)|WORD>}",
+ "Negate a command or set its defaults\n"
+ "Configure label control and policies\n"
+ "Configure remote/peer label control and policies\n"
+ "Configure inbound label acceptance control\n"
+ "Neighbor from whom to accept label advertisement\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n"
+ "IP access-list for destination prefixes\n"
+ "IP access-list number\n"
+ "IP access-list number (expanded range)\n"
+ "IP access-list name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *from_acl = NULL;
+ const char *for_acl = NULL;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ /* arguments within curly braces may be provided in any order */
+ if (argv_find(argv, argc, "from", &idx))
+ from_acl = argv[idx + 1]->arg;
+ idx = 0;
+ if (argv_find(argv, argc, "for", &idx))
+ for_acl = argv[idx + 1]->arg;
+
+ return (ldp_vty_label_accept(vty, negate, from_acl, for_acl));
+}
+
+DEFUN (ldp_ttl_security_disable,
+ ldp_ttl_security_disable_cmd,
+ "[no] ttl-security disable",
+ "Negate a command or set its defaults\n"
+ "LDP ttl security check\n"
+ "Disable ttl security\n")
+{
+ int idx = 0;
+ int negate = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ return (ldp_vty_ttl_security(vty, negate));
+}
+
+DEFUN (ldp_session_holdtime,
+ ldp_session_holdtime_cmd,
+ "[no] session holdtime (15-65535)",
+ "Negate a command or set its defaults\n"
+ "Configure session parameters\n"
+ "Configure session holdtime\n"
+ "Time (seconds)\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *holdtime;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "(15-65535)", &idx);
+ holdtime = argv[idx]->arg;
+
+ return (ldp_vty_af_session_holdtime(vty, negate, holdtime));
+}
+
+DEFUN_NOSH(ldp_interface,
+ ldp_interface_cmd,
+ "[no] interface IFNAME",
+ "Negate a command or set its defaults\n"
+ "Enable LDP on an interface and enter interface submode\n"
+ "Interface's name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *ifname;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "IFNAME", &idx);
+ ifname = argv[idx]->arg;
+
+ return (ldp_vty_interface(vty, negate, ifname));
+}
+
+DEFUN (ldp_neighbor_ipv4_targeted,
+ ldp_neighbor_ipv4_targeted_cmd,
+ "[no] neighbor A.B.C.D targeted",
+ "Negate a command or set its defaults\n"
+ "Configure neighbor parameters\n"
+ "IP address of neighbor\n"
+ "Establish targeted session\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ address = argv[idx]->arg;
+
+ return (ldp_vty_neighbor_targeted(vty, negate, address));
+}
+
+DEFUN (ldp_neighbor_ipv6_targeted,
+ ldp_neighbor_ipv6_targeted_cmd,
+ "[no] neighbor X:X::X:X targeted",
+ "Negate a command or set its defaults\n"
+ "Configure neighbor parameters\n"
+ "IPv6 address of neighbor\n"
+ "Establish targeted session\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "X:X::X:X", &idx);
+ address = argv[idx]->arg;
+
+ return (ldp_vty_neighbor_targeted(vty, negate, address));
+}
+
+DEFUN (ldp_bridge,
+ ldp_bridge_cmd,
+ "[no] bridge IFNAME",
+ "Negate a command or set its defaults\n"
+ "Bridge interface\n"
+ "Interface's name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *ifname;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "IFNAME", &idx);
+ ifname = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn_bridge(vty, negate, ifname));
+}
+
+DEFUN (ldp_mtu,
+ ldp_mtu_cmd,
+ "[no] mtu (1500-9180)",
+ "Negate a command or set its defaults\n"
+ "Set Maximum Transmission Unit\n"
+ "Maximum Transmission Unit value\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *mtu;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "(1500-9180)", &idx);
+ mtu = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn_mtu(vty, negate, mtu));
+}
+
+DEFUN (ldp_member_interface,
+ ldp_member_interface_cmd,
+ "[no] member interface IFNAME",
+ "Negate a command or set its defaults\n"
+ "L2VPN member configuration\n"
+ "Local interface\n"
+ "Interface's name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *ifname;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "IFNAME", &idx);
+ ifname = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn_interface(vty, negate, ifname));
+}
+
+DEFUN_NOSH(ldp_member_pseudowire,
+ ldp_member_pseudowire_cmd,
+ "[no] member pseudowire IFNAME",
+ "Negate a command or set its defaults\n"
+ "L2VPN member configuration\n"
+ "Pseudowire interface\n"
+ "Interface's name\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *ifname;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "IFNAME", &idx);
+ ifname = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn_pseudowire(vty, negate, ifname));
+}
+
+DEFUN (ldp_vc_type,
+ ldp_vc_type_cmd,
+ "[no] vc type <ethernet|ethernet-tagged>",
+ "Negate a command or set its defaults\n"
+ "Virtual Circuit options\n"
+ "Virtual Circuit type to use\n"
+ "Ethernet (type 5)\n"
+ "Ethernet-tagged (type 4)\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *vc_type;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "type", &idx);
+ vc_type = argv[idx + 1]->text;
+
+ return (ldp_vty_l2vpn_pwtype(vty, negate, vc_type));
+}
+
+DEFUN (ldp_control_word,
+ ldp_control_word_cmd,
+ "[no] control-word <exclude|include>",
+ "Negate a command or set its defaults\n"
+ "Control-word options\n"
+ "Exclude control-word in pseudowire packets\n"
+ "Include control-word in pseudowire packets\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *preference;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "control-word", &idx);
+ preference = argv[idx + 1]->text;
+
+ return (ldp_vty_l2vpn_pw_cword(vty, negate, preference));
+}
+
+DEFUN (ldp_neighbor_address,
+ ldp_neighbor_address_cmd,
+ "[no] neighbor address <A.B.C.D|X:X::X:X>",
+ "Negate a command or set its defaults\n"
+ "Remote endpoint configuration\n"
+ "Specify the IPv4 or IPv6 address of the remote endpoint\n"
+ "IPv4 address\n"
+ "IPv6 address\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "address", &idx);
+ address = argv[idx + 1]->arg;
+
+ return (ldp_vty_l2vpn_pw_nbr_addr(vty, negate, address));
+}
+
+DEFUN (ldp_neighbor_lsr_id,
+ ldp_neighbor_lsr_id_cmd,
+ "[no] neighbor lsr-id A.B.C.D",
+ "Negate a command or set its defaults\n"
+ "Remote endpoint configuration\n"
+ "Specify the LSR-ID of the remote endpoint\n"
+ "IPv4 address\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *address;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "A.B.C.D", &idx);
+ address = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn_pw_nbr_id(vty, negate, address));
+}
+
+DEFUN (ldp_pw_id,
+ ldp_pw_id_cmd,
+ "[no] pw-id (1-4294967295)",
+ "Negate a command or set its defaults\n"
+ "Set the Virtual Circuit ID\n"
+ "Virtual Circuit ID value\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *pwid;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "(1-4294967295)", &idx);
+ pwid = argv[idx]->arg;
+
+ return (ldp_vty_l2vpn_pw_pwid(vty, negate, pwid));
+}
+
+DEFUN (ldp_pw_status_disable,
+ ldp_pw_status_disable_cmd,
+ "[no] pw-status disable",
+ "Negate a command or set its defaults\n"
+ "Configure PW status\n"
+ "Disable PW status\n")
+{
+ int idx = 0;
+ int negate = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+
+ return (ldp_vty_l2vpn_pw_pwstatus(vty, negate));
+}
+
+DEFUN (ldp_clear_mpls_ldp_neighbor,
+ ldp_clear_mpls_ldp_neighbor_cmd,
+ "clear mpls ldp neighbor [<A.B.C.D|X:X::X:X>]",
+ "Reset functions\n"
+ "Reset MPLS statistical information\n"
+ "Clear LDP state\n"
+ "Clear LDP neighbor sessions\n"
+ "IPv4 address\n"
+ "IPv6 address\n")
+{
+ int idx = 0;
+ const char *address = NULL;
+
+ if (argv_find(argv, argc, "neighbor", &idx))
+ address = argv[idx + 1]->arg;
+
+ return (ldp_vty_clear_nbr(vty, address));
+}
+
+DEFUN (ldp_debug_mpls_ldp_discovery_hello,
+ ldp_debug_mpls_ldp_discovery_hello_cmd,
+ "[no] debug mpls ldp discovery hello <recv|sent>",
+ "Negate a command or set its defaults\n"
+ "Debugging functions\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Discovery messages\n"
+ "Discovery hello message\n"
+ "Received messages\n"
+ "Sent messages\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *dir;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "hello", &idx);
+ dir = argv[idx + 1]->text;
+
+ return (ldp_vty_debug(vty, negate, "discovery", dir, 0));
+}
+
+DEFUN (ldp_debug_mpls_ldp_type,
+ ldp_debug_mpls_ldp_type_cmd,
+ "[no] debug mpls ldp <errors|event|zebra>",
+ "Negate a command or set its defaults\n"
+ "Debugging functions\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Errors\n"
+ "LDP event information\n"
+ "LDP zebra information\n")
+{
+ int idx = 0;
+ int negate = 0;
+ const char *type;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ argv_find(argv, argc, "ldp", &idx);
+ type = argv[idx + 1]->text;
+
+ return (ldp_vty_debug(vty, negate, type, NULL, 0));
+}
+
+DEFUN (ldp_debug_mpls_ldp_messages_recv,
+ ldp_debug_mpls_ldp_messages_recv_cmd,
+ "[no] debug mpls ldp messages recv [all]",
+ "Negate a command or set its defaults\n"
+ "Debugging functions\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Messages\n"
+ "Received messages, excluding periodic Keep Alives\n"
+ "Received messages, including periodic Keep Alives\n")
+{
+ int idx = 0;
+ int negate = 0;
+ int all = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ if (argv_find(argv, argc, "all", &idx))
+ all = 1;
+
+ return (ldp_vty_debug(vty, negate, "messages", "recv", all));
+}
+
+DEFUN (ldp_debug_mpls_ldp_messages_sent,
+ ldp_debug_mpls_ldp_messages_sent_cmd,
+ "[no] debug mpls ldp messages sent [all]",
+ "Negate a command or set its defaults\n"
+ "Debugging functions\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Messages\n"
+ "Sent messages, excluding periodic Keep Alives\n"
+ "Sent messages, including periodic Keep Alives\n")
+{
+ int idx = 0;
+ int negate = 0;
+ int all = 0;
+
+ if (argv_find(argv, argc, "no", &idx))
+ negate = 1;
+ if (argv_find(argv, argc, "all", &idx))
+ all = 1;
+
+ return (ldp_vty_debug(vty, negate, "messages", "sent", all));
+}
+
+DEFUN (ldp_show_mpls_ldp_binding,
+ ldp_show_mpls_ldp_binding_cmd,
+ "show mpls ldp [<ipv4|ipv6>] binding [detail] [json]",
+ "Show running system information\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "IPv4 Address Family\n"
+ "IPv6 Address Family\n"
+ "Label Information Base (LIB) information\n"
+ "Show detailed information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ const char *af = NULL;
+ int detail = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "ipv4", &idx) ||
+ argv_find(argv, argc, "ipv6", &idx))
+ af = argv[idx]->text;
+ if (argv_find(argv, argc, "detail", &idx))
+ detail = 1;
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_binding(vty, af, detail, json));
+}
+
+DEFUN (ldp_show_mpls_ldp_discovery,
+ ldp_show_mpls_ldp_discovery_cmd,
+ "show mpls ldp [<ipv4|ipv6>] discovery [detail] [json]",
+ "Show running system information\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "IPv4 Address Family\n"
+ "IPv6 Address Family\n"
+ "Discovery Hello Information\n"
+ "Show detailed information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ const char *af = NULL;
+ int detail = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "ipv4", &idx) ||
+ argv_find(argv, argc, "ipv6", &idx))
+ af = argv[idx]->text;
+ if (argv_find(argv, argc, "detail", &idx))
+ detail = 1;
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_discovery(vty, af, detail, json));
+}
+
+DEFUN (ldp_show_mpls_ldp_interface,
+ ldp_show_mpls_ldp_interface_cmd,
+ "show mpls ldp [<ipv4|ipv6>] interface [json]",
+ "Show running system information\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "IPv4 Address Family\n"
+ "IPv6 Address Family\n"
+ "interface information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ const char *af = NULL;
+ int json = 0;
+
+ if (argv_find(argv, argc, "ipv4", &idx) ||
+ argv_find(argv, argc, "ipv6", &idx))
+ af = argv[idx]->text;
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_interface(vty, af, json));
+}
+
+DEFUN (ldp_show_mpls_ldp_capabilities,
+ ldp_show_mpls_ldp_capabilities_cmd,
+ "show mpls ldp capabilities [json]",
+ "Show running system information\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Display LDP Capabilities information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_capabilities(vty, json));
+}
+
+DEFUN (ldp_show_mpls_ldp_neighbor,
+ ldp_show_mpls_ldp_neighbor_cmd,
+ "show mpls ldp neighbor [detail] [json]",
+ "Show running system information\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Neighbor information\n"
+ "Show detailed information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ int detail = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "detail", &idx))
+ detail = 1;
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_neighbor(vty, 0, detail, json));
+}
+
+DEFUN (ldp_show_mpls_ldp_neighbor_capabilities,
+ ldp_show_mpls_ldp_neighbor_capabilities_cmd,
+ "show mpls ldp neighbor capabilities [json]",
+ "Show running system information\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n"
+ "Neighbor information\n"
+ "Display neighbor capability information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_neighbor(vty, 1, 0, json));
+}
+
+DEFUN (ldp_show_l2vpn_atom_binding,
+ ldp_show_l2vpn_atom_binding_cmd,
+ "show l2vpn atom binding [json]",
+ "Show running system information\n"
+ "Show information about Layer2 VPN\n"
+ "Show Any Transport over MPLS information\n"
+ "Show AToM label binding information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_atom_binding(vty, json));
+}
+
+DEFUN (ldp_show_l2vpn_atom_vc,
+ ldp_show_l2vpn_atom_vc_cmd,
+ "show l2vpn atom vc [json]",
+ "Show running system information\n"
+ "Show information about Layer2 VPN\n"
+ "Show Any Transport over MPLS information\n"
+ "Show AToM virtual circuit information\n"
+ "JavaScript Object Notation\n")
+{
+ int idx = 0;
+ int json = 0;
+
+ if (argv_find(argv, argc, "json", &idx))
+ json = 1;
+
+ return (ldp_vty_show_atom_vc(vty, json));
+}
+
+DEFUN (ldp_show_debugging_mpls_ldp,
+ ldp_show_debugging_mpls_ldp_cmd,
+ "show debugging mpls ldp",
+ "Show running system information\n"
+ "Debugging functions\n"
+ "MPLS information\n"
+ "Label Distribution Protocol\n")
+{
+ return (ldp_vty_show_debugging(vty));
+}
+
+void
+ldp_vty_init (void)
+{
+ install_node(&ldp_node, ldp_config_write);
+ install_node(&ldp_ipv4_node, NULL);
+ install_node(&ldp_ipv6_node, NULL);
+ install_node(&ldp_ipv4_iface_node, NULL);
+ install_node(&ldp_ipv6_iface_node, NULL);
+ install_node(&ldp_l2vpn_node, ldp_l2vpn_config_write);
+ install_node(&ldp_pseudowire_node, NULL);
+ install_node(&ldp_debug_node, ldp_debug_config_write);
+ install_default(LDP_NODE);
+ install_default(LDP_IPV4_NODE);
+ install_default(LDP_IPV6_NODE);
+ install_default(LDP_IPV4_IFACE_NODE);
+ install_default(LDP_IPV6_IFACE_NODE);
+ install_default(LDP_L2VPN_NODE);
+ install_default(LDP_PSEUDOWIRE_NODE);
+
+ install_element(CONFIG_NODE, &ldp_mpls_ldp_cmd);
+ install_element(CONFIG_NODE, &ldp_l2vpn_cmd);
+ install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
+ install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_type_cmd);
+ install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
+ install_element(CONFIG_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
+
+ install_element(LDP_NODE, &ldp_address_family_cmd);
+ install_element(LDP_NODE, &ldp_discovery_holdtime_cmd);
+ install_element(LDP_NODE, &ldp_discovery_interval_cmd);
+ install_element(LDP_NODE, &ldp_dual_stack_transport_connection_prefer_ipv4_cmd);
+ install_element(LDP_NODE, &ldp_dual_stack_cisco_interop_cmd);
+ install_element(LDP_NODE, &ldp_neighbor_password_cmd);
+ install_element(LDP_NODE, &ldp_neighbor_session_holdtime_cmd);
+ install_element(LDP_NODE, &ldp_neighbor_ttl_security_cmd);
+ install_element(LDP_NODE, &ldp_router_id_cmd);
+
+ install_element(LDP_IPV4_NODE, &ldp_discovery_holdtime_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_discovery_interval_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_hello_accept_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_discovery_transport_address_ipv4_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_label_local_advertise_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_label_local_advertise_explicit_null_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_label_local_allocate_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_label_remote_accept_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_ttl_security_disable_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_interface_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_session_holdtime_cmd);
+ install_element(LDP_IPV4_NODE, &ldp_neighbor_ipv4_targeted_cmd);
+
+ install_element(LDP_IPV6_NODE, &ldp_discovery_holdtime_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_discovery_interval_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_discovery_targeted_hello_accept_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_discovery_transport_address_ipv6_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_label_local_advertise_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_label_local_advertise_explicit_null_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_label_local_allocate_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_label_remote_accept_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_ttl_security_disable_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_interface_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_session_holdtime_cmd);
+ install_element(LDP_IPV6_NODE, &ldp_neighbor_ipv6_targeted_cmd);
+
+ install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_holdtime_cmd);
+ install_element(LDP_IPV4_IFACE_NODE, &ldp_discovery_interval_cmd);
+
+ install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_holdtime_cmd);
+ install_element(LDP_IPV6_IFACE_NODE, &ldp_discovery_interval_cmd);
+
+ install_element(LDP_L2VPN_NODE, &ldp_bridge_cmd);
+ install_element(LDP_L2VPN_NODE, &ldp_mtu_cmd);
+ install_element(LDP_L2VPN_NODE, &ldp_member_interface_cmd);
+ install_element(LDP_L2VPN_NODE, &ldp_member_pseudowire_cmd);
+ install_element(LDP_L2VPN_NODE, &ldp_vc_type_cmd);
+
+ install_element(LDP_PSEUDOWIRE_NODE, &ldp_control_word_cmd);
+ install_element(LDP_PSEUDOWIRE_NODE, &ldp_neighbor_address_cmd);
+ install_element(LDP_PSEUDOWIRE_NODE, &ldp_neighbor_lsr_id_cmd);
+ install_element(LDP_PSEUDOWIRE_NODE, &ldp_pw_id_cmd);
+ install_element(LDP_PSEUDOWIRE_NODE, &ldp_pw_status_disable_cmd);
+
+ install_element(ENABLE_NODE, &ldp_clear_mpls_ldp_neighbor_cmd);
+ install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_discovery_hello_cmd);
+ install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_type_cmd);
+ install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_messages_recv_cmd);
+ install_element(ENABLE_NODE, &ldp_debug_mpls_ldp_messages_sent_cmd);
+
+ install_element(VIEW_NODE, &ldp_show_mpls_ldp_binding_cmd);
+ install_element(VIEW_NODE, &ldp_show_mpls_ldp_discovery_cmd);
+ install_element(VIEW_NODE, &ldp_show_mpls_ldp_interface_cmd);
+ install_element(VIEW_NODE, &ldp_show_mpls_ldp_capabilities_cmd);
+ install_element(VIEW_NODE, &ldp_show_mpls_ldp_neighbor_cmd);
+ install_element(VIEW_NODE, &ldp_show_mpls_ldp_neighbor_capabilities_cmd);
+ install_element(VIEW_NODE, &ldp_show_l2vpn_atom_binding_cmd);
+ install_element(VIEW_NODE, &ldp_show_l2vpn_atom_vc_cmd);
+ install_element(VIEW_NODE, &ldp_show_debugging_mpls_ldp_cmd);
+}
diff --git a/ldpd/ldp_vty_conf.c b/ldpd/ldp_vty_conf.c
index 8394907142..5154371f43 100644
--- a/ldpd/ldp_vty_conf.c
+++ b/ldpd/ldp_vty_conf.c
@@ -37,8 +37,6 @@ static void ldp_af_config_write(struct vty *, int, struct ldpd_conf *,
static void ldp_l2vpn_pw_config_write(struct vty *, struct l2vpn_pw *);
static int ldp_vty_get_af(struct vty *);
static int ldp_iface_is_configured(struct ldpd_conf *, const char *);
-static int ldp_vty_nbr_session_holdtime(struct vty *, struct vty_arg *[]);
-static int ldp_vty_af_session_holdtime(struct vty *, struct vty_arg *[]);
struct cmd_node ldp_node =
{
@@ -418,12 +416,8 @@ ldp_iface_is_configured(struct ldpd_conf *xconf, const char *ifname)
}
int
-ldp_vty_mpls_ldp(struct vty *vty, struct vty_arg *args[])
+ldp_vty_mpls_ldp(struct vty *vty, int disable)
{
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
-
if (disable)
vty_conf->flags &= ~F_LDPD_ENABLED;
else {
@@ -437,15 +431,10 @@ ldp_vty_mpls_ldp(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_address_family(struct vty *vty, struct vty_arg *args[])
+ldp_vty_address_family(struct vty *vty, int disable, const char *af_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *af_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- af_str = vty_get_arg_value(args, "address-family");
if (strcmp(af_str, "ipv4") == 0) {
af = AF_INET;
@@ -480,7 +469,8 @@ ldp_vty_address_family(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_disc_holdtime(struct vty *vty, struct vty_arg *args[])
+ldp_vty_disc_holdtime(struct vty *vty, int disable, const char *hello_type_str,
+ const char *seconds_str)
{
struct ldpd_af_conf *af_conf;
struct iface *iface;
@@ -489,13 +479,6 @@ ldp_vty_disc_holdtime(struct vty *vty, struct vty_arg *args[])
char *ep;
long int secs;
enum hello_type hello_type;
- const char *seconds_str;
- const char *hello_type_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- seconds_str = vty_get_arg_value(args, "seconds");
- hello_type_str = vty_get_arg_value(args, "hello_type");
secs = strtol(seconds_str, &ep, 10);
if (*ep != '\0' || secs < MIN_HOLDTIME || secs > MAX_HOLDTIME) {
@@ -580,7 +563,8 @@ ldp_vty_disc_holdtime(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_disc_interval(struct vty *vty, struct vty_arg *args[])
+ldp_vty_disc_interval(struct vty *vty, int disable, const char *hello_type_str,
+ const char *seconds_str)
{
struct ldpd_af_conf *af_conf;
struct iface *iface;
@@ -589,13 +573,6 @@ ldp_vty_disc_interval(struct vty *vty, struct vty_arg *args[])
char *ep;
long int secs;
enum hello_type hello_type;
- const char *seconds_str;
- const char *hello_type_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- seconds_str = vty_get_arg_value(args, "seconds");
- hello_type_str = vty_get_arg_value(args, "hello_type");
secs = strtol(seconds_str, &ep, 10);
if (*ep != '\0' || secs < MIN_HELLO_INTERVAL ||
@@ -681,15 +658,11 @@ ldp_vty_disc_interval(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_targeted_hello_accept(struct vty *vty, struct vty_arg *args[])
+ldp_vty_targeted_hello_accept(struct vty *vty, int disable,
+ const char *acl_from_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *acl_from_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- acl_from_str = vty_get_arg_value(args, "from_acl");
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -711,20 +684,14 @@ ldp_vty_targeted_hello_accept(struct vty *vty, struct vty_arg *args[])
return (CMD_SUCCESS);
}
-static int
-ldp_vty_nbr_session_holdtime(struct vty *vty, struct vty_arg *args[])
+int
+ldp_vty_nbr_session_holdtime(struct vty *vty, int disable,
+ const char *lsr_id_str, const char *seconds_str)
{
char *ep;
long int secs;
struct in_addr lsr_id;
struct nbr_params *nbrp;
- const char *seconds_str;
- const char *lsr_id_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- seconds_str = vty_get_arg_value(args, "seconds");
- lsr_id_str = vty_get_arg_value(args, "lsr_id");
if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
bad_addr_v4(lsr_id)) {
@@ -763,18 +730,14 @@ ldp_vty_nbr_session_holdtime(struct vty *vty, struct vty_arg *args[])
return (CMD_SUCCESS);
}
-static int
-ldp_vty_af_session_holdtime(struct vty *vty, struct vty_arg *args[])
+int
+ldp_vty_af_session_holdtime(struct vty *vty, int disable,
+ const char *seconds_str)
{
struct ldpd_af_conf *af_conf;
int af;
char *ep;
long int secs;
- const char *seconds_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- seconds_str = vty_get_arg_value(args, "seconds");
secs = strtol(seconds_str, &ep, 10);
if (*ep != '\0' || secs < MIN_KEEPALIVE || secs > MAX_KEEPALIVE) {
@@ -796,30 +759,11 @@ ldp_vty_af_session_holdtime(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_session_holdtime(struct vty *vty, struct vty_arg *args[])
-{
- switch (vty->node) {
- case LDP_NODE:
- return (ldp_vty_nbr_session_holdtime(vty, args));
- case LDP_IPV4_NODE:
- case LDP_IPV6_NODE:
- return (ldp_vty_af_session_holdtime(vty, args));
- default:
- fatalx("ldp_vty_session_holdtime: unexpected node");
- }
-}
-
-int
-ldp_vty_interface(struct vty *vty, struct vty_arg *args[])
+ldp_vty_interface(struct vty *vty, int disable, const char *ifname)
{
int af;
struct iface *iface;
struct iface_af *ia;
- const char *ifname;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- ifname = vty_get_arg_value(args, "ifname");
af = ldp_vty_get_af(vty);
iface = if_lookup_name(vty_conf, ifname);
@@ -878,15 +822,10 @@ ldp_vty_interface(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_trans_addr(struct vty *vty, struct vty_arg *args[])
+ldp_vty_trans_addr(struct vty *vty, int disable, const char *addr_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *addr_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- addr_str = vty_get_arg_value(args, "addr");
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -907,16 +846,11 @@ ldp_vty_trans_addr(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_neighbor_targeted(struct vty *vty, struct vty_arg *args[])
+ldp_vty_neighbor_targeted(struct vty *vty, int disable, const char *addr_str)
{
int af;
union ldpd_addr addr;
struct tnbr *tnbr;
- const char *addr_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- addr_str = vty_get_arg_value(args, "addr");
af = ldp_vty_get_af(vty);
@@ -959,17 +893,11 @@ ldp_vty_neighbor_targeted(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_label_advertise(struct vty *vty, struct vty_arg *args[])
+ldp_vty_label_advertise(struct vty *vty, int disable, const char *acl_to_str,
+ const char *acl_for_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *acl_to_str;
- const char *acl_for_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- acl_to_str = vty_get_arg_value(args, "to_acl");
- acl_for_str = vty_get_arg_value(args, "for_acl");
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -996,17 +924,11 @@ ldp_vty_label_advertise(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_label_allocate(struct vty *vty, struct vty_arg *args[])
+ldp_vty_label_allocate(struct vty *vty, int disable, int host_routes,
+ const char *acl_for_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *acl_for_str;
- const char *host_routes_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- acl_for_str = vty_get_arg_value(args, "for_acl");
- host_routes_str = vty_get_arg_value(args, "host-routes");
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -1014,7 +936,7 @@ ldp_vty_label_allocate(struct vty *vty, struct vty_arg *args[])
af_conf->flags &= ~F_LDPD_AF_ALLOCHOSTONLY;
af_conf->acl_label_allocate_for[0] = '\0';
if (!disable) {
- if (host_routes_str)
+ if (host_routes)
af_conf->flags |= F_LDPD_AF_ALLOCHOSTONLY;
else
strlcpy(af_conf->acl_label_allocate_for, acl_for_str,
@@ -1027,15 +949,10 @@ ldp_vty_label_allocate(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_label_expnull(struct vty *vty, struct vty_arg *args[])
+ldp_vty_label_expnull(struct vty *vty, int disable, const char *acl_for_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *acl_for_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- acl_for_str = vty_get_arg_value(args, "for_acl");
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -1058,17 +975,11 @@ ldp_vty_label_expnull(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_label_accept(struct vty *vty, struct vty_arg *args[])
+ldp_vty_label_accept(struct vty *vty, int disable, const char *acl_from_str,
+ const char *acl_for_str)
{
struct ldpd_af_conf *af_conf;
int af;
- const char *acl_from_str;
- const char *acl_for_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- acl_from_str = vty_get_arg_value(args, "from_acl");
- acl_for_str = vty_get_arg_value(args, "for_acl");
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -1095,13 +1006,10 @@ ldp_vty_label_accept(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_ttl_security(struct vty *vty, struct vty_arg *args[])
+ldp_vty_ttl_security(struct vty *vty, int disable)
{
struct ldpd_af_conf *af_conf;
int af;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
af = ldp_vty_get_af(vty);
af_conf = ldp_af_conf_get(vty_conf, af);
@@ -1117,14 +1025,8 @@ ldp_vty_ttl_security(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_router_id(struct vty *vty, struct vty_arg *args[])
+ldp_vty_router_id(struct vty *vty, int disable, const char *addr_str)
{
- const char *addr_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- addr_str = vty_get_arg_value(args, "addr");
-
if (disable)
vty_conf->rtr_id.s_addr = INADDR_ANY;
else {
@@ -1141,12 +1043,8 @@ ldp_vty_router_id(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_ds_cisco_interop(struct vty *vty, struct vty_arg *args[])
+ldp_vty_ds_cisco_interop(struct vty *vty, int disable)
{
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
-
if (disable)
vty_conf->flags &= ~F_LDPD_DS_CISCO_INTEROP;
else
@@ -1158,12 +1056,8 @@ ldp_vty_ds_cisco_interop(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_trans_pref_ipv4(struct vty *vty, struct vty_arg *args[])
+ldp_vty_trans_pref_ipv4(struct vty *vty, int disable)
{
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
-
if (disable)
vty_conf->trans_pref = DUAL_STACK_LDPOV6;
else
@@ -1175,18 +1069,12 @@ ldp_vty_trans_pref_ipv4(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_neighbor_password(struct vty *vty, struct vty_arg *args[])
+ldp_vty_neighbor_password(struct vty *vty, int disable, const char *lsr_id_str,
+ const char *password_str)
{
struct in_addr lsr_id;
size_t password_len;
struct nbr_params *nbrp;
- const char *lsr_id_str;
- const char *password_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- lsr_id_str = vty_get_arg_value(args, "lsr_id");
- password_str = vty_get_arg_value(args, "password");
if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
bad_addr_v4(lsr_id)) {
@@ -1226,19 +1114,13 @@ ldp_vty_neighbor_password(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_neighbor_ttl_security(struct vty *vty, struct vty_arg *args[])
+ldp_vty_neighbor_ttl_security(struct vty *vty, int disable,
+ const char *lsr_id_str, const char *hops_str)
{
struct in_addr lsr_id;
struct nbr_params *nbrp;
long int hops = 0;
char *ep;
- const char *lsr_id_str;
- const char *hops_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- lsr_id_str = vty_get_arg_value(args, "lsr_id");
- hops_str = vty_get_arg_value(args, "hops");
if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
bad_addr_v4(lsr_id)) {
@@ -1286,16 +1168,11 @@ ldp_vty_neighbor_ttl_security(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn(struct vty *vty, int disable, const char *name_str)
{
struct l2vpn *l2vpn;
struct l2vpn_if *lif;
struct l2vpn_pw *pw;
- const char *name_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- name_str = vty_get_arg_value(args, "name");
l2vpn = l2vpn_find(vty_conf, name_str);
@@ -1336,14 +1213,9 @@ ldp_vty_l2vpn(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_bridge(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_bridge(struct vty *vty, int disable, const char *ifname)
{
VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
- const char *ifname;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- ifname = vty_get_arg_value(args, "ifname");
if (disable)
memset(l2vpn->br_ifname, 0, sizeof(l2vpn->br_ifname));
@@ -1356,16 +1228,11 @@ ldp_vty_l2vpn_bridge(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_mtu(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_mtu(struct vty *vty, int disable, const char *mtu_str)
{
VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
char *ep;
int mtu;
- const char *mtu_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- mtu_str = vty_get_arg_value(args, "mtu");
mtu = strtol(mtu_str, &ep, 10);
if (*ep != '\0' || mtu < MIN_L2VPN_MTU || mtu > MAX_L2VPN_MTU) {
@@ -1384,15 +1251,10 @@ ldp_vty_l2vpn_mtu(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pwtype(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pwtype(struct vty *vty, int disable, const char *type_str)
{
VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
int pw_type;
- const char *type_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- type_str = vty_get_arg_value(args, "type");
if (strcmp(type_str, "ethernet") == 0)
pw_type = PW_TYPE_ETHERNET;
@@ -1410,15 +1272,10 @@ ldp_vty_l2vpn_pwtype(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_interface(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_interface(struct vty *vty, int disable, const char *ifname)
{
VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
struct l2vpn_if *lif;
- const char *ifname;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- ifname = vty_get_arg_value(args, "ifname");
lif = l2vpn_if_find(l2vpn, ifname);
@@ -1453,15 +1310,10 @@ ldp_vty_l2vpn_interface(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pseudowire(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pseudowire(struct vty *vty, int disable, const char *ifname)
{
VTY_DECLVAR_CONTEXT(l2vpn, l2vpn);
struct l2vpn_pw *pw;
- const char *ifname;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- ifname = vty_get_arg_value(args, "ifname");
pw = l2vpn_pw_find(l2vpn, ifname);
@@ -1504,14 +1356,9 @@ ldp_vty_l2vpn_pseudowire(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pw_cword(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pw_cword(struct vty *vty, int disable, const char *preference_str)
{
VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
- const char *preference_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- preference_str = vty_get_arg_value(args, "preference");
if (disable)
pw->flags |= F_PW_CWORD_CONF;
@@ -1528,16 +1375,11 @@ ldp_vty_l2vpn_pw_cword(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, int disable, const char *addr_str)
{
VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
int af;
union ldpd_addr addr;
- const char *addr_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- addr_str = vty_get_arg_value(args, "addr");
if (ldp_get_address(addr_str, &af, &addr) == -1 ||
bad_addr(af, &addr)) {
@@ -1561,15 +1403,10 @@ ldp_vty_l2vpn_pw_nbr_addr(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, int disable, const char *lsr_id_str)
{
VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
struct in_addr lsr_id;
- const char *lsr_id_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- lsr_id_str = vty_get_arg_value(args, "lsr-id");
if (inet_pton(AF_INET, lsr_id_str, &lsr_id) != 1 ||
bad_addr_v4(lsr_id)) {
@@ -1588,16 +1425,11 @@ ldp_vty_l2vpn_pw_nbr_id(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pw_pwid(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pw_pwid(struct vty *vty, int disable, const char *pwid_str)
{
VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
char *ep;
uint32_t pwid;
- const char *pwid_str;
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
- pwid_str = vty_get_arg_value(args, "pwid");
pwid = strtol(pwid_str, &ep, 10);
if (*ep != '\0' || pwid < MIN_PWID_ID || pwid > MAX_PWID_ID) {
@@ -1616,12 +1448,9 @@ ldp_vty_l2vpn_pw_pwid(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_l2vpn_pw_pwstatus(struct vty *vty, struct vty_arg *args[])
+ldp_vty_l2vpn_pw_pwstatus(struct vty *vty, int disable)
{
VTY_DECLVAR_CONTEXT_SUB(l2vpn_pw, pw);
- int disable;
-
- disable = (vty_get_arg_value(args, "no")) ? 1 : 0;
if (disable)
pw->flags |= F_PW_STATUSTLV_CONF;
diff --git a/ldpd/ldp_vty_exec.c b/ldpd/ldp_vty_exec.c
index 3463fb6c63..5ea3ec6452 100644
--- a/ldpd/ldp_vty_exec.c
+++ b/ldpd/ldp_vty_exec.c
@@ -1582,24 +1582,22 @@ ldp_vty_get_af(const char *str, int *af)
}
int
-ldp_vty_show_binding(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_binding(struct vty *vty, const char *af_str, int detail, int json)
{
struct imsgbuf ibuf;
struct show_params params;
- const char *af_str;
int af;
if (ldp_vty_connect(&ibuf) < 0)
return (CMD_WARNING);
- af_str = vty_get_arg_value(args, "address-family");
if (ldp_vty_get_af(af_str, &af) < 0)
return (CMD_ERR_NO_MATCH);
memset(&params, 0, sizeof(params));
params.family = af;
- params.detail = vty_get_arg_value(args, "detail") ? 1 : 0;
- params.json = vty_get_arg_value(args, "json") ? 1 : 0;
+ params.detail = detail;
+ params.json = json;
if (!params.detail && !params.json)
vty_out(vty, "%-4s %-20s %-15s %-11s %-13s %6s%s", "AF",
@@ -1611,24 +1609,23 @@ ldp_vty_show_binding(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_show_discovery(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_discovery(struct vty *vty, const char *af_str, int detail,
+ int json)
{
struct imsgbuf ibuf;
struct show_params params;
- const char *af_str;
int af;
if (ldp_vty_connect(&ibuf) < 0)
return (CMD_WARNING);
- af_str = vty_get_arg_value(args, "address-family");
if (ldp_vty_get_af(af_str, &af) < 0)
return (CMD_ERR_NO_MATCH);
memset(&params, 0, sizeof(params));
params.family = af;
- params.detail = vty_get_arg_value(args, "detail") ? 1 : 0;
- params.json = vty_get_arg_value(args, "json") ? 1 : 0;
+ params.detail = detail;
+ params.json = json;
if (!params.detail && !params.json)
vty_out(vty, "%-4s %-15s %-8s %-15s %9s%s",
@@ -1643,24 +1640,22 @@ ldp_vty_show_discovery(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_show_interface(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_interface(struct vty *vty, const char *af_str, int json)
{
struct imsgbuf ibuf;
struct show_params params;
unsigned int ifidx = 0;
- const char *af_str;
int af;
if (ldp_vty_connect(&ibuf) < 0)
return (CMD_WARNING);
- af_str = vty_get_arg_value(args, "address-family");
if (ldp_vty_get_af(af_str, &af) < 0)
return (CMD_ERR_NO_MATCH);
memset(&params, 0, sizeof(params));
params.family = af;
- params.json = vty_get_arg_value(args, "json") ? 1 : 0;
+ params.json = json;
/* header */
if (!params.json) {
@@ -1675,9 +1670,9 @@ ldp_vty_show_interface(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_show_capabilities(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_capabilities(struct vty *vty, int json)
{
- if (vty_get_arg_value(args, "json")) {
+ if (json) {
json_object *json;
json_object *json_array;
json_object *json_cap;
@@ -1727,7 +1722,7 @@ ldp_vty_show_capabilities(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_show_neighbor(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_neighbor(struct vty *vty, int capabilities, int detail, int json)
{
struct imsgbuf ibuf;
struct show_params params;
@@ -1736,9 +1731,9 @@ ldp_vty_show_neighbor(struct vty *vty, struct vty_arg *args[])
return (CMD_WARNING);
memset(&params, 0, sizeof(params));
- params.capabilities = vty_get_arg_value(args, "capabilities") ? 1 : 0;
- params.detail = vty_get_arg_value(args, "detail") ? 1 : 0;
- params.json = vty_get_arg_value(args, "json") ? 1 : 0;
+ params.capabilities = capabilities;
+ params.detail = detail;
+ params.json = json;
if (params.capabilities)
params.detail = 1;
@@ -1753,7 +1748,7 @@ ldp_vty_show_neighbor(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_show_atom_binding(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_atom_binding(struct vty *vty, int json)
{
struct imsgbuf ibuf;
struct show_params params;
@@ -1762,14 +1757,14 @@ ldp_vty_show_atom_binding(struct vty *vty, struct vty_arg *args[])
return (CMD_WARNING);
memset(&params, 0, sizeof(params));
- params.json = vty_get_arg_value(args, "json") ? 1 : 0;
+ params.json = json;
imsg_compose(&ibuf, IMSG_CTL_SHOW_L2VPN_BINDING, 0, 0, -1, NULL, 0);
return (ldp_vty_dispatch(vty, &ibuf, SHOW_L2VPN_BINDING, &params));
}
int
-ldp_vty_show_atom_vc(struct vty *vty, struct vty_arg *args[])
+ldp_vty_show_atom_vc(struct vty *vty, int json)
{
struct imsgbuf ibuf;
struct show_params params;
@@ -1778,7 +1773,7 @@ ldp_vty_show_atom_vc(struct vty *vty, struct vty_arg *args[])
return (CMD_WARNING);
memset(&params, 0, sizeof(params));
- params.json = vty_get_arg_value(args, "json") ? 1 : 0;
+ params.json = json;
if (!params.json) {
/* header */
@@ -1795,14 +1790,11 @@ ldp_vty_show_atom_vc(struct vty *vty, struct vty_arg *args[])
}
int
-ldp_vty_clear_nbr(struct vty *vty, struct vty_arg *args[])
+ldp_vty_clear_nbr(struct vty *vty, const char *addr_str)
{
struct imsgbuf ibuf;
- const char *addr_str;
struct ctl_nbr nbr;
- addr_str = vty_get_arg_value(args, "addr");
-
memset(&nbr, 0, sizeof(nbr));
if (addr_str &&
(ldp_get_address(addr_str, &nbr.af, &nbr.raddr) == -1 ||