From 67a70c9c64706688723569636c49671eb22592d0 Mon Sep 17 00:00:00 2001 From: "James R. Leu" Date: Thu, 15 Jul 2004 00:00:15 -0600 Subject: [PATCH] Updated READMEs and the latest diff "Release the hounds!" [git-p4: depot-paths = "//depot/ldp-portable/": change = 783] --- README | 2 +- README.quagga-mpls | 84 +- VERSION | 2 +- quagga-mpls.diff | 28075 ++++++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 23256 insertions(+), 4907 deletions(-) diff --git a/README b/README index 341fc3d..1ae7ffa 100644 --- a/README +++ b/README @@ -10,5 +10,5 @@ and copyrighted to James R. Leu, EXCEPT for ldp_nortel.[ch] which are covered under a Nortel Networks license and copyrighted to Nortel Networks. -quagga-mpls.diff is an example porting layer implemented on quagga-0.94.4 +quagga-mpls.diff is an example porting layer implemented on quagga-0.96.4 Read README.quagga-mpls diff --git a/README.quagga-mpls b/README.quagga-mpls index 4753d08..35536a0 100644 --- a/README.quagga-mpls +++ b/README.quagga-mpls @@ -1,18 +1,15 @@ What is this? ------------- -zebra-ldp.diff is a zebra<->ldp-portable porting layer. +quagga-mpls.diff is a quagga<->ldp-portable porting layer. -What is "zebra"? +What is "quagga"? ---------------- -Zebra is a set of open source routing daemons which implement the +Quagga is a set of open source routing daemons which implement the common routing protocols (RIP, OSPF, BGP). Each protocol runs as a seperate -dameon, and they are all syncronized via a managment daemon (zebra). This -patch adds another daemon to the mix, mplsd. mplsd only implements -LDP and static LSPs so far. In the future it will implement other MPLS -related protocols. If you have never used zebra, go to http://zebra.org/ -download the source for 0.94, compile it and learn how to setup up a small -OSPF network using zebra. Once you have that running then you are ready -try and use this patch. +dameon, and they are all syncronized via a managment daemon (zebra). If you +have never used quagga, go to http://quagga.net/ download the source for +0.96.4, compile it and learn how to setup up a small OSPF network using +quagga. Once you have that running then you are ready try and use this patch. What does this patch include? ----------------------------- @@ -24,47 +21,49 @@ In includes a 'sum-of-checksums' implementation for OSPF so you can easily verify that all of your OSPF speakers in an area have the same version of the database (their sum-of-checksums will match). -It includes a handling of MPLS labels as part of the zebra nexthop and correct +It handles MPLS labels as part of the quagga nexthop and correct handling of MPLS labels as part of a recursive nexthop. -It implements a CLI for creating static LSPs. +It implements a CLI for creating static LSPs (in the zebra daemon). It implements a porting layer for the ldp-portable library so that LDP -interact seemlessly with the rest of the zebra routing software. +interact seemlessly with the rest of the quagga routing software (in the ldpd +daemon). How do I use this patch? ----------------------- -Apply zebra-ldp.diff to the zebra source distribution. (0.94) -Go into the zebra/mplsd directory and modify 'create-links' to point to +Apply quagga-mpls.diff to the quagga source distribution. (0.96.4) +Go into the quagga/ldpd directory and modify 'create-links' to point to your ldp-portable source distribution. Then execute 'create-links' . -Go back to the top of the zebra source tree and configure and compile -zebra according to it's directions. The file mplsd/impl_mpls.c assumes that -you are running a mpls-linux-1.1x kernel. If you have issues compiling -and you are running a mpls-linux-1.1x kernel most likely it can't find -your linux/include/linux/mpls.h file. Go read the file 'README.1st.really' +Go back to the top of the quagga source tree and configure and compile +quagga according to it's directions. If you are not running on a mpls-linux +enabled kernel, modify quagga/zebra/Makefile.am and change mpls-linux.o to +mpls_null.o. If you have issues compiling and you are running a +mpls-linux-1.1x kernel most likely it can't find your +linux/include/linux/mpls.h file. Go read the file 'README.1st.really' in the mpls-linux-1.1 distrubution. -After you have finished compling, you will have a mplsd binary that has -the same command line syntax as the rest of the zebra binaries. +After you have finished compling, you will have a ldpd binary that has +the same command line syntax as the rest of the quagga binaries. -'mplsd' supports LDP and staic LSPs. Look at 'mpls ldp' and 'mpls static' -at the top level of the configuration (if you are not familiar with zebra -hit the '?' key and it will provide you context sensitive help. Also look -at 'mpls' at the interface level. There are also 'show' commands availble -from the operations more. Look at 'show ldp ?' and 'show mpls ?' for a list -of commands. +'ldpd' supports LDP, zebra supports staic LSPs. + +(if you are not familiar with quagga hit the '?' key and it will provide +you context sensitive help. Also look at 'mpls' at the interface level. +There are also 'show' commands availble from the operations more. Look at +'show ldp ?' and 'show mpls ?' for a list of commands.) The environment I use is: zebra -f /etc/zebra.conf -P 1024 -d ospdd -f /etc/ospfd.conf -P 1025 -d -mplsd -f /etc/mplsd.conf -P 1026 +ldpd -f /etc/ldpd.conf -P 1026 -NOTE: 'mplsd' still has a lot of tracing messages which only go to standard -output. If you use the -d option on 'mplsd' you will loose this useful +NOTE: 'ldpd' still has a lot of tracing messages which only go to standard +output. If you use the -d option on 'ldpd' you will loose this useful debugging output. -Look at zebra/mplsd/mplsd.conf.sample or the sample configs I have included +Look at quagga/ldpd/ldpd.conf.sample or the sample configs I have included below, for a basic configuration example. I have done most of my testing with unsolicited mode, liberal retention, label @@ -75,7 +74,7 @@ Please post questions to the mpls-linux mailing list: http://sourceforge.net/mail/?group_id=15443 -Here is a version of each of the zebra related config files that I use +Here is a version of each of the quagga related config files that I use for testing. NOTE: The usage of the dummy interface with a /32 address is important! @@ -86,6 +85,10 @@ password root enable password root service advanced-vty ! +mpls labelspace 0 + label-map gen 16 pop + label-map gen 17 swap gen 18 nexthop eth2 11.0.2.3 +! interface lo description Loopback ! @@ -95,16 +98,20 @@ interface dummy0 interface eth0 ! interface eth1 + mpls labelspace 0 ip address 11.0.1.2/24 ! interface eth2 + mpls labelspace 0 ip address 11.0.2.2/24 ! interface eth3 + mpls labelspace 0 ip address 11.0.3.2/24 ! interface teql0 ! +ip route 10.0.0.0/8 gen 19 nexthop eth2 11.0.2.3 ! line vty exec-timeout 0 0 @@ -145,25 +152,22 @@ hostname uml-2-mpls password root enable password root ! -mpls ldp +mpls ip ! interface lo ! interface eth0 ! interface eth1 - mpls ldp + mpls ip ! interface eth2 - mpls ldp + mpls ip ! interface eth3 - mpls ldp + mpls ip ! interface dummy0 ! line vty exec-timeout 0 0 - --- -James R. Leu diff --git a/VERSION b/VERSION index 6a8f478..886ab6b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -ldp-portable verion 0.500 (@460) +ldp-portable verion 0.800 (@783) diff --git a/quagga-mpls.diff b/quagga-mpls.diff index c4b8549..01bfae4 100644 --- a/quagga-mpls.diff +++ b/quagga-mpls.diff @@ -1,6 +1,6 @@ -diff --exclude=.p4config -uNr zebra/bgpd/bgpd.c zebra-ldp/bgpd/bgpd.c ---- zebra/bgpd/bgpd.c 2003-03-29 18:14:53.000000000 -0600 -+++ zebra-ldp/bgpd/bgpd.c 2003-03-10 14:56:26.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/bgpd/bgpd.c quagga-mpls/bgpd/bgpd.c +--- quagga/bgpd/bgpd.c 2004-02-25 13:41:58.000000000 -0600 ++++ quagga-mpls/bgpd/bgpd.c 2004-02-25 13:57:42.000000000 -0600 @@ -63,6 +63,8 @@ /* BGP process wide configuration. */ static struct bgp_master bgp_master; @@ -49,7 +49,7 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgpd.c zebra-ldp/bgpd/bgpd.c /* BGP's cluster-id control. */ int -@@ -1728,7 +1698,7 @@ +@@ -1740,7 +1710,7 @@ bgp = bgp_create (as, name); listnode_add (bm->bgp, bgp); @@ -58,9 +58,9 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgpd.c zebra-ldp/bgpd/bgpd.c *bgp_val = bgp; return 0; -diff --exclude=.p4config -uNr zebra/bgpd/bgpd.h zebra-ldp/bgpd/bgpd.h ---- zebra/bgpd/bgpd.h 2003-03-29 18:14:54.000000000 -0600 -+++ zebra-ldp/bgpd/bgpd.h 2003-03-10 14:56:27.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/bgpd/bgpd.h quagga-mpls/bgpd/bgpd.h +--- quagga/bgpd/bgpd.h 2004-02-25 13:42:00.000000000 -0600 ++++ quagga-mpls/bgpd/bgpd.h 2004-02-25 13:57:43.000000000 -0600 @@ -74,6 +74,7 @@ /* BGP router identifier. */ @@ -69,9 +69,9 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgpd.h zebra-ldp/bgpd/bgpd.h /* BGP route reflector cluster ID. */ struct in_addr cluster_id; -diff --exclude=.p4config -uNr zebra/bgpd/bgp_vty.c zebra-ldp/bgpd/bgp_vty.c ---- zebra/bgpd/bgp_vty.c 2003-03-29 18:14:52.000000000 -0600 -+++ zebra-ldp/bgpd/bgp_vty.c 2003-03-10 14:56:22.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/bgpd/bgp_vty.c quagga-mpls/bgpd/bgp_vty.c +--- quagga/bgpd/bgp_vty.c 2004-02-25 13:41:48.000000000 -0600 ++++ quagga-mpls/bgpd/bgp_vty.c 2004-02-25 13:57:42.000000000 -0600 @@ -39,6 +39,8 @@ #include "bgpd/bgp_route.h" #include "bgpd/bgp_zebra.h" @@ -107,9 +107,9 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgp_vty.c zebra-ldp/bgpd/bgp_vty.c return CMD_SUCCESS; } -diff --exclude=.p4config -uNr zebra/bgpd/bgp_zebra.c zebra-ldp/bgpd/bgp_zebra.c ---- zebra/bgpd/bgp_zebra.c 2003-03-29 18:14:52.000000000 -0600 -+++ zebra-ldp/bgpd/bgp_zebra.c 2003-03-10 14:56:23.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/bgpd/bgp_zebra.c quagga-mpls/bgpd/bgp_zebra.c +--- quagga/bgpd/bgp_zebra.c 2004-02-25 13:41:50.000000000 -0600 ++++ quagga-mpls/bgpd/bgp_zebra.c 2004-07-14 14:35:29.000000000 -0500 @@ -39,61 +39,24 @@ /* All information about zebra. */ @@ -139,11 +139,13 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgp_zebra.c zebra-ldp/bgpd/bgp_zebra.c - if (co->address->family == AF_INET) - { - addr = co->address->u.prefix4; -- ++ struct bgp *bgp; + - /* Ignore NET127. */ - if (IPV4_NET127 (ntohl (addr.s_addr))) - continue; -+ struct bgp *bgp; ++ zebra_router_id_update_read(zclient->ibuf,&router_id); ++ router_id_zebra = router_id.u.prefix4; - LIST_LOOP (bm->bgp, bgp, nn) - { @@ -162,9 +164,7 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgp_zebra.c zebra-ldp/bgpd/bgp_zebra.c - } - return 0; -} -+ zebra_router_id_update_read(zclient->ibuf,&router_id); -+ router_id_zebra = router_id.u.prefix4; - +- -int -bgp_if_update_all () -{ @@ -197,7 +197,7 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgp_zebra.c zebra-ldp/bgpd/bgp_zebra.c - bgp_if_update (ifc->ifp); - - if (if_is_up (ifc->ifp)) + if (if_is_operative (ifc->ifp)) bgp_connected_add (ifc); @@ -225,8 +185,6 @@ @@ -206,1235 +206,706 @@ diff --exclude=.p4config -uNr zebra/bgpd/bgp_zebra.c zebra-ldp/bgpd/bgp_zebra.c - bgp_if_update (ifc->ifp); - - if (if_is_up (ifc->ifp)) + if (if_is_operative (ifc->ifp)) bgp_connected_delete (ifc); -@@ -983,6 +941,7 @@ +@@ -345,6 +303,43 @@ + } + #endif /* HAVE_IPV6 */ + ++ ++int ++zebra_read_mpls_xc (int command, struct zclient *zclient, zebra_size_t length) ++{ ++ struct stream *s; ++ struct zapi_mpls_xc xc; ++ s = zclient->ibuf; ++ return mpls_xc_stream_read(s, &xc); ++} ++ ++int ++zebra_read_mpls_in_segment (int command, struct zclient *zclient, zebra_size_t length) ++{ ++ struct stream *s; ++ struct zapi_mpls_in_segment in; ++ s = zclient->ibuf; ++ return mpls_in_segment_stream_read(s, &in); ++} ++ ++int ++zebra_read_mpls_out_segment (int command, struct zclient *zclient, zebra_size_t length) ++{ ++ struct stream *s; ++ struct zapi_mpls_out_segment out; ++ s = zclient->ibuf; ++ return mpls_out_segment_stream_read(s, &out); ++} ++ ++int ++zebra_read_mpls_labelspace (int command, struct zclient *zclient, zebra_size_t length) ++{ ++ struct stream *s; ++ struct zapi_mpls_labelspace ls; ++ s = zclient->ibuf; ++ return mpls_labelspace_stream_read(s, &ls); ++} ++ + struct interface * + if_lookup_by_ipv4 (struct in_addr *addr) + { +@@ -982,7 +977,9 @@ + { /* Set default values. */ zclient = zclient_new (); ++ zclient->mplsinfo = 1; zclient_init (zclient, ZEBRA_ROUTE_BGP); + zclient->router_id_update = bgp_router_id_update; zclient->interface_add = bgp_interface_add; zclient->interface_delete = bgp_interface_delete; zclient->interface_address_add = bgp_interface_address_add; -diff --exclude=.p4config -uNr zebra/config.h.in zebra-ldp/config.h.in ---- zebra/config.h.in 2003-03-29 18:26:22.000000000 -0600 -+++ zebra-ldp/config.h.in 2003-03-29 18:33:43.000000000 -0600 -@@ -291,6 +291,9 @@ +@@ -995,6 +992,14 @@ + zclient->ipv6_route_add = zebra_read_ipv6; + zclient->ipv6_route_delete = zebra_read_ipv6; + #endif /* HAVE_IPV6 */ ++ zclient->mpls_xc_add = zebra_read_mpls_xc; ++ zclient->mpls_xc_delete = zebra_read_mpls_xc; ++ zclient->mpls_in_segment_add = zebra_read_mpls_in_segment; ++ zclient->mpls_in_segment_delete = zebra_read_mpls_in_segment; ++ zclient->mpls_out_segment_add = zebra_read_mpls_out_segment; ++ zclient->mpls_out_segment_delete = zebra_read_mpls_out_segment; ++ zclient->mpls_labelspace_add = zebra_read_mpls_labelspace; ++ zclient->mpls_labelspace_delete = zebra_read_mpls_labelspace; + + /* Interface related init. */ + if_init (); +diff --exclude=rsvpd -uNr quagga/config.h.in quagga-mpls/config.h.in +--- quagga/config.h.in 2004-02-25 13:42:03.000000000 -0600 ++++ quagga-mpls/config.h.in 2004-07-14 22:53:50.420193512 -0500 +@@ -318,6 +318,9 @@ + /* KAME IPv6 stack */ + #undef KAME + ++/* ldpd vty socket */ ++#undef LDP_VTYSH_PATH ++ + /* Linux IPv6 stack */ + #undef LINUX_IPV6 + +@@ -360,6 +363,9 @@ /* bgpd PID */ #undef PATH_BGPD_PID -+/* mplsd PID */ -+#undef PATH_MPLSD_PID ++/* ldpd PID */ ++#undef PATH_LDPD_PID + /* ospf6d PID */ #undef PATH_OSPF6D_PID -diff --exclude=.p4config -uNr zebra/configure.ac zebra-ldp/configure.ac ---- zebra/configure.ac 2003-03-29 18:14:56.000000000 -0600 -+++ zebra-ldp/configure.ac 2003-03-16 16:45:05.000000000 -0600 -@@ -71,6 +71,8 @@ - [ --disable-ospfd do not build ospfd]) - AC_ARG_ENABLE(ospf6d, - [ --disable-ospf6d do not build ospf6d]) -+AC_ARG_ENABLE(mplsd, -+[ --disable-mplsd do not build mplsd]) - AC_ARG_ENABLE(bgp-announce, - [ --disable-bgp-announce, turn off BGP route announcement]) - AC_ARG_ENABLE(netlink, -@@ -534,6 +536,12 @@ - OSPFD="ospfd" +diff --exclude=rsvpd -uNr quagga/configure.ac quagga-mpls/configure.ac +--- quagga/configure.ac 2004-02-25 13:42:07.000000000 -0600 ++++ quagga-mpls/configure.ac 2004-06-02 21:06:39.000000000 -0500 +@@ -63,6 +63,8 @@ + [ --disable-ipv6 turn off IPv6 related features and daemons]) + AC_ARG_ENABLE(zebra, + [ --disable-zebra do not build zebra daemon]) ++AC_ARG_ENABLE(ldpd, ++[ --disable-ldpd do not build ldpd]) + AC_ARG_ENABLE(bgpd, + [ --disable-bgpd do not build bgpd]) + AC_ARG_ENABLE(ripd, +@@ -637,6 +639,12 @@ + ZEBRA="zebra" fi -+if test "${enable_mpsld}" = "no";then -+ MPLSD="" ++if test "${enable_ldpd}" = "no";then ++ LDPD="" +else -+ MPLSD="mplsd" ++ LDPD="ldpd" +fi + - case "${enable_ripngd}" in - "yes") RIPNGD="ripngd";; - "no" ) RIPNGD="";; -@@ -556,6 +564,7 @@ + if test "${enable_bgpd}" = "no";then + BGPD="" + else +@@ -685,6 +693,7 @@ + + AC_SUBST(ZEBRA) + AC_SUBST(BGPD) ++AC_SUBST(LDPD) + AC_SUBST(RIPD) AC_SUBST(RIPNGD) AC_SUBST(OSPFD) - AC_SUBST(OSPF6D) -+AC_SUBST(MPLSD) - AC_SUBST(VTYSH) - AC_SUBST(INCLUDES) - AC_SUBST(CURSES) -@@ -777,6 +786,7 @@ - AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$ac_piddir/bgpd.pid",bgpd PID) - AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$ac_piddir/ospfd.pid",ospfd PID) - AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$ac_piddir/ospf6d.pid",ospf6d PID) -+AC_DEFINE_UNQUOTED(PATH_MPLSD_PID, "$ac_piddir/mplsd.pid",mplsd PID) - - - dnl --------------------------- -@@ -798,7 +808,7 @@ - ac_cv_htonl_works=no)]) +@@ -1008,6 +1017,7 @@ + AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID) + AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID) + AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID) ++AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$quagga_statedir/ldpd.pid",ldpd PID) + AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID) + AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID) + AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID) +@@ -1015,6 +1025,7 @@ + AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket) + AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket) + AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket) ++AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$quagga_statedir/ldpd.vty",ldpd vty socket) + AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket) + AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket) + AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket) +@@ -1039,7 +1050,7 @@ AC_MSG_RESULT($ac_cv_htonl_works) --AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile ripngd/Makefile bgpd/Makefile ospfd/Makefile ospf6d/Makefile vtysh/Makefile doc/Makefile) -+AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile ripngd/Makefile bgpd/Makefile ospfd/Makefile ospf6d/Makefile mplsd/Makefile vtysh/Makefile doc/Makefile) - - echo " - zebra configuration -diff --exclude=.p4config -uNr zebra/lib/command.c zebra-ldp/lib/command.c ---- zebra/lib/command.c 2003-03-29 18:15:18.000000000 -0600 -+++ zebra-ldp/lib/command.c 2003-03-29 01:12:01.000000000 -0600 -@@ -2080,12 +2080,24 @@ - case RIPNG_NODE: - case OSPF_NODE: - case OSPF6_NODE: -+ case MPLS_STATIC_NODE: -+ case MPLS_RSVPTE_NODE: -+ case MPLS_LDP_NODE: -+ case MPLS_IF_NODE: - case KEYCHAIN_NODE: - case MASC_NODE: - case RMAP_NODE: - case VTY_NODE: - vty->node = CONFIG_NODE; - break; -+ case MPLS_IN_INSTR_NODE: -+ case MPLS_OUT_INSTR_NODE: -+ vty->node = MPLS_STATIC_NODE; -+ break; -+ case MPLS_RSVPTE_IF_NODE: -+ case MPLS_LDP_IF_NODE: -+ vty->node = INTERFACE_NODE; -+ break; - case BGP_VPNV4_NODE: - case BGP_IPV4_NODE: - case BGP_IPV4M_NODE: -@@ -2132,6 +2144,14 @@ - case RMAP_NODE: - case OSPF_NODE: - case OSPF6_NODE: -+ case MPLS_IF_NODE: -+ case MPLS_RSVPTE_NODE: -+ case MPLS_LDP_NODE: -+ case MPLS_RSVPTE_IF_NODE: -+ case MPLS_LDP_IF_NODE: -+ case MPLS_STATIC_NODE: -+ case MPLS_IN_INSTR_NODE: -+ case MPLS_OUT_INSTR_NODE: - case KEYCHAIN_NODE: - case KEYCHAIN_KEY_NODE: - case MASC_NODE: -diff --exclude=.p4config -uNr zebra/lib/command.h zebra-ldp/lib/command.h ---- zebra/lib/command.h 2003-03-29 18:15:18.000000000 -0600 -+++ zebra-ldp/lib/command.h 2003-03-29 01:12:01.000000000 -0600 -@@ -75,6 +75,14 @@ - AAA_NODE, /* AAA node. */ - KEYCHAIN_NODE, /* Key-chain node. */ - KEYCHAIN_KEY_NODE, /* Key-chain key node. */ -+ MPLS_IF_NODE, /* MPLS tunnel interface node */ -+ MPLS_LDP_NODE, /* MPLS LDP protocol node */ -+ MPLS_LDP_IF_NODE, /* MPLS LDP interface node */ -+ MPLS_RSVPTE_IF_NODE, /* MPLS RSVP-TE interface node */ -+ MPLS_STATIC_NODE, /* static MPLS protocol mode */ -+ MPLS_RSVPTE_NODE, /* RSVP-TE MPLS protocol mode */ -+ MPLS_IN_INSTR_NODE, /* MPLS in-seg instructions */ -+ MPLS_OUT_INSTR_NODE, /* MPLS out-seg instructions */ - INTERFACE_NODE, /* Interface mode node. */ - ZEBRA_NODE, /* zebra connection node. */ - TABLE_NODE, /* rtm_table selection node. */ -diff --exclude=.p4config -uNr zebra/lib/if.c zebra-ldp/lib/if.c ---- zebra/lib/if.c 2003-03-29 18:15:20.000000000 -0600 -+++ zebra-ldp/lib/if.c 2003-03-10 14:56:58.000000000 -0600 -@@ -594,6 +594,30 @@ - } - #endif - -+struct interface *if_getfirst() -+{ -+ listnode node = listhead(iflist); -+ return getdata(node); -+} -+ -+struct interface *if_getnext(struct interface *old) -+{ -+ struct interface *ifp; -+ listnode node; -+ int flag = 0; -+ -+ for (node = listhead(iflist); node; nextnode(node)) { -+ ifp = getdata(node); -+ if (flag) { -+ return ifp; -+ } -+ if (ifp->ifindex == old->ifindex) { -+ flag = 1; -+ } -+ } -+ return NULL; -+} -+ - #ifndef HAVE_IF_INDEXTONAME - char * - if_indextoname (unsigned int ifindex, char *name) -diff --exclude=.p4config -uNr zebra/lib/if.h zebra-ldp/lib/if.h ---- zebra/lib/if.h 2003-03-29 18:15:20.000000000 -0600 -+++ zebra-ldp/lib/if.h 2003-03-10 14:56:58.000000000 -0600 -@@ -204,6 +204,9 @@ - struct connected *connected_delete_by_prefix (struct interface *, struct prefix *); - int ifc_pointopoint (struct connected *); - -+struct interface *if_getfirst(); -+struct interface *if_getnext(struct interface*); + AC_OUTPUT(Makefile lib/Makefile zebra/Makefile ripd/Makefile +- ripngd/Makefile bgpd/Makefile ospfd/Makefile ++ ripngd/Makefile ldpd/Makefile bgpd/Makefile ospfd/Makefile + ospf6d/Makefile vtysh/Makefile doc/Makefile + ospfclient/Makefile + redhat/quagga.spec +diff --exclude=rsvpd -uNr quagga/ldpd/create-links quagga-mpls/ldpd/create-links +--- quagga/ldpd/create-links 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/create-links 2004-05-19 21:45:08.000000000 -0500 +@@ -0,0 +1,99 @@ ++#!/bin/sh + - #ifndef HAVE_IF_NAMETOINDEX - unsigned int if_nametoindex (const char *); - #endif -diff --exclude=.p4config -uNr zebra/lib/linklist.h zebra-ldp/lib/linklist.h ---- zebra/lib/linklist.h 2003-03-29 18:15:21.000000000 -0600 -+++ zebra-ldp/lib/linklist.h 2003-03-10 14:57:00.000000000 -0600 -@@ -43,6 +43,7 @@ - - #define nextnode(X) ((X) = (X)->next) - #define listhead(X) ((X)->head) -+#define listtail(X) ((X)->tail) - #define listcount(X) ((X)->count) - #define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL) - #define getdata(X) ((X)->data) -diff --exclude=.p4config -uNr zebra/lib/log.c zebra-ldp/lib/log.c ---- zebra/lib/log.c 2003-03-29 18:15:21.000000000 -0600 -+++ zebra-ldp/lib/log.c 2003-03-10 14:57:00.000000000 -0600 -@@ -37,6 +37,7 @@ - "OSPF", - "RIPNG", - "OSPF6", -+ "MPLS", - "MASC", - NULL, - }; -diff --exclude=.p4config -uNr zebra/lib/log.h zebra-ldp/lib/log.h ---- zebra/lib/log.h 2003-03-29 18:15:21.000000000 -0600 -+++ zebra-ldp/lib/log.h 2003-03-10 14:57:00.000000000 -0600 -@@ -47,6 +47,7 @@ - ZLOG_OSPF, - ZLOG_RIPNG, - ZLOG_OSPF6, -+ ZLOG_MPLS, - ZLOG_MASC - } zlog_proto_t; - -diff --exclude=.p4config -uNr zebra/lib/memory.c zebra-ldp/lib/memory.c ---- zebra/lib/memory.c 2003-03-29 18:15:22.000000000 -0600 -+++ zebra-ldp/lib/memory.c 2003-03-29 01:12:01.000000000 -0600 -@@ -373,6 +373,17 @@ - { -1, NULL }, - }; - -+struct memory_list memory_list_mpls[] = -+{ -+ { MTYPE_MPLS_TOP, "MPLS " }, -+ { MTYPE_MPLS_IF, "MPLS IF " }, -+ { MTYPE_MPLS_STATIC, "MPLS static " }, -+ { MTYPE_MPLS_RSVPTE, "MPLS rsvpte " }, -+ { MTYPE_MPLS_LDP, "LDP " }, -+ { MTYPE_MPLS_RIB, "RIB " }, -+ { -1, NULL }, -+}; ++DEFSRC=/home/jleu/personal/clients/ldp-portable ++if [ "x${1}" = "x" ]; then ++ SRC=${DEFSRC} ++else ++ SRC=${1} ++fi + - struct memory_list memory_list_separator[] = - { - { 0, NULL}, -@@ -407,6 +418,7 @@ - show_memory_vty (vty, memory_list_ospf6); - show_memory_vty (vty, memory_list_separator); - show_memory_vty (vty, memory_list_bgp); -+ show_memory_vty (vty, memory_list_mpls); - - return CMD_SUCCESS; - } -@@ -450,6 +462,17 @@ - return CMD_SUCCESS; - } - -+DEFUN (show_memory_mpls, -+ show_memory_mpls_cmd, -+ "show memory mpls", -+ SHOW_STR -+ "Memory statistics\n" -+ "MPLS memory\n") -+{ -+ show_memory_vty (vty, memory_list_mpls); -+ return CMD_SUCCESS; ++[ -d "${SRC}" ] || { ++ echo $"$0: directory not found: ${1}" >&2 ++ echo $"Usage: $0 [] (default is ${DEFSRC})" >&2 ++ exit 1 +} + - DEFUN (show_memory_ospf, - show_memory_ospf_cmd, - "show memory ospf", -@@ -480,6 +503,7 @@ - install_element (VIEW_NODE, &show_memory_lib_cmd); - install_element (VIEW_NODE, &show_memory_rip_cmd); - install_element (VIEW_NODE, &show_memory_bgp_cmd); -+ install_element (VIEW_NODE, &show_memory_mpls_cmd); - install_element (VIEW_NODE, &show_memory_ospf_cmd); - install_element (VIEW_NODE, &show_memory_ospf6_cmd); - -@@ -488,6 +512,7 @@ - install_element (ENABLE_NODE, &show_memory_lib_cmd); - install_element (ENABLE_NODE, &show_memory_rip_cmd); - install_element (ENABLE_NODE, &show_memory_bgp_cmd); -+ install_element (ENABLE_NODE, &show_memory_mpls_cmd); - install_element (ENABLE_NODE, &show_memory_ospf_cmd); - install_element (ENABLE_NODE, &show_memory_ospf6_cmd); - } -diff --exclude=.p4config -uNr zebra/lib/memory.h zebra-ldp/lib/memory.h ---- zebra/lib/memory.h 2003-03-29 18:15:22.000000000 -0600 -+++ zebra-ldp/lib/memory.h 2003-03-29 01:12:01.000000000 -0600 -@@ -170,6 +170,13 @@ - MTYPE_COMMUNITY_LIST_ENTRY, - MTYPE_COMMUNITY_LIST_CONFIG, - -+ MTYPE_MPLS_TOP, -+ MTYPE_MPLS_IF, -+ MTYPE_MPLS_STATIC, -+ MTYPE_MPLS_LDP, -+ MTYPE_MPLS_RSVPTE, -+ MTYPE_MPLS_RIB, -+ - MTYPE_RIP, - MTYPE_RIP_INTERFACE, - MTYPE_RIP_DISTANCE, -diff --exclude=.p4config -uNr zebra/lib/table.c zebra-ldp/lib/table.c ---- zebra/lib/table.c 2003-03-29 18:15:28.000000000 -0600 -+++ zebra-ldp/lib/table.c 2003-03-10 14:57:17.000000000 -0600 -@@ -311,6 +311,36 @@ - return NULL; - } - -+struct route_node * -+route_node_lookup2 (struct route_table *table, struct prefix *p) -+{ -+ struct route_node *rn_in, *rn_tmp; -+ -+ if (!(rn_in = route_node_lookup(table,p))) { -+ /* walk as far down the tree as we can */ -+ rn_in = table->top; -+ while (rn_in && rn_in->p.prefixlen <= p->prefixlen && -+ prefix_match(&rn_in->p, p)) { -+ rn_tmp = rn_in->link[check_bit(&p->u.prefix, rn_in->p.prefixlen)]; -+ if (!rn_tmp) { -+ break; -+ } -+ rn_in = rn_tmp; -+ } -+ route_lock_node(rn_in); -+ -+ /* rn_in is either the actual node or the furthest node in the tree */ -+ /* so get the 'next' one with 'info' */ -+ rn_in = route_next2(rn_in); -+ } ++ln -s $SRC/ldp/ldp_addr.c ++ln -s $SRC/ldp/ldp_addr.h ++ln -s $SRC/ldp/ldp_adj.c ++ln -s $SRC/ldp/ldp_adj.h ++ln -s $SRC/ldp/ldp_attr.c ++ln -s $SRC/ldp/ldp_attr.h ++ln -s $SRC/ldp/ldp_buf.c ++ln -s $SRC/ldp/ldp_buf.h ++ln -s $SRC/ldp/ldp_cfg.c ++ln -s $SRC/ldp/ldp_cfg.h ++ln -s $SRC/ldp/ldp_defaults.h ++ln -s $SRC/ldp/ldp_entity.c ++ln -s $SRC/ldp/ldp_entity.h ++ln -s $SRC/ldp/ldp_fec.c ++ln -s $SRC/ldp/ldp_fec.h ++ln -s $SRC/ldp/ldp_global.c ++ln -s $SRC/ldp/ldp_global.h ++ln -s $SRC/ldp/ldp_hello.c ++ln -s $SRC/ldp/ldp_hello.h ++ln -s $SRC/ldp/ldp_hop.c ++ln -s $SRC/ldp/ldp_hop.h ++ln -s $SRC/ldp/ldp_hop_list.c ++ln -s $SRC/ldp/ldp_hop_list.h ++ln -s $SRC/ldp/ldp_if.c ++ln -s $SRC/ldp/ldp_if.h ++ln -s $SRC/ldp/ldp_inet_addr.c ++ln -s $SRC/ldp/ldp_inet_addr.h ++ln -s $SRC/ldp/ldp_init.c ++ln -s $SRC/ldp/ldp_init.h ++ln -s $SRC/ldp/ldp_inlabel.c ++ln -s $SRC/ldp/ldp_inlabel.h ++ln -s $SRC/ldp/ldp_keepalive.c ++ln -s $SRC/ldp/ldp_keepalive.h ++ln -s $SRC/ldp/ldp_label_abort.c ++ln -s $SRC/ldp/ldp_label_abort.h ++ln -s $SRC/ldp/ldp_label_mapping.c ++ln -s $SRC/ldp/ldp_label_mapping.h ++ln -s $SRC/ldp/ldp_label_rel_with.c ++ln -s $SRC/ldp/ldp_label_rel_with.h ++ln -s $SRC/ldp/ldp_label_request.c ++ln -s $SRC/ldp/ldp_label_request.h ++ln -s $SRC/ldp/ldp_mesg.c ++ln -s $SRC/ldp/ldp_mesg.h ++ln -s $SRC/ldp/ldp_nexthop.c ++ln -s $SRC/ldp/ldp_nexthop.h ++ln -s $SRC/ldp/ldp_nortel.c ++ln -s $SRC/ldp/ldp_nortel.h ++ln -s $SRC/ldp/ldp_notif.c ++ln -s $SRC/ldp/ldp_notif.h ++ln -s $SRC/ldp/ldp_outlabel.c ++ln -s $SRC/ldp/ldp_outlabel.h ++ln -s $SRC/ldp/ldp_pdu.h ++ln -s $SRC/ldp/ldp_pdu_setup.c ++ln -s $SRC/ldp/ldp_pdu_setup.h ++ln -s $SRC/ldp/ldp_peer.c ++ln -s $SRC/ldp/ldp_peer.h ++ln -s $SRC/ldp/ldp_resource.c ++ln -s $SRC/ldp/ldp_resource.h ++ln -s $SRC/ldp/ldp_session.c ++ln -s $SRC/ldp/ldp_session.h ++ln -s $SRC/ldp/ldp_state_funcs.c ++ln -s $SRC/ldp/ldp_state_machine.c ++ln -s $SRC/ldp/ldp_state_machine.h ++ln -s $SRC/ldp/ldp_struct.h ++ln -s $SRC/ldp/ldp_tunnel.c ++ln -s $SRC/ldp/ldp_tunnel.h + -+ if (rn_in && !rn_in->info) { -+ route_unlock_node(rn_in); -+ rn_in = NULL; -+ } -+ return rn_in; -+} ++ln -s $SRC/common/mpls_struct.h ++ln -s $SRC/common/mpls_assert.h ++ln -s $SRC/common/mpls_bitfield.h ++ln -s $SRC/common/mpls_fib_impl.h ++ln -s $SRC/common/mpls_ifmgr_impl.h ++ln -s $SRC/common/mpls_mm_impl.h ++ln -s $SRC/common/mpls_mpls_impl.h ++ln -s $SRC/common/mpls_policy_impl.h ++ln -s $SRC/common/mpls_refcnt.h ++ln -s $SRC/common/mpls_socket_impl.h ++ln -s $SRC/common/mpls_timer_impl.h ++ln -s $SRC/common/mpls_trace_impl.h ++ln -s $SRC/common/mpls_tree_impl.h ++ln -s $SRC/common/mpls_list.h ++ln -s $SRC/common/mpls_lock_impl.h ++ln -s $SRC/common/mpls_compare.h ++ln -s $SRC/common/mpls_compare.c +diff --exclude=rsvpd -uNr quagga/ldpd/delete-links quagga-mpls/ldpd/delete-links +--- quagga/ldpd/delete-links 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/delete-links 2004-05-19 21:45:23.000000000 -0500 +@@ -0,0 +1,86 @@ ++#!/bin/sh + - /* Add node to routing table. */ - struct route_node * - route_node_get (struct route_table *table, struct prefix *p) -@@ -461,6 +491,22 @@ - return NULL; - } - -+struct route_node * -+route_next2 (struct route_node *rn_in) -+{ -+ struct route_node *rn = rn_in; -+ struct route_node *rn2; -+ do { -+ rn2 = route_next(rn); -+ rn = rn2; -+ } while(rn && !rn->info); -+ -+ if (rn && rn->info) { -+ return rn; -+ } -+ return NULL; -+} ++rm -f ldp_addr.c ++rm -f ldp_addr.h ++rm -f ldp_adj.c ++rm -f ldp_adj.h ++rm -f ldp_attr.c ++rm -f ldp_attr.h ++rm -f ldp_buf.c ++rm -f ldp_buf.h ++rm -f ldp_cfg.c ++rm -f ldp_cfg.h ++rm -f ldp_defaults.h ++rm -f ldp_entity.c ++rm -f ldp_entity.h ++rm -f ldp_fec.c ++rm -f ldp_fec.h ++rm -f ldp_global.c ++rm -f ldp_global.h ++rm -f ldp_hello.c ++rm -f ldp_hello.h ++rm -f ldp_hop.c ++rm -f ldp_hop.h ++rm -f ldp_hop_list.c ++rm -f ldp_hop_list.h ++rm -f ldp_if.c ++rm -f ldp_if.h ++rm -f ldp_inet_addr.c ++rm -f ldp_inet_addr.h ++rm -f ldp_init.c ++rm -f ldp_init.h ++rm -f ldp_inlabel.c ++rm -f ldp_inlabel.h ++rm -f ldp_keepalive.c ++rm -f ldp_keepalive.h ++rm -f ldp_label_abort.c ++rm -f ldp_label_abort.h ++rm -f ldp_label_mapping.c ++rm -f ldp_label_mapping.h ++rm -f ldp_label_rel_with.c ++rm -f ldp_label_rel_with.h ++rm -f ldp_label_request.c ++rm -f ldp_label_request.h ++rm -f ldp_mesg.c ++rm -f ldp_mesg.h ++rm -f ldp_nexthop.c ++rm -f ldp_nexthop.h ++rm -f ldp_nortel.c ++rm -f ldp_nortel.h ++rm -f ldp_notif.c ++rm -f ldp_notif.h ++rm -f ldp_outlabel.c ++rm -f ldp_outlabel.h ++rm -f ldp_pdu.h ++rm -f ldp_pdu_setup.c ++rm -f ldp_pdu_setup.h ++rm -f ldp_peer.c ++rm -f ldp_peer.h ++rm -f ldp_resource.c ++rm -f ldp_resource.h ++rm -f ldp_session.c ++rm -f ldp_session.h ++rm -f ldp_state_funcs.c ++rm -f ldp_state_machine.c ++rm -f ldp_state_machine.h ++rm -f ldp_struct.h ++rm -f ldp_tunnel.c ++rm -f ldp_tunnel.h + - /* Unlock current node and lock next node until limit. */ - struct route_node * - route_next_until (struct route_node *node, struct route_node *limit) -diff --exclude=.p4config -uNr zebra/lib/table.h zebra-ldp/lib/table.h ---- zebra/lib/table.h 2003-03-29 18:15:28.000000000 -0600 -+++ zebra-ldp/lib/table.h 2003-03-10 14:57:17.000000000 -0600 -@@ -23,6 +23,8 @@ - #ifndef _ZEBRA_TABLE_H - #define _ZEBRA_TABLE_H - ++rm -f mpls_struct.h ++rm -f mpls_assert.h ++rm -f mpls_bitfield.h ++rm -f mpls_fib_impl.h ++rm -f mpls_ifmgr_impl.h ++rm -f mpls_mm_impl.h ++rm -f mpls_mpls_impl.h ++rm -f mpls_policy_impl.h ++rm -f mpls_refcnt.h ++rm -f mpls_socket_impl.h ++rm -f mpls_timer_impl.h ++rm -f mpls_trace_impl.h ++rm -f mpls_tree_impl.h ++rm -f mpls_list.h ++rm -f mpls_lock_impl.h ++rm -f mpls_compare.h ++rm -f mpls_compare.c +diff --exclude=rsvpd -uNr quagga/ldpd/impl_fib.c quagga-mpls/ldpd/impl_fib.c +--- quagga/ldpd/impl_fib.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_fib.c 2004-06-07 23:48:13.000000000 -0500 +@@ -0,0 +1,305 @@ ++#include +#include "prefix.h" ++#include "table.h" ++#include "if.h" ++#include "memory.h" ++#include "vty.h" + - /* Routing table top structure. */ - struct route_table - { -@@ -59,9 +61,11 @@ - void route_node_delete (struct route_node *node); - struct route_node *route_top (struct route_table *); - struct route_node *route_next (struct route_node *); -+struct route_node *route_next2 (struct route_node *); - struct route_node *route_next_until (struct route_node *, struct route_node *); - struct route_node *route_node_get (struct route_table *, struct prefix *); - struct route_node *route_node_lookup (struct route_table *, struct prefix *); -+struct route_node *route_node_lookup2 (struct route_table *, struct prefix *); - struct route_node *route_lock_node (struct route_node *node); - struct route_node *route_node_match (struct route_table *, struct prefix *); - struct route_node *route_node_match_ipv4 (struct route_table *, -diff --exclude=.p4config -uNr zebra/lib/thread.c zebra-ldp/lib/thread.c ---- zebra/lib/thread.c 2003-03-29 18:15:29.000000000 -0600 -+++ zebra-ldp/lib/thread.c 2003-03-10 14:57:18.000000000 -0600 -@@ -117,10 +117,26 @@ - sizeof (struct thread_master)); - } - -+static int thread_in_list(struct thread_list *list, struct thread *thread) -+{ -+ struct thread *tt; ++#include "mpls_compare.h" + -+ for (tt = list->head; tt; tt = tt->next) -+ { -+ if (tt == thread) -+ { -+ return 1; ++#include "ldp.h" ++#include "ldp_struct.h" ++#include "ldp_cfg.h" ++ ++#include "ldp_zebra.h" ++#include "impl_fib.h" ++ ++struct mpls_nexthop *lookup_fec_nexthop(mpls_fec *fec, mpls_nexthop *nexthop) { ++ struct route_node *rn; ++ struct mpls_node *mn; ++ struct listnode *ln; ++ struct mpls_nh *nh; ++ struct prefix p; ++ struct mpls_nexthop *result = NULL; ++ ++ mpls_fec2zebra_prefix(fec,&p); ++ ++ if ((rn = route_node_lookup(table,&p))) { ++ mn = (struct mpls_node*)rn->info; ++ LIST_LOOP(mn->list, nh, ln) { ++ /* if they match, remove it */ ++ if (!mpls_nexthop_compare(&nh->info, nexthop)) { ++ result = &nh->info; ++ break; ++ } ++ } ++ route_unlock_node(rn); + } -+ } -+ return 0; ++ return result; +} + - /* Add a new thread to the list. */ - static void - thread_list_add (struct thread_list *list, struct thread *thread) - { -+ assert(!thread_in_list(list,thread)); ++mpls_bool is_fec_attached(mpls_fec *fec, mpls_nexthop *nexthop) { ++ struct mpls_nexthop *nh = lookup_fec_nexthop(fec, nexthop); + - thread->next = NULL; - thread->prev = list->tail; - if (list->tail) -@@ -137,6 +153,8 @@ - struct thread *point, - struct thread *thread) - { -+ assert(!thread_in_list(list,thread)); ++ if (nh) { ++ return nh->attached; ++ } ++ return MPLS_BOOL_FALSE; ++} ++ ++void dump_mpls_node(struct vty *vty, struct route_node *node) { ++ struct mpls_node *mn; ++ struct listnode *ln; ++ struct mpls_nh *nh; ++ char buf[128]; ++ ++ if (node->info) { ++ prefix2str(&node->p,buf,sizeof(buf)); ++ vty_out(vty, "%s%s", buf, VTY_NEWLINE); ++ mn = (struct mpls_node*)node->info; ++ LIST_LOOP(mn->list,nh,ln) { ++ vty_out(vty, " [%d] %d %s ", nh->info.distance, nh->info.metric, ++ nh->info.attached == MPLS_BOOL_TRUE ? "attached":""); ++ if (nh->info.type & MPLS_NH_IP) { ++ struct in_addr addr; ++ addr.s_addr = htonl(nh->info.ip.u.ipv4); ++ vty_out(vty, "%s ", inet_ntoa(addr)); ++ } ++ if (nh->info.type & MPLS_NH_IF) { ++ vty_out(vty, "%s ", nh->info.if_handle->name); ++ } ++ if (nh->info.type & MPLS_NH_OUTSEGMENT) { ++ vty_out(vty, "%d ", nh->info.outsegment_handle); ++ } ++ vty_out(vty, "%s", VTY_NEWLINE); ++ } ++ } ++} + - thread->next = point; - thread->prev = point->prev; - if (point->prev) -@@ -151,6 +169,8 @@ - static struct thread * - thread_list_delete (struct thread_list *list, struct thread *thread) - { -+ assert(thread_in_list(list,thread)); ++void mpls_fib_close(mpls_fib_handle handle) ++{ ++} + - if (thread->next) - thread->next->prev = thread->prev; - else -diff --exclude=.p4config -uNr zebra/lib/vty.c zebra-ldp/lib/vty.c ---- zebra/lib/vty.c 2003-03-29 18:15:30.000000000 -0600 -+++ zebra-ldp/lib/vty.c 2003-03-29 01:12:02.000000000 -0600 -@@ -624,6 +624,12 @@ - case RMAP_NODE: - case OSPF_NODE: - case OSPF6_NODE: -+ case MPLS_IF_NODE: -+ case MPLS_IN_INSTR_NODE: -+ case MPLS_OUT_INSTR_NODE: -+ case MPLS_STATIC_NODE: -+ case MPLS_RSVPTE_NODE: -+ case MPLS_LDP_NODE: - case KEYCHAIN_NODE: - case KEYCHAIN_KEY_NODE: - case MASC_NODE: -@@ -1028,6 +1034,11 @@ - case RMAP_NODE: - case OSPF_NODE: - case OSPF6_NODE: -+ case MPLS_IF_NODE: -+ case MPLS_IN_INSTR_NODE: -+ case MPLS_OUT_INSTR_NODE: -+ case MPLS_STATIC_NODE: -+ case MPLS_LDP_NODE: - case KEYCHAIN_NODE: - case KEYCHAIN_KEY_NODE: - case MASC_NODE: -diff --exclude=.p4config -uNr zebra/lib/zclient.c zebra-ldp/lib/zclient.c ---- zebra/lib/zclient.c 2003-03-29 18:15:30.000000000 -0600 -+++ zebra-ldp/lib/zclient.c 2003-03-10 14:57:21.000000000 -0600 -@@ -260,6 +260,9 @@ - /* We need interface information. */ - zebra_message_send (zclient, ZEBRA_INTERFACE_ADD); - -+ /* We need router-id information. */ -+ zebra_message_send (zclient, ZEBRA_ROUTER_ID_ADD); ++void mpls_fib_update_close(mpls_fib_handle handle) ++{ ++} + - /* Flush all redistribute request. */ - for (i = 0; i < ZEBRA_ROUTE_MAX; i++) - if (i != zclient->redist_default && zclient->redist[i]) -@@ -289,6 +292,38 @@ - } - - int -+zapi_ipv4_set_mplsindex (struct zclient *zclient, struct prefix_ipv4 *p, -+ struct in_addr *nexthop, unsigned int ifindex, -+ unsigned int mplsindex) ++mpls_fib_handle mpls_fib_open(const mpls_instance_handle handle, ++ const mpls_cfg_handle cfg) +{ -+ int psize; -+ struct stream *s; ++ struct ldp *ldp = ldp_get(); ++ return ldp; ++} + -+ /* Reset stream. */ -+ s = zclient->obuf; -+ stream_reset (s); ++int mpls_fib_get_route(mpls_fib_handle handle, const int num, ++ const mpls_fec * fec, mpls_fec * entry) ++{ ++ return 0; ++} + -+ /* Length place holder. */ -+ stream_putw (s, 0); ++int mpls_fib_get_best_route(mpls_fib_handle handle, const int num, ++ const mpls_fec * dest, mpls_fec * entry) ++{ ++ return 0; ++} + -+ /* Put command, type and nexthop. */ -+ stream_putc (s, ZEBRA_IPV4_SET_MPLSINDEX); ++static uint32_t mpls_nh_index() { ++ static uint32_t index = 0; ++ return ++index; ++} + -+ /* Put prefix information. */ -+ psize = PSIZE (p->prefixlen); -+ stream_putc (s, p->prefixlen); -+ stream_write (s, (u_char *)&p->prefix, psize); -+ stream_put_in_addr (s, nexthop); -+ stream_putl (s, ifindex); -+ stream_putl (s, mplsindex); ++static struct mpls_nh* mpls_nh_create(struct mpls_nexthop* dup) { ++ struct mpls_nh *nh; ++ nh = XMALLOC (MTYPE_LDP, sizeof (struct mpls_nh)); ++ memset(nh, 0, sizeof(struct mpls_nh)); ++ if (dup) { ++ memcpy(&nh->info, dup, sizeof(struct mpls_nexthop)); ++ } ++ nh->info.index = mpls_nh_index(); ++ return nh; ++} + -+ /* Put length at the first point of the stream. */ -+ stream_putw_at (s, 0, stream_get_endp (s)); ++static void mpls_nh_delete(void* v) { ++ XFREE(MTYPE_LDP, v); ++} + -+ return writen (zclient->sock, s->data, stream_get_endp (s)); ++static int local_mpls_nexthop_compare(void* a,void* b) { ++ if (((mpls_nexthop*)a)->index < ((mpls_nexthop*)b)->index) { ++ return -1; ++ } ++ if (((mpls_nexthop*)a)->index > ((mpls_nexthop*)b)->index) { ++ return 1; ++ } ++ return 0; +} -+ -+int - zapi_ipv4_add (struct zclient *zclient, struct prefix_ipv4 *p, - struct zapi_ipv4 *api) - { -@@ -540,6 +575,20 @@ - return ret; - } - -+/* Router-id update from zebra daemon. */ -+void -+zebra_router_id_update_read (struct stream *s, struct prefix *rid) -+{ -+ int plen; + -+ /* Fetch interface address. */ -+ rid->family = stream_getc (s); ++static struct mpls_node *mpls_node_new() { ++ struct mpls_node * mn = XMALLOC (MTYPE_LDP, sizeof (struct mpls_node)); ++ if (mn) { ++ memset(mn, 0, sizeof(*mn)); ++ mn->list = list_new(); ++ mn->list->cmp = local_mpls_nexthop_compare; ++ } ++ return mn; ++} + -+ plen = prefix_blen (rid); -+ stream_get (&rid->u.prefix, s, plen); -+ rid->prefixlen = stream_getc (s); ++static void mpls_node_delete(struct mpls_node* mn) { ++ list_free(mn->list); ++ XFREE(MTYPE_LDP, mn); +} + - /* Interface addition from zebra daemon. */ - struct interface * - zebra_interface_add_read (struct stream *s) -@@ -608,6 +657,19 @@ - return ifp; - } - -+void -+zebra_interface_if_set_value (struct stream *s, struct interface *ifp) -+{ -+ /* Read interface's index. */ -+ ifp->ifindex = stream_getl (s); -+ -+ /* Read interface's value. */ -+ ifp->flags = stream_getl (s); -+ ifp->metric = stream_getl (s); -+ ifp->mtu = stream_getl (s); -+ ifp->bandwidth = stream_getl (s); -+} -+ - struct connected * - zebra_interface_address_add_read (struct stream *s) - { -@@ -772,6 +834,10 @@ - - switch (command) - { -+ case ZEBRA_ROUTER_ID_UPDATE: -+ if (zclient->router_id_update) -+ ret = (*zclient->router_id_update) (command, zclient, length); -+ break; - case ZEBRA_INTERFACE_ADD: - if (zclient->interface_add) - ret = (*zclient->interface_add) (command, zclient, length); -diff --exclude=.p4config -uNr zebra/lib/zclient.h zebra-ldp/lib/zclient.h ---- zebra/lib/zclient.h 2003-03-29 18:15:30.000000000 -0600 -+++ zebra-ldp/lib/zclient.h 2003-03-10 14:57:21.000000000 -0600 -@@ -24,6 +24,7 @@ - - /* For struct interface and struct connected. */ - #include "if.h" -+#include "prefix.h" - - /* For input/output buffer to zebra. */ - #define ZEBRA_MAX_PACKET_SIZ 4096 -@@ -62,6 +63,7 @@ - u_char default_information; - - /* Pointer to the callback functions. */ -+ int (*router_id_update) (int, struct zclient *, zebra_size_t); - int (*interface_add) (int, struct zclient *, zebra_size_t); - int (*interface_delete) (int, struct zclient *, zebra_size_t); - int (*interface_up) (int, struct zclient *, zebra_size_t); -@@ -100,6 +102,9 @@ - u_int32_t metric; - }; - -+int zapi_ipv4_set_mplsindex (struct zclient *, struct prefix_ipv4 *, -+ struct in_addr*, unsigned int, unsigned int); -+ - int - zapi_ipv4_add (struct zclient *, struct prefix_ipv4 *, struct zapi_ipv4 *); - -@@ -127,8 +132,11 @@ - - struct interface *zebra_interface_add_read (struct stream *); - struct interface *zebra_interface_state_read (struct stream *s); -+void zebra_interface_if_set_value (struct stream *, struct interface *); - struct connected *zebra_interface_address_add_read (struct stream *); - struct connected *zebra_interface_address_delete_read (struct stream *); -+void zebra_router_id_update_read (struct stream *s, struct prefix *rid); -+ - - #ifdef HAVE_IPV6 - /* IPv6 prefix add and delete function prototype. */ -diff --exclude=.p4config -uNr zebra/lib/zebra.h zebra-ldp/lib/zebra.h ---- zebra/lib/zebra.h 2003-03-29 18:15:30.000000000 -0600 -+++ zebra-ldp/lib/zebra.h 2003-03-14 10:28:01.000000000 -0600 -@@ -226,7 +226,11 @@ - #define ZEBRA_IPV6_NEXTHOP_LOOKUP 16 - #define ZEBRA_IPV4_IMPORT_LOOKUP 17 - #define ZEBRA_IPV6_IMPORT_LOOKUP 18 --#define ZEBRA_MESSAGE_MAX 19 -+#define ZEBRA_ROUTER_ID_ADD 19 -+#define ZEBRA_ROUTER_ID_DELETE 20 -+#define ZEBRA_ROUTER_ID_UPDATE 21 -+#define ZEBRA_IPV4_SET_MPLSINDEX 22 -+#define ZEBRA_MESSAGE_MAX 23 - - /* Zebra route's types. */ - #define ZEBRA_ROUTE_SYSTEM 0 -@@ -238,7 +242,8 @@ - #define ZEBRA_ROUTE_OSPF 6 - #define ZEBRA_ROUTE_OSPF6 7 - #define ZEBRA_ROUTE_BGP 8 --#define ZEBRA_ROUTE_MAX 9 -+#define ZEBRA_ROUTE_MPLS 9 -+#define ZEBRA_ROUTE_MAX 10 - - /* Zebra's family types. */ - #define ZEBRA_FAMILY_IPV4 1 -@@ -259,6 +264,7 @@ - #define ZEBRA_FLAG_SELECTED 0x10 - #define ZEBRA_FLAG_CHANGED 0x20 - #define ZEBRA_FLAG_STATIC 0x40 -+#define ZEBRA_FLAG_MPLS_CHANGED 0x80 - - /* Zebra nexthop flags. */ - #define ZEBRA_NEXTHOP_IFINDEX 1 -diff --exclude=.p4config -uNr zebra/Makefile.am zebra-ldp/Makefile.am ---- zebra/Makefile.am 2003-03-29 18:14:28.000000000 -0600 -+++ zebra-ldp/Makefile.am 2003-03-10 14:55:26.000000000 -0600 -@@ -1,6 +1,6 @@ - ## Process this file with automake to produce Makefile.in. - --SUBDIRS = lib @ZEBRA@ @BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ @VTYSH@ doc -+SUBDIRS = lib @ZEBRA@ @BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ @MPLSD@ @VTYSH@ doc - - EXTRA_DIST = aclocal.m4 SERVICES TODO REPORTING-BUGS vtysh/Makefile.in \ - vtysh/Makefile.am update-autotools -diff --exclude=.p4config -uNr zebra/mplsd/create-links zebra-ldp/mplsd/create-links ---- zebra/mplsd/create-links 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/create-links 2003-03-30 23:45:13.000000000 -0600 -@@ -0,0 +1,117 @@ -+#!/bin/sh -+ -+DEFSRC=/home/jleu/personal/clients/ldp-portable -+if [ "x${1}" = "x" ]; then -+ SRC=${DEFSRC} -+else -+ SRC=${1} -+fi -+ -+[ -d "${SRC}" ] || { -+ echo $"$0: directory not found: ${1}" >&2 -+ echo $"Usage: $0 [] (default is ${DEFSRC})" >&2 -+ exit 1 -+} -+ -+ln -s $SRC/ldp/ldp_addr.c -+ln -s $SRC/ldp/ldp_addr.h -+ln -s $SRC/ldp/ldp_adj.c -+ln -s $SRC/ldp/ldp_adj.h -+ln -s $SRC/ldp/ldp_attr.c -+ln -s $SRC/ldp/ldp_attr.h -+ln -s $SRC/ldp/ldp_buf.c -+ln -s $SRC/ldp/ldp_buf.h -+ln -s $SRC/ldp/ldp_cfg.c -+ln -s $SRC/ldp/ldp_cfg.h -+ln -s $SRC/ldp/ldp_defaults.h -+ln -s $SRC/ldp/ldp_entity.c -+ln -s $SRC/ldp/ldp_entity.h -+ln -s $SRC/ldp/ldp_fec.c -+ln -s $SRC/ldp/ldp_fec.h -+ln -s $SRC/ldp/ldp_global.c -+ln -s $SRC/ldp/ldp_global.h -+ln -s $SRC/ldp/ldp_hello.c -+ln -s $SRC/ldp/ldp_hello.h -+ln -s $SRC/ldp/ldp_hop.c -+ln -s $SRC/ldp/ldp_hop.h -+ln -s $SRC/ldp/ldp_hop_list.c -+ln -s $SRC/ldp/ldp_hop_list.h -+ln -s $SRC/ldp/ldp_if.c -+ln -s $SRC/ldp/ldp_if.h -+ln -s $SRC/ldp/ldp_inet_addr.c -+ln -s $SRC/ldp/ldp_inet_addr.h -+ln -s $SRC/ldp/ldp_init.c -+ln -s $SRC/ldp/ldp_init.h -+ln -s $SRC/ldp/ldp_inlabel.c -+ln -s $SRC/ldp/ldp_inlabel.h -+ln -s $SRC/ldp/ldp_keepalive.c -+ln -s $SRC/ldp/ldp_keepalive.h -+ln -s $SRC/ldp/ldp_l2cc.c -+ln -s $SRC/ldp/ldp_l2cc.h -+ln -s $SRC/ldp/ldp_label_abort.c -+ln -s $SRC/ldp/ldp_label_abort.h -+ln -s $SRC/ldp/ldp_label_mapping.c -+ln -s $SRC/ldp/ldp_label_mapping.h -+ln -s $SRC/ldp/ldp_label_rel_with.c -+ln -s $SRC/ldp/ldp_label_rel_with.h -+ln -s $SRC/ldp/ldp_label_request.c -+ln -s $SRC/ldp/ldp_label_request.h -+ln -s $SRC/ldp/ldp_mesg.c -+ln -s $SRC/ldp/ldp_mesg.h -+ln -s $SRC/ldp/ldp_nortel.c -+ln -s $SRC/ldp/ldp_nortel.h -+ln -s $SRC/ldp/ldp_notif.c -+ln -s $SRC/ldp/ldp_notif.h -+ln -s $SRC/ldp/ldp_outlabel.c -+ln -s $SRC/ldp/ldp_outlabel.h -+ln -s $SRC/ldp/ldp_pdu.h -+ln -s $SRC/ldp/ldp_pdu_setup.c -+ln -s $SRC/ldp/ldp_pdu_setup.h -+ln -s $SRC/ldp/ldp_peer.c -+ln -s $SRC/ldp/ldp_peer.h -+ln -s $SRC/ldp/ldp_resource.c -+ln -s $SRC/ldp/ldp_resource.h -+ln -s $SRC/ldp/ldp_session.c -+ln -s $SRC/ldp/ldp_session.h -+ln -s $SRC/ldp/ldp_state_funcs.c -+ln -s $SRC/ldp/ldp_state_machine.c -+ln -s $SRC/ldp/ldp_state_machine.h -+ln -s $SRC/ldp/ldp_struct.h -+ln -s $SRC/ldp/ldp_tunnel.c -+ln -s $SRC/ldp/ldp_tunnel.h -+ -+ln -s $SRC/lsr/lsr_cfg.c -+ln -s $SRC/lsr/lsr_cfg.h -+ln -s $SRC/lsr/lsr_defaults.h -+ln -s $SRC/lsr/lsr_global.c -+ln -s $SRC/lsr/lsr_global.h -+ln -s $SRC/lsr/lsr_if.c -+ln -s $SRC/lsr/lsr_if.h -+ln -s $SRC/lsr/lsr_insegment.c -+ln -s $SRC/lsr/lsr_insegment.h -+ln -s $SRC/lsr/lsr_labelmanager.c -+ln -s $SRC/lsr/lsr_labelmanager.h -+ln -s $SRC/lsr/lsr_outsegment.c -+ln -s $SRC/lsr/lsr_outsegment.h -+ln -s $SRC/lsr/lsr_struct.h -+ln -s $SRC/lsr/lsr_xconnect.c -+ln -s $SRC/lsr/lsr_xconnect.h -+ln -s $SRC/lsr/lsr_ftn.c -+ln -s $SRC/lsr/lsr_ftn.h -+ -+ln -s $SRC/common/mpls_struct.h -+ln -s $SRC/common/mpls_assert.h -+ln -s $SRC/common/mpls_fib_impl.h -+ln -s $SRC/common/mpls_ifmgr_impl.h -+ln -s $SRC/common/mpls_mm_impl.h -+ln -s $SRC/common/mpls_mpls_impl.h -+ln -s $SRC/common/mpls_policy_impl.h -+ln -s $SRC/common/mpls_refcnt.h -+ln -s $SRC/common/mpls_socket_impl.h -+ln -s $SRC/common/mpls_timer_impl.h -+ln -s $SRC/common/mpls_trace_impl.h -+ln -s $SRC/common/mpls_tree_impl.h -+ln -s $SRC/common/mpls_list.h -+ln -s $SRC/common/mpls_lock_impl.h -+ln -s $SRC/common/mpls_compare.h -+ln -s $SRC/common/mpls_compare.c -diff --exclude=.p4config -uNr zebra/mplsd/delete-links zebra-ldp/mplsd/delete-links ---- zebra/mplsd/delete-links 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/delete-links 2003-03-29 01:16:17.000000000 -0600 -@@ -0,0 +1,104 @@ -+#!/bin/sh -+ -+rm -f ldp_addr.c -+rm -f ldp_addr.h -+rm -f ldp_adj.c -+rm -f ldp_adj.h -+rm -f ldp_attr.c -+rm -f ldp_attr.h -+rm -f ldp_buf.c -+rm -f ldp_buf.h -+rm -f ldp_cfg.c -+rm -f ldp_cfg.h -+rm -f ldp_defaults.h -+rm -f ldp_entity.c -+rm -f ldp_entity.h -+rm -f ldp_fec.c -+rm -f ldp_fec.h -+rm -f ldp_global.c -+rm -f ldp_global.h -+rm -f ldp_hello.c -+rm -f ldp_hello.h -+rm -f ldp_hop.c -+rm -f ldp_hop.h -+rm -f ldp_hop_list.c -+rm -f ldp_hop_list.h -+rm -f ldp_if.c -+rm -f ldp_if.h -+rm -f ldp_inet_addr.c -+rm -f ldp_inet_addr.h -+rm -f ldp_init.c -+rm -f ldp_init.h -+rm -f ldp_inlabel.c -+rm -f ldp_inlabel.h -+rm -f ldp_keepalive.c -+rm -f ldp_keepalive.h -+rm -f ldp_l2cc.c -+rm -f ldp_l2cc.h -+rm -f ldp_label_abort.c -+rm -f ldp_label_abort.h -+rm -f ldp_label_mapping.c -+rm -f ldp_label_mapping.h -+rm -f ldp_label_rel_with.c -+rm -f ldp_label_rel_with.h -+rm -f ldp_label_request.c -+rm -f ldp_label_request.h -+rm -f ldp_mesg.c -+rm -f ldp_mesg.h -+rm -f ldp_nortel.c -+rm -f ldp_nortel.h -+rm -f ldp_notif.c -+rm -f ldp_notif.h -+rm -f ldp_outlabel.c -+rm -f ldp_outlabel.h -+rm -f ldp_pdu.h -+rm -f ldp_pdu_setup.c -+rm -f ldp_pdu_setup.h -+rm -f ldp_peer.c -+rm -f ldp_peer.h -+rm -f ldp_resource.c -+rm -f ldp_resource.h -+rm -f ldp_session.c -+rm -f ldp_session.h -+rm -f ldp_state_funcs.c -+rm -f ldp_state_machine.c -+rm -f ldp_state_machine.h -+rm -f ldp_struct.h -+rm -f ldp_tunnel.c -+rm -f ldp_tunnel.h -+ -+rm -f lsr_cfg.c -+rm -f lsr_cfg.h -+rm -f lsr_defaults.h -+rm -f lsr_global.c -+rm -f lsr_global.h -+rm -f lsr_if.c -+rm -f lsr_if.h -+rm -f lsr_insegment.c -+rm -f lsr_insegment.h -+rm -f lsr_labelmanager.c -+rm -f lsr_labelmanager.h -+rm -f lsr_outsegment.c -+rm -f lsr_outsegment.h -+rm -f lsr_struct.h -+rm -f lsr_xconnect.c -+rm -f lsr_xconnect.h -+rm -f lsr_ftn.c -+rm -f lsr_ftn.h -+ -+rm -f mpls_struct.h -+rm -f mpls_assert.h -+rm -f mpls_fib_impl.h -+rm -f mpls_ifmgr_impl.h -+rm -f mpls_mm_impl.h -+rm -f mpls_mpls_impl.h -+rm -f mpls_policy_impl.h -+rm -f mpls_refcnt.h -+rm -f mpls_socket_impl.h -+rm -f mpls_timer_impl.h -+rm -f mpls_trace_impl.h -+rm -f mpls_tree_impl.h -+rm -f mpls_list.h -+rm -f mpls_lock_impl.h -+rm -f mpls_compare.h -+rm -f mpls_compare.c -diff --exclude=.p4config -uNr zebra/mplsd/impl_fib.c zebra-ldp/mplsd/impl_fib.c ---- zebra/mplsd/impl_fib.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_fib.c 2003-03-10 14:57:23.000000000 -0600 -@@ -0,0 +1,296 @@ -+#include -+#include "prefix.h" -+#include "table.h" -+#include "if.h" -+#include "memory.h" -+ -+#include "mpls.h" -+#include "mpls_compare.h" -+ -+#include "ldp.h" -+#include "ldp_struct.h" -+ -+void mpls_fib_close(mpls_fib_handle handle) -+{ -+} -+ -+void mpls_fib_update_close(mpls_fib_handle handle) -+{ -+} -+ -+mpls_fib_handle mpls_fib_open(const mpls_instance_handle handle, -+ const mpls_cfg_handle cfg, ldp_fib_callback callback) -+{ -+ struct mpls *mpls = mpls_get(); -+ mpls->fib_callback = callback; -+ return mpls; -+} ++void mpls_fib_ipv4_add(struct prefix_ipv4 *p, struct mpls_nexthop *nexthop) { ++ struct route_node *rn; ++ struct mpls_node *mn; ++ struct mpls_nh *nh = mpls_nh_create(nexthop); ++ struct mpls_fec fec; ++ struct ldp *ldp = ldp_get(); + -+void mpls_fec2zebra_prefix(mpls_fec *lp, struct prefix *p) -+{ -+ switch(lp->type) { -+ case MPLS_FEC_PREFIX: -+ p->prefixlen = lp->u.prefix.length; -+ p->u.prefix4.s_addr = htonl(lp->u.prefix.network.u.ipv4); -+ break; -+ case MPLS_FEC_HOST: -+ p->prefixlen = 32; -+ p->u.prefix4.s_addr = htonl(lp->u.host.u.ipv4); -+ break; -+ default: -+ break; ++ if ((rn = route_node_lookup(table,(struct prefix*)p))) { ++ mn = (struct mpls_node*)rn->info; ++ } else { ++ rn = route_node_get(table,(struct prefix*)p); ++ route_lock_node(rn); ++ mn = mpls_node_new(); ++ rn->info = mn; + } -+} ++ listnode_add_sort(mn->list, nh); ++ nh->mn = mn; + -+void zebra_prefix2mpls_fec(struct prefix *p, struct mpls_nexthop *nh, mpls_fec *fec) -+{ -+ fec->u.prefix.length = p->prefixlen; -+ fec->type = MPLS_FEC_PREFIX; -+ fec->u.prefix.network.type = MPLS_FAMILY_IPV4; -+ fec->u.prefix.network.u.ipv4 = ntohl(p->u.prefix4.s_addr); -+ memcpy(&fec->nh, nh, sizeof(struct mpls_nexthop)); ++ zebra_prefix2mpls_fec((struct prefix*)p, &fec); ++ if (ldp) ++ ldp_add_ipv4(ldp, &fec, &nh->info); ++ route_unlock_node(rn); +} + -+int list2fec(struct list *list, struct prefix *p, mpls_fec *entry, int num) { ++void mpls_fib_ipv4_delete(struct prefix_ipv4* p, struct mpls_nexthop* nexthop) { ++ struct route_node* rn; ++ struct mpls_node* mn; + struct listnode* ln; -+ struct mpls_nexthop* head; -+ struct mpls_nexthop* nh; -+ int count = 0; ++ struct mpls_nh* nh; ++ struct mpls_fec fec; ++ struct ldp *ldp = ldp_get(); + -+ head = listhead(list) ? getdata(listhead(list)) : NULL; -+ -+ LIST_LOOP(list, nh, ln) { -+ if (head->distance == nh->distance && head->metric == nh->metric) { -+ zebra_prefix2mpls_fec(p,nh,&entry[count]); -+ } else { -+ break; -+ } -+ count++; -+ if (count >= num) { -+ break; ++ if ((rn = route_node_lookup(table,(struct prefix*)p))) { ++ mn = (struct mpls_node*)rn->info; ++ LIST_LOOP(mn->list, nh, ln) { ++ /* if they match, remove it */ ++ if (!mpls_nexthop_compare(&nh->info, nexthop)) { ++ zebra_prefix2mpls_fec((struct prefix*)p, &fec); ++ if (ldp) ++ ldp_delete_ipv4(ldp, &fec, nexthop); ++ list_delete_node(mn->list, ln); ++ mpls_nh_delete(nh); ++ break; ++ } + } -+ } -+ return count; -+} -+ -+int mpls_fib_get_route(mpls_fib_handle handle, const int num, -+ const mpls_fec * fec, mpls_fec * entry) -+{ -+ struct prefix p; -+ struct route_node *rn; -+ int count = 0; -+ -+ mpls_fec2zebra_prefix((mpls_fec*)fec,&p); -+ -+ if ((rn = route_node_lookup(handle->table,&p))) { -+ count = list2fec((struct list*)rn->info,&rn->p,entry,num); -+ route_unlock_node(rn); -+ return count; -+ } -+ return 0; -+} -+ -+int mpls_fib_get_best_route(mpls_fib_handle handle, const int num, -+ const mpls_fec * dest, mpls_fec * entry) -+{ -+ struct route_node *rn; -+ struct prefix p; -+ int count = 0; -+ int len; -+ -+ mpls_fec2zebra_prefix((mpls_fec*)dest,&p); -+ -+ for (len = 32; len >= 0 ; len--) { -+ p.prefixlen = len; -+ if ((rn = route_node_lookup(handle->table,&p))) { -+ count = list2fec((struct list*)rn->info,&rn->p,entry,num); ++ if (list_isempty(mn->list)) { ++ rn->info = NULL; + route_unlock_node(rn); ++ mpls_node_delete(mn); ++ mn = NULL; + } + } -+ return count; ++ ++ route_unlock_node(rn); +} + -+mpls_return_enum mpls_fib_getfirst_route(mpls_fib_handle handle, mpls_fec * dest) -+{ ++mpls_return_enum mpls_fib_getfirst_route(mpls_fib_handle handle, ++ mpls_fec * fec, mpls_nexthop *nexthop) { + struct route_node *rn; + -+ if ((rn = route_top(handle->table))) { ++ if ((rn = route_top(table))) { + if (!rn->info) { + rn = route_next2(rn); + } + + if (rn) { -+ list2fec((struct list*)rn->info,&rn->p,dest,1); ++ struct mpls_node *mn; ++ struct mpls_nh *nh; ++ ++ zebra_prefix2mpls_fec(&rn->p, fec); ++ mn = rn->info; ++ nh = getdata(listhead(mn->list)); ++ memcpy(nexthop, &nh->info, sizeof(mpls_nexthop)); + route_unlock_node(rn); + return MPLS_SUCCESS; + } + } -+ ++ + return MPLS_FAILURE; +} + -+mpls_return_enum mpls_fib_getnext_route(mpls_fib_handle handle, mpls_fec * dest) -+{ ++mpls_return_enum mpls_fib_getnext_route(mpls_fib_handle handle, ++ mpls_fec * fec, mpls_nexthop *nexthop) { + struct route_node *rn_in; ++ struct mpls_node *mn; + struct listnode* ln; -+ struct list* list; -+ struct mpls_nexthop* nh; ++ struct mpls_nh* nh; + struct prefix p; + int next = 0; + -+ mpls_fec2zebra_prefix(dest,&p); ++ mpls_fec2zebra_prefix(fec,&p); + -+ if (!(rn_in = route_node_lookup2(handle->table,&p))) { ++ if (!(rn_in = route_node_lookup2(table,&p))) { + return MPLS_FAILURE; + } + -+ list = (struct list*)rn_in->info; -+ LIST_LOOP(list, nh, ln) { ++ mn = rn_in->info; ++ LIST_LOOP(mn->list, nh, ln) { + if (next) { -+ zebra_prefix2mpls_fec(&p, nh, dest); ++ memcpy(nexthop, &nh->info, sizeof(struct mpls_nexthop)); + route_unlock_node(rn_in); + return MPLS_SUCCESS; + } -+ if (!mpls_nexthop_compare(nh,&dest->nh)) { ++ if (local_mpls_nexthop_compare(nexthop,&nh->info) <= 0) { + next = 1; + } + } + + if ((rn_in = route_next2(rn_in))) { -+ list2fec((struct list*)rn_in->info,&rn_in->p,dest,1); ++ zebra_prefix2mpls_fec(&rn_in->p, fec); ++ mn = rn_in->info; ++ nh = getdata(listhead(mn->list)); ++ memcpy(nexthop, &nh->info, sizeof(mpls_nexthop)); + route_unlock_node(rn_in); -+ return MPLS_SUCCESS; -+ } -+ -+ return MPLS_FAILURE; -+} -+ -+static struct mpls_nexthop* mpls_nexthop_create(struct mpls_nexthop* dup) { -+ struct mpls_nexthop *nh; -+ nh = XMALLOC (MTYPE_MPLS_TOP, sizeof (struct mpls_nexthop)); -+ if (dup) { -+ memcpy(nh, dup, sizeof(struct mpls_nexthop)); -+ } else { -+ memset(nh, 0, sizeof(struct mpls_nexthop)); -+ } -+ return nh; -+} -+ -+static void mpls_nexthop_delete(void* v) { -+ XFREE(MTYPE_MPLS_TOP, v); -+} -+ -+static int local_mpls_nexthop_compare(void* a,void* b) { -+ return mpls_nexthop_compare((struct mpls_nexthop*)a,(struct mpls_nexthop*)b); -+} -+ -+void ldp_ipv4_add(struct mpls *mpls, struct prefix_ipv4 *p, -+ struct mpls_nexthop *nexthop) { -+ mpls_fec dest; -+ struct route_node *rn; -+ struct list *list; -+ struct mpls_nexthop *active; -+ struct mpls_nexthop *head; -+ struct mpls_nexthop *nh = mpls_nexthop_create(nexthop); -+ -+ if ((rn = route_node_lookup(mpls->table,(struct prefix*)p))) { -+ list = (struct list*)rn->info; -+ active = listhead(list) ? getdata(listhead(list)) : NULL; -+ } else { -+ rn = route_node_get(mpls->table,(struct prefix*)p); -+ route_lock_node(rn); -+ list = list_new(); -+ rn->info = list; -+ active = NULL; -+ list->cmp = local_mpls_nexthop_compare; -+ } -+ listnode_add_sort(list, nh); -+ head = getdata(listhead(list)); -+ -+ /* if the new route isn't the active route, do nothing */ -+ if (nh != head) { -+ if (rn) { -+ route_unlock_node(rn); -+ } -+ return; -+ } -+ -+ /* we only get here is the new nh is the active one, which means we need -+ * to delete the only nh, THEN send in the new nh */ -+ if (mpls->ldp && mpls->fib_callback) { -+ memset(&dest,0,sizeof(dest)); -+ -+ /* if their was a previouly active route, delete it */ -+ if (active) { -+ zebra_prefix2mpls_fec((struct prefix*)p, active, &dest); -+ mpls->fib_callback(mpls->ldp->h, MPLS_UPDATE_DEL, &dest); -+ } -+ -+ /* add the new route */ -+ zebra_prefix2mpls_fec((struct prefix*)p, nh, &dest); -+ mpls->fib_callback(mpls->ldp->h, MPLS_UPDATE_ADD, &dest); -+ } -+ if (rn) { -+ route_unlock_node(rn); -+ } -+} -+ -+void ldp_ipv4_delete(struct mpls* mpls, struct prefix_ipv4* p, -+ struct mpls_nexthop* nexthop) { -+ struct route_node* rn; -+ struct list* list = NULL; -+ struct listnode* ln; -+ struct mpls_nexthop *active = NULL; -+ struct mpls_nexthop *head = NULL; -+ struct mpls_nexthop* nh = NULL; -+ mpls_fec dest; -+ -+ if ((rn = route_node_lookup(mpls->table,(struct prefix*)p))) { -+ list = (struct list*)rn->info; -+ active = listhead(list) ? getdata(listhead(list)) : NULL; -+ LIST_LOOP(list, nh, ln) { -+ /* if they match, remove it */ -+ if (!mpls_nexthop_compare(nh, nexthop)) { -+ list_delete_node(list, ln); -+ break; -+ } -+ } -+ if (list_isempty(list)) { -+ rn->info = NULL; -+ route_unlock_node(rn); -+ list_free(list); -+ list = NULL; -+ } ++ return MPLS_SUCCESS; + } + -+ head = (list && listhead(list)) ? getdata(listhead(list)) : NULL; ++ return MPLS_FAILURE; ++} + -+ if (!nh) { -+ /* if we do not know about the route, do nothing */ -+ if (rn) { -+ route_unlock_node(rn); -+ } -+ return; ++mpls_return_enum mpls_fib_set_data(mpls_fib_handle handle, mpls_fec * fec, ++ mpls_owners_enum owner, void *data) { ++ struct route_node *rn; ++ struct mpls_node *mn; ++ struct prefix p; ++ ++ mpls_fec2zebra_prefix(fec,&p); ++ ++ if (!(rn = route_node_lookup2(table,&p))) { ++ return MPLS_NO_ROUTE; + } ++ mn = rn->info; ++ mn->ldp_data = data; ++ route_unlock_node(rn); + -+ /* otherwise, if we have a callback */ -+ if (mpls->ldp && mpls->fib_callback) { -+ memset(&dest,0,sizeof(dest)); ++ return MPLS_SUCCESS; ++} ++ ++mpls_return_enum mpls_fib_get_data(mpls_fib_handle handle, mpls_fec * fec, ++ mpls_owners_enum owner, void **data) { ++ struct route_node *rn; ++ struct mpls_node *mn; ++ struct prefix p; + -+ /* did we we just removed the active nexthop */ -+ if (active == nh) { -+ /* if so send in a delete */ -+ zebra_prefix2mpls_fec((struct prefix*)p, nexthop, &dest); -+ mpls->fib_callback(mpls->ldp->h, MPLS_UPDATE_DEL, &dest); -+ mpls_nexthop_delete(nh); ++ mpls_fec2zebra_prefix(fec,&p); + -+ /* is there a active nexthop? */ -+ if (head) { -+ /* if so, send in a add */ -+ zebra_prefix2mpls_fec((struct prefix*)p, head, &dest); -+ mpls->fib_callback(mpls->ldp->h, MPLS_UPDATE_ADD, &dest); -+ } -+ } ++ if (!(rn = route_node_lookup2(table,&p))) { ++ return MPLS_NO_ROUTE; + } ++ mn = rn->info; ++ *data = mn->ldp_data; + route_unlock_node(rn); ++ ++ return MPLS_SUCCESS; +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_fib.h zebra-ldp/mplsd/impl_fib.h ---- zebra/mplsd/impl_fib.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_fib.h 2003-03-10 14:57:23.000000000 -0600 -@@ -0,0 +1,16 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_fib.h quagga-mpls/ldpd/impl_fib.h +--- quagga/ldpd/impl_fib.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_fib.h 2004-06-07 23:43:53.000000000 -0500 +@@ -0,0 +1,25 @@ +#ifndef LDP_IMPL_FIB_H +#define LDP_IMPL_FIB_H + +#include + +#include "ldp_struct.h" -+#include "mpls.h" ++#include "ldp.h" ++ ++struct mpls_node { ++ struct list *list; ++ void *ldp_data; ++}; ++ ++struct mpls_nh { ++ struct mpls_nexthop info; ++ struct mpls_node *mn; ++ void *ldp_data; ++}; + -+extern void mpls_fec2zebra_prefix(mpls_fec *lp, struct prefix *p); -+extern void zebra_prefix2mpls_fec(struct prefix *p, mpls_fec *lp); -+void ldp_ipv4_add(struct mpls *mpls, struct prefix_ipv4 *p, -+ struct mpls_nexthop *nexthop); -+void ldp_ipv4_delete(struct mpls *mpls, struct prefix_ipv4 *p, -+ struct mpls_nexthop *nexthop); ++void mpls_fib_ipv4_add(struct prefix_ipv4 *p, mpls_nexthop *nexthop); ++void mpls_fib_ipv4_delete(struct prefix_ipv4 *p, mpls_nexthop *nexthop); ++mpls_bool is_fec_attached(mpls_fec *fec, mpls_nexthop *nexthop); ++struct mpls_nexthop *lookup_fec_nexthop(mpls_fec *fec, mpls_nexthop *nexthop); + +#endif -diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.c zebra-ldp/mplsd/impl_ifmgr.c ---- zebra/mplsd/impl_ifmgr.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_ifmgr.c 2003-03-10 14:57:24.000000000 -0600 -@@ -0,0 +1,163 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_ifmgr.c quagga-mpls/ldpd/impl_ifmgr.c +--- quagga/ldpd/impl_ifmgr.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_ifmgr.c 2004-06-03 22:19:54.000000000 -0500 +@@ -0,0 +1,82 @@ +#include +#include "if.h" + +#include "ldp.h" +#include "ldp_struct.h" + -+#include "mpls.h" -+ -+static ldp_ifmgr_callback ifmgr_callback; +static int opened = 0; + -+static unsigned int mask_array[33] = { 0x00000000, -+ 0x80000000, 0xC0000000, 0xE0000000, 0xF0000000, -+ 0xF8000000, 0xFC000000, 0xFE000000, 0xFF000000, -+ 0xFF800000, 0xFFC00000, 0xFFE00000, 0xFFF00000, -+ 0xFFF80000, 0xFFFC0000, 0xFFFE0000, 0xFFFF0000, -+ 0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000, -+ 0xFFFFF800, 0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00, -+ 0xFFFFFF80, 0xFFFFFFC0, 0xFFFFFFE0, 0xFFFFFFF0, -+ 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE, 0xFFFFFFFF }; -+ +mpls_ifmgr_handle mpls_ifmgr_open(mpls_instance_handle handle, -+ mpls_cfg_handle cfg, ldp_ifmgr_callback callback) ++ mpls_cfg_handle cfg) +{ -+ if (callback) { -+ ifmgr_callback = callback; -+ opened = 1; -+ } ++ opened = 1; + return 0xdeadbeef; +} + @@ -1443,51 +914,6 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.c zebra-ldp/mplsd/impl_ifmg + opened = 0; +} + -+mpls_if_handle mpls_ifmgr_open_if(mpls_ifmgr_handle ifmgr_handle, const char *name) -+{ -+ mpls_if_handle ifh; -+ char name2[IFNAMSIZ + 1]; -+ strncpy(name2,name,IFNAMSIZ); -+ -+ ifh = if_lookup_by_name(name2); -+ -+ return ifh; -+} -+ -+mpls_return_enum mpls_ifmgr_get_address(mpls_ifmgr_handle ifmgr_handle, -+ mpls_if_handle if_handle, mpls_inet_addr * addr, mpls_inet_addr * mask, -+ uint32_t * flags) -+{ -+ struct connected *ifc; -+ listnode node; -+ int loop = 0; -+ -+ if (flags) { -+ *flags = if_handle->flags; -+ } -+ -+ for (node = listhead(if_handle->connected); node; nextnode(node)) { -+ ifc = getdata(node); -+ if (ifc->address->u.prefix4.s_addr == htonl(INADDR_LOOPBACK)) { -+ loop = 1; -+ continue; -+ } -+ if (!loop && (ifc->flags & ZEBRA_IFA_SECONDARY)) { -+ continue; -+ } -+ if (addr) { -+ addr->type = MPLS_FAMILY_IPV4; -+ addr->u.ipv4 = ntohl(ifc->address->u.prefix4.s_addr); -+ } -+ if (mask) { -+ mask->type = MPLS_FAMILY_IPV4; -+ mask->u.ipv4 = mask_array[ifc->address->prefixlen]; -+ } -+ return MPLS_SUCCESS; -+ } -+ return MPLS_FAILURE; -+} -+ +mpls_return_enum mpls_ifmgr_get_mtu(mpls_ifmgr_handle ifmgr_handle, + mpls_if_handle if_handle, int *mtu) +{ @@ -1495,8 +921,11 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.c zebra-ldp/mplsd/impl_ifmg + return MPLS_SUCCESS; +} + -+void mpls_ifmgr_close_if(mpls_ifmgr_handle ifmgr_handle, mpls_if_handle if_handle) ++mpls_return_enum mpls_ifmgr_get_name(const mpls_ifmgr_handle handle, ++ const mpls_if_handle if_handle, char *name, int len) +{ ++ strncpy(name, if_handle->name, len); ++ return MPLS_SUCCESS; +} + +mpls_return_enum mpls_ifmgr_getnext_address(mpls_ifmgr_handle ifmgr_handle, @@ -1509,7 +938,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.c zebra-ldp/mplsd/impl_ifmg + while ((*handle)) { + for (node = listhead((*handle)->connected); node; nextnode(node)) { + ifc = getdata(node); -+ if (ifc->address->u.prefix4.s_addr != htonl(INADDR_LOOPBACK)) { ++ if (ifc->address->family == AF_INET && ++ ifc->address->u.prefix4.s_addr != htonl(INADDR_LOOPBACK)) { + if (next) { + addr->type = MPLS_FAMILY_IPV4; + addr->u.ipv4 = ntohl(ifc->address->u.prefix4.s_addr); @@ -1535,7 +965,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.c zebra-ldp/mplsd/impl_ifmg + while ((*handle)) { + for (node = listhead((*handle)->connected); node; nextnode(node)) { + ifc = getdata(node); -+ if (ifc->address->u.prefix4.s_addr != htonl(INADDR_LOOPBACK)) { ++ if (ifc->address->family == AF_INET && ++ ifc->address->u.prefix4.s_addr != htonl(INADDR_LOOPBACK)) { + addr->type = MPLS_FAMILY_IPV4; + addr->u.ipv4 = ntohl(ifc->address->u.prefix4.s_addr); + return MPLS_SUCCESS; @@ -1545,48 +976,20 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.c zebra-ldp/mplsd/impl_ifmg + } + return MPLS_END_OF_LIST; +} -+ -+int ldp_address_add_callback(struct mpls *mpls, struct connected *c) { -+ mpls_inet_addr addr; -+ -+ if (opened) { -+ addr.type = MPLS_FAMILY_IPV4; -+ addr.u.ipv4 = ntohl(c->address->u.prefix4.s_addr); -+ -+ ifmgr_callback(mpls->ldp->h,MPLS_UPDATE_ADD,&addr); -+ } -+ -+ return 0; -+} -+ -+int ldp_address_delete_callback(struct mpls *mpls, struct connected *c) { -+ mpls_inet_addr addr; -+ -+ if (opened) { -+ addr.type = MPLS_FAMILY_IPV4; -+ addr.u.ipv4 = ntohl(c->address->u.prefix4.s_addr); -+ -+ ifmgr_callback(mpls->ldp->h,MPLS_UPDATE_DEL,&addr); -+ } -+ return 0; -+} -diff --exclude=.p4config -uNr zebra/mplsd/impl_ifmgr.h zebra-ldp/mplsd/impl_ifmgr.h ---- zebra/mplsd/impl_ifmgr.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_ifmgr.h 2003-03-10 14:57:24.000000000 -0600 -@@ -0,0 +1,10 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_ifmgr.h quagga-mpls/ldpd/impl_ifmgr.h +--- quagga/ldpd/impl_ifmgr.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_ifmgr.h 2004-05-19 21:40:47.000000000 -0500 +@@ -0,0 +1,7 @@ +#ifndef LDP_IMPL_IFMGR_H +#define LDP_IMPL_IFMGR_H + +#include +#include "ldp_struct.h" + -+int ldp_address_add_callback(struct mpls *mpls, struct connected *c); -+int ldp_address_delete_callback(struct mpls *mpls, struct connected *c); -+ +#endif -diff --exclude=.p4config -uNr zebra/mplsd/impl_lock.c zebra-ldp/mplsd/impl_lock.c ---- zebra/mplsd/impl_lock.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_lock.c 2003-03-10 14:57:24.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/ldpd/impl_lock.c quagga-mpls/ldpd/impl_lock.c +--- quagga/ldpd/impl_lock.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_lock.c 2004-05-19 21:40:47.000000000 -0500 @@ -0,0 +1,28 @@ +#include "ldp_struct.h" +#include "mpls_assert.h" @@ -1616,9 +1019,9 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_lock.c zebra-ldp/mplsd/impl_lock. +{ + mpls_free(handle); +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_mm.c zebra-ldp/mplsd/impl_mm.c ---- zebra/mplsd/impl_mm.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_mm.c 2003-03-10 14:57:24.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/ldpd/impl_mm.c quagga-mpls/ldpd/impl_mm.c +--- quagga/ldpd/impl_mm.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_mm.c 2004-05-24 21:54:23.000000000 -0500 @@ -0,0 +1,28 @@ +#include "ldp_struct.h" +#include "mpls_mm_impl.h" @@ -1631,7 +1034,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mm.c zebra-ldp/mplsd/impl_mm.c + +void *mpls_malloc(mpls_size_type size) +{ -+ void *mem = XMALLOC(MTYPE_MPLS_LDP, size); ++ void *mem = XMALLOC(MTYPE_LDP, size); + if (mem) { + _mm_count++; + } @@ -1641,18 +1044,19 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mm.c zebra-ldp/mplsd/impl_mm.c +void mpls_free(void *mem) +{ + _mm_count--; -+ XFREE(MTYPE_MPLS_LDP,mem); ++ XFREE(MTYPE_LDP,mem); +} + +void mpls_mm_results() +{ + fprintf(stderr, "LDP MM RESULTS: %d\n", _mm_count); +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls.c ---- zebra/mplsd/impl_mpls.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_mpls.c 2003-03-10 14:57:24.000000000 -0600 -@@ -0,0 +1,262 @@ -+#include +diff --exclude=rsvpd -uNr quagga/ldpd/impl_mpls.c quagga-mpls/ldpd/impl_mpls.c +--- quagga/ldpd/impl_mpls.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_mpls.c 2004-06-01 23:16:11.000000000 -0500 +@@ -0,0 +1,265 @@ ++#define MPLS_LINUX 0 ++ +#include + +#include "stream.h" @@ -1661,20 +1065,26 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. +#include "zclient.h" +#include "if.h" + ++#include "ldp.h" +#include "ldp_struct.h" +#include "ldp_entity.h" +#include "mpls_mpls_impl.h" +#include "mpls_socket_impl.h" ++#if MPLS_LINUX +#include ++#endif + -+#include "mpls_interface.h" ++#include "ldp_interface.h" +#include "impl_fib.h" + ++#include "ldp_zebra.h" ++ +static int label = 10000; +extern struct zclient *zclient; -+static int mplsd_socket = 0; + -+#define MPLS_LINUX 1 ++#if MPLS_LINUX ++ ++static int mplsd_socket = 0; + +int mplsd_ioctl (u_long request, caddr_t buffer) { + int ret = 0; @@ -1700,7 +1110,10 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + return 0; +} + -+int do_mpls_labelspace(struct mpls_interface *mi) { ++#endif ++ ++int do_mpls_labelspace(struct ldp_interface *li) { ++#if MPLS_LINUX + struct mpls_labelspace_req mls; + + if (!mi || !mi->ifp->ifindex) { @@ -1713,7 +1126,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + if (mplsd_ioctl(SIOCSLABELSPACEMPLS,(caddr_t)&mls)) { + return 1; + } -+ ++#endif + return 0; +} + @@ -1729,9 +1142,9 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + +mpls_return_enum mpls_mpls_outsegment_add(mpls_mpls_handle handle, mpls_outsegment * o) +{ -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + struct mpls_out_label_req oreq; -+ struct mpls_instruction_req mir; ++ struct mpls_instr_req mir; + struct sockaddr_in sin; + int result; + @@ -1744,44 +1157,30 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + mir.mir_direction = MPLS_OUT; + mir.mir_label.ml_type = MPLS_LABEL_KEY; + mir.mir_label.u.ml_key = o->handle; -+ mir.mir_instruction[0].mir_opcode = MPLS_OP_PUSH; -+ mir.mir_instruction[0].mir_data.push.ml_type = MPLS_LABEL_GEN; -+ mir.mir_instruction[0].mir_data.push.u.ml_gen = o->label.u.gen; ++ mir.mir_instr[0].mir_opcode = MPLS_OP_PUSH; ++ mir.mir_instr[0].mir_data.push.ml_type = MPLS_LABEL_GEN; ++ mir.mir_instr[0].mir_data.push.u.ml_gen = o->label.u.gen; + -+ mir.mir_instruction[1].mir_opcode = MPLS_OP_SET; -+ mir.mir_instruction[1].mir_data.set.mni_if = o->nexthop.if_handle->ifindex; ++ mir.mir_instr[1].mir_opcode = MPLS_OP_SET; ++ mir.mir_instr[1].mir_data.set.mni_if = o->nexthop.if_handle->ifindex; + sin.sin_addr.s_addr = htonl(o->nexthop.ip.u.ipv4); + sin.sin_family = AF_INET; -+ memcpy(&mir.mir_instruction[1].mir_data.set.mni_addr, ++ memcpy(&mir.mir_instr[1].mir_data.set.mni_addr, + &sin,sizeof(struct sockaddr)); + -+ mir.mir_instruction_length = 2; ++ mir.mir_instr_length = 2; + result = ioctl(handle,SIOCSMPLSOUTINSTR,&mir); + -+#if 0 -+ struct ifreq ifr; -+ sprintf(ifr.ifr_name,"mpls%d",o->handle); -+ memcpy(&ifr.ifr_data,&oreq.mol_label,sizeof(struct mpls_label)); -+ result = ioctl(handle,SIOCMPLSTUNNELADD,&ifr); -+ ifr.ifr_flags = IFF_UP | IFF_POINTOPOINT | IFF_NOARP | IFF_RUNNING; -+ result = ioctl(handle,SIOCSIFFLAGS,&ifr); -+#endif +#endif + return MPLS_SUCCESS; +} + +void mpls_mpls_outsegment_del(mpls_mpls_handle handle, mpls_outsegment * o) +{ -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + struct mpls_out_label_req oreq; + int result; + -+#if 0 -+ struct ifreq ifr; -+ sprintf(ifr.ifr_name,"mpls%d",o->handle); -+ result = ioctl(handle,SIOCMPLSTUNNELDEL,&ifr); -+#endif -+ + oreq.mol_label.ml_type = MPLS_LABEL_KEY; + oreq.mol_label.u.ml_key = o->handle; + result = ioctl(handle,SIOCMPLSNHLFEDEL,&oreq); @@ -1792,7 +1191,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. +mpls_return_enum mpls_mpls_insegment_add(mpls_mpls_handle handle, + mpls_insegment * i) +{ -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + struct mpls_in_label_req ireq; + int result; +#endif @@ -1802,7 +1201,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + i->label.u.gen = label++; + } + -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + ireq.mil_label.ml_type = MPLS_LABEL_GEN; + ireq.mil_label.u.ml_gen = i->label.u.gen; + ireq.mil_label.ml_index = i->labelspace; @@ -1816,7 +1215,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + +void mpls_mpls_insegment_del(mpls_mpls_handle handle, mpls_insegment * i) +{ -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + struct mpls_in_label_req ireq; + int result; + @@ -1830,7 +1229,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + +mpls_return_enum mpls_mpls_xconnect_add(mpls_mpls_handle handle, mpls_insegment * i, mpls_outsegment * o) +{ -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + struct mpls_xconnect_req xreq; + int result; + @@ -1844,14 +1243,13 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + result = ioctl(handle,SIOCMPLSXCADD,&xreq); + +#endif -+ + return MPLS_SUCCESS; +} + +void mpls_mpls_xconnect_del(mpls_mpls_handle handle, mpls_insegment * i, + mpls_outsegment * o) +{ -+#ifdef MPLS_LINUX ++#if MPLS_LINUX + struct mpls_xconnect_req xreq; + int result; + @@ -1874,15 +1272,19 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + struct in_addr addr; + unsigned int ifindex; + unsigned int mplsindex; ++#if 0 + int retval; ++#endif + + mplsindex = o->handle; + ifindex = o->nexthop.if_handle->ifindex; + addr.s_addr = htonl(o->nexthop.ip.u.ipv4); + + mpls_fec2zebra_prefix(f,&p); ++#if 0 + retval = zapi_ipv4_set_mplsindex(zclient,(struct prefix_ipv4*)&p, + &addr,ifindex,mplsindex); ++#endif + + return MPLS_SUCCESS; +} @@ -1894,15 +1296,19 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + struct in_addr addr; + unsigned int ifindex; + unsigned int mplsindex; ++#if 0 + int retval; ++#endif + + mplsindex = o->handle; + ifindex = o->nexthop.if_handle->ifindex; + addr.s_addr = htonl(o->nexthop.ip.u.ipv4); + + mpls_fec2zebra_prefix(f,&p); ++#if 0 + retval = zapi_ipv4_set_mplsindex(zclient,(struct prefix_ipv4*)&p, + &addr,ifindex,0); ++#endif +} + +mpls_return_enum mpls_mpls_get_label_space_range(mpls_mpls_handle handle, @@ -1914,24 +1320,27 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.c zebra-ldp/mplsd/impl_mpls. + + return MPLS_SUCCESS; +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_mpls.h zebra-ldp/mplsd/impl_mpls.h ---- zebra/mplsd/impl_mpls.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_mpls.h 2003-03-10 14:57:25.000000000 -0600 -@@ -0,0 +1,6 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_mpls.h quagga-mpls/ldpd/impl_mpls.h +--- quagga/ldpd/impl_mpls.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_mpls.h 2004-05-24 21:58:18.000000000 -0500 +@@ -0,0 +1,8 @@ +#ifndef IMPL_MPLS_H +#define IMPL_MPLS_H + -+int do_mpls_labelspace(struct mpls_interface *mi); ++#include "ldp_interface.h" ++ ++int do_mpls_labelspace(struct ldp_interface *li); + +#endif -diff --exclude=.p4config -uNr zebra/mplsd/impl_policy.c zebra-ldp/mplsd/impl_policy.c ---- zebra/mplsd/impl_policy.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_policy.c 2003-03-10 14:57:25.000000000 -0600 -@@ -0,0 +1,87 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_policy.c quagga-mpls/ldpd/impl_policy.c +--- quagga/ldpd/impl_policy.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_policy.c 2004-06-02 22:18:14.000000000 -0500 +@@ -0,0 +1,82 @@ +#include + +#include "ldp_struct.h" -+#include "mpls_interface.h" ++#include "ldp_interface.h" ++#include "ldp_zebra.h" +#include "impl_fib.h" +#include "table.h" + @@ -1946,36 +1355,30 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_policy.c zebra-ldp/mplsd/impl_pol + return MPLS_BOOL_TRUE; +} + -+mpls_bool mpls_policy_egress_check(mpls_instance_handle handle, mpls_fec * fec) ++mpls_bool mpls_policy_egress_check(mpls_instance_handle handle, mpls_fec * fec, ++ mpls_nexthop *nexthop) +{ + struct ldp *ldp = handle; + int result = MPLS_BOOL_FALSE; + + switch(ldp->egress) { + case LDP_EGRESS_ALL: ++ { + result = MPLS_BOOL_TRUE; + break; ++ } + case LDP_EGRESS_LSRID: -+ case LDP_EGRESS_CONNECTED: + { -+ struct route_node *rn; -+ struct prefix p; -+ -+ mpls_fec2zebra_prefix(fec,&p); -+ if ((rn = route_node_lookup(ldp->mpls->table,&p))) { -+ if (ldp->egress == LDP_EGRESS_LSRID) { -+ if (prefix_match(&rn->p, &ldp->mpls->router_id)) { -+ result = MPLS_BOOL_TRUE; -+ } -+ } else { -+ struct mpls_nexthop* nh = -+ (struct mpls_nexthop*)getdata(listhead((struct list*)rn->info)); -+ result = nh->attached; -+ } -+ route_unlock_node(rn); ++ if (lookup_fec_nexthop(fec, nexthop)) { ++ result = MPLS_BOOL_TRUE; + } + break; + } ++ case LDP_EGRESS_CONNECTED: ++ { ++ result = is_fec_attached(fec, nexthop); ++ break; ++ } + default: + break; + } @@ -2000,12 +1403,12 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_policy.c zebra-ldp/mplsd/impl_pol + switch (ldp->address) { + case LDP_ADDRESS_LDP: + if ((ifp = if_lookup_exact_address(in)) && -+ ((struct mpls_interface*)(ifp->info))->ldp) { ++ (struct ldp_interface*)(ifp->info)) { + flag = MPLS_BOOL_TRUE; + } + /* fall through */ + case LDP_ADDRESS_LSRID: -+ if (in.s_addr == ldp->mpls->router_id.u.prefix4.s_addr) { ++ if (in.s_addr == router_id.u.prefix4.s_addr) { + flag = MPLS_BOOL_TRUE; + } + break; @@ -2015,15 +1418,15 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_policy.c zebra-ldp/mplsd/impl_pol + } + return flag; +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_socket.c ---- zebra/mplsd/impl_socket.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_socket.c 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,444 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_socket.c quagga-mpls/ldpd/impl_socket.c +--- quagga/ldpd/impl_socket.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_socket.c 2004-05-24 21:57:16.000000000 -0500 +@@ -0,0 +1,474 @@ +#include +#include "thread.h" +#include "sockopt.h" + -+#include "mpls.h" ++#include "ldp.h" + +#include "ldp_struct.h" +#include "ldp_state_machine.h" @@ -2073,7 +1476,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + +int mplsd_read(struct thread *thread) { + int retval; -+ struct mpls *mpls = mpls_get(); ++ struct ldp *ldp = ldp_get(); + mpls_socket_handle socket; + + MPLS_ASSERT(thread); @@ -2081,26 +1484,26 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + socket = THREAD_ARG(thread); + socket->read = thread_add_read(master,mplsd_read,socket,socket->fd); + -+ if (!mpls || !mpls->ldp) { ++ if (!ldp) { + return 0; + } + + switch (socket->type) { + case MPLS_SOCKET_TCP_DATA: + { -+ retval = ldp_event(mpls->ldp->h, socket, socket->extra, ++ retval = ldp_event(ldp->h, socket, socket->extra, + LDP_EVENT_TCP_DATA); + break; + } + case MPLS_SOCKET_TCP_LISTEN: + { -+ retval = ldp_event(mpls->ldp->h, socket, socket->extra, ++ retval = ldp_event(ldp->h, socket, socket->extra, + LDP_EVENT_TCP_LISTEN); + break; + } + case MPLS_SOCKET_UDP_DATA: + { -+ retval = ldp_event(mpls->ldp->h, socket, socket->extra, ++ retval = ldp_event(ldp->h, socket, socket->extra, + LDP_EVENT_UDP_DATA); + break; + } @@ -2113,7 +1516,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc +} + +int mplsd_write(struct thread *thread) { -+ struct mpls *mpls = mpls_get(); ++ struct ldp *ldp = ldp_get(); + int retval; + mpls_socket_handle socket; + @@ -2124,7 +1527,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + if (socket->type != MPLS_SOCKET_TCP_CONNECT) { + assert(0); + } -+ retval = ldp_event(mpls->ldp->h, socket, socket->extra, ++ retval = ldp_event(ldp->h, socket, socket->extra, + LDP_EVENT_TCP_CONNECT); + + return 0; @@ -2166,7 +1569,25 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + memset(sock,0,sizeof(struct mpls_socket)); + sock->fd = socket(AF_INET, SOCK_DGRAM, 0); + MPLS_ASSERT(sock->fd > -1); -+ if (setsockopt(sock->fd,IPPROTO_IP,IP_PKTINFO,&one,sizeof(one)) < 0) { ++ if (setsockopt(sock->fd,SOL_IP,IP_PKTINFO,&one,sizeof(one)) < 0) { ++ perror("PKTINFO"); ++ mpls_free(sock); ++ return NULL; ++ } ++ return sock; ++} ++ ++mpls_socket_handle mpls_socket_create_raw(mpls_socket_mgr_handle handle, ++ int proto) ++{ ++ struct mpls_socket *sock; ++ u_char one = 1; ++ ++ sock = mpls_malloc(sizeof(struct mpls_socket)); ++ memset(sock,0,sizeof(struct mpls_socket)); ++ sock->fd = socket(AF_INET, SOCK_RAW, proto); ++ MPLS_ASSERT(sock->fd > -1); ++ if (setsockopt(sock->fd,SOL_IP,IP_PKTINFO,&one,sizeof(one)) < 0) { + perror("PKTINFO"); + mpls_free(sock); + return NULL; @@ -2277,6 +1698,18 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + return MPLS_FAILURE; + } + } ++ if (flag & MPLS_SOCKOP_ROUTERALERT) { ++ if (setsockopt(socket->fd, SOL_IP, IP_ROUTER_ALERT, (char *)&one, ++ sizeof(one)) < 0) { ++ return MPLS_FAILURE; ++ } ++ } ++ if (flag & MPLS_SOCKOP_HDRINCL) { ++ if (setsockopt(socket->fd, SOL_IP, IP_HDRINCL, (char *)&one, ++ sizeof(one)) < 0) { ++ return MPLS_FAILURE; ++ } ++ } + return MPLS_SUCCESS; +} + @@ -2286,11 +1719,11 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + int zero = loop; + int one = ttl; + -+ if (setsockopt(socket->fd,IPPROTO_IP,IP_MULTICAST_TTL,&one,sizeof(one))<0) { ++ if (setsockopt(socket->fd,SOL_IP,IP_MULTICAST_TTL,&one,sizeof(one))<0) { + return MPLS_FAILURE; + } + -+ if (setsockopt(socket->fd,IPPROTO_IP,IP_MULTICAST_LOOP,&zero,sizeof(zero))<0) { ++ if (setsockopt(socket->fd,SOL_IP,IP_MULTICAST_LOOP,&zero,sizeof(zero))<0) { + return MPLS_FAILURE; + } + @@ -2463,9 +1896,9 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_socket.c zebra-ldp/mplsd/impl_soc + + return ret; +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_timer.c zebra-ldp/mplsd/impl_timer.c ---- zebra/mplsd/impl_timer.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_timer.c 2003-03-10 14:57:25.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/ldpd/impl_timer.c quagga-mpls/ldpd/impl_timer.c +--- quagga/ldpd/impl_timer.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_timer.c 2004-05-19 21:40:47.000000000 -0500 @@ -0,0 +1,93 @@ +#include "ldp_struct.h" +#include "mpls_timer_impl.h" @@ -2560,11 +1993,12 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_timer.c zebra-ldp/mplsd/impl_time + timer->timer = NULL; + } +} -diff --exclude=.p4config -uNr zebra/mplsd/impl_tree.c zebra-ldp/mplsd/impl_tree.c ---- zebra/mplsd/impl_tree.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/impl_tree.c 2003-03-10 14:57:25.000000000 -0600 -@@ -0,0 +1,158 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/impl_tree.c quagga-mpls/ldpd/impl_tree.c +--- quagga/ldpd/impl_tree.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/impl_tree.c 2004-06-15 13:50:46.000000000 -0500 +@@ -0,0 +1,159 @@ +#include ++#include "prefix.h" +#include "table.h" + +#include "ldp_struct.h" @@ -2595,8 +2029,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_tree.c zebra-ldp/mplsd/impl_tree. + return MPLS_FAILURE; +} + -+mpls_return_enum mpls_tree_remove(mpls_tree_handle tree, uint32_t key, int length, -+ void **info) ++mpls_return_enum mpls_tree_remove(mpls_tree_handle tree, uint32_t key, ++ int length, void **info) +{ + struct route_node *node; + struct prefix p; @@ -2722,10 +2156,10 @@ diff --exclude=.p4config -uNr zebra/mplsd/impl_tree.c zebra-ldp/mplsd/impl_tree. + } + return MPLS_FAILURE; +} -diff --exclude=.p4config -uNr zebra/mplsd/l2cc_interface.c zebra-ldp/mplsd/l2cc_interface.c ---- zebra/mplsd/l2cc_interface.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/l2cc_interface.c 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,106 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/l2cc_interface.c quagga-mpls/ldpd/l2cc_interface.c +--- quagga/ldpd/l2cc_interface.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/l2cc_interface.c 2004-06-15 16:03:24.000000000 -0500 +@@ -0,0 +1,98 @@ +#include +#include "memory.h" + @@ -2733,13 +2167,12 @@ diff --exclude=.p4config -uNr zebra/mplsd/l2cc_interface.c zebra-ldp/mplsd/l2cc_ +#include "ldp_cfg.h" +#include "ldp_struct.h" + -+#include "mpls.h" -+#include "mpls_interface.h" ++#include "ldp_interface.h" + -+struct l2cc_interface *l2cc_if_new(struct mpls_interface *mi) { ++struct l2cc_interface *l2cc_if_new(struct ldp_interface *mi) { + struct l2cc_interface *li; + -+ li = XMALLOC(MTYPE_MPLS_LDP, sizeof(struct l2cc_interface)); ++ li = XMALLOC(MTYPE_LDP, sizeof(struct l2cc_interface)); + memset(li, 0, sizeof(struct l2cc_interface)); + li->mi = mi; + @@ -2750,138 +2183,137 @@ diff --exclude=.p4config -uNr zebra/mplsd/l2cc_interface.c zebra-ldp/mplsd/l2cc_ +} + +void l2cc_if_free(struct l2cc_interface *li) { -+ XFREE(MTYPE_MPLS_LDP, li); ++ XFREE(MTYPE_LDP, li); +} + -+void l2cc_interface_create(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++void l2cc_interface_create(struct ldp_interface *mi) { ++ struct ldp *ldp = ldp_get(); + + mi->l2cc->create_on_hold = MPLS_BOOL_FALSE; -+ mi->l2cc->l2cc.admin_state = MPLS_ADMIN_DISABLE; + -+ ldp_cfg_l2cc_set(ldp->h, &mi->l2cc->l2cc, -+ LDP_CFG_ADD | LDP_L2CC_CFG_PEER_ADDR | -+ LDP_ENTITY_CFG_ADMIN_STATE | LDP_L2CC_CFG_FEC); -+ -+ ldp_cfg_l2cc_get(ldp->h, &mi->l2cc->l2cc, 0xFFFFFFFF); ++ ldp_cfg_fec_set(ldp->h, &mi->l2cc->l2cc, LDP_CFG_ADD); ++ ldp_cfg_fec_get(ldp->h, &mi->l2cc->l2cc, 0xFFFFFFFF); + + l2cc_interface_admin_state_finish(mi); +} + -+void l2cc_interface_delete(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++void l2cc_interface_delete(struct ldp_interface *mi) { ++ struct ldp *ldp = ldp_get(); + + mi->l2cc->create_on_hold = MPLS_BOOL_TRUE; -+ mi->l2cc->l2cc.admin_state = MPLS_ADMIN_DISABLE; + + if (ldp) { + l2cc_interface_admin_state_start(mi); -+ ldp_cfg_l2cc_set(ldp->h, &mi->l2cc->l2cc, LDP_CFG_DEL); ++ ldp_cfg_fec_set(ldp->h, &mi->l2cc->l2cc, LDP_CFG_DEL); + } + mi->l2cc->l2cc.index = 0; +} + -+int l2cc_interface_startup(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++int l2cc_interface_startup(struct ldp_interface *mi) { ++ struct ldp *ldp = ldp_get(); + + if (!mi->l2cc->l2cc.index) { + return MPLS_FAILURE; + } + -+ mi->l2cc->l2cc.admin_state = MPLS_ADMIN_ENABLE; -+ ldp_cfg_l2cc_set(ldp->h, &mi->l2cc->l2cc, LDP_L2CC_CFG_ADMIN_STATE); ++ ldp_cfg_fec_set(ldp->h, &mi->l2cc->l2cc, LDP_CFG_ADD); + + return MPLS_SUCCESS; +} + -+int l2cc_interface_shutdown(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++int l2cc_interface_shutdown(struct ldp_interface *mi) { ++ struct ldp *ldp = ldp_get(); + + if (!mi->l2cc->l2cc.index) { + return MPLS_FAILURE; + } + -+ mi->l2cc->l2cc.admin_state = MPLS_ADMIN_DISABLE; -+ ldp_cfg_l2cc_set(ldp->h, &mi->l2cc->l2cc, LDP_L2CC_CFG_ADMIN_STATE); ++ ldp_cfg_fec_set(ldp->h, &mi->l2cc->l2cc, LDP_CFG_DEL); + + return MPLS_SUCCESS; +} + -+int l2cc_interface_admin_state_start(struct mpls_interface *mi) { -+ if (mi->l2cc->admin_up == MPLS_BOOL_TRUE && mpls_if_is_up(mi)) { ++int l2cc_interface_admin_state_start(struct ldp_interface *mi) { ++ if (mi->l2cc->admin_up == MPLS_BOOL_TRUE && ldp_interface_is_up(mi)) { + return l2cc_interface_shutdown(mi); + } + return MPLS_SUCCESS; +} + -+int l2cc_interface_admin_state_finish(struct mpls_interface *mi) { -+ if (mi->l2cc->admin_up == MPLS_BOOL_TRUE && mpls_if_is_up(mi)) { ++int l2cc_interface_admin_state_finish(struct ldp_interface *mi) { ++ if (mi->l2cc->admin_up == MPLS_BOOL_TRUE && ldp_interface_is_up(mi)) { + return l2cc_interface_startup(mi); + } + return MPLS_SUCCESS; +} + -+void l2cc_if_up(struct mpls_interface *mi) { ++void l2cc_if_up(struct ldp_interface *mi) { + if (mi->l2cc && mi->l2cc->admin_up == MPLS_BOOL_TRUE) { + l2cc_interface_startup(mi); + } +} + -+void l2cc_if_down(struct mpls_interface *mi) { ++void l2cc_if_down(struct ldp_interface *mi) { + if (mi->l2cc && mi->l2cc->admin_up == MPLS_BOOL_TRUE) { + l2cc_interface_shutdown(mi); + } +} -diff --exclude=.p4config -uNr zebra/mplsd/l2cc_interface.h zebra-ldp/mplsd/l2cc_interface.h ---- zebra/mplsd/l2cc_interface.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/l2cc_interface.h 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,30 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/l2cc_interface.h quagga-mpls/ldpd/l2cc_interface.h +--- quagga/ldpd/l2cc_interface.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/l2cc_interface.h 2004-05-24 21:35:01.000000000 -0500 +@@ -0,0 +1,29 @@ +#ifndef L2CC_IF_H +#define L2CC_IF_H + +#include "ldp_struct.h" + -+struct mpls_interface; ++struct ldp_interface; + +struct l2cc_interface { -+ struct mpls_interface *mi; -+ ldp_l2cc l2cc; ++ struct ldp_interface *mi; ++ mpls_fec l2cc; + mpls_bool admin_up; + mpls_bool create_on_hold; +}; + -+struct l2cc_interface *l2cc_if_new(struct mpls_interface *mi); ++struct l2cc_interface *l2cc_if_new(struct ldp_interface *mi); +void l2cc_if_free(struct l2cc_interface *li); + -+void l2cc_if_up(struct mpls_interface *mi); -+void l2cc_if_down(struct mpls_interface *mi); ++void l2cc_if_up(struct ldp_interface *mi); ++void l2cc_if_down(struct ldp_interface *mi); + -+int l2cc_interface_startup(struct mpls_interface *mi); -+int l2cc_interface_shutdown(struct mpls_interface *mi); -+ -+void l2cc_interface_create(struct mpls_interface *mi); -+void l2cc_interface_delete(struct mpls_interface *mi); -+int l2cc_interface_admin_state_start(struct mpls_interface *mi); -+int l2cc_interface_admin_state_finish(struct mpls_interface *mi); ++int l2cc_interface_startup(struct ldp_interface *mi); ++int l2cc_interface_shutdown(struct ldp_interface *mi); + ++void l2cc_interface_create(struct ldp_interface *mi); ++void l2cc_interface_delete(struct ldp_interface *mi); ++int l2cc_interface_admin_state_start(struct ldp_interface *mi); ++int l2cc_interface_admin_state_finish(struct ldp_interface *mi); + +#endif -diff --exclude=.p4config -uNr zebra/mplsd/ldp.c zebra-ldp/mplsd/ldp.c ---- zebra/mplsd/ldp.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp.c 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,141 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/ldp.c quagga-mpls/ldpd/ldp.c +--- quagga/ldpd/ldp.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp.c 2004-06-15 16:30:34.000000000 -0500 +@@ -0,0 +1,254 @@ +#include + +#include "memory.h" +#include "log.h" ++#include "thread.h" ++#include "prefix.h" ++#include "table.h" ++#include "linklist.h" ++#include "filter.h" ++#include "vty.h" ++#include "plist.h" + +#include "ldp.h" +#include "ldp_cfg.h" +#include "ldp_struct.h" +#include "ldp_interface.h" ++#include "ldp_zebra.h" + -+#include "mpls.h" -+#include "mpls_interface.h" ++#include "impl_fib.h" + +int ldp_shutdown(struct ldp *ldp) { + ldp_global g; @@ -2917,7 +2349,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp.c zebra-ldp/mplsd/ldp.c + g.lsr_identifier.u.ipv4 = router_id; + g.transport_address.type = MPLS_FAMILY_IPV4; + g.transport_address.u.ipv4 = router_id; -+ return ldp_cfg_global_set(ldp->h,&g, LDP_GLOBAL_CFG_LSR_IDENTIFIER|LDP_GLOBAL_CFG_TRANS_ADDR); ++ return ldp_cfg_global_set(ldp->h,&g, ++ LDP_GLOBAL_CFG_LSR_IDENTIFIER|LDP_GLOBAL_CFG_TRANS_ADDR); +} + +int ldp_router_id_update(struct ldp *ldp, struct prefix *router_id) { @@ -2934,96 +2367,227 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp.c zebra-ldp/mplsd/ldp.c + return 0; +} + -+static struct ldp *ldp_new(struct mpls *mpls) { -+ struct ldp *new = XMALLOC(MTYPE_MPLS_LDP, sizeof(struct ldp)); ++/* LDP instance top. */ ++struct ldp *ldp_top = NULL; ++ ++struct ldp *ldp_new(void) { ++ struct ldp *new = XMALLOC(MTYPE_LDP, sizeof(struct ldp)); + ldp_global g; ++ struct route_node *rn; ++ ++ struct interface *ifp; ++ struct connected *c; ++ listnode node, cnode; ++ struct ldp_interface *li; ++ struct ldp_addr addr; ++ struct prefix *p; + + memset(new,0,sizeof(*new)); + + new->h = ldp_cfg_open(new); + new->admin_up = MPLS_BOOL_TRUE; + new->lsr_id_is_static = 0; -+ new->mpls = mpls; ++ + new->egress = LDP_EGRESS_CONNECTED; + new->address = LDP_ADDRESS_ALL; + new->peer_list = list_new(); + -+ g.lsr_identifier.type = MPLS_FAMILY_IPV4; -+ g.lsr_identifier.u.ipv4 = ntohl(mpls->router_id.u.prefix4.s_addr); -+ g.transport_address.type = MPLS_FAMILY_IPV4; -+ g.transport_address.u.ipv4 = ntohl(mpls->router_id.u.prefix4.s_addr); ++ ldp_top = new; ++ ++ do_ldp_router_id_update(new, ntohl(router_id.u.prefix4.s_addr)); + g.admin_state = MPLS_ADMIN_ENABLE; -+#if MPLS_USE_LSR -+ g.lsr_handle = mpls->h; -+#endif -+ ldp_cfg_global_set(new->h,&g, -+ LDP_GLOBAL_CFG_LSR_IDENTIFIER|LDP_GLOBAL_CFG_LSR_HANDLE| -+ LDP_GLOBAL_CFG_ADMIN_STATE|LDP_GLOBAL_CFG_TRANS_ADDR); + ++ ldp_cfg_global_set(new->h,&g, LDP_GLOBAL_CFG_LSR_HANDLE| ++ LDP_GLOBAL_CFG_ADMIN_STATE); ++ ++ for (node = listhead(iflist); node; nextnode(node)) { ++ ifp = getdata(node); ++ MPLS_ASSERT(ifp->info); ++ li = ifp->info; ++ ++ ldp_interface_create(li); ++ ++ for (cnode = listhead (ifp->connected); cnode; nextnode (cnode)) { ++ c = getdata (cnode); ++ p = c->address; ++ if (p->family == AF_INET) { ++ prefix2mpls_inet_addr(p, &addr.address); ++ ldp_cfg_if_addr_set(new->h, &li->iff, &addr, LDP_CFG_ADD); ++ } ++ } ++ } ++ ++ rn = route_top(table); ++ while (rn) { ++ if (rn->info) { ++ struct mpls_node *mn; ++ struct listnode* ln; ++ struct mpls_nh *nh; ++ mpls_fec fec; ++ ++ zebra_prefix2mpls_fec(&rn->p, &fec); ++ mn = rn->info; ++ LIST_LOOP(mn->list, nh, ln) { ++ mpls_nexthop nexthop; ++ memcpy(&nexthop, &nh->info, sizeof(struct mpls_nexthop)); ++ ldp_add_ipv4(new, &fec, &nexthop); ++ } ++ } ++ rn = route_next2(rn); ++ } + return new; +} + +struct ldp *ldp_get() { -+ struct mpls_interface *mi; ++ if (ldp_top) { ++ return ldp_top; ++ } ++ return NULL; ++} ++ ++void ldp_finish(struct ldp *ldp) { ++ struct ldp_interface *li; + struct interface *ifp; + listnode node; + -+ struct mpls *mpls = mpls_get(); -+ if (mpls->ldp) { -+ return mpls->ldp; ++ ldp_admin_state_start(ldp); ++ ++#if 0 ++ rn = route_top(table); ++ while (rn) { ++ if (rn->info) { ++ mpls_fec fec; ++ ++ zebra_prefix2mpls_fec(&rn->p, &fec); ++ ldp_cfg_fec_get(ldp->h, &fec, 0); ++ ldp_cfg_fec_set(ldp->h, &fec, LDP_FEC_CFG_BY_INDEX|LDP_CFG_DEL); ++ } ++ rn = route_next2(rn); + } ++#endif ++ ++ ldp_cfg_close(ldp->h); ++ list_free(ldp->peer_list); ++ ++ XFREE(MTYPE_LDP,ldp); ++ ++ ldp_top = NULL; + -+ mpls->ldp = ldp_new(mpls); -+ for (node = listhead(mpls->iflist); node; nextnode(node)) { ++ /* it is key that ldp_interface_delete is called _after_ we ++ * set ldp_top to NULL. This is so the check for ldp fails ++ * and we do not try and send config changes into ldp */ ++ for (node = listhead(iflist); node; nextnode(node)) { + ifp = getdata(node); -+ mi = (struct mpls_interface*)ifp->info; -+ if (mi->ldp && mi->ldp->create_on_hold == MPLS_BOOL_TRUE) { -+ ldp_interface_create(mi); ++ li = (struct ldp_interface*)ifp->info; ++ if (li) { ++ ldp_interface_delete(li); + } -+ if (mi->l2cc && mi->l2cc->create_on_hold == MPLS_BOOL_TRUE) { -+ l2cc_interface_create(mi); ++#if 0 ++ if (li->l2cc && li->l2cc->l2cc.index) { ++ l2cc_interface_delete(li); + } ++#endif + } + -+ return mpls->ldp; +} + -+void ldp_finish(struct ldp *ldp) { -+ struct mpls *mpls = ldp->mpls; -+ struct interface *ifp; -+ struct mpls_interface *mi; -+ listnode node; ++int ldp_add_ipv4(struct ldp *ldp, mpls_fec *fec, ++ mpls_nexthop *nexthop) { ++ if (ldp_cfg_fec_get(ldp->h, fec, 0) != MPLS_SUCCESS) { ++ if (ldp_cfg_fec_set(ldp->h, fec, LDP_CFG_ADD) != MPLS_SUCCESS) { ++ MPLS_ASSERT(0); ++ } ++ } + -+ for (node = listhead(mpls->iflist); node; nextnode(node)) { -+ ifp = getdata(node); -+ mi = (struct mpls_interface*)ifp->info; -+ if (mi->ldp && mi->ldp->entity.index) { -+ ldp_interface_delete(mi); -+ } -+ if (mi->l2cc && mi->l2cc->l2cc.index) { -+ l2cc_interface_delete(mi); -+ } ++ if (ldp_cfg_fec_nexthop_get(ldp->h, fec, nexthop, ++ LDP_FEC_CFG_BY_INDEX) != MPLS_SUCCESS) { ++ if (ldp_cfg_fec_nexthop_set(ldp->h, fec, nexthop, ++ LDP_CFG_ADD|LDP_FEC_CFG_BY_INDEX) != MPLS_SUCCESS) { ++ MPLS_ASSERT(0); ++ } ++ } else { ++ MPLS_ASSERT(0); + } ++ return 0; ++} ++ ++int ldp_delete_ipv4(struct ldp *ldp, mpls_fec *fec, ++ mpls_nexthop *nexthop) { ++ if (ldp_cfg_fec_get(ldp->h, fec, 0) == MPLS_SUCCESS) { ++ if (ldp_cfg_fec_nexthop_get(ldp->h, fec, nexthop, ++ LDP_FEC_CFG_BY_INDEX) == MPLS_SUCCESS) { ++ if (ldp_cfg_fec_nexthop_set(ldp->h, fec, nexthop, ++ LDP_FEC_CFG_BY_INDEX|LDP_CFG_DEL| ++ LDP_FEC_NEXTHOP_CFG_BY_INDEX) != MPLS_SUCCESS) { ++ MPLS_ASSERT(0); ++ } ++ } else { ++ MPLS_ASSERT(0); ++ } ++ } else { ++ MPLS_ASSERT(0); ++ } ++ return 0; ++} ++ ++#if 0 ++/* Update access-list list. */ ++void mpls_access_list_update(struct access_list *access) { ++} ++ ++/* Update prefix-list list. */ ++void mpls_prefix_list_update(struct prefix_list *plist) { ++} ++#endif ++ ++void ldp_init() { ++ ++#if 0 ++ access_list_init(); ++ access_list_add_hook(mpls_access_list_update); ++ access_list_delete_hook(mpls_access_list_update); ++#endif + -+ ldp_admin_state_start(ldp); -+ ldp_cfg_close(ldp->h); -+ XFREE(MTYPE_MPLS_LDP,ldp); -+ mpls->ldp = NULL; -+ list_free(ldp->peer_list); +} -diff --exclude=.p4config -uNr zebra/mplsd/ldp.h zebra-ldp/mplsd/ldp.h ---- zebra/mplsd/ldp.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp.h 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,42 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/ldpd.conf.sample quagga-mpls/ldpd/ldpd.conf.sample +--- quagga/ldpd/ldpd.conf.sample 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldpd.conf.sample 2004-05-19 21:40:47.000000000 -0500 +@@ -0,0 +1,17 @@ ++! ++! Zebra configuration saved from vty ++! 2002/03/23 17:07:30 ++! ++hostname uml-1 ++password root ++enable password root ++! ++mpls ldp ++! ++interface lo ++! ++interface eth0 ++ mpls ldp ++! ++line vty ++! +diff --exclude=rsvpd -uNr quagga/ldpd/ldp.h quagga-mpls/ldpd/ldp.h +--- quagga/ldpd/ldp.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp.h 2004-06-03 21:50:05.000000000 -0500 +@@ -0,0 +1,49 @@ +#ifndef LDP_H +#define LDP_H + +#include ++#include "sockunion.h" +#include "prefix.h" ++#include "zclient.h" ++#include "linklist.h" ++#include "if.h" + +#include "ldp_struct.h" + -+struct mpls; ++#define LDP_DEFAULT_CONFIG "ldpd.conf" ++#define LDP_VTY_PORT 2610 + +typedef enum { + LDP_EGRESS_ALL, @@ -3038,7 +2602,6 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp.h zebra-ldp/mplsd/ldp.h +} ldp_address_mode; + +struct ldp { -+ struct mpls *mpls; + struct list *peer_list; + mpls_cfg_handle h; + mpls_bool admin_up; @@ -3048,6 +2611,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp.h zebra-ldp/mplsd/ldp.h +}; + +struct ldp *ldp_get(); ++struct ldp *ldp_new(); +void ldp_init(); +int ldp_router_id_update(struct ldp *ldp, struct prefix *router_id); +int do_ldp_router_id_update(struct ldp *ldp, unsigned int router_id); @@ -3055,170 +2619,480 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp.h zebra-ldp/mplsd/ldp.h + +int ldp_admin_state_start(struct ldp *ldp); +int ldp_admin_state_finish(struct ldp *ldp); ++int ldp_add_ipv4(struct ldp *ldp, mpls_fec *fec, mpls_nexthop *nexthop); ++int ldp_delete_ipv4(struct ldp *ldp, mpls_fec *fec, mpls_nexthop *nexthop); + +#endif -diff --exclude=.p4config -uNr zebra/mplsd/ldp_interface.c zebra-ldp/mplsd/ldp_interface.c ---- zebra/mplsd/ldp_interface.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp_interface.c 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,119 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_interface.c quagga-mpls/ldpd/ldp_interface.c +--- quagga/ldpd/ldp_interface.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_interface.c 2004-06-15 16:17:19.000000000 -0500 +@@ -0,0 +1,180 @@ +#include ++ ++#include "if.h" +#include "memory.h" + -+#include "ldp.h" +#include "ldp_cfg.h" +#include "ldp_struct.h" + -+#include "mpls.h" -+#include "mpls_interface.h" ++#include "ldp.h" ++#include "ldp_interface.h" ++#include "impl_mpls.h" + -+struct ldp_interface *ldp_if_new(struct mpls_interface *mi) { ++struct ldp_interface *ldp_interface_new(struct interface *ifp) { + struct ldp_interface *li; + -+ li = XMALLOC(MTYPE_MPLS_LDP, sizeof(struct ldp_interface)); ++ li = XMALLOC(MTYPE_LDP, sizeof(struct ldp_interface)); ++ if (!li) { ++ return NULL; ++ } + memset(li, 0, sizeof(struct ldp_interface)); -+ li->mi = mi; ++ li->ifp = ifp; ++ ifp->info = li; + -+ li->admin_up = MPLS_BOOL_TRUE; -+ li->create_on_hold = MPLS_BOOL_FALSE; ++ li->labelspace = -1; ++ ++ li->configured = MPLS_BOOL_FALSE; ++ li->admin_up = MPLS_BOOL_FALSE; ++ li->create_on_hold = MPLS_BOOL_TRUE; + ldp_entity_set_defaults(&li->entity); + + return li; +} + -+void ldp_if_free(struct ldp_interface *li) { -+ XFREE(MTYPE_MPLS_LDP, li); ++void ldp_interface_free(struct ldp_interface *li) { ++ XFREE(MTYPE_LDP, li); +} + -+void ldp_interface_create(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++int ldp_interface_create(struct ldp_interface *li) { ++ struct ldp *ldp = ldp_get(); ++ ++ if (!ldp) { ++ li->create_on_hold = MPLS_BOOL_TRUE; ++ return MPLS_SUCCESS; ++ } ++ ++ if (!li->iff.index) { ++ /* tell LDP about this interface */ ++ li->iff.label_space = li->labelspace; ++ li->iff.handle = li->ifp; ++ ++ ldp_cfg_if_set(ldp->h, &li->iff,LDP_CFG_ADD|LDP_IF_CFG_LABEL_SPACE); ++ ldp_cfg_if_get(ldp->h, &li->iff, 0xFFFFFFFF); ++ } + -+ mi->ldp->create_on_hold = MPLS_BOOL_FALSE; ++ if (li->labelspace != li->iff.label_space) { ++ li->iff.label_space = li->labelspace; ++ ldp_cfg_if_set(ldp->h, &li->iff, LDP_IF_CFG_LABEL_SPACE); ++ } + -+ strncpy(mi->ldp->iff.name,mi->ifp->name,IFNAMSIZ); -+ mi->ldp->iff.label_space = mi->labelspace; ++ if (li->configured == MPLS_BOOL_FALSE) { ++ return MPLS_SUCCESS; ++ } + -+ ldp_cfg_if_set(ldp->h, &mi->ldp->iff, LDP_CFG_ADD | LDP_IF_CFG_LABEL_SPACE); ++ li->create_on_hold = MPLS_BOOL_FALSE; + -+ mi->ldp->entity.sub_index = mi->ldp->iff.index; -+ mi->ldp->entity.entity_type = LDP_DIRECT; -+ mi->ldp->entity.admin_state = MPLS_ADMIN_DISABLE; -+ mi->ldp->entity.transport_address.type = MPLS_FAMILY_NONE; ++ li->entity.sub_index = li->iff.index; ++ li->entity.entity_type = LDP_DIRECT; ++ li->entity.admin_state = MPLS_ADMIN_DISABLE; ++ li->entity.transport_address.type = MPLS_FAMILY_NONE; + -+ ldp_cfg_entity_set(ldp->h, &mi->ldp->entity, ++ ldp_cfg_entity_set(ldp->h, &li->entity, + LDP_CFG_ADD | LDP_ENTITY_CFG_SUB_INDEX | + LDP_ENTITY_CFG_ADMIN_STATE | LDP_ENTITY_CFG_TRANS_ADDR); + -+ ldp_cfg_entity_get(ldp->h, &mi->ldp->entity, 0xFFFFFFFF); -+ ldp_cfg_if_get(ldp->h, &mi->ldp->iff, 0xFFFFFFFF); -+ -+ ldp_interface_admin_state_finish(mi); ++ ldp_cfg_entity_get(ldp->h, &li->entity, 0xFFFFFFFF); ++ return ldp_interface_admin_state_finish(li); +} + -+void ldp_interface_delete(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++void ldp_interface_delete(struct ldp_interface *li) { ++ struct ldp *ldp = ldp_get(); + -+ mi->ldp->create_on_hold = MPLS_BOOL_TRUE; -+ mi->ldp->entity.admin_state = MPLS_ADMIN_DISABLE; ++ li->create_on_hold = MPLS_BOOL_TRUE; ++ li->entity.admin_state = MPLS_ADMIN_DISABLE; + + if (ldp) { -+ ldp_interface_admin_state_start(mi); -+ ldp_cfg_entity_set(ldp->h, &mi->ldp->entity, LDP_CFG_DEL); -+ ldp_cfg_if_set(ldp->h, &mi->ldp->iff, LDP_CFG_DEL); ++ ldp_interface_admin_state_start(li); ++ if (li->entity.index) { ++ ldp_cfg_entity_set(ldp->h, &li->entity, LDP_CFG_DEL); ++ } ++ if (li->iff.index) { ++ ldp_cfg_if_set(ldp->h, &li->iff, LDP_CFG_DEL); ++ } + } -+ mi->ldp->entity.index = 0; -+ mi->ldp->iff.index = 0; ++ li->entity.index = 0; ++ li->iff.index = 0; +} + -+int ldp_interface_startup(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++int ldp_interface_startup(struct ldp_interface *li) { ++ struct ldp *ldp = ldp_get(); + -+ if (!mi->ldp->iff.index) { -+ return MPLS_FAILURE; -+ } ++ MPLS_ASSERT(ldp && li->iff.index); + -+ mi->ldp->entity.admin_state = MPLS_ADMIN_ENABLE; -+ ldp_cfg_entity_set(ldp->h, &mi->ldp->entity, LDP_ENTITY_CFG_ADMIN_STATE); ++ if (!li->entity.index) { ++ return MPLS_SUCCESS; ++ } ++ li->entity.admin_state = MPLS_ADMIN_ENABLE; ++ ldp_cfg_entity_set(ldp->h, &li->entity, LDP_ENTITY_CFG_ADMIN_STATE); + + return MPLS_SUCCESS; +} + -+int ldp_interface_shutdown(struct mpls_interface *mi) { -+ struct ldp *ldp = mi->mpls->ldp; ++int ldp_interface_shutdown(struct ldp_interface *li) { ++ struct ldp *ldp = ldp_get(); + -+ if (!mi->ldp->iff.index) { -+ return MPLS_FAILURE; -+ } ++ MPLS_ASSERT(ldp && li->iff.index); + -+ mi->ldp->entity.admin_state = MPLS_ADMIN_DISABLE; -+ ldp_cfg_entity_set(ldp->h, &mi->ldp->entity, LDP_ENTITY_CFG_ADMIN_STATE); ++ if (!li->entity.index) { ++ return MPLS_SUCCESS; ++ } ++ li->entity.admin_state = MPLS_ADMIN_DISABLE; ++ ldp_cfg_entity_set(ldp->h, &li->entity, LDP_ENTITY_CFG_ADMIN_STATE); + + return MPLS_SUCCESS; +} + -+int ldp_interface_admin_state_start(struct mpls_interface *mi) { -+ if (mi->ldp->admin_up == MPLS_BOOL_TRUE && mpls_if_is_up(mi)) { -+ return ldp_interface_shutdown(mi); ++int ldp_interface_admin_state_start(struct ldp_interface *li) { ++ if (li->admin_up == MPLS_BOOL_TRUE && ldp_interface_is_up(li)) { ++ return ldp_interface_shutdown(li); + } + return MPLS_SUCCESS; +} + -+int ldp_interface_admin_state_finish(struct mpls_interface *mi) { -+ if (mi->ldp->admin_up == MPLS_BOOL_TRUE && mpls_if_is_up(mi)) { -+ return ldp_interface_startup(mi); ++int ldp_interface_admin_state_finish(struct ldp_interface *li) { ++ if (li->admin_up == MPLS_BOOL_TRUE && ldp_interface_is_up(li)) { ++ return ldp_interface_startup(li); + } + return MPLS_SUCCESS; +} + -+void ldp_if_up(struct mpls_interface *mi) { -+ if (mi->ldp && mi->ldp->admin_up == MPLS_BOOL_TRUE) { -+ ldp_interface_startup(mi); ++void ldp_interface_up(struct ldp_interface *li) { ++ if (li->configured == MPLS_BOOL_TRUE && li->admin_up == MPLS_BOOL_TRUE) { ++ ldp_interface_startup(li); ++ } ++} ++ ++void ldp_interface_down(struct ldp_interface *li) { ++ if (li->configured == MPLS_BOOL_TRUE && li->admin_up == MPLS_BOOL_TRUE) { ++ ldp_interface_shutdown(li); + } +} + -+void ldp_if_down(struct mpls_interface *mi) { -+ if (mi->ldp && mi->ldp->admin_up == MPLS_BOOL_TRUE) { -+ ldp_interface_shutdown(mi); ++int ldp_interface_is_up(struct ldp_interface *li) { ++ return if_is_up(li->ifp); ++} ++ ++static int ldp_interface_new_hook(struct interface *ifp) { ++ if (!ldp_interface_new(ifp)) { ++ return 1; ++ } ++ ++ ldp_interface_create(ifp->info); ++ ++ return 0; ++} ++ ++static int ldp_interface_delete_hook(struct interface *ifp) { ++ if (ifp->info) { ++ ldp_interface_delete(ifp->info); ++ ldp_interface_free(ifp->info); + } ++ ifp->info = NULL; ++ return 0; ++} ++ ++void ldp_interface_init() { ++ /* Initialize Zebra interface data structure. */ ++ if_init(); ++ if_add_hook(IF_NEW_HOOK, ldp_interface_new_hook); ++ if_add_hook(IF_DELETE_HOOK, ldp_interface_delete_hook); +} -diff --exclude=.p4config -uNr zebra/mplsd/ldp_interface.h zebra-ldp/mplsd/ldp_interface.h ---- zebra/mplsd/ldp_interface.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp_interface.h 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,31 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_interface.h quagga-mpls/ldpd/ldp_interface.h +--- quagga/ldpd/ldp_interface.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_interface.h 2004-06-15 16:00:29.000000000 -0500 +@@ -0,0 +1,44 @@ +#ifndef LDP_IF_H +#define LDP_IF_H + ++#include ++ ++#include "if.h" ++#include "command.h" ++#include "prefix.h" ++#include "zclient.h" ++ +#include "ldp_struct.h" ++#include "l2cc_interface.h" ++ ++struct ldp_interface { ++ struct interface *ifp; ++ struct connected *connected; ++ struct l2cc_interface *l2cc; ++ ++ ldp_entity entity; ++ ldp_if iff; ++ mpls_bool configured; ++ mpls_bool admin_up; ++ mpls_bool create_on_hold; ++ int labelspace; ++}; ++ ++struct ldp_interface *ldp_interface_new(struct interface *ifp); ++void ldp_interface_free(struct ldp_interface *li); ++ ++void ldp_interface_up(struct ldp_interface *li); ++void ldp_interface_down(struct ldp_interface *li); ++ ++int ldp_interface_startup(struct ldp_interface *li); ++int ldp_interface_shutdown(struct ldp_interface *li); ++ ++int ldp_interface_create(struct ldp_interface *li); ++void ldp_interface_delete(struct ldp_interface *li); ++int ldp_interface_admin_state_start(struct ldp_interface *li); ++int ldp_interface_admin_state_finish(struct ldp_interface *li); ++int ldp_interface_is_up(struct ldp_interface *li); ++ ++void ldp_interface_init(); ++ ++#endif +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_main.c quagga-mpls/ldpd/ldp_main.c +--- quagga/ldpd/ldp_main.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_main.c 2004-06-09 21:48:01.000000000 -0500 +@@ -0,0 +1,230 @@ ++#include ++ ++#include "version.h" ++#include "getopt.h" ++#include "command.h" ++#include "thread.h" ++#include "filter.h" ++#include "memory.h" ++#include "prefix.h" ++#include "log.h" ++ ++#include "ldp.h" ++#include "ldp_vty.h" ++#include "ldp_zebra.h" ++#include "ldp_interface.h" ++ ++/* Configuration filename and directory. */ ++char config_current[] = LDP_DEFAULT_CONFIG; ++char config_default[] = SYSCONFDIR LDP_DEFAULT_CONFIG; ++ ++/* Command line options. */ ++struct option longopts[] = ++{ ++ { "daemon", no_argument, NULL, 'd'}, ++ { "config_file", required_argument, NULL, 'f'}, ++ { "log_mode", no_argument, NULL, 'l'}, ++ { "help", no_argument, NULL, 'h'}, ++ { "vty_port", required_argument, NULL, 'P'}, ++ { "vty_addr", required_argument, NULL, 'A'}, ++ { "version", no_argument, NULL, 'v'}, ++ { 0 } ++}; ++ ++/* Master of threads. */ ++struct thread_master *master = NULL; ++ ++/* Process ID saved for use by init system */ ++char *pid_file = PATH_LDPD_PID; ++ ++/* Help information display. */ ++static void ++usage (char *progname, int status) ++{ ++ if (status != 0) ++ fprintf (stderr, "Try `%s --help' for more information.\n", progname); ++ else ++ { ++ printf ("Usage : %s [OPTION...]\n\n\ ++Daemon which manages LDP related configuration.\n\n\ ++-d, --daemon Runs in daemon mode\n\ ++-f, --config_file Set configuration file name\n\ ++-l, --log_mode Set verbose log mode flag\n\ ++-h, --help Display this help and exit\n\ ++-P, --vty_port Set vty's port number\n\ ++-A, --vty_addr Set vty's bind address\n\ ++-v, --version Print program version\n\ ++\n\ ++Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS); ++ } ++ ++ exit (status); ++} ++ ++/* SIGHUP handler. */ ++void ++sighup (int sig) ++{ ++ zlog_info ("SIGHUP received"); ++ ++ /* Reload of config file. */ ++ ; ++} ++ ++/* SIGINT handler. */ ++void ++sigint (int sig) ++{ ++ zlog_info ("Terminating on signal"); ++ ++ exit (0); ++} ++ ++/* SIGUSR1 handler. */ ++void ++sigusr1 (int sig) ++{ ++ zlog_rotate (NULL); ++} ++ ++/* Signale wrapper. */ ++RETSIGTYPE * ++signal_set (int signo, void (*func)(int)) ++{ ++ int ret; ++ struct sigaction sig; ++ struct sigaction osig; ++ ++ sig.sa_handler = func; ++ sigemptyset (&sig.sa_mask); ++ sig.sa_flags = 0; ++#ifdef SA_RESTART ++ sig.sa_flags |= SA_RESTART; ++#endif /* SA_RESTART */ ++ ++ ret = sigaction (signo, &sig, &osig); ++ ++ if (ret < 0) ++ return (SIG_ERR); ++ else ++ return (osig.sa_handler); ++} ++ ++/* Initialization of signal handles. */ ++void ++signal_init () ++{ ++ signal_set (SIGHUP, sighup); ++ signal_set (SIGINT, sigint); ++ signal_set (SIGTERM, sigint); ++ signal_set (SIGPIPE, SIG_IGN); ++ signal_set (SIGUSR1, sigusr1); ++} ++ ++/* Main startup routine. */ ++int ++main (int argc, char **argv) ++{ ++ char *p; ++ int vty_port = 0; ++ char *vty_addr = NULL; ++ int daemon_mode = 0; ++ char *config_file = NULL; ++ char *progname; ++ struct thread thread; ++ ++ /* Set umask before anything for security */ ++ umask (0027); ++ ++ /* preserve my name */ ++ progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); ++ ++ zlog_default = openzlog (progname, ZLOG_STDOUT, ZLOG_LDP, ++ LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON); ++ ++ while (1) ++ { ++ int opt; ++ ++ opt = getopt_long (argc, argv, "bdklf:hP:rv", longopts, 0); ++ ++ if (opt == EOF) ++ break; ++ ++ switch (opt) ++ { ++ case 0: ++ break; ++ case 'd': ++ daemon_mode = 1; ++ break; ++ case 'l': ++ /* log_mode = 1; */ ++ break; ++ case 'f': ++ config_file = optarg; ++ break; ++ case 'A': ++ vty_addr = optarg; ++ break; ++ case 'P': ++ vty_port = atoi (optarg); ++ break; ++ case 'v': ++ print_version (progname); ++ exit (0); ++ break; ++ case 'h': ++ usage (progname, 0); ++ break; ++ default: ++ usage (progname, 1); ++ break; ++ } ++ } ++ ++ /* Make master thread emulator. */ ++ master = thread_master_create(); + -+struct mpls_interface; ++ /* Vty related initialize. */ ++ signal_init(); ++ cmd_init(1); ++ vty_init(master); ++ memory_init(); + -+struct ldp_interface { -+ struct mpls_interface *mi; -+ ldp_entity entity; -+ ldp_if iff; -+ mpls_bool admin_up; -+ mpls_bool create_on_hold; -+}; ++ /* LDP inits */ ++ ldp_init(); ++ ldp_interface_init(); ++ ldp_vty_init(); ++ ldp_vty_show_init(); ++ ldp_zebra_init(); + -+struct ldp_interface *ldp_if_new(struct mpls_interface *mi); -+void ldp_if_free(struct ldp_interface *li); ++ sort_node(); + -+void ldp_if_up(struct mpls_interface *mi); -+void ldp_if_down(struct mpls_interface *mi); ++ /* Configuration file read*/ ++ vty_read_config(config_file, config_current, config_default); + -+int ldp_interface_startup(struct mpls_interface *mi); -+int ldp_interface_shutdown(struct mpls_interface *mi); ++ /* Daemonize. */ ++ if (daemon_mode) { ++ daemon(0, 0); ++ } + -+void ldp_interface_create(struct mpls_interface *mi); -+void ldp_interface_delete(struct mpls_interface *mi); -+int ldp_interface_admin_state_start(struct mpls_interface *mi); -+int ldp_interface_admin_state_finish(struct mpls_interface *mi); ++ /* Output pid of zebra. */ ++ pid_output(pid_file); + ++ /* Create VTY socket */ ++ vty_serv_sock(vty_addr, ++ vty_port ? vty_port : LDP_VTY_PORT, LDP_VTYSH_PATH); + ++#ifdef DEBUG ++ /* Print banner. */ ++ zlog (NULL, LOG_INFO, "LDPd (%s) starts", QUAGGA_VERSION); +#endif -diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.c zebra-ldp/mplsd/ldp_remote_peer.c ---- zebra/mplsd/ldp_remote_peer.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp_remote_peer.c 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,131 @@ ++ ++ while(thread_fetch(master, &thread)) { ++ thread_call(&thread); ++ } ++ ++ /* Not reached... */ ++ exit (0); ++} +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_remote_peer.c quagga-mpls/ldpd/ldp_remote_peer.c +--- quagga/ldpd/ldp_remote_peer.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_remote_peer.c 2004-05-26 22:01:06.000000000 -0500 +@@ -0,0 +1,129 @@ +#include +#include "memory.h" + @@ -3226,8 +3100,6 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.c zebra-ldp/mplsd/ldp_ +#include "ldp_cfg.h" +#include "ldp_struct.h" +#include "mpls_compare.h" -+ -+#include "mpls.h" +#include "ldp_remote_peer.h" + +struct ldp_remote_peer *ldp_remote_peer_find(struct ldp *ldp, @@ -3248,7 +3120,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.c zebra-ldp/mplsd/ldp_ +struct ldp_remote_peer *ldp_remote_peer_new(struct ldp *ldp) { + struct ldp_remote_peer *rp; + -+ rp = XMALLOC(MTYPE_MPLS_LDP, sizeof(struct ldp_remote_peer)); ++ rp = XMALLOC(MTYPE_LDP, sizeof(struct ldp_remote_peer)); + memset(rp, 0, sizeof(struct ldp_remote_peer)); + rp->ldp = ldp; + @@ -3259,7 +3131,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.c zebra-ldp/mplsd/ldp_ +} + +void ldp_remote_peer_free(struct ldp_remote_peer *rp) { -+ XFREE(MTYPE_MPLS_LDP, rp); ++ XFREE(MTYPE_LDP, rp); +} + +void ldp_remote_peer_create(struct ldp_remote_peer *rp, @@ -3350,9 +3222,9 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.c zebra-ldp/mplsd/ldp_ + ldp_remote_peer_shutdown(rp); + } +} -diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.h zebra-ldp/mplsd/ldp_remote_peer.h ---- zebra/mplsd/ldp_remote_peer.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp_remote_peer.h 2003-03-29 01:12:02.000000000 -0600 +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_remote_peer.h quagga-mpls/ldpd/ldp_remote_peer.h +--- quagga/ldpd/ldp_remote_peer.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_remote_peer.h 2004-05-19 21:40:47.000000000 -0500 @@ -0,0 +1,28 @@ +#ifndef LDP_REMOTE_PEER_H +#define LDP_REMOTE_PEER_H @@ -3382,82 +3254,87 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_remote_peer.h zebra-ldp/mplsd/ldp_ +int ldp_remote_peer_admin_state_finish(struct ldp_remote_peer *rp); + +#endif -diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c ---- zebra/mplsd/ldp_vty.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp_vty.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,2180 @@ +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_vty.c quagga-mpls/ldpd/ldp_vty.c +--- quagga/ldpd/ldp_vty.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_vty.c 2004-06-15 16:37:09.000000000 -0500 +@@ -0,0 +1,2470 @@ +#include + ++#include "zclient.h" ++#include "vty.h" ++#include "command.h" ++#include "table.h" ++ +#include "ldp.h" +#include "ldp_cfg.h" -+#include "ldp_struct.h" ++#include "ldp_vty.h" +#include "ldp_interface.h" ++#include "ldp_struct.h" +#include "ldp_remote_peer.h" ++#include "ldp_zebra.h" + +#include "impl_mpls.h" + -+#include "mpls.h" -+#include "mpls_interface.h" -+#include "mpls_vty.h" -+ -+#include "command.h" -+#include "zclient.h" -+#include "vty.h" -+ +uint32_t ldp_traceflags = 0; +uint8_t trace_buffer[16834]; +int trace_buffer_len = 0; + -+char *session_state[6] = { "NONE", "NON-EXIST", "INIT", ++static char *session_state[6] = { "NONE", "NON-EXIST", "INIT", + "OPENSENT", "OPENRECV", "OPERATIONAL" }; -+char *adj_role[3] = { "INVALID", "PASSIVE", "ACTIVE" }; -+char *attr_state[12] = { "REQ_RECV", "REQ_SENT", "MAP_RECV", "MAP_SENT", ++// static char *adj_role[3] = { "INVALID", "PASSIVE", "ACTIVE" }; ++static char *attr_state[12] = { "REQ_RECV", "REQ_SENT", "MAP_RECV", "MAP_SENT", + "WITH_SENT", "WITH_RECV", "NO_LABEL_RESOURCE_SENT", + "NO_LABEL_RESOURCE_RECV", "ABORT_SENT", "ABORT_RECV", + "NOTIF_SENT", "NOTIF_RECV" }; -+char *oper_state[2] = { "UP", "DOWN" }; -+char *control_mode[3] = { "UNKNOWN", "INDEPENDENT", "ORDERED" }; -+char *retention_mode[3] = { "UNKNOWN", "LIBERAL", "CONSERVATIVE" }; -+char *repair_mode[3] = { "UNKNOWN", "LOCAL", "GLOBAL" }; -+char *loop_detect_mode[5] = { "NONE", "HOPCOUNT", "PATHVECTOR", ++// static char *oper_state[2] = { "UP", "DOWN" }; ++static char *control_mode[3] = { "UNKNOWN", "INDEPENDENT", "ORDERED" }; ++static char *retention_mode[3] = { "UNKNOWN", "LIBERAL", "CONSERVATIVE" }; ++static char *repair_mode[3] = { "UNKNOWN", "LOCAL", "GLOBAL" }; ++static char *loop_detect_mode[5] = { "NONE", "HOPCOUNT", "PATHVECTOR", + "HOPCOUNT PATHVECTOR", "OTHER" }; +char *bool[2] = { "FALSE", "TRUE" }; -+char *admin_state[3] = { "NONE", "ENABLED", "DISABLED" }; -+char *distribution_mode[2] = { "UNSOLICITED", "ONDEMAND" }; ++static char *admin_state[3] = { "NONE", "ENABLED", "DISABLED" }; ++static char *distribution_mode[2] = { "UNSOLICITED", "ONDEMAND" }; + +extern struct zclient *zclient; + -+DEFUN (mpls_ldp, -+ mpls_ldp_cmd, -+ "mpls ldp", ++DEFUN (ldp, ++ ldp_cmd, ++ "mpls ip", + "MPLS configuration\n" -+ "Start LDP configuration\n") { ++ "Dynamic Label distribution via LDP\n") { + -+ vty->node = MPLS_LDP_NODE; ++ vty->node = LDP_NODE; + vty->index = ldp_get(); -+ ++ if (!vty->index) { ++ vty->index = ldp_new(); ++ if (!vty->index) { ++ vty_out (vty, "Unable to create LDP instance.%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ } + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp, -+ no_mpls_ldp_cmd, -+ "no mpls ldp", ++DEFUN (no_ldp, ++ no_ldp_cmd, ++ "no mpls ip", + NO_STR + "MPLS configuration\n" -+ "Global LDP configuration\n") { -+ struct mpls *mpls = mpls_get(); ++ "Dynamic Label distribution via LDP\n") { ++ struct ldp *ldp = ldp_get(); + -+ if (!mpls->ldp) { ++ if (!ldp) { + vty_out (vty, "There isn't active an LDP instance.%s", VTY_NEWLINE); + return CMD_WARNING; + } + -+ ldp_finish(mpls->ldp); ++ ldp_finish(ldp); + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_lsrid, -+ mpls_ldp_lsrid_cmd, ++DEFUN (ldp_lsrid, ++ ldp_lsrid_cmd, + "lsr-id A.B.C.D", + "LDP Label Switch Router Identifier\n" + "IP Address\n") { @@ -3472,8 +3349,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_lsrid, -+ no_mpls_ldp_lsrid_cmd, ++DEFUN (no_ldp_lsrid, ++ no_ldp_lsrid_cmd, + "no lsr-id", + NO_STR + "LDP LSRID\n") { @@ -3482,14 +3359,14 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + ldp->lsr_id_is_static = MPLS_BOOL_FALSE; + + ldp_admin_state_start(ldp); -+ do_ldp_router_id_update(ldp, ntohl(ldp->mpls->router_id.u.prefix4.s_addr)); ++ do_ldp_router_id_update(ldp, ntohl(router_id.u.prefix4.s_addr)); + ldp_admin_state_finish(ldp); + + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_disable, -+ mpls_ldp_disable_cmd, ++DEFUN (ldp_disable, ++ ldp_disable_cmd, + "disable", + "Disable\n") { + struct ldp *ldp = (struct ldp*)vty->index; @@ -3501,8 +3378,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_disable, -+ no_mpls_ldp_disable_cmd, ++DEFUN (no_ldp_disable, ++ no_ldp_disable_cmd, + "no disable", + NO_STR + "Disable\n") { @@ -3515,8 +3392,10 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_lsp_control_mode, -+ mpls_ldp_lsp_control_mode_cmd, ++#if 0 ++ ++DEFUN (ldp_lsp_control_mode, ++ ldp_lsp_control_mode_cmd, + "lsp-control-mode (independent|ordered)", + "control mode\n" + "independent or ordered control mode\n") { @@ -3538,8 +3417,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_lsp_control_mode, -+ no_mpls_ldp_lsp_control_mode_cmd, ++DEFUN (no_ldp_lsp_control_mode, ++ no_ldp_lsp_control_mode_cmd, + "no lsp-control-mode", + NO_STR + "control mode\n") { @@ -3555,8 +3434,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_label_retention_mode, -+ mpls_ldp_label_retention_mode_cmd, ++DEFUN (ldp_label_retention_mode, ++ ldp_label_retention_mode_cmd, + "label-retention-mode (liberal|conservative)", + "label retention mode\n" + "liberal or conservative retention mode\n") { @@ -3578,8 +3457,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_label_retention_mode, -+ no_mpls_ldp_label_retention_mode_cmd, ++DEFUN (no_ldp_label_retention_mode, ++ no_ldp_label_retention_mode_cmd, + "no label-retention-mode", + NO_STR + "label retiontion mode\n") { @@ -3595,8 +3474,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_lsp_repair_mode, -+ mpls_ldp_lsp_repair_mode_cmd, ++DEFUN (ldp_lsp_repair_mode, ++ ldp_lsp_repair_mode_cmd, + "lsp-repair-mode (local|global)", + "repair mode\n" + "local or global repair mode\n") { @@ -3615,8 +3494,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_lsp_repair_mode, -+ no_mpls_ldp_lsp_repair_mode_cmd, ++DEFUN (no_ldp_lsp_repair_mode, ++ no_ldp_lsp_repair_mode_cmd, + "no lsp-repair-mode", + NO_STR + "repair mode\n") { @@ -3629,8 +3508,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_propogate_release, -+ mpls_ldp_propogate_release_cmd, ++DEFUN (ldp_propogate_release, ++ ldp_propogate_release_cmd, + "propagate-release", + "propagate release\n") { + struct ldp *ldp = (struct ldp*)vty->index; @@ -3642,8 +3521,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_propogate_release, -+ no_mpls_ldp_propogate_release_cmd, ++DEFUN (no_ldp_propogate_release, ++ no_ldp_propogate_release_cmd, + "no propagate-release", + NO_STR + "propagate release\n") { @@ -3656,8 +3535,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_label_merge, -+ mpls_ldp_label_merge_cmd, ++DEFUN (ldp_label_merge, ++ ldp_label_merge_cmd, + "label-merge", + "label merge\n") { + struct ldp *ldp = (struct ldp*)vty->index; @@ -3672,8 +3551,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_label_merge, -+ no_mpls_ldp_label_merge_cmd, ++DEFUN (no_ldp_label_merge, ++ no_ldp_label_merge_cmd, + "no label-merge", + NO_STR + "label merge\n") { @@ -3689,8 +3568,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_loop_detection_mode, -+ mpls_ldp_loop_detection_mode_cmd, ++DEFUN (ldp_loop_detection_mode, ++ ldp_loop_detection_mode_cmd, + "loop-detection-mode (hop|path|both)", + "loop detection\n" + "Path Vector, Hop Count, or both\n") { @@ -3711,8 +3590,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_loop_detection_mode, -+ no_mpls_ldp_loop_detection_mode_cmd, ++DEFUN (no_ldp_loop_detection_mode, ++ no_ldp_loop_detection_mode_cmd, + "no loop-detection-mode (path|hop|both)", + NO_STR + "loop detection\n") { @@ -3725,8 +3604,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_ttl_less_domain, -+ mpls_ldp_ttl_less_domain_cmd, ++DEFUN (ldp_ttl_less_domain, ++ ldp_ttl_less_domain_cmd, + "ttl-less-domain", + "TTL-less domain\n") { + struct ldp *ldp = (struct ldp*)vty->index; @@ -3738,8 +3617,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_ttl_less_domain, -+ no_mpls_ldp_ttl_less_domain_cmd, ++DEFUN (no_ldp_ttl_less_domain, ++ no_ldp_ttl_less_domain_cmd, + "no ttl-less-domain", + NO_STR + "TTL-less domain\n") { @@ -3752,8 +3631,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_local_tcp_port, -+ mpls_ldp_local_tcp_port_cmd, ++DEFUN (ldp_local_tcp_port, ++ ldp_local_tcp_port_cmd, + "local-tcp-port <1-65535>", + "local TCP port\n" + "TCP port number\n") { @@ -3769,8 +3648,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_local_tcp_port, -+ no_mpls_ldp_local_tcp_port_cmd, ++DEFUN (no_ldp_local_tcp_port, ++ no_ldp_local_tcp_port_cmd, + "no local-tcp-port", + NO_STR + "local TCP port\n") { @@ -3786,8 +3665,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_local_udp_port, -+ mpls_ldp_local_udp_port_cmd, ++DEFUN (ldp_local_udp_port, ++ ldp_local_udp_port_cmd, + "local-udp-port <1-65535>", + "local UDP port\n" + "UDP port number\n") { @@ -3803,8 +3682,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_local_udp_port, -+ no_mpls_ldp_local_udp_port_cmd, ++DEFUN (no_ldp_local_udp_port, ++ no_ldp_local_udp_port_cmd, + "no local-udp-port", + NO_STR + "local UDP port\n") { @@ -3820,8 +3699,10 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_address, -+ mpls_ldp_trace_address_cmd, ++#endif ++ ++DEFUN (ldp_trace_address, ++ ldp_trace_address_cmd, + "trace address", + "LDP debugging\n" + "Address PDUs\n") { @@ -3829,8 +3710,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_binding, -+ mpls_ldp_trace_binding_cmd, ++DEFUN (ldp_trace_binding, ++ ldp_trace_binding_cmd, + "trace binding", + "LDP debugging\n" + "Label Bindings\n") { @@ -3838,8 +3719,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_debug, -+ mpls_ldp_trace_debug_cmd, ++DEFUN (ldp_trace_debug, ++ ldp_trace_debug_cmd, + "trace debug", + "LDP debugging\n" + "Debug Messages\n") { @@ -3847,8 +3728,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_error, -+ mpls_ldp_trace_error_cmd, ++DEFUN (ldp_trace_error, ++ ldp_trace_error_cmd, + "trace error", + "LDP debugging\n" + "Error Conditions\n") { @@ -3856,8 +3737,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_event, -+ mpls_ldp_trace_event_cmd, ++DEFUN (ldp_trace_event, ++ ldp_trace_event_cmd, + "trace event", + "LDP debugging\n" + "LDP Events\n") { @@ -3865,8 +3746,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_general, -+ mpls_ldp_trace_general_cmd, ++DEFUN (ldp_trace_general, ++ ldp_trace_general_cmd, + "trace general", + "LDP debugging\n" + "General Messages\n") { @@ -3874,8 +3755,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_init, -+ mpls_ldp_trace_init_cmd, ++DEFUN (ldp_trace_init, ++ ldp_trace_init_cmd, + "trace init", + "LDP debugging\n" + "Init PDUs\n") { @@ -3883,8 +3764,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_label, -+ mpls_ldp_trace_label_cmd, ++DEFUN (ldp_trace_label, ++ ldp_trace_label_cmd, + "trace label", + "LDP debugging\n" + "Label PDUs\n") { @@ -3892,8 +3773,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_normal, -+ mpls_ldp_trace_normal_cmd, ++DEFUN (ldp_trace_normal, ++ ldp_trace_normal_cmd, + "trace normal", + "LDP debugging\n" + "Normal Messages\n") { @@ -3901,8 +3782,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_notif, -+ mpls_ldp_trace_notif_cmd, ++DEFUN (ldp_trace_notif, ++ ldp_trace_notif_cmd, + "trace notification", + "LDP debugging\n" + "Notification PDUs\n") { @@ -3910,8 +3791,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_packet_dump, -+ mpls_ldp_trace_packet_dump_cmd, ++DEFUN (ldp_trace_packet_dump, ++ ldp_trace_packet_dump_cmd, + "trace packet-dump", + "LDP debugging\n" + "Packet Dump\n") { @@ -3919,8 +3800,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_packet, -+ mpls_ldp_trace_packet_cmd, ++DEFUN (ldp_trace_packet, ++ ldp_trace_packet_cmd, + "trace packet", + "LDP debugging\n" + "Packet tracing\n") { @@ -3928,8 +3809,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_path, -+ mpls_ldp_trace_path_cmd, ++DEFUN (ldp_trace_path, ++ ldp_trace_path_cmd, + "trace path", + "LDP debugging\n" + "PATH Info\n") { @@ -3937,8 +3818,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_periodic, -+ mpls_ldp_trace_periodic_cmd, ++DEFUN (ldp_trace_periodic, ++ ldp_trace_periodic_cmd, + "trace periodic", + "LDP debugging\n" + "Periodic PDUs\n") { @@ -3946,8 +3827,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_policy, -+ mpls_ldp_trace_policy_cmd, ++DEFUN (ldp_trace_policy, ++ ldp_trace_policy_cmd, + "trace policy", + "LDP debugging\n" + "Policy tracing\n") { @@ -3955,8 +3836,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_route, -+ mpls_ldp_trace_route_cmd, ++DEFUN (ldp_trace_route, ++ ldp_trace_route_cmd, + "trace route", + "LDP debugging\n" + "Route Lookup tracing\n") { @@ -3964,8 +3845,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_state, -+ mpls_ldp_trace_state_cmd, ++DEFUN (ldp_trace_state, ++ ldp_trace_state_cmd, + "trace state", + "LDP debugging\n" + "State transitions\n") { @@ -3973,8 +3854,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_task, -+ mpls_ldp_trace_task_cmd, ++DEFUN (ldp_trace_task, ++ ldp_trace_task_cmd, + "trace task", + "LDP debugging\n" + "Task tracing\n") { @@ -3982,8 +3863,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_timer, -+ mpls_ldp_trace_timer_cmd, ++DEFUN (ldp_trace_timer, ++ ldp_trace_timer_cmd, + "trace timer", + "LDP debugging\n" + "Timer tracing\n") { @@ -3991,8 +3872,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_all, -+ mpls_ldp_trace_all_cmd, ++DEFUN (ldp_trace_all, ++ ldp_trace_all_cmd, + "trace all", + "LDP debugging\n" + "All tracing\n") { @@ -4000,8 +3881,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_trace_none, -+ mpls_ldp_trace_none_cmd, ++DEFUN (ldp_trace_none, ++ ldp_trace_none_cmd, + "trace none", + "LDP debugging\n" + "Turn off all tracing\n") { @@ -4009,12 +3890,14 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + ++#if 0 ++ +/* address and egress changes should result in an event which goes through + all of the existing FECs/addresses and decides which to withdrawl and then + ask the system for which additional FECs/addresses should be sent */ + -+DEFUN (mpls_ldp_address, -+ mpls_ldp_address_cmd, ++DEFUN (ldp_address, ++ ldp_address_cmd, + "address-mode (lsr-id|ldp)", + "Addresses this LSR will announce\n" + "LSR-ID only\n" @@ -4030,8 +3913,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_address, -+ no_mpls_ldp_address_cmd, ++DEFUN (no_ldp_address, ++ no_ldp_address_cmd, + "no address-mode", + NO_STR + "Addresses this LSR will announce\n") { @@ -4040,8 +3923,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (mpls_ldp_egress, -+ mpls_ldp_egress_cmd, ++DEFUN (ldp_egress, ++ ldp_egress_cmd, + "egress (lsr-id|connected)", + "Filter FECs this LSR will send mappings for\n" + "LSR-ID only\n" @@ -4057,8 +3940,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_egress, -+ no_mpls_ldp_egress_cmd, ++DEFUN (no_ldp_egress, ++ no_ldp_egress_cmd, + "no egress", + NO_STR + "Filter FECs this LSR will send mappings for\n") { @@ -4066,10 +3949,11 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + ldp->egress = LDP_EGRESS_ALL; + return CMD_SUCCESS; +} ++#endif + +#if 0 -+DEFUN (mpls_ldp_egress_list, -+ mpls_ldp_egress_list_cmd, ++DEFUN (ldp_egress_list, ++ ldp_egress_list_cmd, + "egress access-list (<1-199>|<1300-2699>|WORD)", + "Filter FECs this LSR will send mappings for\n" + "IP access-list number\n" @@ -4078,8 +3962,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + -+DEFUN (no_mpls_ldp_egress_list, -+ no_mpls_ldp_egress_list_cmd, ++DEFUN (no_ldp_egress_list, ++ no_ldp_egress_list_cmd, + "no egress access-list (<1-199>|<1300-2699>|WORD)", + NO_STR + "Filter FECs this LSR will send mappings for\n" @@ -4090,19 +3974,116 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c +} +#endif + ++DEFUN (mpls_show_ldp_attr, mpls_show_ldp_attr_cmd, ++ "show ldp attr", ++ SHOW_STR ++ "LDP" ++ "ATTR\n") { ++ struct ldp *ldp = ldp_get(); ++ ++ if (!ldp) { ++ vty_out (vty, "There isn't an active LDP instance.%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ldp_cfg_global_attr(ldp->h); ++ return CMD_SUCCESS; ++} ++ ++DEFUN (mpls_show_ldp_fec, mpls_show_ldp_fec_cmd, ++ "show ldp fec", ++ SHOW_STR ++ "LDP" ++ "FEC\n") { ++ struct ldp *ldp = ldp_get(); ++ struct mpls_fec fec; ++ struct mpls_nexthop nh; ++ ++ if (!ldp) { ++ vty_out (vty, "There isn't an active LDP instance.%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ++ fec.index = 0; ++ while (ldp_cfg_fec_getnext(ldp->h, &fec, 0xFFFFFFFF) == MPLS_SUCCESS) { ++ vty_out(vty, "FEC: %d%s", fec.index, VTY_NEWLINE); ++ nh.index = 0; ++ while (ldp_cfg_fec_nexthop_getnext(ldp->h, &fec, &nh, ++ 0xFFFFFFFF) == MPLS_SUCCESS) { ++ vty_out(vty, "\t%d %08x%s", nh.index, nh.ip.u.ipv4, ++ VTY_NEWLINE); ++ } ++ } ++ return CMD_SUCCESS; ++} ++ ++DEFUN (mpls_show_ldp_interface, mpls_show_ldp_interface_cmd, ++ "show ldp interface", ++ SHOW_STR ++ "LDP" ++ "interface\n") { ++ struct ldp *ldp = ldp_get(); ++ struct ldp_if iff; ++ struct ldp_addr addr; ++ ++ if (!ldp) { ++ vty_out (vty, "There isn't an active LDP instance.%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ++ iff.index = 0; ++ while (ldp_cfg_if_getnext(ldp->h, &iff, LDP_IF_CFG_BY_INDEX) == ++ MPLS_SUCCESS) { ++ vty_out(vty, "INTF: %d%s", iff.index, VTY_NEWLINE); ++ addr.index = 0; ++ while (ldp_cfg_if_addr_getnext(ldp->h, &iff, &addr, ++ LDP_IF_ADDR_CFG_BY_INDEX | LDP_IF_CFG_BY_INDEX) == MPLS_SUCCESS) { ++ vty_out(vty, "\t%d%s", addr.index, VTY_NEWLINE); ++ } ++ } ++ return CMD_SUCCESS; ++} ++ ++DEFUN (mpls_show_ldp_addr, mpls_show_ldp_addr_cmd, ++ "show ldp addr", ++ SHOW_STR ++ "LDP" ++ "addrs\n") { ++ struct ldp *ldp = ldp_get(); ++ struct ldp_addr addr; ++ ++ if (!ldp) { ++ vty_out (vty, "There isn't an active LDP instance.%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ++ memset(&addr, 0, sizeof(addr)); ++ while (ldp_cfg_addr_getnext(ldp->h, &addr, 0) == MPLS_SUCCESS) { ++ vty_out(vty, "Addr: %d %08x%s", addr.index, addr.address.u.ipv4, ++ VTY_NEWLINE); ++ vty_out(vty, "\t%d%s", addr.session_index, VTY_NEWLINE); ++ vty_out(vty, "\t%d%s", addr.nexthop_index, VTY_NEWLINE); ++ vty_out(vty, "\t%d%s", addr.if_index, VTY_NEWLINE); ++ ++ addr.session_index = 0; ++ addr.nexthop_index = 0; ++ addr.if_index = 0; ++ } ++ return CMD_SUCCESS; ++} ++ +DEFUN (mpls_show_ldp, mpls_show_ldp_cmd, + "show ldp", + SHOW_STR + "LDP global setting\n") { -+ struct mpls *mpls = mpls_get(); ++ struct ldp *ldp = ldp_get(); + ldp_global g; + -+ if (!mpls->ldp) { ++ if (!ldp) { + vty_out (vty, "There isn't an active LDP instance.%s", VTY_NEWLINE); + return CMD_WARNING; + } + -+ ldp_cfg_global_get(mpls->ldp->h,&g,0xFFFFFFFF); ++ ldp_cfg_global_get(ldp->h,&g,0xFFFFFFFF); + + vty_out(vty, "LSR-ID: %08x Admin State: %s%s", + g.lsr_identifier.u.ipv4, admin_state[g.admin_state], VTY_NEWLINE); @@ -4171,8 +4152,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "LDP related commands\n" + "Discovered neighbors\n" + "LDP identifier\n") { -+ struct mpls *mpls = mpls_get(); -+ struct ldp *ldp = mpls->ldp; ++ struct ldp *ldp = ldp_get(); + ldp_adj adj; + ldp_addr addr; + ldp_entity e; @@ -4268,7 +4248,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + vty_out(vty, "\t "); + + if (e.entity_type == LDP_DIRECT) { -+ vty_out(vty, "%s ", iff.name); ++ vty_out(vty, "%s ", iff.handle->name); + } else { + vty_out(vty, "%s ", peer.peer_name); + } @@ -4313,8 +4293,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "LDP related commands\n" + "Session information\n" + "LDP identifier\n") { -+ struct mpls *mpls = mpls_get(); -+ struct ldp *ldp = mpls->ldp; ++ struct ldp *ldp = ldp_get(); + ldp_session session; + ldp_addr addr; + struct in_addr in; @@ -4326,7 +4305,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + } + + session.index = 0; -+ while (ldp_cfg_session_getnext(ldp->h, &session, 0xFFFFFFFF) == MPLS_SUCCESS) { ++ while (ldp_cfg_session_getnext(ldp->h, &session, 0xFFFFFFFF) == ++ MPLS_SUCCESS) { + count++; + in.s_addr = htonl(session.remote_dest.addr.u.ipv4); + vty_out(vty, "%-2d %s %-3d %s%s", session.index, @@ -4351,8 +4331,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + SHOW_STR + "LDP related commands\n" + "Discovery information\n") { -+ struct mpls *mpls = mpls_get(); -+ struct ldp *ldp = mpls->ldp; ++ struct ldp *ldp = ldp_get(); ++ struct ldp_interface *li; + ldp_if iff; + int count; + ldp_global g; @@ -4378,9 +4358,13 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + count = 0; + iff.index = 0; + while (ldp_cfg_if_getnext(ldp->h, &iff, 0xFFFFFFFF) == MPLS_SUCCESS) { ++ li = iff.handle->info; ++ if (li->configured == MPLS_BOOL_FALSE) { ++ continue; ++ } + first = 1; + count++; -+ vty_out(vty, "\t%s: ", iff.name); ++ vty_out(vty, "\t%s: ", iff.handle->name); + if (iff.oper_state != MPLS_OPER_UP) { + vty_out(vty, "down"); + } else { @@ -4467,8 +4451,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "LDP related commands\n" + "Labeling information\n" + "LDP identifier\n") { -+ struct mpls *mpls = mpls_get(); -+ struct ldp *ldp = mpls->ldp; ++ struct ldp *ldp = ldp_get(); + ldp_session session; + ldp_outlabel out; + ldp_inlabel in; @@ -4555,58 +4538,60 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + +DEFUN(ldp_intf, + ldp_intf_cmd, -+ "mpls ldp", ++ "mpls ip", + "MPLS interface configuration\n" -+ "Enable LDP\n") { ++ "Dynamic label distribution via LDP\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct mpls *mpls = mi->mpls; ++ struct ldp_interface *li; + -+ if (mi->l2cc) { -+ return CMD_WARNING; -+ } ++ MPLS_ASSERT(ifp->info); ++ ++ li = ifp->info; ++ if (li->configured == MPLS_BOOL_FALSE) { ++ li->labelspace = 0; ++ li->configured = MPLS_BOOL_TRUE; ++ li->admin_up = MPLS_BOOL_TRUE; + -+ if (!mi->ldp) { -+ /* user is trying to create a new LDP interface */ -+ /* if a labelspace hasn't been set yet, set it to 0 */ -+ if (mi->labelspace == -1) { -+ mi->labelspace = 0; -+ do_mpls_labelspace(mi); ++ if (ifp->ifindex > 0) { ++ do_mpls_labelspace(li); + } -+ mi->ldp = ldp_if_new(mi); -+ } + -+ /* if the global LDP has been created, go ahead and tell LDP about it -+ * otherwise just mark the interface as "on hold" -+ */ -+ if (mpls->ldp) { -+ ldp_interface_create(mi); -+ } else { -+ mi->ldp->create_on_hold = MPLS_BOOL_TRUE; ++ ldp_interface_create(li); + } -+ -+ vty->node = MPLS_LDP_IF_NODE; ++ vty->node = LDP_IF_NODE; + + return CMD_SUCCESS; +} + +DEFUN(no_ldp_intf, + no_ldp_intf_cmd, -+ "no mpls ldp", ++ "no mpls ip", + NO_STR + "MPLS interface configuration\n" + "remove LDP\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; ++ struct ldp_interface *li; ++ ++ if (!ifp->info) { ++ vty_out(vty, "LDP is not enabled on '%s'%s", ifp->name, VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ++ li = ifp->info; ++ li->configured = MPLS_BOOL_FALSE; ++ li->admin_up = MPLS_BOOL_FALSE; ++ li->labelspace = -1; + -+ if (mi->ldp) { -+ ldp_interface_delete(mi); -+ ldp_if_free(mi->ldp); -+ mi->ldp = NULL; ++ if (ifp->ifindex > 0) { ++ do_mpls_labelspace(li); + } ++ ++ ldp_interface_delete(li); + return CMD_SUCCESS; +} + ++#if 0 ++ +DEFUN(ldp_l2cc_intf, + ldp_l2cc_intf_cmd, + "mpls l2cc peer IPADDR vc-id VCID ", @@ -4619,19 +4604,14 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "Optional Group ID\n" + "<0-255>\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct mpls *mpls = mi->mpls; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; + uint32_t peer_addr; + int vcid = 0; + int gid = -1; + -+ if (mi->ldp) { -+ return CMD_WARNING; -+ } -+ -+ if (!mi->l2cc) { ++ if (!li->l2cc) { + /* user is trying to create a new L2CC interface */ -+ mi->l2cc = l2cc_if_new(mi); ++ li->l2cc = l2cc_if_new(li); + } + + VTY_GET_IPV4_ADDRESS("IPADDR",peer_addr,argv[0]); @@ -4640,14 +4620,7 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + VTY_GET_UINT32_RANGE("GROUPID",gid,argv[2],0,255); + } + -+ /* if the global LDP has been created, go ahead and tell LDP about it -+ * otherwise just mark the cross connect as "on hold" -+ */ -+ if (mpls->ldp) { -+ l2cc_interface_create(mi); -+ } else { -+ mi->l2cc->create_on_hold = MPLS_BOOL_TRUE; -+ } ++ l2cc_interface_create(li); + return CMD_SUCCESS; +} + @@ -4658,12 +4631,12 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "Delete a Layer 2 Cross Connect\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; + -+ if (mi->l2cc) { -+ l2cc_interface_delete(mi); -+ l2cc_if_free(mi->ldp); -+ mi->l2cc = NULL; ++ if (li->l2cc) { ++ l2cc_interface_delete(li); ++ l2cc_if_free(li->l2cc); ++ li->l2cc = NULL; + } + return CMD_SUCCESS; +} @@ -4720,10 +4693,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "distribution mode\n" + "Downstream on Demand or Downstream unsolicited\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + if (!strncmp(argv[0],"dod",3)) { + li->entity.label_distribution_mode = LDP_DISTRIBUTION_ONDEMAND; @@ -4737,9 +4708,9 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + li->create_on_hold = MPLS_BOOL_TRUE; + return CMD_SUCCESS; + } -+ ldp_interface_admin_state_start(mi); ++ ldp_interface_admin_state_start(li); + ldp_cfg_entity_set(ldp->h, &li->entity, LDP_ENTITY_CFG_DISTRIBUTION_MODE); -+ ldp_interface_admin_state_finish(mi); ++ ldp_interface_admin_state_finish(li); + return CMD_SUCCESS; +} + @@ -4750,10 +4721,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "distribution mode\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.label_distribution_mode = LDP_ENTITY_DEF_DISTRIBUTION_MODE; + if (!ldp) { @@ -4772,10 +4741,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "remote LDP port\n" + "port number\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.remote_tcp_port = atoi(argv[0]); + if (!ldp) { @@ -4794,17 +4761,15 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "remote LDP port\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; + + li->entity.remote_tcp_port = LDP_ENTITY_DEF_REMOTE_TCP; -+ if (!mpls->ldp) { ++ if (!li->ldp) { + li->create_on_hold = MPLS_BOOL_TRUE; + return CMD_SUCCESS; + } + -+ ldp_cfg_entity_set(mpls->ldp->h, &li->entity, LDP_ENTITY_CFG_REMOTE_TCP); ++ ldp_cfg_entity_set(li->ldp->h, &li->entity, LDP_ENTITY_CFG_REMOTE_TCP); + return CMD_SUCCESS; +} + @@ -4815,10 +4780,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "remote LDP port\n" + "port number\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.remote_udp_port = atoi(argv[0]); + if (!ldp) { @@ -4837,10 +4800,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "remote LDP port\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.remote_udp_port = LDP_ENTITY_DEF_REMOTE_UDP; + if (!ldp) { @@ -4859,10 +4820,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "maximum LDP PDU size\n" + "PDU size\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.max_pdu = atoi(argv[0]); + if (!ldp) { @@ -4881,10 +4840,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "maximum LDP pdu size\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.max_pdu = LDP_ENTITY_DEF_MAX_PDU; + if (!ldp) { @@ -4903,10 +4860,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "hello interval\n" + "interval in seconds\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.hellotime_interval = atoi(argv[0]); + if (!ldp) { @@ -4925,10 +4880,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "hello interval\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.hellotime_interval = LDP_ENTITY_DEF_HELLOTIME_INTERVAL; + if (!ldp) { @@ -4947,10 +4900,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "keepalive interval\n" + "interval in seconds\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.keepalive_interval = atoi(argv[0]); + if (!ldp) { @@ -4969,10 +4920,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "keepalive interval\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.keepalive_interval = LDP_ENTITY_DEF_KEEPALIVE_INTERVAL; + if (!ldp) { @@ -4991,10 +4940,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "maximum LDP session setup attempt\n" + "Number of attempts (0 means keep trying)\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.session_setup_count = atoi(argv[0]); + if (!ldp) { @@ -5013,10 +4960,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "maximum LDP session setup attempt\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.session_setup_count = LDP_ENTITY_DEF_SESSIONSETUP_COUNT; + if (!ldp) { @@ -5035,10 +4980,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "maximum path vector\n" + "number of entries\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.path_vector_limit = atoi(argv[0]); + if (!ldp) { @@ -5057,10 +5000,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "maximum path vector\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.path_vector_limit = LDP_ENTITY_DEF_PATHVECTOR_LIMIT; + if (!ldp) { @@ -5079,10 +5020,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "maximum hop count\n" + "number of hops\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.hop_count_limit = atoi(argv[0]); + if (!ldp) { @@ -5101,10 +5040,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "maximum hop count\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.hop_count_limit = LDP_ENTITY_DEF_HOPCOUNT_LIMIT; + if (!ldp) { @@ -5123,10 +5060,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "maximum times to make a request for a FEC\n" + "Number of attempts (0 means keep trying)\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.label_request_count = atoi(argv[0]); + if (!ldp) { @@ -5145,10 +5080,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "maximum times to make a request for a FEC\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.label_request_count = LDP_ENTITY_DEF_REQUEST_COUNT; + if (!ldp) { @@ -5160,6 +5093,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return CMD_SUCCESS; +} + ++#endif ++ +#if 0 +DEFUN(ldp_if_ttl_less_domain, + ldp_if_ttl_less_domain_cmd, @@ -5167,10 +5102,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "TTL less domain\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.remote_in_ttl_less_domain = MPLS_BOOL_TRUE; + if (!ldp) { @@ -5188,10 +5121,8 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + "MPLS interface configuration\n" + "TTL less domain\n") { + struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct ldp_interface *li = mi->ldp; -+ struct mpls *mpls = mi->mpls; -+ struct ldp *ldp = mpls->ldp; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = li->ldp; + + li->entity.remote_in_ttl_less_domain = MPLS_BOOL_FALSE; + if (!ldp) { @@ -5207,24 +5138,29 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c +} + +static int ldp_config_write (struct vty *vty) { -+ struct mpls *mpls = mpls_get(); -+ struct ldp *ldp = mpls->ldp; -+ struct ldp_remote_peer *rp; -+ struct listnode *ln; ++ struct ldp *ldp = ldp_get(); + ldp_global g; + int write = 0; ++#if 0 + struct in_addr addr; ++ struct ldp_remote_peer *rp; ++ struct listnode *ln; ++#endif + + if (ldp) { + vty_out (vty, "!%s", VTY_NEWLINE); -+ vty_out (vty, "mpls ldp%s", VTY_NEWLINE); ++ vty_out (vty, "mpls ip%s", VTY_NEWLINE); + write++; + ++#if 0 ++ + LIST_LOOP(ldp->peer_list,rp,ln) { + addr.s_addr = htonl(rp->peer.dest.addr.u.ipv4); + vty_out (vty, " peer %s%s", inet_ntoa(addr), VTY_NEWLINE); + } + ++#endif ++ + if (ldp_traceflags & LDP_TRACE_FLAG_ADDRESS) + vty_out (vty, " trace address%s", VTY_NEWLINE); + if (ldp_traceflags & LDP_TRACE_FLAG_BINDING) @@ -5350,17 +5286,18 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + return write; +} + -+int ldp_interface_config_write(struct vty *vty, struct mpls_interface *mi) { -+ struct ldp_interface *li; -+ struct mpls *mpls; -+ struct ldp *ldp; ++#if 0 ++int ldp_interface_config_write(struct vty *vty) { ++ struct ldp *ldp = ldp_get(); ++ listnode node; ++ struct interface *ifp; ++ + ldp_entity e; ++ mpls_fec l; + int write = 0; + -+ if (mi && mi->ldp) { -+ li = mi->ldp; -+ mpls = mi->mpls; -+ ldp = mpls->ldp; ++ if (li && li->ldp) { ++ ldp = li->ldp; + + if (li->entity.index) { + e.index = li->entity.index; @@ -5416,847 +5353,962 @@ diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.c zebra-ldp/mplsd/ldp_vty.c + e.label_request_count, VTY_NEWLINE); + } + vty_out(vty, " !%s",VTY_NEWLINE); ++ } else if (li && li->l2cc) { ++// struct in_addr tmp; ++ l2 = li->l2cc; ++ ldp = li->ldp; ++ ++ write++; ++ ++ if (l2->l2cc.index) { ++ l.index = l2->l2cc.index; ++ ldp_cfg_fec_get(ldp->h, &l, 0xFFFFFFFF); ++ } else { ++ memcpy(&l,&l2->l2cc,sizeof(ldp_fec)); ++ } ++#if 0 ++ tmp.s_addr = htonl(l.info.nh.ip.u.ipv4); ++ vty_out(vty, " mpls l2cc peer %s",inet_ntoa(tmp)); ++ vty_out(vty, " vcid %d",l.info.u.l2cc.connection_id); ++ if (l.info.u.l2cc.group_id) { ++ vty_out(vty, " groupid %d", l.info.u.l2cc.group_id); ++ } ++#endif ++ vty_out(vty, "%s", VTY_NEWLINE); ++ ++ vty_out(vty, " !%s",VTY_NEWLINE); + } + ++ + return write; +} ++#endif ++ ++void ldp_vty_show_init() { ++ ++#if 0 ++ install_element(VIEW_NODE, &mpls_show_fec_cmd); ++ install_element(ENABLE_NODE, &mpls_show_fec_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_interface_cmd); ++ install_element(ENABLE_NODE, &mpls_show_interface_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_lsr_id_cmd); ++ install_element(ENABLE_NODE, &mpls_show_lsr_id_cmd); ++#endif ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_fec_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_fec_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_attr_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_attr_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_addr_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_addr_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_interface_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_interface_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_neighbor_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_neighbor_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_session_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_session_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_discovery_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_discovery_cmd); ++ ++ install_element(VIEW_NODE, &mpls_show_ldp_database_cmd); ++ install_element(ENABLE_NODE, &mpls_show_ldp_database_cmd); ++} ++ ++ ++extern void dump_mpls_node(struct vty*,struct route_node*); ++ ++#if 0 ++DEFUN (mpls_show_fec, mpls_show_fec_cmd, ++ "show fec", ++ SHOW_STR ++ "FEC\n") { ++ struct mpls *mpls = mpls_get(); ++ struct route_node *node; ++ ++ for (node = route_top(mpls->table); node != NULL; node = route_next(node)) ++ { ++ dump_mpls_node(vty,node); ++ } ++ return CMD_SUCCESS; ++} ++ ++DEFUN (mpls_show_interface, mpls_show_interface_cmd, ++ "show interface", ++ SHOW_STR ++ "interfaces\n") { ++ struct interface *iff; ++ ++ iff = if_getfirst(); ++ while (iff) { ++ struct listnode *ln; ++ struct connected *c; ++ vty_out(vty, "INTF: %s%s", iff->name, VTY_NEWLINE); ++ LIST_LOOP(iff->connected, c, ln) { ++ vty_out(vty, "\t%s%s", inet_ntoa(c->address->u.prefix4), ++ VTY_NEWLINE); ++ } ++ iff = if_getnext(iff); ++ } ++ return CMD_SUCCESS; ++} ++ ++DEFUN (mpls_show_lsr_id, mpls_show_lsr_id_cmd, ++ "show lsr-id", ++ SHOW_STR ++ "LSR identifier\n") { ++ ++ struct mpls *mpls = mpls_get(); ++ ++ vty_out(vty, "lsr-id: %s%s", inet_ntoa(mpls->router_id.u.prefix4), ++ VTY_NEWLINE); ++ return CMD_SUCCESS; ++} ++ ++#endif ++ ++DEFUN(interface_mpls_labelspace, ++ interface_mpls_labelspace_cmd, ++ "mpls labelspace <1-255>", ++ "MPLS interface configuration\n" ++ "labelspace\n" ++ "labelspace number\n") { ++ struct interface *ifp = vty->index; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = ldp_get(); ++ struct mpls_range range; ++ ++ if (!li) { ++ vty_out(vty, "LDP is not enabled on '%s'%s", ifp->name, VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ++ if ((range.label_space = atoi(argv[0])) < 0) { ++ return CMD_WARNING; ++ } ++ ++ li->labelspace = range.label_space; ++ /* we may be asked to set the labelspace on an interface which hasn't ++ * be recongnized, in which case we set the labelspace but don't do ++ * the kernel call */ ++ if (ifp->ifindex > 0) { ++ do_mpls_labelspace(li); ++ } ++ ++ if (li->entity.index) { ++ ldp_interface_admin_state_start(li); ++ } ++ li->iff.label_space = li->labelspace; ++ ldp_cfg_if_set(ldp->h, &li->iff, LDP_IF_CFG_LABEL_SPACE); ++ if (li->entity.index) { ++ ldp_interface_admin_state_finish(li); ++ } ++ ++ return CMD_SUCCESS; ++} ++ ++DEFUN(no_interface_mpls_labelspace, ++ no_interface_mpls_labelspace_cmd, ++ "no mpls labelspace", ++ NO_STR ++ "MPLS interface configuration\n" ++ "labelspace\n") { ++ struct interface *ifp = vty->index; ++ struct ldp_interface *li = (struct ldp_interface*)ifp->info; ++ struct ldp *ldp = ldp_get(); ++ ++ li->labelspace = 0; ++ /* we may be asked to set the labelspace on an interface which hasn't ++ * be recongnized, in which case we set the labelspace but don't do ++ * the kernel call */ ++ if (ifp->ifindex > 0) { ++ do_mpls_labelspace(li); ++ } + -+void ldp_vty_show_init() { ++ if (li->entity.index) { ++ ldp_interface_admin_state_start(li); ++ } ++ li->iff.label_space = li->labelspace; ++ if (ldp) { ++ ldp_cfg_if_set(ldp->h, &li->iff, LDP_IF_CFG_LABEL_SPACE); ++ } ++ if (li->entity.index) { ++ ldp_interface_admin_state_finish(li); ++ } ++ return CMD_SUCCESS; ++} + -+ install_element(VIEW_NODE, &mpls_show_ldp_cmd); -+ install_element(ENABLE_NODE, &mpls_show_ldp_cmd); ++static int interface_config_write(struct vty *vty) { ++ listnode node; ++ struct interface *ifp; ++ struct ldp_interface *li; + -+ install_element(VIEW_NODE, &mpls_show_ldp_neighbor_cmd); -+ install_element(ENABLE_NODE, &mpls_show_ldp_neighbor_cmd); ++ for (node = listhead(iflist); node; nextnode(node)) { ++ ifp = getdata(node); + -+ install_element(VIEW_NODE, &mpls_show_ldp_session_cmd); -+ install_element(ENABLE_NODE, &mpls_show_ldp_session_cmd); ++ vty_out(vty, "interface %s%s", ifp->name, VTY_NEWLINE); + -+ install_element(VIEW_NODE, &mpls_show_ldp_discovery_cmd); -+ install_element(ENABLE_NODE, &mpls_show_ldp_discovery_cmd); ++ if (ifp->desc) { ++ vty_out(vty, " description %s%s", ifp->desc, VTY_NEWLINE); ++ } + -+ install_element(VIEW_NODE, &mpls_show_ldp_database_cmd); -+ install_element(ENABLE_NODE, &mpls_show_ldp_database_cmd); ++ li = ifp->info; ++ if (li) { ++ if (li->configured == MPLS_BOOL_TRUE) { ++ vty_out(vty, " mpls ip%s", VTY_NEWLINE); ++ } ++ if (li->labelspace > 0) { ++ vty_out(vty, " mpls labelspace %d%s", li->labelspace, VTY_NEWLINE); ++ } ++ } ++ vty_out(vty, "!%s", VTY_NEWLINE); ++ } ++ return 0; +} + -+static struct cmd_node ldp_if_node = {MPLS_LDP_IF_NODE,"%s(config-if-ldp)# ",1}; ++static struct cmd_node ldp_node = {LDP_NODE,"%s(config-ldp)# ",1}; ++static struct cmd_node interface_node = {INTERFACE_NODE,"%s(config-if)# ",1}; ++static struct cmd_node ldp_if_node = {LDP_IF_NODE,"%s(config-if-ldp)# ",1}; + -+void ldp_vty_if_init() { ++void ldp_vty_init () { + -+ install_node (&ldp_if_node, ldp_if_config_write); -+ install_default (MPLS_LDP_IF_NODE); ++ install_node (&ldp_node, ldp_config_write); + -+ install_element(INTERFACE_NODE,&ldp_intf_cmd); -+ install_element(INTERFACE_NODE,&no_ldp_intf_cmd); ++ install_default (LDP_NODE); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_l2cc_intf_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_l2cc_intf_cmd); ++ install_element (CONFIG_NODE, &ldp_cmd); ++ install_element (CONFIG_NODE, &no_ldp_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_remote_tcp_port_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_remote_tcp_port_cmd); ++#if 0 + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_remote_udp_port_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_remote_udp_port_cmd); ++ install_element (LDP_NODE, &ldp_remote_peer_cmd); ++ install_element (LDP_NODE, &no_ldp_remote_peer_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_max_pdu_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_max_pdu_cmd); ++#endif + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_hello_interval_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_hello_interval_cmd); ++ install_element (LDP_NODE, &ldp_lsrid_cmd); ++ install_element (LDP_NODE, &no_ldp_lsrid_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_keepalive_interval_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_keepalive_interval_cmd); ++ install_element (LDP_NODE, &ldp_disable_cmd); ++ install_element (LDP_NODE, &no_ldp_disable_cmd); + +#if 0 -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_loop_detect_mode_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_loop_detect_mode_cmd); -+#endif + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_max_session_attempt_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_max_session_attempt_cmd); ++ install_element (LDP_NODE, &ldp_lsp_control_mode_cmd); ++ install_element (LDP_NODE, &no_ldp_lsp_control_mode_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_max_path_vector_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_max_path_vector_cmd); ++ install_element (LDP_NODE, &ldp_label_retention_mode_cmd); ++ install_element (LDP_NODE, &no_ldp_label_retention_mode_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_max_hop_count_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_max_hop_count_cmd); ++ install_element (LDP_NODE, &ldp_lsp_repair_mode_cmd); ++ install_element (LDP_NODE, &no_ldp_lsp_repair_mode_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_max_label_requests_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_max_label_requests_cmd); ++ install_element (LDP_NODE, &ldp_propogate_release_cmd); ++ install_element (LDP_NODE, &no_ldp_propogate_release_cmd); + -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_distribution_mode_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_distribution_mode_cmd); ++ install_element (LDP_NODE, &ldp_label_merge_cmd); ++ install_element (LDP_NODE, &no_ldp_label_merge_cmd); + -+#if 0 -+ install_element(MPLS_LDP_IF_NODE,&ldp_if_ttl_less_domain_cmd); -+ install_element(MPLS_LDP_IF_NODE,&no_ldp_if_ttl_less_domain_cmd); -+#endif -+} ++ install_element (LDP_NODE, &ldp_loop_detection_mode_cmd); ++ install_element (LDP_NODE, &no_ldp_loop_detection_mode_cmd); + -+static struct cmd_node ldp_node = {MPLS_LDP_NODE,"%s(config-ldp)# ",1}; ++ install_element (LDP_NODE, &ldp_ttl_less_domain_cmd); ++ install_element (LDP_NODE, &no_ldp_ttl_less_domain_cmd); + -+void ldp_vty_init () { ++ install_element (LDP_NODE, &ldp_local_tcp_port_cmd); ++ install_element (LDP_NODE, &no_ldp_local_tcp_port_cmd); + -+ install_node (&ldp_node, ldp_config_write); -+ install_default (MPLS_LDP_NODE); -+ -+ install_element (CONFIG_NODE, &mpls_ldp_cmd); -+ install_element (CONFIG_NODE, &no_mpls_ldp_cmd); -+ -+ install_element (MPLS_LDP_NODE, &ldp_remote_peer_cmd); -+ install_element (MPLS_LDP_NODE, &no_ldp_remote_peer_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_disable_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_disable_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_lsrid_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_lsrid_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_lsp_control_mode_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_lsp_control_mode_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_label_retention_mode_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_label_retention_mode_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_lsp_repair_mode_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_lsp_repair_mode_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_propogate_release_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_propogate_release_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_label_merge_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_label_merge_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_loop_detection_mode_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_loop_detection_mode_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_ttl_less_domain_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_ttl_less_domain_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_local_tcp_port_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_local_tcp_port_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_local_udp_port_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_local_udp_port_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_address_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_binding_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_debug_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_error_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_event_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_general_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_init_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_label_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_normal_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_notif_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_packet_dump_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_packet_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_path_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_periodic_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_policy_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_route_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_state_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_task_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_timer_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_all_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_trace_none_cmd); -+ -+ install_element (MPLS_LDP_NODE, &mpls_ldp_egress_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_egress_cmd); -+ install_element (MPLS_LDP_NODE, &mpls_ldp_address_cmd); -+ install_element (MPLS_LDP_NODE, &no_mpls_ldp_address_cmd); -+} -diff --exclude=.p4config -uNr zebra/mplsd/ldp_vty.h zebra-ldp/mplsd/ldp_vty.h ---- zebra/mplsd/ldp_vty.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/ldp_vty.h 2003-03-10 14:57:28.000000000 -0600 -@@ -0,0 +1,11 @@ -+#ifndef LDP_VTY_H -+#define LDP_VTY_H ++ install_element (LDP_NODE, &ldp_local_udp_port_cmd); ++ install_element (LDP_NODE, &no_ldp_local_udp_port_cmd); ++#endif + -+#include "mpls_interface.h" ++ install_element (LDP_NODE, &ldp_trace_address_cmd); ++ install_element (LDP_NODE, &ldp_trace_binding_cmd); ++ install_element (LDP_NODE, &ldp_trace_debug_cmd); ++ install_element (LDP_NODE, &ldp_trace_error_cmd); ++ install_element (LDP_NODE, &ldp_trace_event_cmd); ++ install_element (LDP_NODE, &ldp_trace_general_cmd); ++ install_element (LDP_NODE, &ldp_trace_init_cmd); ++ install_element (LDP_NODE, &ldp_trace_label_cmd); ++ install_element (LDP_NODE, &ldp_trace_normal_cmd); ++ install_element (LDP_NODE, &ldp_trace_notif_cmd); ++ install_element (LDP_NODE, &ldp_trace_packet_dump_cmd); ++ install_element (LDP_NODE, &ldp_trace_packet_cmd); ++ install_element (LDP_NODE, &ldp_trace_path_cmd); ++ install_element (LDP_NODE, &ldp_trace_periodic_cmd); ++ install_element (LDP_NODE, &ldp_trace_policy_cmd); ++ install_element (LDP_NODE, &ldp_trace_route_cmd); ++ install_element (LDP_NODE, &ldp_trace_state_cmd); ++ install_element (LDP_NODE, &ldp_trace_task_cmd); ++ install_element (LDP_NODE, &ldp_trace_timer_cmd); ++ install_element (LDP_NODE, &ldp_trace_all_cmd); ++ install_element (LDP_NODE, &ldp_trace_none_cmd); + -+int ldp_interface_config_write(struct vty *vty, struct mpls_interface *mi); -+void ldp_vty_show_init(); -+void ldp_vty_if_init(); -+void ldp_vty_init(); ++#if 0 + ++ install_element (LDP_NODE, &ldp_egress_cmd); ++ install_element (LDP_NODE, &no_ldp_egress_cmd); ++ install_element (LDP_NODE, &ldp_address_cmd); ++ install_element (LDP_NODE, &no_ldp_address_cmd); +#endif -diff --exclude=.p4config -uNr zebra/mplsd/Makefile.am zebra-ldp/mplsd/Makefile.am ---- zebra/mplsd/Makefile.am 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/Makefile.am 2003-03-29 01:12:02.000000000 -0600 -@@ -0,0 +1,68 @@ -+## Process this file with automake to produce Makefile.in. + -+INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -+DEFS = @DEFS@ $(LOCAL_OPTS) -DSYSCONFDIR=\"$(sysconfdir)/\" -+INSTALL_SDATA=@INSTALL@ -m 600 ++ install_node(&interface_node, interface_config_write); + -+sbin_PROGRAMS = mplsd ++ install_element(CONFIG_NODE, &interface_cmd); ++ install_default(INTERFACE_NODE); + -+mplsd_SOURCES = \ -+impl_fib.c impl_ifmgr.c impl_lock.c impl_mm.c impl_mpls.c \ -+impl_policy.c impl_socket.c impl_timer.c impl_tree.c \ -+mpls.c mpls_interface.c mpls_zebra.c mpls_main.c mpls_vty.c\ -+static.c static_vty.c \ -+ldp.c ldp_interface.c ldp_vty.c ldp_remote_peer.c l2cc_interface.c \ -+ldp_addr.c ldp_adj.c \ -+ldp_attr.c ldp_buf.c ldp_cfg.c ldp_entity.c ldp_fec.c ldp_global.c \ -+ldp_hello.c ldp_hop.c ldp_hop_list.c ldp_if.c ldp_inet_addr.c \ -+ldp_init.c ldp_inlabel.c ldp_keepalive.c ldp_label_abort.c \ -+ldp_label_mapping.c ldp_label_rel_with.c ldp_label_request.c \ -+ldp_mesg.c ldp_nortel.c ldp_notif.c ldp_outlabel.c \ -+ldp_pdu_setup.c ldp_peer.c ldp_l2cc.c \ -+ldp_resource.c ldp_session.c ldp_state_funcs.c \ -+ldp_state_machine.c ldp_tunnel.c \ -+mpls_compare.c \ -+lsr_cfg.c lsr_global.c lsr_if.c lsr_insegment.c lsr_labelmanager.c \ -+lsr_outsegment.c lsr_xconnect.c lsr_ftn.c \ -+rsvpte.c rsvpte_vty.c rsvpte_interface.c ++ install_element(INTERFACE_NODE,&interface_desc_cmd); ++ install_element(INTERFACE_NODE,&no_interface_desc_cmd); + ++ install_element(INTERFACE_NODE,&interface_mpls_labelspace_cmd); ++ install_element(INTERFACE_NODE,&no_interface_mpls_labelspace_cmd); + -+noinst_HEADERS = \ -+mpls.h mpls_interface.h mpls_zebra.h mpls_vty.h \ -+ldp.h ldp_interface.h ldp_vty.h ldp_remote_peer.h l2cc_interface.h \ -+static.h static_vty.h \ -+ldp_addr.h ldp_adj.h ldp_attr.h ldp_buf.h ldp_cfg.h \ -+ldp_defaults.h ldp_entity.h ldp_fec.h \ -+ldp_global.h mpls_handle_type.h ldp_hello.h ldp_hop.h \ -+ldp_hop_list.h ldp_if.h ldp_inet_addr.h \ -+ldp_init.h ldp_inlabel.h ldp_keepalive.h ldp_label_abort.h \ -+ldp_label_mapping.h ldp_label_rel_with.h ldp_label_request.h \ -+ldp_mesg.h ldp_nortel.h ldp_notif.h ldp_outlabel.h ldp_pdu.h \ -+ldp_pdu_setup.h ldp_peer.h ldp_l2cc.h mpls_refcnt.h ldp_resource.h \ -+ldp_session.h ldp_state_machine.h ldp_struct.h ldp_tunnel.h \ -+mpls_tree_impl.h mpls_mm_impl.h mpls_mpls_impl.h mpls_trace_impl.h \ -+mpls_assert.h mpls_fib_impl.h mpls_ifmgr_impl.h mpls_list.h mpls_lock_impl.h \ -+mpls_policy_impl.h mpls_socket_impl.h mpls_timer_impl.h mpls_trace.h \ -+mpls_struct.h mpls_compare.h \ -+lsr_cfg.h lsr_defaults.h lsr_global.h lsr_if.h lsr_insegment.h \ -+lsr_labelmanager.h lsr_outsegment.h lsr_struct.h lsr_xconnect.h lsr_ftn.h \ -+rsvpte.h rsvpte_vty.h rsvpte_interface.h ++ install_node (&ldp_if_node, ldp_if_config_write); ++ install_default (LDP_IF_NODE); + -+mplsd_LDADD = ../lib/libzebra.a ++ install_element(INTERFACE_NODE,&ldp_intf_cmd); ++ install_element(INTERFACE_NODE,&no_ldp_intf_cmd); + -+sysconf_DATA = mplsd.conf.sample ++#if 0 + -+EXTRA_DIST = $(sysconf_DATA) ++ install_element(INTERFACE_NODE,&ldp_l2cc_intf_cmd); ++ install_element(INTERFACE_NODE,&no_ldp_l2cc_intf_cmd); + -+install-sysconfDATA: $(sysconf_DATA) -+ @$(NORMAL_INSTALL) -+ $(mkinstalldirs) $(DESTDIR)$(sysconfdir) -+ @list='$(sysconf_DATA)'; for p in $$list; do \ -+ if test -f $(srcdir)/$$p; then \ -+ echo " $(INSTALL_SDATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p"; \ -+ $(INSTALL_SDATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p; \ -+ else if test -f $$p; then \ -+ echo " $(INSTALL_SDATA) $$p $(DESTDIR)$(sysconfdir)/$$p"; \ -+ $(INSTALL_SDATA) $$p $(DESTDIR)$(sysconfdir)/$$p; \ -+ fi; fi; \ -+ done -diff --exclude=.p4config -uNr zebra/mplsd/mpls.c zebra-ldp/mplsd/mpls.c ---- zebra/mplsd/mpls.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,81 @@ -+#include ++ install_element(LDP_IF_NODE,&ldp_if_remote_tcp_port_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_remote_tcp_port_cmd); + -+#include "thread.h" -+#include "memory.h" -+#include "prefix.h" -+#include "table.h" -+#include "linklist.h" -+#include "filter.h" -+#include "vty.h" -+#include "plist.h" ++ install_element(LDP_IF_NODE,&ldp_if_remote_udp_port_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_remote_udp_port_cmd); + -+#include "mpls.h" -+#include "ldp.h" -+#include "rsvpte.h" -+#include "static.h" -+#include "lsr_cfg.h" ++ install_element(LDP_IF_NODE,&ldp_if_max_pdu_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_max_pdu_cmd); + -+/* MPLS instance top. */ -+struct mpls *mpls_top = NULL; ++ install_element(LDP_IF_NODE,&ldp_if_hello_interval_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_hello_interval_cmd); + -+struct mpls *mpls_new() { -+ lsr_global global; -+ struct mpls *new = XMALLOC(MTYPE_MPLS_TOP, sizeof (struct mpls)); ++ install_element(LDP_IF_NODE,&ldp_if_keepalive_interval_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_keepalive_interval_cmd); + -+ memset(new,0,sizeof(*new)); ++#endif ++ ++#if 0 ++ install_element(LDP_IF_NODE,&ldp_if_loop_detect_mode_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_loop_detect_mode_cmd); ++#endif + -+ new->h = lsr_cfg_open(new); -+ global.admin_state = MPLS_ADMIN_ENABLE; -+ lsr_cfg_global_set(new->h, &global, LSR_GLOBAL_CFG_ADMIN_STATE); ++#if 0 ++ install_element(LDP_IF_NODE,&ldp_if_max_session_attempt_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_max_session_attempt_cmd); + -+ new->router_id.family = AF_INET; -+ new->router_id.prefixlen = 32; ++ install_element(LDP_IF_NODE,&ldp_if_max_path_vector_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_max_path_vector_cmd); + -+ new->iflist = iflist; -+ new->table = route_table_init(); ++ install_element(LDP_IF_NODE,&ldp_if_max_hop_count_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_max_hop_count_cmd); + -+ return new; -+} ++ install_element(LDP_IF_NODE,&ldp_if_max_label_requests_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_max_label_requests_cmd); + -+struct mpls *mpls_get() { -+ if (mpls_top) { -+ return mpls_top; -+ } ++ install_element(LDP_IF_NODE,&ldp_if_distribution_mode_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_distribution_mode_cmd); ++#endif + -+ mpls_top = mpls_new(); -+ return mpls_top; ++#if 0 ++ install_element(LDP_IF_NODE,&ldp_if_ttl_less_domain_cmd); ++ install_element(LDP_IF_NODE,&no_ldp_if_ttl_less_domain_cmd); ++#endif +} +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_vty.h quagga-mpls/ldpd/ldp_vty.h +--- quagga/ldpd/ldp_vty.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_vty.h 2004-05-26 21:52:17.000000000 -0500 +@@ -0,0 +1,46 @@ ++#ifndef LDP_VTY_H ++#define LDP_VTY_H + -+void mpls_finish(struct mpls *mpls) { -+ -+ lsr_global global; ++#include "ldp_interface.h" + -+ ldp_finish(mpls->ldp); -+ static_finish(mpls->mstatic); -+ rsvpte_finish(mpls->rsvpte); ++int ldp_interface_config_write(struct vty *vty); ++void ldp_vty_show_init(); ++void ldp_vty_if_init(); ++void ldp_vty_init(); + -+ global.admin_state = MPLS_ADMIN_DISABLE; -+ lsr_cfg_global_set(mpls->h, &global, LSR_GLOBAL_CFG_ADMIN_STATE); -+ lsr_cfg_close(mpls->h); -+ -+ XFREE(MTYPE_MPLS_TOP, mpls); -+ mpls_top = NULL; ++#define VTY_GET_UINT32(NAME,V,STR) \ ++{ \ ++ char *endptr = NULL; \ ++ (V) = strtoul ((STR), &endptr, 10); \ ++ if (*endptr != '\0' || ((V) == ULONG_MAX && errno == ERANGE)) \ ++ { \ ++ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ ++ return CMD_WARNING; \ ++ } \ +} + -+/* Update access-list list. */ -+void mpls_access_list_update(struct access_list *access) { ++#define VTY_GET_UINT32_RANGE(NAME,V,STR,IMIN,IMAX) \ ++{ \ ++ VTY_GET_UINT32(NAME,V,STR); \ ++ if (((V) < IMIN) || ((V) > IMAX)) \ ++ { \ ++ vty_out (vty, "%% Invalid %s value. Valid range is (%d ... %d)%s", \ ++ NAME, IMIN, IMAX, VTY_NEWLINE); \ ++ return CMD_WARNING; \ ++ } \ +} + -+/* Update prefix-list list. */ -+void mpls_prefix_list_update(struct prefix_list *plist) { ++#define VTY_GET_IPV4_ADDRESS(NAME,V,STR) \ ++{ \ ++ struct in_addr addr; \ ++ int retv; \ ++ retv = inet_aton ((STR), &addr); \ ++ if (!retv) \ ++ { \ ++ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ ++ return CMD_WARNING; \ ++ } \ ++ (V) = ntohl(addr.s_addr); \ +} + -+void mpls_init() { -+ -+#if 0 -+ access_list_init(); -+ access_list_add_hook(mpls_access_list_update); -+ access_list_delete_hook(mpls_access_list_update); +#endif +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_zebra.c quagga-mpls/ldpd/ldp_zebra.c +--- quagga/ldpd/ldp_zebra.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_zebra.c 2004-06-09 22:38:43.000000000 -0500 +@@ -0,0 +1,342 @@ ++#include + -+} -diff --exclude=.p4config -uNr zebra/mplsd/mplsd.conf.sample zebra-ldp/mplsd/mplsd.conf.sample ---- zebra/mplsd/mplsd.conf.sample 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mplsd.conf.sample 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,17 @@ -+! -+! Zebra configuration saved from vty -+! 2002/03/23 17:07:30 -+! -+hostname uml-1 -+password root -+enable password root -+! -+mpls ldp -+! -+interface lo -+! -+interface eth0 -+ mpls ldp -+! -+line vty -+! -diff --exclude=.p4config -uNr zebra/mplsd/mpls.h zebra-ldp/mplsd/mpls.h ---- zebra/mplsd/mpls.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls.h 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,44 @@ -+#ifndef _MPLSD_H -+#define _MPLSD_H -+ -+#include "sockunion.h" ++#include "command.h" +#include "prefix.h" ++#include "stream.h" ++#include "table.h" ++#include "memory.h" +#include "zclient.h" -+#include "linklist.h" -+#include "if.h" ++#include "log.h" ++ ++#include "ldp_cfg.h" ++#include "mpls_compare.h" + +#include "ldp.h" -+#include "static.h" -+#include "rsvpte.h" ++#include "impl_fib.h" ++#include "impl_ifmgr.h" ++#include "impl_mpls.h" ++#include "ldp_interface.h" + -+#define MPLS_DEFAULT_CONFIG "mplsd.conf" ++/* All information about zebra. */ ++struct zclient *zclient = NULL; + -+#define MPLS_VTY_PORT 2610 -+#define MPLS_VTYSH_PATH "/tmp/.mplsd" ++/* For registering threads. */ ++extern struct thread_master *master; + -+enum mplsd_instr_types { -+ MPLS_FWD = 1, -+ MPLS_PUSH, -+ MPLS_SET -+}; ++struct prefix router_id; ++struct route_table *table; + -+struct mplsd_set { -+ char ifname[INTERFACE_NAMSIZ + 1]; -+ union sockunion nexthop; -+}; ++/* Router-id update message from zebra. */ ++static int ldp_router_id_update_zebra(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct ldp *ldp = ldp_get(); + -+struct mpls { -+ list iflist; -+ mpls_cfg_handle h; -+ struct route_table *table; -+ struct ldp *ldp; -+ struct rsvpte *rsvpte; -+ struct mpls_static *mstatic; -+ struct prefix router_id; -+ ldp_fib_callback fib_callback; -+}; ++ zebra_router_id_update_read(zclient->ibuf,&router_id); + -+void mpls_init(); -+struct mpls *mpls_get(); ++ zlog_info("router-id change %s", ++ inet_ntoa(router_id.u.prefix4)); + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/mpls_handle_type.h zebra-ldp/mplsd/mpls_handle_type.h ---- zebra/mplsd/mpls_handle_type.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_handle_type.h 2003-03-10 14:57:28.000000000 -0600 -@@ -0,0 +1,94 @@ -+#ifndef _LDP_HANDLE_TYPE_H_ -+#define _LDP_HANDLE_TYPE_H_ ++ if (ldp && ldp->lsr_id_is_static != MPLS_BOOL_TRUE) ++ ldp_router_id_update(ldp, &router_id); ++ return 0; ++} ++ ++/* Inteface addition message from zebra. */ ++static int ldp_interface_add(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct interface *ifp; + -+#define MPLS_USE_LSR 1 ++ if (!(ifp = zebra_interface_add_read(zclient->ibuf))) { ++ return 1; ++ } + -+#if (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)) -+#if 0 -+typedef unsigned char uint8_t; -+typedef unsigned short uint16_t; -+typedef unsigned int uint32_t; -+#endif -+#else -+#include -+#endif ++ MPLS_ASSERT (ifp->info); + -+#include -+#include "if.h" ++ /* it must have a valid index now */ ++ do_mpls_labelspace(ifp->info); + -+struct ldp; -+struct ldp_timer; -+struct ldp_socket; ++ zlog_info("interface add %s index %d flags %ld metric %d mtu %d", ++ ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu); + -+#define ptr_verify(x) (x ? MPLS_BOOL_TRUE : MPLS_BOOL_FALSE) ++ return 0; ++} + -+typedef void *mpls_tree_handle; -+#define mpls_tree_handle_compare(x,y) (x != y) -+#define mpls_tree_handle_verify(x) ptr_verify(x) ++/* this is not the same as ldp_interface_delete() which is found in ++ * ldp_interface.c ++ */ ++static int ldp_interface_delete2(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct interface *ifp; ++ struct stream *s; ++ ++ s = zclient->ibuf; ++ /* zebra_interface_state_read() updates interface structure in iflist */ ++ ifp = zebra_interface_state_read(s); + -+typedef void *mpls_instance_handle; -+#define mpls_instance_handle_compare(x,y) (x != y) -+#define mpls_instance_handle_verify(x) ptr_verify(x) ++ if (ifp == NULL) { ++ return 0; ++ } + -+typedef struct mpls* mpls_fib_handle; -+#define mpls_fib_handle_compare(x,y) (x == y) -+#define mpls_fib_handle_verify(x) ptr_verify(x) ++ if (if_is_up(ifp)) { ++ zlog_warn("got delete of %s, but interface is still up", ++ ifp->name); ++ } + -+typedef int mpls_ifmgr_handle; -+#define mpls_ifmgr_handle_compare(x,y) (x == y) -+#define mpls_ifmgr_handle_verify(x) ptr_verify(x) ++ zlog_info("interface delete %s index %d flags %ld metric %d mtu %d", ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu); + -+typedef struct interface* mpls_if_handle; -+#define mpls_if_handle_compare(x,y) \ -+ ((x->ifindex == y->ifindex) ? 0 : (x->ifindex > y->ifindex ? 1 : -1)) -+#define mpls_if_handle_verify(m,x) ptr_verify(x) ++ if_delete(ifp); + -+typedef int mpls_timer_mgr_handle; -+#define mpls_timer_mgr_handle_compare(x,y) (x != y) -+#define mpls_timer_mgr_handle_verify(x) ptr_verify(x) ++ return 0; ++} + -+typedef struct mpls_timer* mpls_timer_handle; -+#define mpls_timer_handle_compare(x,y) (x != y) -+#define mpls_timer_handle_verify(m,x) ptr_verify(x) ++struct interface * zebra_interface_if_lookup(struct stream *s) { ++ struct interface *ifp; ++ u_char ifname_tmp[INTERFACE_NAMSIZ]; + -+typedef int mpls_socket_mgr_handle; -+#define mpls_socket_mgr_handle_compare(x,y) (x != y) -+#define mpls_socket_mgr_handle_verify(x) MPLS_BOOL_TRUE ++ /* Read interface name. */ ++ stream_get(ifname_tmp, s, INTERFACE_NAMSIZ); + -+typedef struct mpls_socket* mpls_socket_handle; -+#define mpls_socket_handle_compare(x,y) (x->fd != y->fd) -+#define mpls_socket_handle_verify(m,x) ptr_verify(x) ++ /* Lookup this by interface index. */ ++ ifp = if_lookup_by_name(ifname_tmp); + -+typedef int mpls_mpls_handle; -+#define mpls_mpls_handle_compare(x,y) (x != y) -+#define mpls_mpls_handle_verify(x) ptr_verify(x) ++ /* If such interface does not exist, indicate an error */ ++ if (!ifp) { ++ return NULL; ++ } + -+typedef int mpls_insegment_handle; -+#define mpls_insegment_handle_compare(x,y) (x != y) -+#define mpls_insegment_handle_verify(m,x) ptr_verify(x) ++ return ifp; ++} + -+typedef int mpls_outsegment_handle; -+#define mpls_outsegment_handle_compare(x,y) (x != y) -+#define mpls_outsegment_handle_verify(m,x) ptr_verify(x) ++static int ldp_interface_state_up(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct interface *ifp; ++ struct interface if_tmp; + -+typedef int mpls_xconnect_handle; -+#define mpls_xconnect_handle_compare(x,y) (x != y) -+#define mpls_xconnect_handle_verify(m,x) ptr_verify(x) ++ ifp = zebra_interface_if_lookup(zclient->ibuf); ++ if (ifp == NULL) { ++ return 0; ++ } + -+typedef int *mpls_lock_handle; -+#define mpls_lock_handle_compare(x,y) (x != y) -+#define mpls_lock_handle_verify(x) ptr_verify(x) ++ /* Interface is already up. */ ++ if (if_is_up (ifp)) { ++ /* Temporarily keep ifp values. */ ++ memcpy (&if_tmp, ifp, sizeof (struct interface)); + -+typedef int mpls_tunnel_handle; -+#define mpls_tunnel_handle_compare(x,y) (x != y) ++ zebra_interface_if_set_value (zclient->ibuf, ifp); + -+typedef int mpls_policy_handle; -+#define mpls_policy_handle_compare(x,y) (x != y) ++ zlog_info ("Interface[%s] state update.", ifp->name); + -+typedef int mpls_trace_handle; -+#define mpls_trace_handle_compare(x,y) (x != y) ++ return 0; ++ } + -+typedef char *mpls_lock_key_type; -+typedef int mpls_size_type; ++ zebra_interface_if_set_value(zclient->ibuf, ifp); + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/mpls_interface.c zebra-ldp/mplsd/mpls_interface.c ---- zebra/mplsd/mpls_interface.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_interface.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,72 @@ -+#include ++ zlog_info ("Interface[%s] state change to up.", ifp->name); + -+#include "if.h" -+#include "memory.h" ++ ldp_interface_up(ifp->info); + -+#include "mpls.h" -+#include "mpls_interface.h" -+#include "impl_mpls.h" ++ return 0; ++} + -+struct mpls_interface *mpls_if_new(struct interface *ifp) { -+ struct mpls_interface *mi; -+ struct mpls *mpls = mpls_get(); ++static int ldp_interface_state_down(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct interface *ifp; + -+ mi = XMALLOC(MTYPE_MPLS_IF, sizeof(struct mpls_interface)); -+ memset(mi, 0, sizeof(struct mpls_interface)); ++ ifp = zebra_interface_state_read (zclient->ibuf); ++ if (ifp == NULL) { ++ return 0; ++ } + -+ /* Set zebra interface pointer. */ -+ mi->ifp = ifp; -+ mi->labelspace = -1; ++ zlog_info ("Interface[%s] state change to down.", ifp->name); + -+ mi->mpls = mpls; -+ return mi; -+} ++ ldp_interface_down(ifp->info); + -+void mpls_if_free(struct mpls_interface *mi) { -+ XFREE(MTYPE_MPLS_IF, mi); ++ return 0; +} + -+int mpls_if_is_up(struct mpls_interface *mi) { -+ return if_is_up(mi->ifp); ++void prefix2mpls_inet_addr(struct prefix *p, struct mpls_inet_addr *a) ++{ ++ a->type = MPLS_FAMILY_IPV4; ++ a->u.ipv4 = (uint32_t)ntohl(p->u.prefix4.s_addr); +} + -+int mpls_if_new_hook(struct interface *ifp) { -+ ifp->info = mpls_if_new(ifp); -+ return 0; ++void zebra_prefix2mpls_fec(struct prefix *p, mpls_fec *fec) ++{ ++ fec->u.prefix.length = p->prefixlen; ++ fec->type = MPLS_FEC_PREFIX; ++ fec->u.prefix.network.type = MPLS_FAMILY_IPV4; ++ fec->u.prefix.network.u.ipv4 = ntohl(p->u.prefix4.s_addr); +} + -+int mpls_if_delete_hook(struct interface *ifp) { -+ mpls_if_free(ifp->info); -+ ifp->info = NULL; -+ return 0; ++void mpls_fec2zebra_prefix(mpls_fec *lp, struct prefix *p) ++{ ++ switch(lp->type) { ++ case MPLS_FEC_PREFIX: ++ p->prefixlen = lp->u.prefix.length; ++ p->u.prefix4.s_addr = htonl(lp->u.prefix.network.u.ipv4); ++ break; ++ case MPLS_FEC_HOST: ++ p->prefixlen = 32; ++ p->u.prefix4.s_addr = htonl(lp->u.host.u.ipv4); ++ break; ++ default: ++ break; ++ } +} + -+int mpls_if_up(struct mpls_interface *mi) { -+ if (!mi) { ++static int ldp_interface_address_add(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct ldp *ldp = ldp_get(); ++ struct connected *c; ++ struct interface *ifp; ++ struct prefix *p; ++ struct ldp_addr addr; ++ struct ldp_if iff; ++ ++ c = zebra_interface_address_add_read(zclient->ibuf); ++ if (c == NULL || c->address->family != AF_INET) { + return 0; + } -+ if (mi->labelspace != -1) { -+ do_mpls_labelspace(mi); ++ ++ ifp = c->ifp; ++ p = c->address; ++ ++ zlog_info("address add %s to interface %s",inet_ntoa(p->u.prefix4), ++ ifp->name); ++ ++ if (ldp) { ++ prefix2mpls_inet_addr(p, &addr.address); ++ iff.handle = ifp; ++ ldp_cfg_if_addr_set(ldp->h, &iff, &addr, LDP_CFG_ADD); + } -+ ldp_if_up(mi); -+ l2cc_if_up(mi); -+ //static_if_up(mi); -+ return 1; ++ ++ return 0; +} + -+int mpls_if_down(struct mpls_interface *mi) { -+ if (!mi) { ++static int ldp_interface_address_delete(int command, struct zclient *zclient, ++ zebra_size_t length) { ++ struct ldp *ldp = ldp_get(); ++ struct connected *c; ++ struct interface *ifp; ++ struct prefix *p; ++ struct ldp_addr addr; ++ struct ldp_if iff; ++ ++ c = zebra_interface_address_delete_read(zclient->ibuf); ++ if (c == NULL || c->address->family != AF_INET) { + return 0; + } -+ ldp_if_down(mi); -+ l2cc_if_down(mi); -+ //static_if_down(mi); -+ return 1; -+} + -+void mpls_if_init() { -+ /* Initialize Zebra interface data structure. */ -+ if_init(); -+ if_add_hook(IF_NEW_HOOK, mpls_if_new_hook); -+ if_add_hook(IF_DELETE_HOOK, mpls_if_delete_hook); ++ ifp = c->ifp; ++ p = c->address; ++ ++ zlog_info("address delete %s from interface %s", ++ inet_ntoa(p->u.prefix4), ifp->name); ++ ++ if (ldp) { ++ prefix2mpls_inet_addr(p, &addr.address); ++ iff.handle = ifp; ++ ldp_cfg_if_addr_set(ldp->h, &iff, &addr, LDP_CFG_DEL); ++ } ++ ++ connected_free(c); ++ ++ return 0; +} -diff --exclude=.p4config -uNr zebra/mplsd/mpls_interface.h zebra-ldp/mplsd/mpls_interface.h ---- zebra/mplsd/mpls_interface.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_interface.h 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,37 @@ -+#ifndef MPLS_INTERFACE_H -+#define MPLS_INTERFACE_H + -+#include ++static int ldp_zebra_read_ipv4(int cmd, struct zclient *client, ++ zebra_size_t length) { ++ struct prefix_ipv4 prefix; ++ struct stream *s; ++ int ifindex_num; ++ int nexthop_num; ++ int message; ++ int flags; ++ int type; ++ struct mpls_nexthop nexthop; + -+#include "if.h" -+#include "command.h" -+#include "prefix.h" -+#include "zclient.h" ++ s = client->ibuf; ++ memset(&nexthop,0,sizeof(nexthop)); + -+#include "ldp.h" -+#include "ldp_struct.h" -+#include "ldp_interface.h" -+#include "l2cc_interface.h" ++ /* Type, flags, message. */ ++ type = stream_getc(s); ++ flags = stream_getc(s); ++ message = stream_getc(s); + -+struct mpls_interface { -+ struct mpls *mpls; ++ /* IPv4 prefix. */ ++ memset (&prefix, 0, sizeof(struct prefix_ipv4)); ++ prefix.family = AF_INET; ++ prefix.prefixlen = stream_getc (s); ++ stream_get(&prefix.prefix, s, PSIZE(prefix.prefixlen)); + -+ struct interface *ifp; -+ int labelspace; ++ zlog_info("route %s/%d", inet_ntoa(prefix.prefix), prefix.prefixlen); ++ if (type == ZEBRA_ROUTE_CONNECT) { ++ nexthop.attached = MPLS_BOOL_TRUE; ++ zlog_info("\tattached"); ++ } ++ ++ /* Nexthop, ifindex, distance, metric. */ ++ if (CHECK_FLAG(message, ZAPI_MESSAGE_NEXTHOP)) { ++ struct in_addr tmp; ++ nexthop_num = stream_getc(s); ++ zlog_info("\tnum nexthop %d", nexthop_num); ++ if (nexthop_num && (nexthop.ip.u.ipv4 = ntohl(stream_get_ipv4(s)))) { ++ nexthop.ip.type = MPLS_FAMILY_IPV4; ++ nexthop.type |= MPLS_NH_IP; ++ tmp.s_addr = htonl(nexthop.ip.u.ipv4); ++ zlog_info("\tnexthop %s", inet_ntoa(tmp)); ++ } ++ } + -+ struct connected *connected; ++ if (CHECK_FLAG(message, ZAPI_MESSAGE_IFINDEX)) { ++ ifindex_num = stream_getc(s); ++ zlog_info("\tnum ifindex %d", ifindex_num); ++ if (ifindex_num && (nexthop.if_handle = ++ if_lookup_by_index(stream_getl(s)))) { ++ nexthop.type |= MPLS_NH_IF; ++ zlog_info("\tifindex %d", nexthop.if_handle->ifindex); ++ } ++ } + -+ struct ldp_interface *ldp; -+ struct l2cc_interface *l2cc; -+ struct rsvpte_interface *rsvpte; -+// struct static_interface static; -+}; ++ /* Distance. */ ++ if (CHECK_FLAG(message, ZAPI_MESSAGE_DISTANCE)) { ++ nexthop.distance = stream_getc(s); ++ } + -+struct mpls_interface *mpls_if_new(); -+void mpls_if_free(struct mpls_interface *); -+int mpls_if_is_up(struct mpls_interface *); -+int mpls_if_up(struct mpls_interface *mi); -+int mpls_if_down(struct mpls_interface *mi); -+void mpls_if_init(); ++ /* Metric. */ ++ if (CHECK_FLAG(message, ZAPI_MESSAGE_METRIC)) { ++ nexthop.metric = stream_getl(s); ++ } + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/mpls_main.c zebra-ldp/mplsd/mpls_main.c ---- zebra/mplsd/mpls_main.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_main.c 2003-03-10 14:57:28.000000000 -0600 -@@ -0,0 +1,228 @@ -+#include ++ if (cmd == ZEBRA_IPV4_ROUTE_ADD) { ++ zlog_info("\tadd"); ++ mpls_fib_ipv4_add(&prefix, &nexthop); ++ } else { ++ zlog_info("\tdelete"); ++ mpls_fib_ipv4_delete(&prefix, &nexthop); ++ } ++ return 0; ++} ++ ++void ldp_zebra_init() { ++ int i; ++ ++ /* Allocate zebra structure. */ ++ zclient = zclient_new(); ++ zclient_init(zclient, ZEBRA_ROUTE_LDP); ++ for (i = 0;i < ZEBRA_ROUTE_MAX;i++) { ++ zclient->redist[i] = 1; ++ } ++ zclient->router_id_update = ldp_router_id_update_zebra; ++ zclient->interface_add = ldp_interface_add; ++ zclient->interface_delete = ldp_interface_delete2; ++ zclient->interface_up = ldp_interface_state_up; ++ zclient->interface_down = ldp_interface_state_down; ++ zclient->interface_address_add = ldp_interface_address_add; ++ zclient->interface_address_delete = ldp_interface_address_delete; ++ zclient->ipv4_route_add = ldp_zebra_read_ipv4; ++ zclient->ipv4_route_delete = ldp_zebra_read_ipv4; ++ ++ table = route_table_init(); ++ memset(&router_id, 0, sizeof(router_id)); ++} +diff --exclude=rsvpd -uNr quagga/ldpd/ldp_zebra.h quagga-mpls/ldpd/ldp_zebra.h +--- quagga/ldpd/ldp_zebra.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/ldp_zebra.h 2004-06-09 22:36:22.000000000 -0500 +@@ -0,0 +1,16 @@ ++#ifndef _ZEBRA_LDP_ZEBRA_H ++#define _ZEBRA_LDP_ZEBRA_H + -+#include "version.h" -+#include "getopt.h" -+#include "command.h" -+#include "thread.h" -+#include "filter.h" -+#include "memory.h" +#include "prefix.h" -+#include "log.h" + -+#include "mpls.h" -+#include "mpls_vty.h" -+#include "mpls_zebra.h" -+#include "mpls_interface.h" ++#include "ldp_struct.h" + -+/* Configuration filename and directory. */ -+char config_current[] = MPLS_DEFAULT_CONFIG; -+char config_default[] = SYSCONFDIR MPLS_DEFAULT_CONFIG; ++extern struct prefix router_id; ++extern struct route_table* table; + -+/* Command line options. */ -+struct option longopts[] = -+{ -+ { "daemon", no_argument, NULL, 'd'}, -+ { "config_file", required_argument, NULL, 'f'}, -+ { "log_mode", no_argument, NULL, 'l'}, -+ { "help", no_argument, NULL, 'h'}, -+ { "vty_port", required_argument, NULL, 'P'}, -+ { "vty_addr", required_argument, NULL, 'A'}, -+ { "version", no_argument, NULL, 'v'}, -+ { 0 } -+}; ++void ldp_zebra_init(); ++void prefix2mpls_inet_addr(struct prefix *p, struct mpls_inet_addr *a); ++void zebra_prefix2mpls_fec(struct prefix *p, mpls_fec *fec); ++void mpls_fec2zebra_prefix(mpls_fec *fec, struct prefix *p); ++ ++#endif +diff --exclude=rsvpd -uNr quagga/ldpd/Makefile.am quagga-mpls/ldpd/Makefile.am +--- quagga/ldpd/Makefile.am 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/Makefile.am 2004-07-14 19:15:14.000000000 -0500 +@@ -0,0 +1,60 @@ ++# Process this file with automake to produce Makefile.in. ++ ++INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib ++DEFS = @DEFS@ $(LOCAL_OPTS) -DSYSCONFDIR=\"$(sysconfdir)/\" ++INSTALL_SDATA=@INSTALL@ -m 600 + -+/* Master of threads. */ -+struct thread_master *master = NULL; ++sbin_PROGRAMS = ldpd + -+/* Process ID saved for use by init system */ -+char *pid_file = PATH_MPLSD_PID; ++ldpd_SOURCES = \ ++impl_fib.c impl_ifmgr.c impl_lock.c impl_mm.c impl_mpls.c \ ++impl_policy.c impl_socket.c impl_timer.c impl_tree.c \ ++ldp_zebra.c ldp_main.c \ ++ldp.c ldp_interface.c ldp_vty.c ldp_remote_peer.c l2cc_interface.c \ ++ldp_addr.c ldp_adj.c \ ++ldp_attr.c ldp_buf.c ldp_cfg.c ldp_entity.c ldp_fec.c ldp_global.c \ ++ldp_hello.c ldp_hop.c ldp_hop_list.c ldp_if.c ldp_inet_addr.c \ ++ldp_init.c ldp_inlabel.c ldp_keepalive.c ldp_label_abort.c \ ++ldp_label_mapping.c ldp_label_rel_with.c ldp_label_request.c \ ++ldp_mesg.c ldp_nortel.c ldp_notif.c ldp_outlabel.c \ ++ldp_pdu_setup.c ldp_peer.c \ ++ldp_resource.c ldp_session.c ldp_state_funcs.c \ ++ldp_state_machine.c ldp_tunnel.c ldp_nexthop.c\ ++mpls_compare.c + -+/* Help information display. */ -+static void -+usage (char *progname, int status) -+{ -+ if (status != 0) -+ fprintf (stderr, "Try `%s --help' for more information.\n", progname); -+ else -+ { -+ printf ("Usage : %s [OPTION...]\n\n\ -+Daemon which manages MPLS related configuration.\n\n\ -+-d, --daemon Runs in daemon mode\n\ -+-f, --config_file Set configuration file name\n\ -+-l, --log_mode Set verbose log mode flag\n\ -+-h, --help Display this help and exit\n\ -+-P, --vty_port Set vty's port number\n\ -+-A, --vty_addr Set vty's bind address\n\ -+-v, --version Print program version\n\ -+\n\ -+Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS); -+ } + -+ exit (status); -+} -+ -+/* SIGHUP handler. */ -+void -+sighup (int sig) -+{ -+ zlog_info ("SIGHUP received"); ++noinst_HEADERS = \ ++ldp_zebra.h \ ++ldp.h ldp_interface.h ldp_vty.h ldp_remote_peer.h l2cc_interface.h \ ++ldp_addr.h ldp_adj.h ldp_attr.h ldp_buf.h ldp_cfg.h \ ++ldp_defaults.h ldp_entity.h ldp_fec.h \ ++ldp_global.h mpls_handle_type.h ldp_hello.h ldp_hop.h \ ++ldp_hop_list.h ldp_if.h ldp_inet_addr.h \ ++ldp_init.h ldp_inlabel.h ldp_keepalive.h ldp_label_abort.h \ ++ldp_label_mapping.h ldp_label_rel_with.h ldp_label_request.h \ ++ldp_mesg.h ldp_nortel.h ldp_notif.h ldp_outlabel.h ldp_pdu.h ldp_nexthop.h \ ++ldp_pdu_setup.h ldp_peer.h mpls_refcnt.h ldp_resource.h \ ++ldp_session.h ldp_state_machine.h ldp_struct.h ldp_tunnel.h \ ++mpls_tree_impl.h mpls_mm_impl.h mpls_mpls_impl.h mpls_trace_impl.h \ ++mpls_assert.h mpls_fib_impl.h mpls_ifmgr_impl.h mpls_list.h mpls_lock_impl.h \ ++mpls_policy_impl.h mpls_socket_impl.h mpls_timer_impl.h mpls_trace.h \ ++mpls_struct.h mpls_compare.h mpls_bitfield.h + -+ /* Reload of config file. */ -+ ; -+} ++ldpd_LDADD = -L../lib -lzebra @LIBCAP@ + -+/* SIGINT handler. */ -+void -+sigint (int sig) -+{ -+ zlog_info ("Terminating on signal"); ++sysconf_DATA = ldpd.conf.sample + -+ exit (0); -+} ++EXTRA_DIST = $(sysconf_DATA) + -+/* SIGUSR1 handler. */ -+void -+sigusr1 (int sig) -+{ -+ zlog_rotate (NULL); -+} ++install-sysconfDATA: $(sysconf_DATA) ++ @$(NORMAL_INSTALL) ++ $(mkinstalldirs) $(DESTDIR)$(sysconfdir) ++ @list='$(sysconf_DATA)'; for p in $$list; do \ ++ if test -f $(srcdir)/$$p; then \ ++ echo " $(INSTALL_SDATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p"; \ ++ $(INSTALL_SDATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p; \ ++ else if test -f $$p; then \ ++ echo " $(INSTALL_SDATA) $$p $(DESTDIR)$(sysconfdir)/$$p"; \ ++ $(INSTALL_SDATA) $$p $(DESTDIR)$(sysconfdir)/$$p; \ ++ fi; fi; \ ++ done +diff --exclude=rsvpd -uNr quagga/ldpd/mpls_handle_type.h quagga-mpls/ldpd/mpls_handle_type.h +--- quagga/ldpd/mpls_handle_type.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/mpls_handle_type.h 2004-05-26 22:03:14.000000000 -0500 +@@ -0,0 +1,94 @@ ++#ifndef _LDP_HANDLE_TYPE_H_ ++#define _LDP_HANDLE_TYPE_H_ + -+/* Signale wrapper. */ -+RETSIGTYPE * -+signal_set (int signo, void (*func)(int)) -+{ -+ int ret; -+ struct sigaction sig; -+ struct sigaction osig; ++#define MPLS_USE_LSR 0 + -+ sig.sa_handler = func; -+ sigemptyset (&sig.sa_mask); -+ sig.sa_flags = 0; -+#ifdef SA_RESTART -+ sig.sa_flags |= SA_RESTART; -+#endif /* SA_RESTART */ ++#if (__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)) ++#if 0 ++typedef unsigned char uint8_t; ++typedef unsigned short uint16_t; ++typedef unsigned int uint32_t; ++#endif ++#else ++#include ++#endif + -+ ret = sigaction (signo, &sig, &osig); ++#include ++#include "if.h" + -+ if (ret < 0) -+ return (SIG_ERR); -+ else -+ return (osig.sa_handler); -+} ++struct ldp; ++struct ldp_timer; ++struct ldp_socket; + -+/* Initialization of signal handles. */ -+void -+signal_init () -+{ -+ signal_set (SIGHUP, sighup); -+ signal_set (SIGINT, sigint); -+ signal_set (SIGTERM, sigint); -+ signal_set (SIGPIPE, SIG_IGN); -+ signal_set (SIGUSR1, sigusr1); -+} -+ -+/* Main startup routine. */ -+int -+main (int argc, char **argv) -+{ -+ char *p; -+ int vty_port = 0; -+ char *vty_addr = NULL; -+ int daemon_mode = 0; -+ char *config_file = NULL; -+ char *progname; -+ struct thread thread; ++#define ptr_verify(x) (x ? MPLS_BOOL_TRUE : MPLS_BOOL_FALSE) + -+ /* Set umask before anything for security */ -+ umask (0027); ++typedef void *mpls_tree_handle; ++#define mpls_tree_handle_compare(x,y) (x != y) ++#define mpls_tree_handle_verify(x) ptr_verify(x) + -+ /* preserve my name */ -+ progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); ++typedef void *mpls_instance_handle; ++#define mpls_instance_handle_compare(x,y) (x != y) ++#define mpls_instance_handle_verify(x) ptr_verify(x) + -+ zlog_default = openzlog (progname, ZLOG_STDOUT, ZLOG_MPLS, -+ LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON); ++typedef struct ldp* mpls_fib_handle; ++#define mpls_fib_handle_compare(x,y) (x == y) ++#define mpls_fib_handle_verify(x) ptr_verify(x) + -+ while (1) -+ { -+ int opt; -+ -+ opt = getopt_long (argc, argv, "bdklf:hP:rv", longopts, 0); ++typedef int mpls_ifmgr_handle; ++#define mpls_ifmgr_handle_compare(x,y) (x == y) ++#define mpls_ifmgr_handle_verify(x) ptr_verify(x) + -+ if (opt == EOF) -+ break; ++typedef struct interface* mpls_if_handle; ++#define mpls_if_handle_compare(x,y) \ ++ ((x->ifindex == y->ifindex) ? 0 : (x->ifindex > y->ifindex ? 1 : -1)) ++#define mpls_if_handle_verify(m,x) ptr_verify(x) + -+ switch (opt) -+ { -+ case 0: -+ break; -+ case 'd': -+ daemon_mode = 1; -+ break; -+ case 'l': -+ /* log_mode = 1; */ -+ break; -+ case 'f': -+ config_file = optarg; -+ break; -+ case 'A': -+ vty_addr = optarg; -+ break; -+ case 'P': -+ vty_port = atoi (optarg); -+ break; -+ case 'v': -+ print_version (progname); -+ exit (0); -+ break; -+ case 'h': -+ usage (progname, 0); -+ break; -+ default: -+ usage (progname, 1); -+ break; -+ } -+ } ++typedef int mpls_timer_mgr_handle; ++#define mpls_timer_mgr_handle_compare(x,y) (x != y) ++#define mpls_timer_mgr_handle_verify(x) ptr_verify(x) + -+ /* Make master thread emulator. */ -+ master = thread_master_create(); ++typedef struct mpls_timer* mpls_timer_handle; ++#define mpls_timer_handle_compare(x,y) (x != y) ++#define mpls_timer_handle_verify(m,x) ptr_verify(x) + -+ /* Vty related initialize. */ -+ signal_init(); -+ cmd_init(1); -+ vty_init(); -+ memory_init(); ++typedef int mpls_socket_mgr_handle; ++#define mpls_socket_mgr_handle_compare(x,y) (x != y) ++#define mpls_socket_mgr_handle_verify(x) MPLS_BOOL_TRUE + -+ /* MPLSs inits */ -+ mpls_init(); -+ mpls_if_init(); -+ mpls_vty_init(); -+ mpls_vty_show_init(); -+ mpls_zebra_init(); ++typedef struct mpls_socket* mpls_socket_handle; ++#define mpls_socket_handle_compare(x,y) (x->fd != y->fd) ++#define mpls_socket_handle_verify(m,x) ptr_verify(x) + -+ sort_node(); ++typedef int mpls_mpls_handle; ++#define mpls_mpls_handle_compare(x,y) (x != y) ++#define mpls_mpls_handle_verify(x) ptr_verify(x) + -+ /* Configuration file read*/ -+ vty_read_config(config_file, config_current, config_default); ++typedef int mpls_insegment_handle; ++#define mpls_insegment_handle_compare(x,y) (x != y) ++#define mpls_insegment_handle_verify(m,x) ptr_verify(x) + -+ /* Daemonize. */ -+ if (daemon_mode) { -+ daemon(0, 0); -+ } ++typedef int mpls_outsegment_handle; ++#define mpls_outsegment_handle_compare(x,y) (x != y) ++#define mpls_outsegment_handle_verify(m,x) ptr_verify(x) + -+ /* Output pid of zebra. */ -+ pid_output(pid_file); ++typedef int mpls_xconnect_handle; ++#define mpls_xconnect_handle_compare(x,y) (x != y) ++#define mpls_xconnect_handle_verify(m,x) ptr_verify(x) + -+ /* Create VTY socket */ -+ vty_serv_sock(vty_addr, -+ vty_port ? vty_port : MPLS_VTY_PORT, MPLS_VTYSH_PATH); ++typedef int *mpls_lock_handle; ++#define mpls_lock_handle_compare(x,y) (x != y) ++#define mpls_lock_handle_verify(x) ptr_verify(x) + -+ /* Print banner. */ -+ zlog(NULL, LOG_INFO, "MPLSd (%s) starts", ZEBRA_VERSION); ++typedef int mpls_tunnel_handle; ++#define mpls_tunnel_handle_compare(x,y) (x != y) + -+ while(thread_fetch(master, &thread)) { -+ thread_call(&thread); -+ } ++typedef int mpls_policy_handle; ++#define mpls_policy_handle_compare(x,y) (x != y) ++ ++typedef int mpls_trace_handle; ++#define mpls_trace_handle_compare(x,y) (x != y) ++ ++typedef char *mpls_lock_key_type; ++typedef int mpls_size_type; + -+ /* Not reached... */ -+ exit (0); -+} -diff --exclude=.p4config -uNr zebra/mplsd/mpls_trace.h zebra-ldp/mplsd/mpls_trace.h ---- zebra/mplsd/mpls_trace.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_trace.h 2003-03-10 14:57:28.000000000 -0600 ++#endif +diff --exclude=rsvpd -uNr quagga/ldpd/mpls_trace.h quagga-mpls/ldpd/mpls_trace.h +--- quagga/ldpd/mpls_trace.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/ldpd/mpls_trace.h 2004-05-19 21:40:47.000000000 -0500 @@ -0,0 +1,60 @@ +#ifndef _LDP_TRACE_H_ +#define _LDP_TRACE_H_ @@ -6318,2420 +6370,18881 @@ diff --exclude=.p4config -uNr zebra/mplsd/mpls_trace.h zebra-ldp/mplsd/mpls_trac +} + +#endif -diff --exclude=.p4config -uNr zebra/mplsd/mpls_vty.c zebra-ldp/mplsd/mpls_vty.c ---- zebra/mplsd/mpls_vty.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_vty.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,159 @@ -+#include -+ -+#include "vty.h" -+#include "command.h" -+ -+#include "mpls.h" -+#include "mpls_interface.h" -+ -+#include "ldp.h" -+#include "ldp_cfg.h" -+#include "ldp_vty.h" -+#include "ldp_interface.h" -+#include "static_vty.h" -+#include "rsvpte_vty.h" -+ -+#include "impl_mpls.h" -+ -+DEFUN (mpls_show_lsr_id, mpls_show_lsr_id_cmd, -+ "show lsr-id", -+ SHOW_STR -+ "LSR identifier\n") { +diff --exclude=rsvpd -uNr quagga/lib/command.c quagga-mpls/lib/command.c +--- quagga/lib/command.c 2004-02-25 13:42:53.000000000 -0600 ++++ quagga-mpls/lib/command.c 2004-07-14 21:57:20.344563344 -0500 +@@ -2318,9 +2318,12 @@ + vty->node = ENABLE_NODE; + vty_config_unlock (vty); + break; ++ case MPLS_LABELSPACE_NODE: ++ case MPLS_TUN_INTERFACE_NODE: + case INTERFACE_NODE: + case ZEBRA_NODE: + case BGP_NODE: ++ case LDP_NODE: + case RIP_NODE: + case RIPNG_NODE: + case OSPF_NODE: +@@ -2340,6 +2343,9 @@ + case KEYCHAIN_KEY_NODE: + vty->node = KEYCHAIN_NODE; + break; ++ case LDP_IF_NODE: ++ vty->node = INTERFACE_NODE; ++ break; + default: + break; + } +@@ -2365,10 +2371,14 @@ + /* Nothing to do. */ + break; + case CONFIG_NODE: ++ case MPLS_LABELSPACE_NODE: ++ case MPLS_TUN_INTERFACE_NODE: + case INTERFACE_NODE: + case ZEBRA_NODE: + case RIP_NODE: + case RIPNG_NODE: ++ case LDP_NODE: ++ case LDP_IF_NODE: + case BGP_NODE: + case BGP_VPNV4_NODE: + case BGP_IPV4_NODE: +diff --exclude=rsvpd -uNr quagga/lib/command.h quagga-mpls/lib/command.h +--- quagga/lib/command.h 2004-02-25 13:42:53.000000000 -0600 ++++ quagga-mpls/lib/command.h 2004-07-14 21:56:16.600253952 -0500 +@@ -75,11 +75,15 @@ + AAA_NODE, /* AAA node. */ + KEYCHAIN_NODE, /* Key-chain node. */ + KEYCHAIN_KEY_NODE, /* Key-chain key node. */ ++ MPLS_LABELSPACE_NODE, /* MPLS Labelspace node. */ ++ MPLS_TUN_INTERFACE_NODE, /* MPLS tunnel interface node. */ + INTERFACE_NODE, /* Interface mode node. */ + ZEBRA_NODE, /* zebra connection node. */ + TABLE_NODE, /* rtm_table selection node. */ + RIP_NODE, /* RIP protocol mode node. */ + RIPNG_NODE, /* RIPng protocol mode node. */ ++ LDP_NODE, /* LDP protocol mode */ ++ LDP_IF_NODE, /* LDP interface mode */ + BGP_NODE, /* BGP protocol mode which includes BGP4+ */ + BGP_VPNV4_NODE, /* BGP MPLS-VPN PE exchange. */ + BGP_IPV4_NODE, /* BGP IPv4 unicast address family. */ +diff --exclude=rsvpd -uNr quagga/lib/if.c quagga-mpls/lib/if.c +--- quagga/lib/if.c 2004-02-25 13:43:04.000000000 -0600 ++++ quagga-mpls/lib/if.c 2004-07-14 22:55:20.490500744 -0500 +@@ -123,6 +123,17 @@ + listnode_add_sort (iflist, ifp); + ifp->connected = list_new (); + ifp->connected->del = (void (*) (void *)) connected_free; ++ ifp->mpls_labelspace = -1; ++ ++ if (!strncmp (ifp->name, "mpls", 4)) ++ { ++ ifp->node = MPLS_TUN_INTERFACE_NODE; ++ ifp->flags |= IFF_POINTOPOINT; ++ } ++ else ++ { ++ ifp->node = INTERFACE_NODE; ++ } + + if (if_master.if_new_hook) + (*if_master.if_new_hook) (ifp); +@@ -493,7 +504,7 @@ + if (ifp == NULL) + ifp = if_create (argv[0], INTERFACE_NAMSIZ); + vty->index = ifp; +- vty->node = INTERFACE_NODE; ++ vty->node = ifp->node; + + return CMD_SUCCESS; + } +@@ -725,6 +736,30 @@ + } + #endif + ++struct interface *if_getfirst() ++{ ++ listnode node = listhead(iflist); ++ return getdata(node); ++} + -+ struct mpls *mpls = mpls_get(); ++struct interface *if_getnext(struct interface *old) ++{ ++ struct interface *ifp; ++ listnode node; ++ int flag = 0; + -+ vty_out(vty, "lsr-id: %s%s", inet_ntoa(mpls->router_id.u.prefix4), -+ VTY_NEWLINE); -+ return CMD_SUCCESS; ++ for (node = listhead(iflist); node; nextnode(node)) { ++ ifp = getdata(node); ++ if (flag) { ++ return ifp; ++ } ++ if (ifp->ifindex == old->ifindex) { ++ flag = 1; ++ } ++ } ++ return NULL; +} + -+DEFUN(interface_mpls_labelspace, -+ interface_mpls_labelspace_cmd, -+ "mpls labelspace <1-255>", -+ "MPLS interface configuration\n" -+ "labelspace\n" -+ "labelspace number\n") { -+ struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct mpls *mpls = mpls_get(); -+ struct mpls_range range; + #ifndef HAVE_IF_INDEXTONAME + char * + if_indextoname (unsigned int ifindex, char *name) +diff --exclude=rsvpd -uNr quagga/lib/if.h quagga-mpls/lib/if.h +--- quagga/lib/if.h 2004-02-25 13:43:05.000000000 -0600 ++++ quagga-mpls/lib/if.h 2004-02-25 21:59:50.000000000 -0600 +@@ -81,6 +81,9 @@ + /* Interface index. */ + unsigned int ifindex; + ++ /* VTY configuration node for this interface default is INTERFACE_NODE */ ++ unsigned int node; ++ + /* Zebra internal interface status */ + u_char status; + #define ZEBRA_INTERFACE_ACTIVE (1 << 0) +@@ -128,6 +131,7 @@ + #ifdef HAVE_NET_RT_IFLIST + struct if_data stats; + #endif /* HAVE_NET_RT_IFLIST */ ++ int mpls_labelspace; + }; + + /* Connected address structure. */ +@@ -208,6 +212,9 @@ + struct connected *connected_delete_by_prefix (struct interface *, struct prefix *); + struct connected *connected_lookup_address (struct interface *, struct in_addr); + ++struct interface *if_getfirst(); ++struct interface *if_getnext(struct interface*); + -+ if ((range.label_space = atoi(argv[0])) < 0) { -+ return CMD_WARNING; -+ } + #ifndef HAVE_IF_NAMETOINDEX + unsigned int if_nametoindex (const char *); + #endif +diff --exclude=rsvpd -uNr quagga/lib/linklist.h quagga-mpls/lib/linklist.h +--- quagga/lib/linklist.h 2004-02-25 13:43:08.000000000 -0600 ++++ quagga-mpls/lib/linklist.h 2004-02-25 13:57:45.000000000 -0600 +@@ -43,6 +43,7 @@ + + #define nextnode(X) ((X) = (X)->next) + #define listhead(X) ((X)->head) ++#define listtail(X) ((X)->tail) + #define listcount(X) ((X)->count) + #define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL) + #define getdata(X) ((X)->data) +diff --exclude=rsvpd -uNr quagga/lib/log.c quagga-mpls/lib/log.c +--- quagga/lib/log.c 2004-02-25 13:43:09.000000000 -0600 ++++ quagga-mpls/lib/log.c 2004-06-02 22:38:00.000000000 -0500 +@@ -34,6 +34,7 @@ + "ZEBRA", + "RIP", + "BGP", ++ "LDP", + "OSPF", + "RIPNG", + "OSPF6", +diff --exclude=rsvpd -uNr quagga/lib/log.h quagga-mpls/lib/log.h +--- quagga/lib/log.h 2004-02-25 13:43:09.000000000 -0600 ++++ quagga-mpls/lib/log.h 2004-05-26 21:32:19.000000000 -0500 +@@ -44,6 +44,7 @@ + ZLOG_ZEBRA, + ZLOG_RIP, + ZLOG_BGP, ++ ZLOG_LDP, + ZLOG_OSPF, + ZLOG_RIPNG, + ZLOG_OSPF6, +diff --exclude=rsvpd -uNr quagga/lib/Makefile.am quagga-mpls/lib/Makefile.am +--- quagga/lib/Makefile.am 2004-02-25 13:42:46.000000000 -0600 ++++ quagga-mpls/lib/Makefile.am 2004-02-25 18:42:27.000000000 -0600 +@@ -10,7 +10,8 @@ + print_version.c checksum.c vector.c linklist.c vty.c command.c \ + sockunion.c prefix.c thread.c if.c memory.c buffer.c table.c hash.c \ + filter.c routemap.c distribute.c stream.c str.c log.c plist.c \ +- zclient.c sockopt.c smux.c md5.c if_rmap.c keychain.c privs.c debug.c ++ zclient.c sockopt.c smux.c md5.c if_rmap.c keychain.c privs.c debug.c \ ++ zmpls.c + + libzebra_a_DEPENDENCIES = @LIB_REGEX@ + +@@ -21,7 +22,7 @@ + memory.h network.h prefix.h routemap.h distribute.h sockunion.h \ + str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \ + plist.h zclient.h sockopt.h smux.h md5-gnu.h if_rmap.h keychain.h \ +- privs.h debug.h ++ privs.h debug.h zmpls.h + + EXTRA_DIST = regex.c regex-gnu.h + +diff --exclude=rsvpd -uNr quagga/lib/memory.h quagga-mpls/lib/memory.h +--- quagga/lib/memory.h 2004-02-25 13:43:12.000000000 -0600 ++++ quagga-mpls/lib/memory.h 2004-05-24 21:50:22.000000000 -0500 +@@ -126,6 +126,8 @@ + MTYPE_OSPF6_EXTERNAL_INFO, + MTYPE_OSPF6_OTHER, + ++ MTYPE_LDP, ++ + MTYPE_BGP, + MTYPE_BGP_PEER, + MTYPE_PEER_GROUP, +diff --exclude=rsvpd -uNr quagga/lib/table.c quagga-mpls/lib/table.c +--- quagga/lib/table.c 2004-02-25 13:43:44.000000000 -0600 ++++ quagga-mpls/lib/table.c 2004-06-15 15:15:13.000000000 -0500 +@@ -311,6 +311,37 @@ + return NULL; + } + ++struct route_node * ++route_node_lookup2 (struct route_table *table, struct prefix *p) ++{ ++ struct route_node *rn_in, *rn_tmp; + -+ mi->labelspace = range.label_space; -+ do_mpls_labelspace(mi); ++ if (!(rn_in = route_node_lookup(table,p))) { ++fprintf(stderr,"lookup2 is doing work\n"); ++ /* walk as far down the tree as we can */ ++ rn_in = table->top; ++ while (rn_in && rn_in->p.prefixlen <= p->prefixlen && ++ prefix_match(&rn_in->p, p)) { ++ rn_tmp = rn_in->link[check_bit(&p->u.prefix, rn_in->p.prefixlen)]; ++ if (!rn_tmp) { ++ break; ++ } ++ rn_in = rn_tmp; ++ } ++ route_lock_node(rn_in); + -+ if (mpls->ldp && mi->ldp && mi->ldp->entity.index) { -+ ldp_interface_admin_state_start(mi); -+ mi->ldp->iff.label_space = mi->labelspace; -+ ldp_cfg_if_set(mpls->ldp->h, &mi->ldp->iff, LDP_IF_CFG_LABEL_SPACE); -+ ldp_interface_admin_state_finish(mi); ++ /* rn_in is either the actual node of the furthest node in the tree */ ++ /* so get the 'next' one with 'info' */ ++ rn_in = route_next2(rn_in); + } + -+ return CMD_SUCCESS; ++ if (rn_in && !rn_in->info) { ++ route_unlock_node(rn_in); ++ rn_in = NULL; ++ } ++ return rn_in; +} + -+DEFUN(no_interface_mpls_labelspace, -+ no_interface_mpls_labelspace_cmd, -+ "no mpls labelspace", -+ NO_STR -+ "MPLS interface configuration\n" -+ "labelspace\n") { -+ struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct mpls *mpls = mpls_get(); -+ -+ mi->labelspace = -1; -+ do_mpls_labelspace(mi); + /* Add node to routing table. */ + struct route_node * + route_node_get (struct route_table *table, struct prefix *p) +@@ -461,6 +492,22 @@ + return NULL; + } + ++struct route_node * ++route_next2 (struct route_node *rn_in) ++{ ++ struct route_node *rn = rn_in; ++ struct route_node *rn2; ++ do { ++ rn2 = route_next(rn); ++ rn = rn2; ++ } while(rn && !rn->info); + -+ if (mpls->ldp && mi->ldp && mi->ldp->entity.index) { -+ ldp_interface_admin_state_start(mi); -+ mi->ldp->iff.label_space = mi->labelspace; -+ ldp_cfg_if_set(mpls->ldp->h, &mi->ldp->iff, LDP_IF_CFG_LABEL_SPACE); -+ ldp_interface_admin_state_finish(mi); ++ if (rn && rn->info) { ++ return rn; + } -+ return CMD_SUCCESS; ++ return NULL; +} + -+int mpls_interface_config_write(struct vty *vty) { -+ listnode node; -+ struct interface *ifp; -+ struct mpls_interface *mi; -+ struct mpls *mpls = mpls_get(); -+ -+ for (node = listhead(mpls->iflist); node; nextnode(node)) { -+ ifp = getdata(node); -+ -+ vty_out(vty, "interface %s%s", ifp->name, VTY_NEWLINE); -+ -+ if (ifp->desc) { -+ vty_out(vty, " description %s%s", ifp->desc, VTY_NEWLINE); -+ } + /* Unlock current node and lock next node until limit. */ + struct route_node * + route_next_until (struct route_node *node, struct route_node *limit) +diff --exclude=rsvpd -uNr quagga/lib/table.h quagga-mpls/lib/table.h +--- quagga/lib/table.h 2004-02-25 13:43:44.000000000 -0600 ++++ quagga-mpls/lib/table.h 2004-02-25 13:57:47.000000000 -0600 +@@ -59,9 +59,11 @@ + void route_node_delete (struct route_node *node); + struct route_node *route_top (struct route_table *); + struct route_node *route_next (struct route_node *); ++struct route_node *route_next2 (struct route_node *); + struct route_node *route_next_until (struct route_node *, struct route_node *); + struct route_node *route_node_get (struct route_table *, struct prefix *); + struct route_node *route_node_lookup (struct route_table *, struct prefix *); ++struct route_node *route_node_lookup2 (struct route_table *, struct prefix *); + struct route_node *route_lock_node (struct route_node *node); + struct route_node *route_node_match (struct route_table *, struct prefix *); + struct route_node *route_node_match_ipv4 (struct route_table *, +diff --exclude=rsvpd -uNr quagga/lib/thread.c quagga-mpls/lib/thread.c +--- quagga/lib/thread.c 2004-02-25 13:43:45.000000000 -0600 ++++ quagga-mpls/lib/thread.c 2004-02-25 13:57:47.000000000 -0600 +@@ -260,10 +260,26 @@ + sizeof (struct thread_master)); + } + ++static int thread_in_list(struct thread_list *list, struct thread *thread) ++{ ++ struct thread *tt; + -+ if ((mi = (struct mpls_interface*)ifp->info)) { -+ if (mi->labelspace > -1) { -+ vty_out(vty, " mpls labelspace %d%s", mi->labelspace, VTY_NEWLINE); -+ } else { -+ vty_out(vty, " no mpls labelspace%s", VTY_NEWLINE); -+ } -+ ldp_interface_config_write(vty, mi); ++ for (tt = list->head; tt; tt = tt->next) ++ { ++ if (tt == thread) ++ { ++ return 1; + } -+ vty_out(vty, "!%s", VTY_NEWLINE); + } + return 0; +} + -+void mpls_vty_show_init () { + /* Add a new thread to the list. */ + static void + thread_list_add (struct thread_list *list, struct thread *thread) + { ++ assert(!thread_in_list(list,thread)); ++ + thread->next = NULL; + thread->prev = list->tail; + if (list->tail) +@@ -280,6 +296,8 @@ + struct thread *point, + struct thread *thread) + { ++ assert(!thread_in_list(list,thread)); ++ + thread->next = point; + thread->prev = point->prev; + if (point->prev) +@@ -294,6 +312,8 @@ + static struct thread * + thread_list_delete (struct thread_list *list, struct thread *thread) + { ++ assert(thread_in_list(list,thread)); ++ + if (thread->next) + thread->next->prev = thread->prev; + else +diff --exclude=rsvpd -uNr quagga/lib/vty.c quagga-mpls/lib/vty.c +--- quagga/lib/vty.c 2004-02-25 13:43:50.000000000 -0600 ++++ quagga-mpls/lib/vty.c 2004-07-14 21:58:55.410111184 -0500 +@@ -614,10 +614,14 @@ + /* Nothing to do. */ + break; + case CONFIG_NODE: ++ case MPLS_LABELSPACE_NODE: ++ case MPLS_TUN_INTERFACE_NODE: + case INTERFACE_NODE: + case ZEBRA_NODE: + case RIP_NODE: + case RIPNG_NODE: ++ case LDP_NODE: ++ case LDP_IF_NODE: + case BGP_NODE: + case BGP_VPNV4_NODE: + case BGP_IPV4_NODE: +@@ -1022,10 +1026,14 @@ + /* Nothing to do. */ + break; + case CONFIG_NODE: ++ case MPLS_LABELSPACE_NODE: ++ case MPLS_TUN_INTERFACE_NODE: + case INTERFACE_NODE: + case ZEBRA_NODE: + case RIP_NODE: + case RIPNG_NODE: ++ case LDP_NODE: ++ case LDP_IF_NODE: + case BGP_NODE: + case RMAP_NODE: + case OSPF_NODE: +diff --exclude=rsvpd -uNr quagga/lib/zclient.c quagga-mpls/lib/zclient.c +--- quagga/lib/zclient.c 2004-02-25 13:43:52.000000000 -0600 ++++ quagga-mpls/lib/zclient.c 2004-02-27 00:56:18.000000000 -0600 +@@ -30,6 +30,7 @@ + #include "zclient.h" + #include "memory.h" + #include "table.h" ++#include "zmpls.h" + + #include "zebra/rib.h" + #include "zebra/zserv.h" +@@ -260,6 +261,9 @@ + /* We need interface information. */ + zebra_message_send (zclient, ZEBRA_INTERFACE_ADD); + ++ /* We need router-id information. */ ++ zebra_message_send (zclient, ZEBRA_ROUTER_ID_ADD); ++ + /* Flush all redistribute request. */ + for (i = 0; i < ZEBRA_ROUTE_MAX; i++) + if (i != zclient->redist_default && zclient->redist[i]) +@@ -269,6 +273,10 @@ + if (zclient->default_information) + zebra_message_send (zclient, ZEBRA_REDISTRIBUTE_DEFAULT_ADD); + ++ /* If MPLS information is needed. */ ++ if (zclient->mplsinfo) ++ zebra_message_send (zclient, ZEBRA_MPLS_LABELSPACE_ADD); + -+ install_element(VIEW_NODE, &mpls_show_lsr_id_cmd); -+ install_element(ENABLE_NODE, &mpls_show_lsr_id_cmd); + return 0; + } + +@@ -519,6 +527,107 @@ + + #endif /* HAVE_IPV6 */ + ++static int ++zapi_mpls_xc (struct zclient *zclient, struct zapi_mpls_xc *api, u_char cmd) ++{ ++ struct stream *s; + -+#if 0 -+ install_element (VIEW_NODE, &show_ip_route_cmd); -+ install_element (VIEW_NODE, &show_ip_route_addr_cmd); -+ install_element (VIEW_NODE, &show_ip_route_prefix_cmd); -+ install_element (VIEW_NODE, &show_ip_route_prefix_longer_cmd); -+ install_element (VIEW_NODE, &show_ip_route_protocol_cmd); -+ install_element (VIEW_NODE, &show_ip_route_supernets_cmd); -+ install_element (ENABLE_NODE, &show_ip_route_cmd); -+ install_element (ENABLE_NODE, &show_ip_route_addr_cmd); -+ install_element (ENABLE_NODE, &show_ip_route_prefix_cmd); -+ install_element (ENABLE_NODE, &show_ip_route_prefix_longer_cmd); -+ install_element (ENABLE_NODE, &show_ip_route_protocol_cmd); -+ install_element (ENABLE_NODE, &show_ip_route_supernets_cmd); -+#endif ++ s = zclient->obuf; ++ mpls_xc_stream_write(s, api, cmd); + -+ ldp_vty_show_init(); -+ static_vty_show_init(); -+ rsvpte_vty_show_init(); ++ return writen (zclient->sock, s->data, stream_get_endp (s)); +} + -+struct cmd_node interface_node = { INTERFACE_NODE, "%s(config-if)# ", 1, }; -+ -+void mpls_vty_if_init() { -+ -+ install_node(&interface_node, mpls_interface_config_write); -+ -+ install_element(CONFIG_NODE, &interface_cmd); -+ install_default(INTERFACE_NODE); -+ -+ install_element(INTERFACE_NODE,&interface_desc_cmd); -+ install_element(INTERFACE_NODE,&no_interface_desc_cmd); -+ -+ install_element(INTERFACE_NODE,&interface_mpls_labelspace_cmd); -+ install_element(INTERFACE_NODE,&no_interface_mpls_labelspace_cmd); -+ -+ ldp_vty_if_init(); -+ rsvpte_vty_if_init(); ++int ++zapi_mpls_xc_add (struct zclient *zclient, struct zapi_mpls_xc *api) ++{ ++ return zapi_mpls_xc (zclient, api, ZEBRA_MPLS_XC_ADD); +} + -+void mpls_vty_init () { ++int ++zapi_mpls_xc_delete (struct zclient *zclient, struct zapi_mpls_xc *api) ++{ ++ return zapi_mpls_xc (zclient, api, ZEBRA_MPLS_XC_DELETE); ++} + -+ ldp_vty_init(); -+ rsvpte_vty_init(); -+ static_vty_init(); ++static int ++zapi_mpls_in_segment (struct zclient *zclient, ++ struct zapi_mpls_in_segment *api, u_char cmd) ++{ ++ struct stream *s; + -+ mpls_vty_if_init(); -+} -diff --exclude=.p4config -uNr zebra/mplsd/mpls_vty.h zebra-ldp/mplsd/mpls_vty.h ---- zebra/mplsd/mpls_vty.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_vty.h 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,42 @@ -+#ifndef ZEBRA_MPLS_VTY_H -+#define ZEBRA_MPLS_VTY_H ++ s = zclient->obuf; ++ mpls_in_segment_stream_write(s, api, cmd); + -+#define VTY_GET_UINT32(NAME,V,STR) \ -+{ \ -+ char *endptr = NULL; \ -+ (V) = strtoul ((STR), &endptr, 10); \ -+ if (*endptr != '\0' || ((V) == ULONG_MAX && errno == ERANGE)) \ -+ { \ -+ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ -+ return CMD_WARNING; \ -+ } \ ++ return writen (zclient->sock, s->data, stream_get_endp (s)); +} + -+#define VTY_GET_UINT32_RANGE(NAME,V,STR,IMIN,IMAX) \ -+{ \ -+ VTY_GET_UINT32(NAME,V,STR); \ -+ if (((V) < IMIN) || ((V) > IMAX)) \ -+ { \ -+ vty_out (vty, "%% Invalid %s value. Valid range is (%d ... %d)%s", \ -+ NAME, IMIN, IMAX, VTY_NEWLINE); \ -+ return CMD_WARNING; \ -+ } \ ++int ++zapi_mpls_in_segment_add (struct zclient *zclient, ++ struct zapi_mpls_in_segment *api) ++{ ++ return zapi_mpls_in_segment (zclient, api, ZEBRA_MPLS_IN_SEGMENT_ADD); +} + -+#define VTY_GET_IPV4_ADDRESS(NAME,V,STR) \ -+{ \ -+ struct in_addr addr; \ -+ int retv; \ -+ retv = inet_aton ((STR), &addr); \ -+ if (!retv) \ -+ { \ -+ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \ -+ return CMD_WARNING; \ -+ } \ -+ (V) = ntohl(addr.s_addr); \ ++int ++zapi_mpls_in_segment_delete (struct zclient *zclient, ++ struct zapi_mpls_in_segment *api) ++{ ++ return zapi_mpls_in_segment (zclient, api, ZEBRA_MPLS_IN_SEGMENT_DELETE); +} + -+void mpls_vty_init(); -+void mpls_vty_show_init(); -+ -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/mpls_zebra.c zebra-ldp/mplsd/mpls_zebra.c ---- zebra/mplsd/mpls_zebra.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_zebra.c 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,311 @@ -+#include -+ -+#include "command.h" -+#include "prefix.h" -+#include "stream.h" -+#include "table.h" -+#include "memory.h" -+#include "zclient.h" -+#include "log.h" -+ -+#include "ldp.h" -+#include "mpls_interface.h" -+#include "impl_fib.h" -+#include "impl_ifmgr.h" -+#include "impl_mpls.h" -+ -+/* All information about zebra. */ -+struct zclient *zclient = NULL; -+ -+/* For registering threads. */ -+extern struct thread_master *master; -+ -+/* Router-id update message from zebra. */ -+int mpls_router_id_update_zebra(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct mpls *mpls = mpls_get(); -+ -+ zebra_router_id_update_read(zclient->ibuf,&mpls->router_id); ++static int ++zapi_mpls_out_segment (struct zclient *zclient, ++ struct zapi_mpls_out_segment *api, u_char cmd) ++{ ++ struct stream *s; + -+ zlog_info("router-id change %s", -+ inet_ntoa(mpls->router_id.u.prefix4)); ++ s = zclient->obuf; ++ mpls_out_segment_stream_write(s, api, cmd); + -+ if (mpls && mpls->ldp) { -+ ldp_router_id_update(mpls->ldp, &mpls->router_id); -+ } -+ return 0; ++ return writen (zclient->sock, s->data, stream_get_endp (s)); +} + -+/* Inteface addition message from zebra. */ -+int mpls_interface_add(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct interface *ifp; -+ struct mpls_interface *mi; -+ -+ if (!(ifp = zebra_interface_add_read(zclient->ibuf))) { -+ return 1; -+ } -+ -+ mi = (struct mpls_interface*)ifp->info; -+ if (mi && mi->ldp) { -+ /* Initialize labelspace to kernel */ -+ /* If the labelspace has been set yet via the CLI */ -+ /* the result will be that the kernel labelspace will */ -+ /* be un-set, which doesn't hurt anything */ -+ do_mpls_labelspace(mi); -+ } -+ -+ zlog_info("interface add %s index %d flags %ld metric %d mtu %d", -+ ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu); -+ -+ return 0; ++int ++zapi_mpls_out_segment_add (struct zclient *zclient, ++ struct zapi_mpls_out_segment *api) ++{ ++ return zapi_mpls_out_segment (zclient, api, ZEBRA_MPLS_OUT_SEGMENT_ADD); +} + -+int mpls_interface_delete(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct interface *ifp; -+ struct stream *s; -+ -+ s = zclient->ibuf; -+ /* zebra_interface_state_read() updates interface structure in iflist */ -+ ifp = zebra_interface_state_read(s); ++int ++zapi_mpls_out_segment_delete (struct zclient *zclient, ++ struct zapi_mpls_out_segment *api) ++{ ++ return zapi_mpls_out_segment (zclient, api, ZEBRA_MPLS_OUT_SEGMENT_DELETE); ++} + -+ if (ifp == NULL) { -+ return 0; -+ } ++static int ++zapi_mpls_labelspace (struct zclient *zclient, ++ struct zapi_mpls_labelspace *api, u_char cmd) ++{ ++ struct stream *s; + -+ if (if_is_up(ifp)) { -+ zlog_warn("got delete of %s, but interface is still up", -+ ifp->name); -+ } ++ s = zclient->obuf; ++ mpls_labelspace_stream_write(s, api, cmd); + -+ zlog_info("interface delete %s index %d flags %ld metric %d mtu %d", ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu); ++ return writen (zclient->sock, s->data, stream_get_endp (s)); ++} + -+ if_delete(ifp); ++int ++zapi_mpls_labelspace_add (struct zclient *zclient, ++ struct zapi_mpls_labelspace *api) ++{ ++ return zapi_mpls_labelspace (zclient, api, ZEBRA_MPLS_LABELSPACE_ADD); ++} + -+ return 0; ++int ++zapi_mpls_labelspace_delete (struct zclient *zclient, ++ struct zapi_mpls_labelspace *api) ++{ ++ return zapi_mpls_labelspace (zclient, api, ZEBRA_MPLS_LABELSPACE_DELETE); +} + -+struct interface * zebra_interface_if_lookup(struct stream *s) { -+ struct interface *ifp; -+ u_char ifname_tmp[INTERFACE_NAMSIZ]; + int + zebra_redistribute_send (int command, int sock, int type) + { +@@ -540,6 +649,20 @@ + return ret; + } + ++/* Router-id update from zebra daemon. */ ++void ++zebra_router_id_update_read (struct stream *s, struct prefix *rid) ++{ ++ int plen; + -+ /* Read interface name. */ -+ stream_get(ifname_tmp, s, INTERFACE_NAMSIZ); ++ /* Fetch interface address. */ ++ rid->family = stream_getc (s); + -+ /* Lookup this by interface index. */ -+ ifp = if_lookup_by_name(ifname_tmp); ++ plen = prefix_blen (rid); ++ stream_get (&rid->u.prefix, s, plen); ++ rid->prefixlen = stream_getc (s); ++} + -+ /* If such interface does not exist, indicate an error */ -+ if (!ifp) { -+ return NULL; -+ } + /* Interface addition from zebra daemon. */ + struct interface * + zebra_interface_add_read (struct stream *s) +@@ -607,6 +730,19 @@ + return ifp; + } + ++void ++zebra_interface_if_set_value (struct stream *s, struct interface *ifp) ++{ ++ /* Read interface's index. */ ++ ifp->ifindex = stream_getl (s); + -+ return ifp; ++ /* Read interface's value. */ ++ ifp->flags = stream_getl (s); ++ ifp->metric = stream_getl (s); ++ ifp->mtu = stream_getl (s); ++ ifp->bandwidth = stream_getl (s); +} + -+int mpls_interface_state_up(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct interface *ifp; -+ struct interface if_tmp; + struct connected * + zebra_interface_address_add_read (struct stream *s) + { +@@ -771,6 +907,10 @@ + + switch (command) + { ++ case ZEBRA_ROUTER_ID_UPDATE: ++ if (zclient->router_id_update) ++ ret = (*zclient->router_id_update) (command, zclient, length); ++ break; + case ZEBRA_INTERFACE_ADD: + if (zclient->interface_add) + ret = (*zclient->interface_add) (command, zclient, length); +@@ -811,6 +951,38 @@ + if (zclient->ipv6_route_delete) + ret = (*zclient->ipv6_route_delete) (command, zclient, length); + break; ++ case ZEBRA_MPLS_XC_ADD: ++ if (zclient->mpls_xc_add) ++ ret = (*zclient->mpls_xc_add) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_XC_DELETE: ++ if (zclient->mpls_xc_delete) ++ ret = (*zclient->mpls_xc_delete) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_IN_SEGMENT_ADD: ++ if (zclient->mpls_in_segment_add) ++ ret = (*zclient->mpls_in_segment_add) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_IN_SEGMENT_DELETE: ++ if (zclient->mpls_in_segment_delete) ++ ret = (*zclient->mpls_in_segment_delete) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_OUT_SEGMENT_ADD: ++ if (zclient->mpls_out_segment_add) ++ ret = (*zclient->mpls_out_segment_add) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_OUT_SEGMENT_DELETE: ++ if (zclient->mpls_out_segment_delete) ++ ret = (*zclient->mpls_out_segment_delete) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_LABELSPACE_ADD: ++ if (zclient->mpls_labelspace_add) ++ ret = (*zclient->mpls_labelspace_add) (command, zclient, length); ++ break; ++ case ZEBRA_MPLS_LABELSPACE_DELETE: ++ if (zclient->mpls_labelspace_delete) ++ ret = (*zclient->mpls_labelspace_delete) (command, zclient, length); ++ break; + default: + break; + } +diff --exclude=rsvpd -uNr quagga/lib/zclient.h quagga-mpls/lib/zclient.h +--- quagga/lib/zclient.h 2004-02-25 13:43:53.000000000 -0600 ++++ quagga-mpls/lib/zclient.h 2004-02-27 01:03:49.000000000 -0600 +@@ -24,6 +24,7 @@ + + /* For struct interface and struct connected. */ + #include "if.h" ++#include "zmpls.h" + + /* For input/output buffer to zebra. */ + #define ZEBRA_MAX_PACKET_SIZ 4096 +@@ -61,7 +62,14 @@ + /* Redistribute defauilt. */ + u_char default_information; + ++ /* Router-id information. */ ++ u_char ridinfo; + -+ ifp = zebra_interface_if_lookup(zclient->ibuf); -+ if (ifp == NULL) { -+ return 0; -+ } ++ /* MPLS information, XC in/out segment, labelspace */ ++ u_char mplsinfo; + -+ /* Interface is already up. */ -+ if (if_is_up (ifp)) { -+ /* Temporarily keep ifp values. */ -+ memcpy (&if_tmp, ifp, sizeof (struct interface)); + /* Pointer to the callback functions. */ ++ int (*router_id_update) (int, struct zclient *, zebra_size_t); + int (*interface_add) (int, struct zclient *, zebra_size_t); + int (*interface_delete) (int, struct zclient *, zebra_size_t); + int (*interface_up) (int, struct zclient *, zebra_size_t); +@@ -72,6 +80,15 @@ + int (*ipv4_route_delete) (int, struct zclient *, zebra_size_t); + int (*ipv6_route_add) (int, struct zclient *, zebra_size_t); + int (*ipv6_route_delete) (int, struct zclient *, zebra_size_t); ++ int (*mpls_xc_add) (int, struct zclient *, zebra_size_t); ++ int (*mpls_xc_delete) (int, struct zclient *, zebra_size_t); ++ int (*mpls_in_segment_add) (int, struct zclient *, zebra_size_t); ++ int (*mpls_in_segment_delete) (int, struct zclient *, zebra_size_t); ++ int (*mpls_out_segment_add) (int, struct zclient *, zebra_size_t); ++ int (*mpls_out_segment_delete) (int, struct zclient *, zebra_size_t); ++ int (*mpls_labelspace_add) (int, struct zclient *, zebra_size_t); ++ int (*mpls_labelspace_delete) (int, struct zclient *, zebra_size_t); + -+ zebra_interface_if_set_value (zclient->ibuf, ifp); + }; + + /* Zebra API message flag. */ +@@ -127,8 +144,11 @@ + + struct interface *zebra_interface_add_read (struct stream *); + struct interface *zebra_interface_state_read (struct stream *s); ++void zebra_interface_if_set_value (struct stream *, struct interface *); + struct connected *zebra_interface_address_add_read (struct stream *); + struct connected *zebra_interface_address_delete_read (struct stream *); ++void zebra_router_id_update_read (struct stream *s, struct prefix *rid); + -+ zlog_info ("Interface[%s] state update.", ifp->name); + + #ifdef HAVE_IPV6 + /* IPv6 prefix add and delete function prototype. */ +@@ -159,6 +179,37 @@ + zapi_ipv6_delete (struct zclient *zclient, struct prefix_ipv6 *p, + struct zapi_ipv6 *api); + + -+ return 0; -+ } + #endif /* HAVE_IPV6 */ + ++int ++zapi_mpls_xc_add (struct zclient *zclient, struct zapi_mpls_xc *api); + -+ zebra_interface_if_set_value(zclient->ibuf, ifp); ++int ++zapi_mpls_xc_delete (struct zclient *zclient, struct zapi_mpls_xc *api); + -+ zlog_info ("Interface[%s] state change to up.", ifp->name); ++int ++zapi_mpls_in_segment_add (struct zclient *zclient, ++ struct zapi_mpls_in_segment *api); + -+ mpls_if_up(ifp->info); ++int ++zapi_mpls_in_segment_delete (struct zclient *zclient, ++ struct zapi_mpls_in_segment *api); + -+ return 0; -+} ++int ++zapi_mpls_out_segment_add (struct zclient *zclient, ++ struct zapi_mpls_out_segment *api); + -+int mpls_interface_state_down(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct interface *ifp; ++int ++zapi_mpls_out_segment_delete (struct zclient *zclient, ++ struct zapi_mpls_out_segment *api); + -+ ifp = zebra_interface_state_read (zclient->ibuf); -+ if (ifp == NULL) { -+ return 0; -+ } ++int ++zapi_mpls_labelspace_add (struct zclient *zclient, ++ struct zapi_mpls_labelspace *api); + -+ zlog_info ("Interface[%s] state change to down.", ifp->name); ++int ++zapi_mpls_labelspace_delete (struct zclient *zclient, ++ struct zapi_mpls_labelspace *api); ++ + #endif /* _ZEBRA_ZCLIENT_H */ +diff --exclude=rsvpd -uNr quagga/lib/zebra.h quagga-mpls/lib/zebra.h +--- quagga/lib/zebra.h 2004-02-25 13:43:54.000000000 -0600 ++++ quagga-mpls/lib/zebra.h 2004-05-26 21:26:45.000000000 -0500 +@@ -250,7 +250,18 @@ + #define ZEBRA_IPV6_NEXTHOP_LOOKUP 16 + #define ZEBRA_IPV4_IMPORT_LOOKUP 17 + #define ZEBRA_IPV6_IMPORT_LOOKUP 18 +-#define ZEBRA_MESSAGE_MAX 19 ++#define ZEBRA_ROUTER_ID_ADD 19 ++#define ZEBRA_ROUTER_ID_DELETE 20 ++#define ZEBRA_ROUTER_ID_UPDATE 21 ++#define ZEBRA_MPLS_XC_ADD 22 ++#define ZEBRA_MPLS_XC_DELETE 23 ++#define ZEBRA_MPLS_IN_SEGMENT_ADD 24 ++#define ZEBRA_MPLS_IN_SEGMENT_DELETE 25 ++#define ZEBRA_MPLS_OUT_SEGMENT_ADD 26 ++#define ZEBRA_MPLS_OUT_SEGMENT_DELETE 27 ++#define ZEBRA_MPLS_LABELSPACE_ADD 28 ++#define ZEBRA_MPLS_LABELSPACE_DELETE 29 ++#define ZEBRA_MESSAGE_MAX 30 + + /* Zebra route's types. */ + #define ZEBRA_ROUTE_SYSTEM 0 +@@ -262,7 +273,8 @@ + #define ZEBRA_ROUTE_OSPF 6 + #define ZEBRA_ROUTE_OSPF6 7 + #define ZEBRA_ROUTE_BGP 8 +-#define ZEBRA_ROUTE_MAX 9 ++#define ZEBRA_ROUTE_LDP 9 ++#define ZEBRA_ROUTE_MAX 10 + + /* Zebra's family types. */ + #define ZEBRA_FAMILY_IPV4 1 +@@ -284,6 +296,7 @@ + #define ZEBRA_FLAG_CHANGED 0x20 + #define ZEBRA_FLAG_STATIC 0x40 + #define ZEBRA_FLAG_REJECT 0x80 ++#define ZEBRA_FLAG_CHANGED_MPLS 0x100 + + /* Zebra nexthop flags. */ + #define ZEBRA_NEXTHOP_IFINDEX 1 +@@ -295,6 +308,7 @@ + #define ZEBRA_NEXTHOP_IPV6_IFINDEX 7 + #define ZEBRA_NEXTHOP_IPV6_IFNAME 8 + #define ZEBRA_NEXTHOP_BLACKHOLE 9 ++#define ZEBRA_NEXTHOP_MPLS 10 + + #ifndef INADDR_LOOPBACK + #define INADDR_LOOPBACK 0x7f000001 /* Internet address 127.0.0.1. */ +diff --exclude=rsvpd -uNr quagga/lib/zmpls.c quagga-mpls/lib/zmpls.c +--- quagga/lib/zmpls.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/lib/zmpls.c 2004-05-03 18:07:55.000000000 -0500 +@@ -0,0 +1,245 @@ ++#include "zebra.h" + -+ mpls_if_down(ifp->info); ++#include "stream.h" ++#include "zmpls.h" + ++int ++mpls_label_match (struct zmpls_label *a, struct zmpls_label *b) ++{ ++ if (a->type != b->type) + return 0; -+} -+ -+int mpls_interface_address_add(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct mpls *mpls = mpls_get(); -+ struct connected *c; -+ struct interface *ifp; -+ struct prefix *p; + -+ c = zebra_interface_address_add_read(zclient->ibuf); -+ if (c == NULL) { -+ return 0; -+ } ++ switch (a->type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ if (a->u.gen != b->u.gen) ++ return 0; ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ if (a->u.atm.vci != b->u.atm.vci && ++ a->u.atm.vpi != b->u.atm.vpi) ++ return 0; ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ if (a->u.fr != b->u.fr) ++ return 0; ++ break; ++ default: ++ assert(0); ++ } ++ return 1; ++} + -+ ifp = c->ifp; -+ p = c->address; ++void ++mpls_label_stream_write (struct stream *s, struct zmpls_label *label) ++{ ++ /* Put label type. */ ++ stream_putc (s, label->type); + -+ zlog_info("address add %s to interface %s",inet_ntoa(p->u.prefix4), -+ ifp->name); ++ /* put the label value */ ++ switch (label->type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ stream_putl (s, label->u.gen); ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ stream_putw (s, label->u.atm.vci); ++ stream_putw (s, label->u.atm.vpi); ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ stream_putl (s, label->u.fr); ++ break; ++ default: ++ assert(0); ++ } ++} + -+ if (mpls->ldp) { -+ ldp_address_add_callback(mpls, c); -+ } ++int ++mpls_label_stream_read (struct stream *s, struct zmpls_label *label) ++{ ++ /* get the label type */ ++ label->type = stream_getc (s); + -+ return 0; ++ /* get the label value */ ++ switch (label->type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ label->u.gen = stream_getl (s); ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ label->u.atm.vci = stream_getw (s); ++ label->u.atm.vpi = stream_getw (s); ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ label->u.fr = stream_getl (s); ++ break; ++ default: ++ assert(0); ++ } ++ return 0; +} + -+int mpls_interface_address_delete(int command, struct zclient *zclient, -+ zebra_size_t length) { -+ struct mpls *mpls = mpls_get(); -+ struct connected *c; -+ struct interface *ifp; -+ struct prefix *p; -+ -+ c = zebra_interface_address_delete_read(zclient->ibuf); -+ if (c == NULL) { -+ return 0; -+ } ++void ++mpls_xc_stream_write (struct stream *s, struct zapi_mpls_xc *api, u_char cmd) ++{ ++ /* Reset stream. */ ++ stream_reset (s); + -+ ifp = c->ifp; -+ p = c->address; ++ /* Length place holder. */ ++ stream_putw (s, 0); + -+ zlog_info("address delete %s from interface %s", -+ inet_ntoa(p->u.prefix4), ifp->name); ++ /* Put command. */ ++ stream_putc (s, cmd); + -+ if (mpls->ldp) { -+ ldp_address_delete_callback(mpls, c); -+ } ++ stream_putc (s, api->in_labelspace); ++ mpls_label_stream_write (s, &api->in_label); + -+ connected_free(c); ++ stream_putl (s, api->out_index); + -+ return 0; ++ /* Put length at the first point of the stream. */ ++ stream_putw_at (s, 0, stream_get_endp (s)); +} + -+static void mpls_read_ipv4(struct zclient *client, u_short length, -+ struct prefix_ipv4* p, struct mpls_nexthop* nexthop) { -+ struct stream *s; -+ int ifindex_num; -+ int nexthop_num; -+ int message; -+ int flags; -+ int type; -+ -+ s = client->ibuf; -+ memset(nexthop,0,sizeof(nexthop)); ++int ++mpls_xc_stream_read (struct stream *s, struct zapi_mpls_xc *api) ++{ ++ api->in_labelspace = stream_getc (s); ++ mpls_label_stream_read (s, &api->in_label); + -+ /* Type, flags, message. */ -+ type = stream_getc(s); -+ flags = stream_getc(s); -+ message = stream_getc(s); ++ api->out_index = stream_getl (s); ++ return 0; ++} + -+ if (type == ZEBRA_ROUTE_CONNECT) { -+ nexthop->attached = MPLS_BOOL_TRUE; -+ } ++void ++mpls_in_segment_stream_write (struct stream *s, ++ struct zapi_mpls_in_segment *api, u_char cmd) ++{ ++ /* Reset stream. */ ++ stream_reset (s); + -+ /* IPv4 prefix. */ -+ memset (p, 0, sizeof(struct prefix_ipv4)); -+ p->family = AF_INET; -+ p->prefixlen = stream_getc (s); -+ stream_get(&p->prefix, s, PSIZE(p->prefixlen)); ++ /* Length place holder. */ ++ stream_putw (s, 0); + -+ /* Nexthop, ifindex, distance, metric. */ -+ if (CHECK_FLAG(message, ZAPI_MESSAGE_NEXTHOP)) { -+ nexthop_num = stream_getc(s); -+ assert(nexthop_num == 1); -+ nexthop->ip.u.ipv4 = ntohl(stream_get_ipv4(s)); -+ if (nexthop->ip.u.ipv4) { -+ nexthop->ip.type = MPLS_FAMILY_IPV4; -+ nexthop->type |= MPLS_NH_IP; -+ } -+ } ++ /* Put command. */ ++ stream_putc (s, cmd); + -+ if (CHECK_FLAG(message, ZAPI_MESSAGE_IFINDEX)) { -+ ifindex_num = stream_getc(s); -+ assert(ifindex_num == 1); -+ nexthop->if_handle = if_lookup_by_index(stream_getl(s)); -+ nexthop->type |= MPLS_NH_IF; -+ } ++ stream_putc (s, api->owner); ++ stream_putc (s, api->labelspace); ++ stream_putw (s, api->protocol); ++ stream_putl (s, api->fwd); ++ stream_putc (s, api->pop); + -+ /* Distance. */ -+ if (CHECK_FLAG(message, ZAPI_MESSAGE_DISTANCE)) { -+ nexthop->distance = stream_getc(s); -+ } ++ mpls_label_stream_write (s, &api->label); + -+ /* Metric. */ -+ if (CHECK_FLAG(message, ZAPI_MESSAGE_METRIC)) { -+ nexthop->metric = stream_getl(s); -+ } ++ /* Put length at the first point of the stream. */ ++ stream_putw_at (s, 0, stream_get_endp (s)); +} + -+int mpls_zebra_read_ipv4(int command, struct zclient *client, -+ zebra_size_t length) { -+ struct mpls_nexthop nexthop; -+ struct prefix_ipv4 p; -+ struct mpls *mpls = mpls_get(); -+ struct in_addr tmp; ++int ++mpls_in_segment_stream_read (struct stream *s, ++ struct zapi_mpls_in_segment *api) ++{ ++ api->owner = stream_getc (s); ++ api->labelspace = stream_getc (s); ++ api->protocol = stream_getw (s); ++ api->fwd = stream_getl (s); ++ api->pop = stream_getc (s); + -+ mpls_read_ipv4(client, length, &p, &nexthop); ++ mpls_label_stream_read (s, &api->label); ++ return 0; ++} + -+ if (command == ZEBRA_IPV4_ROUTE_ADD) { -+ zlog_info("route add %s/%d", inet_ntoa(p.prefix), p.prefixlen); -+ } else { -+ zlog_info("route delete %s/%d", inet_ntoa(p.prefix), p.prefixlen); -+ } ++void ++mpls_out_segment_stream_write (struct stream *s, ++ struct zapi_mpls_out_segment *api, u_char cmd) ++{ ++ /* Reset stream. */ ++ stream_reset (s); + -+ if (nexthop.type & MPLS_NH_IP) { -+ tmp.s_addr = htonl(nexthop.ip.u.ipv4); -+ zlog_info("\tnexthop %s", inet_ntoa(tmp)); -+ } -+ if (nexthop.type & MPLS_NH_IF) { -+ zlog_info("\tifindex %d", nexthop.if_handle->ifindex); -+ } ++ /* Length place holder. */ ++ stream_putw (s, 0); + -+ if (command == ZEBRA_IPV4_ROUTE_ADD) { -+ ldp_ipv4_add(mpls, &p, &nexthop); -+ } else { -+ ldp_ipv4_delete(mpls, &p, &nexthop); -+ } -+ return 0; -+} ++ /* Put command. */ ++ stream_putc (s, cmd); + -+void mpls_zebra_init() { -+ int i; ++ stream_putc (s, api->owner); ++ mpls_label_stream_write (s, &api->push); ++ stream_put (s, api->ifname, INTERFACE_NAMSIZ); + -+ /* Allocate zebra structure. */ -+ zclient = zclient_new(); -+ zclient_init(zclient, ZEBRA_ROUTE_MPLS); -+ for (i = 0;i < ZEBRA_ROUTE_MAX;i++) { -+ zclient->redist[i] = 1; ++ stream_putc (s, api->gate.family); ++ switch (api->gate.family) ++ { ++ case 0: ++ break; ++ case AF_INET: ++ stream_put_in_addr (s, &api->gate.u.prefix4); ++ break; ++ case AF_INET6: ++ stream_put (s, &api->gate.u.prefix6, 16); ++ break; ++ default: ++ assert(0); + } -+ zclient->router_id_update = mpls_router_id_update_zebra; -+ zclient->interface_add = mpls_interface_add; -+ zclient->interface_delete = mpls_interface_delete; -+ zclient->interface_up = mpls_interface_state_up; -+ zclient->interface_down = mpls_interface_state_down; -+ zclient->interface_address_add = mpls_interface_address_add; -+ zclient->interface_address_delete = mpls_interface_address_delete; -+ zclient->ipv4_route_add = mpls_zebra_read_ipv4; -+ zclient->ipv4_route_delete = mpls_zebra_read_ipv4; -+} -diff --exclude=.p4config -uNr zebra/mplsd/mpls_zebra.h zebra-ldp/mplsd/mpls_zebra.h ---- zebra/mplsd/mpls_zebra.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/mpls_zebra.h 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,8 @@ -+#ifndef _ZEBRA_MPLS_ZEBRA_H -+#define _ZEBRA_MPLS_ZEBRA_H + -+#include "prefix.h" ++ stream_putl (s, api->index); + -+void mpls_zebra_init(); ++ /* Put length at the first point of the stream. */ ++ stream_putw_at (s, 0, stream_get_endp (s)); ++} + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/rsvpte.c zebra-ldp/mplsd/rsvpte.c ---- zebra/mplsd/rsvpte.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/rsvpte.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,105 @@ -+#include ++int ++mpls_out_segment_stream_read (struct stream *s, ++ struct zapi_mpls_out_segment *api) ++{ ++ api->owner = stream_getc (s); ++ mpls_label_stream_read (s, &api->push); ++ stream_get (api->ifname, s, INTERFACE_NAMSIZ); + -+#include "memory.h" -+#include "log.h" ++ api->gate.family = stream_getc (s); ++ switch (api->gate.family) ++ { ++ case 0: ++ break; ++ case AF_INET: ++ api->gate.u.prefix4.s_addr = stream_get_ipv4 (s); ++ break; ++ case AF_INET6: ++ stream_get (&api->gate.u.prefix6, s, 16); ++ break; ++ default: ++ assert(0); ++ } ++ ++ api->index = stream_getl (s); ++ return 0; ++} + -+#include "rsvpte.h" -+#include "rsvpte_interface.h" ++void ++mpls_labelspace_stream_write (struct stream *s, ++ struct zapi_mpls_labelspace *api, u_char cmd) ++{ ++ /* Reset stream. */ ++ stream_reset (s); + -+#include "mpls.h" -+#include "mpls_interface.h" ++ /* Length place holder. */ ++ stream_putw (s, 0); + -+int rsvpte_shutdown(struct rsvpte *rsvpte) { -+ return MPLS_SUCCESS; -+} ++ /* Put command. */ ++ stream_putc (s, cmd); + -+int rsvpte_startup(struct rsvpte *rsvpte) { -+ /* setup sockets and recv threads, setup zebra mesg handlers */ -+ /* setup label manager */ ++ stream_putc (s, api->labelspace); ++ stream_put (s, api->ifname, INTERFACE_NAMSIZ); + -+ return MPLS_SUCCESS; ++ /* Put length at the first point of the stream. */ ++ stream_putw_at (s, 0, stream_get_endp (s)); +} + -+int rsvpte_admin_state_start(struct rsvpte *rsvpte) { -+ if (rsvpte->admin_up == MPLS_BOOL_TRUE) { -+ return rsvpte_shutdown(rsvpte); -+ } -+ return MPLS_SUCCESS; -+} ++int ++mpls_labelspace_stream_read (struct stream *s, ++ struct zapi_mpls_labelspace *api) ++{ ++ api->labelspace = stream_getc (s); ++ stream_get (api->ifname, s, INTERFACE_NAMSIZ); + -+int rsvpte_admin_state_finish(struct rsvpte *rsvpte) { -+ if (rsvpte->admin_up == MPLS_BOOL_TRUE) { -+ return rsvpte_startup(rsvpte); -+ } -+ return MPLS_SUCCESS; ++ return 0; +} +diff --exclude=rsvpd -uNr quagga/lib/zmpls.h quagga-mpls/lib/zmpls.h +--- quagga/lib/zmpls.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/lib/zmpls.h 2004-04-16 21:43:29.000000000 -0500 +@@ -0,0 +1,96 @@ ++#ifndef _ZEBRA_MPLS_H ++#define _ZEBRA_MPLS_H + -+int do_rsvpte_router_id_update(struct rsvpte *rsvpte, unsigned int router_id) { -+ return MPLS_SUCCESS; -+} ++#include "prefix.h" ++#include "linklist.h" ++#include "if.h" + -+int rsvpte_router_id_update(struct rsvpte *rsvpte, struct prefix *router_id) { ++#define ZEBRA_MPLS_LABEL_GEN 1 ++#define ZEBRA_MPLS_LABEL_ATM 2 ++#define ZEBRA_MPLS_LABEL_FR 3 + -+ zlog_info("router-id update %s", inet_ntoa(router_id->u.prefix4)); ++struct zmpls_label ++{ ++ u_char type; ++ union { ++ u_int32_t gen; ++ u_int32_t fr; ++ struct { ++ u_int16_t vpi; ++ u_int16_t vci; ++ } atm; ++ } u; ++}; + -+ if (!rsvpte->lsr_id_is_static) { -+ rsvpte_admin_state_start(rsvpte); ++#define ZEBRA_MPLS_OWNER_STATIC 1 ++#define ZEBRA_MPLS_OWNER_BGP 2 ++#define ZEBRA_MPLS_OWNER_LDP 3 + -+ do_rsvpte_router_id_update(rsvpte, ntohl(router_id->u.prefix4.s_addr)); ++/* structures used by clients */ + -+ rsvpte_admin_state_finish(rsvpte); -+ } -+ return 0; -+} ++struct zapi_mpls_xc ++{ ++ u_int index; ++ u_char owner; ++ u_char in_labelspace; ++ struct zmpls_label in_label; ++ u_int out_index; ++}; + -+static struct rsvpte *rsvpte_new(struct mpls *mpls) { -+ struct rsvpte *new = XMALLOC(MTYPE_MPLS_RSVPTE, sizeof(struct rsvpte)); -+ memset(new,0,sizeof(*new)); ++struct zapi_mpls_in_segment ++{ ++ u_char owner; ++ u_char labelspace; ++ u_short protocol; ++ u_int fwd; ++ u_char pop; ++ struct zmpls_label label; ++}; + -+ new->admin_up = MPLS_BOOL_TRUE; -+ new->lsr_id_is_static = 0; -+ new->mpls = mpls; ++struct zapi_mpls_out_segment ++{ ++ u_char owner; ++ struct zmpls_label push; ++ char ifname[INTERFACE_NAMSIZ + 1]; ++ struct prefix gate; ++ u_int index; ++}; + -+ return new; -+} ++struct zapi_mpls_labelspace ++{ ++ u_char labelspace; ++ char ifname[INTERFACE_NAMSIZ + 1]; ++}; + -+struct rsvpte *rsvpte_get() { -+ struct mpls_interface *mi; -+ struct interface *ifp; -+ listnode node; ++struct stream; + -+ struct mpls *mpls = mpls_get(); -+ if (mpls->rsvpte) { -+ return mpls->rsvpte; -+ } ++int ++mpls_label_match (struct zmpls_label *a, struct zmpls_label *b); + -+ mpls->rsvpte = rsvpte_new(mpls); -+ for (node = listhead(mpls->iflist); node; nextnode(node)) { -+ ifp = getdata(node); -+ mi = (struct mpls_interface*)ifp->info; -+ if (mi->rsvpte && mi->rsvpte->create_on_hold == MPLS_BOOL_TRUE) { -+ rsvpte_interface_create(mi); -+ } -+ } ++void ++mpls_xc_stream_write (struct stream *s, struct zapi_mpls_xc *api, u_char cmd); ++int ++mpls_xc_stream_read (struct stream *s, struct zapi_mpls_xc *api); + -+ return mpls->rsvpte; -+} ++void ++mpls_in_segment_stream_write (struct stream *s, ++ struct zapi_mpls_in_segment *api, u_char cmd); ++int ++mpls_in_segment_stream_read (struct stream *s, ++ struct zapi_mpls_in_segment *api); + -+void rsvpte_finish(struct rsvpte *rsvpte) { -+ struct mpls *mpls = rsvpte->mpls; -+ struct interface *ifp; -+ struct mpls_interface *mi; -+ listnode node; ++void ++mpls_out_segment_stream_write (struct stream *s, ++ struct zapi_mpls_out_segment *api, u_char cmd); ++int ++mpls_out_segment_stream_read (struct stream *s, ++ struct zapi_mpls_out_segment *api); + -+ for (node = listhead(mpls->iflist); node; nextnode(node)) { -+ ifp = getdata(node); -+ mi = (struct mpls_interface*)ifp->info; -+ if (mi->rsvpte) { -+ rsvpte_interface_delete(mi); -+ } -+ } ++void ++mpls_labelspace_stream_write (struct stream *s, ++ struct zapi_mpls_labelspace *api, u_char cmd); ++int ++mpls_labelspace_stream_read (struct stream *s, ++ struct zapi_mpls_labelspace *api); ++ ++#endif /* _ZEBRA_MPLS_H */ +diff --exclude=rsvpd -uNr quagga/Makefile.am quagga-mpls/Makefile.am +--- quagga/Makefile.am 2004-02-25 13:40:12.000000000 -0600 ++++ quagga-mpls/Makefile.am 2004-05-24 21:42:23.000000000 -0500 +@@ -1,9 +1,9 @@ + ## Process this file with automake to produce Makefile.in. + +-SUBDIRS = lib @ZEBRA@ @BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ \ ++SUBDIRS = lib @ZEBRA@ @LDPD@ @BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ \ + @VTYSH@ @OSPFCLIENT@ doc + +-DIST_SUBDIRS = lib zebra bgpd ripd ripngd ospfd ospf6d vtysh \ ++DIST_SUBDIRS = lib zebra ldpd bgpd ripd ripngd ospfd ospf6d vtysh \ + ospfclient doc + + EXTRA_DIST = aclocal.m4 SERVICES TODO REPORTING-BUGS vtysh/Makefile.in \ +diff --exclude=rsvpd -uNr quagga/ospfd/ospfd.c quagga-mpls/ospfd/ospfd.c +--- quagga/ospfd/ospfd.c 2004-02-25 13:46:26.000000000 -0600 ++++ quagga-mpls/ospfd/ospfd.c 2004-02-25 13:57:52.000000000 -0600 +@@ -61,6 +61,7 @@ + struct ospf_master *om; + + extern struct zclient *zclient; ++extern struct in_addr router_id_zebra; + + + void ospf_remove_vls_through_area (struct ospf *, struct ospf_area *); +@@ -68,33 +69,6 @@ + void ospf_area_free (struct ospf_area *); + void ospf_network_run (struct ospf *, struct prefix *, struct ospf_area *); + +-/* Get Router ID from ospf interface list. */ +-struct in_addr +-ospf_router_id_get (list if_list) +-{ +- listnode node; +- struct in_addr router_id; +- +- memset (&router_id, 0, sizeof (struct in_addr)); +- +- for (node = listhead (if_list); node; nextnode (node)) +- { +- struct ospf_interface *oi = getdata (node); +- +- if (!if_is_up (oi->ifp) || +- OSPF_IF_PARAM (oi, passive_interface) == OSPF_IF_PASSIVE) +- continue; +- +- /* Ignore virtual link interface. */ +- if (oi->type != OSPF_IFTYPE_VIRTUALLINK && +- oi->type != OSPF_IFTYPE_LOOPBACK) +- if (IPV4_ADDR_CMP (&router_id, &oi->address->u.prefix4) < 0) +- router_id = oi->address->u.prefix4; +- } +- +- return router_id; +-} +- + #define OSPF_EXTERNAL_LSA_ORIGINATE_DELAY 1 + + void +@@ -111,7 +85,7 @@ + if (ospf->router_id_static.s_addr != 0) + router_id = ospf->router_id_static; + else +- router_id = ospf_router_id_get (ospf->oiflist); ++ router_id = router_id_zebra; + + ospf->router_id = router_id; + +diff --exclude=rsvpd -uNr quagga/ospfd/ospf_lsdb.h quagga-mpls/ospfd/ospf_lsdb.h +--- quagga/ospfd/ospf_lsdb.h 2004-02-25 13:45:34.000000000 -0600 ++++ quagga-mpls/ospfd/ospf_lsdb.h 2004-02-25 13:57:51.000000000 -0600 +@@ -47,6 +47,10 @@ + for ((N) = route_top ((T)); ((N)); ((N)) = route_next ((N))) \ + if (((L) = (N)->info)) + ++#define LSDB_LOOP_SUM(T,N,L,S) \ ++ for ((N) = route_top ((T)); ((N)); ((N)) = route_next ((N))) \ ++ if ((L) = (N)->info) ++ + #define ROUTER_LSDB(A) ((A)->lsdb->type[OSPF_ROUTER_LSA].db) + #define NETWORK_LSDB(A) ((A)->lsdb->type[OSPF_NETWORK_LSA].db) + #define SUMMARY_LSDB(A) ((A)->lsdb->type[OSPF_SUMMARY_LSA].db) +diff --exclude=rsvpd -uNr quagga/ospfd/ospf_vty.c quagga-mpls/ospfd/ospf_vty.c +--- quagga/ospfd/ospf_vty.c 2004-02-25 13:46:20.000000000 -0600 ++++ quagga-mpls/ospfd/ospf_vty.c 2004-02-25 13:57:52.000000000 -0600 +@@ -3084,7 +3084,7 @@ + + /* Show functions */ + int +-show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self) ++show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self, int *sum) + { + struct router_lsa *rl; + struct summary_lsa *sl; +@@ -3092,6 +3092,10 @@ + struct prefix_ipv4 p; + + if (lsa != NULL) + -+ rsvpte_admin_state_start(rsvpte); -+ XFREE(MTYPE_MPLS_RSVPTE,rsvpte); -+ mpls->rsvpte = NULL; -+} -diff --exclude=.p4config -uNr zebra/mplsd/rsvpte.h zebra-ldp/mplsd/rsvpte.h ---- zebra/mplsd/rsvpte.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/rsvpte.h 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,26 @@ -+#ifndef RSVPTE_H -+#define RSVPTE_H ++ /* add this LSAs checksum */ ++ *sum += ntohs(lsa->data->checksum); + -+#include -+#include "prefix.h" + /* If self option is set, check LSA self flag. */ + if (self == 0 || IS_LSA_SELF (lsa)) + { +@@ -3307,11 +3311,12 @@ + + /* Show router-LSA detail information. */ + int +-show_router_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_router_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + if (lsa != NULL) + { + struct router_lsa *rl = (struct router_lsa *) lsa->data; ++ *sum += ntohs(lsa->data->checksum); + + show_ip_ospf_database_header (vty, lsa); + +@@ -3327,13 +3332,14 @@ + + /* Show network-LSA detail information. */ + int +-show_network_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_network_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + int length, i; + + if (lsa != NULL) + { + struct network_lsa *nl = (struct network_lsa *) lsa->data; ++ *sum += ntohs(lsa->data->checksum); + + show_ip_ospf_database_header (vty, lsa); + +@@ -3354,11 +3360,12 @@ + + /* Show summary-LSA detail information. */ + int +-show_summary_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_summary_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + if (lsa != NULL) + { + struct summary_lsa *sl = (struct summary_lsa *) lsa->data; ++ *sum += ntohs(lsa->data->checksum); + + show_ip_ospf_database_header (vty, lsa); + +@@ -3374,11 +3381,12 @@ + + /* Show summary-ASBR-LSA detail information. */ + int +-show_summary_asbr_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_summary_asbr_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + if (lsa != NULL) + { + struct summary_lsa *sl = (struct summary_lsa *) lsa->data; ++ *sum += ntohs(lsa->data->checksum); + + show_ip_ospf_database_header (vty, lsa); + +@@ -3394,11 +3402,12 @@ + + /* Show AS-external-LSA detail information. */ + int +-show_as_external_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_as_external_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + if (lsa != NULL) + { + struct as_external_lsa *al = (struct as_external_lsa *) lsa->data; ++ *sum += ntohs(lsa->data->checksum); + + show_ip_ospf_database_header (vty, lsa); + +@@ -3447,11 +3456,12 @@ + + /* Show AS-NSSA-LSA detail information. */ + int +-show_as_nssa_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_as_nssa_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + if (lsa != NULL) + { + struct as_external_lsa *al = (struct as_external_lsa *) lsa->data; ++ *sum += ntohs(lsa->data->checksum); + + show_ip_ospf_database_header (vty, lsa); + +@@ -3476,17 +3486,18 @@ + #endif /* HAVE_NSSA */ + + int +-show_func_dummy (struct vty *vty, struct ospf_lsa *lsa) ++show_func_dummy (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + return 0; + } + + #ifdef HAVE_OPAQUE_LSA + int +-show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) ++show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa, int *sum) + { + if (lsa != NULL) + { ++ *sum += ntohs(lsa->data->checksum); + show_ip_ospf_database_header (vty, lsa); + show_opaque_info_detail (vty, lsa); + +@@ -3496,7 +3507,7 @@ + } + #endif /* HAVE_OPAQUE_LSA */ + +-int (*show_function[])(struct vty *, struct ospf_lsa *) = ++int (*show_function[])(struct vty *, struct ospf_lsa *, int *) = + { + NULL, + show_router_lsa_detail, +@@ -3543,7 +3554,7 @@ + + void + show_lsa_detail_proc (struct vty *vty, struct route_table *rt, +- struct in_addr *id, struct in_addr *adv_router) ++ struct in_addr *id, struct in_addr *adv_router, int *sum) + { + struct prefix_ls lp; + struct route_node *rn, *start; +@@ -3558,7 +3569,7 @@ + if ((lsa = rn->info)) + { + if (show_function[lsa->data->type] != NULL) +- show_function[lsa->data->type] (vty, lsa); ++ show_function[lsa->data->type] (vty, lsa, sum); + } + route_unlock_node (start); + } +@@ -3571,6 +3582,7 @@ + struct in_addr *id, struct in_addr *adv_router) + { + listnode node; ++ int sum = 0; + + switch (type) + { +@@ -3581,7 +3593,7 @@ + vty_out (vty, " %s %s%s", + show_database_desc[type], + VTY_NEWLINE, VTY_NEWLINE); +- show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router); ++ show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router, &sum); + break; + default: + for (node = listhead (ospf->areas); node; nextnode (node)) +@@ -3590,15 +3602,18 @@ + vty_out (vty, "%s %s (Area %s)%s%s", + VTY_NEWLINE, show_database_desc[type], + ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE); +- show_lsa_detail_proc (vty, AREA_LSDB (area, type), id, adv_router); ++ show_lsa_detail_proc (vty, AREA_LSDB (area, type), id, adv_router, ++ &sum); + } + break; + } ++ vty_out (vty, "%s Sum of CkSum: 0x%08x%s%s", ++ VTY_NEWLINE, sum, VTY_NEWLINE, VTY_NEWLINE); + } + + void + show_lsa_detail_adv_router_proc (struct vty *vty, struct route_table *rt, +- struct in_addr *adv_router) ++ struct in_addr *adv_router, int *sum) + { + struct route_node *rn; + struct ospf_lsa *lsa; +@@ -3612,7 +3627,7 @@ + continue; + #endif /* HAVE_NSSA */ + if (show_function[lsa->data->type] != NULL) +- show_function[lsa->data->type] (vty, lsa); ++ show_function[lsa->data->type] (vty, lsa, sum); + } + } + +@@ -3622,6 +3637,7 @@ + struct in_addr *adv_router) + { + listnode node; ++ int sum = 0; + + switch (type) + { +@@ -3633,7 +3649,7 @@ + show_database_desc[type], + VTY_NEWLINE, VTY_NEWLINE); + show_lsa_detail_adv_router_proc (vty, AS_LSDB (ospf, type), +- adv_router); ++ adv_router, &sum); + break; + default: + for (node = listhead (ospf->areas); node; nextnode (node)) +@@ -3643,10 +3659,12 @@ + VTY_NEWLINE, show_database_desc[type], + ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE); + show_lsa_detail_adv_router_proc (vty, AREA_LSDB (area, type), +- adv_router); ++ adv_router, &sum); + } + break; + } ++ vty_out (vty, "%s Sum of CkSum: 0x%08x%s%s", ++ VTY_NEWLINE, sum, VTY_NEWLINE, VTY_NEWLINE); + } + + void +@@ -3654,6 +3672,7 @@ + { + struct ospf_lsa *lsa; + struct route_node *rn; ++ unsigned int sum; + listnode node; + int type; + +@@ -3681,11 +3700,13 @@ + VTY_NEWLINE, VTY_NEWLINE); + vty_out (vty, "%s%s", show_database_header[type], VTY_NEWLINE); + ++ sum = 0; + LSDB_LOOP (AREA_LSDB (area, type), rn, lsa) +- show_lsa_summary (vty, lsa, self); ++ show_lsa_summary (vty, lsa, self, &sum); + +- vty_out (vty, "%s", VTY_NEWLINE); +- } ++ vty_out (vty, "%s Sum of CkSum: 0x%08x%s%s", ++ VTY_NEWLINE, sum, VTY_NEWLINE, VTY_NEWLINE); ++ } + } + } + +@@ -3710,10 +3731,12 @@ + vty_out (vty, "%s%s", show_database_header[type], + VTY_NEWLINE); + ++ sum = 0; + LSDB_LOOP (AS_LSDB (ospf, type), rn, lsa) +- show_lsa_summary (vty, lsa, self); ++ show_lsa_summary (vty, lsa, self, &sum); + +- vty_out (vty, "%s", VTY_NEWLINE); ++ vty_out (vty, "%s Sum of CkSum: 0x%08x%s%s", ++ VTY_NEWLINE, sum, VTY_NEWLINE, VTY_NEWLINE); + } + } + +diff --exclude=rsvpd -uNr quagga/ospfd/ospf_zebra.c quagga-mpls/ospfd/ospf_zebra.c +--- quagga/ospfd/ospf_zebra.c 2004-02-25 13:46:23.000000000 -0600 ++++ quagga-mpls/ospfd/ospf_zebra.c 2004-02-25 13:57:52.000000000 -0600 +@@ -53,6 +53,28 @@ + + /* For registering threads. */ + extern struct thread_master *master; ++struct in_addr router_id_zebra; + -+#include "mpls_struct.h" ++/* Router-id update message from zebra. */ ++int ++ospf_router_id_update_zebra (int command, struct zclient *zclient, ++ zebra_size_t length) ++{ ++ struct ospf *ospf; ++ struct prefix router_id; ++ zebra_router_id_update_read(zclient->ibuf,&router_id); + -+struct mpls; ++ router_id_zebra = router_id.u.prefix4; + -+struct rsvpte { -+ struct mpls *mpls; -+ mpls_bool admin_up; -+ mpls_bool lsr_id_is_static; -+}; ++ ospf = ospf_lookup (); ++ if (ospf != NULL) { ++ if (ospf->t_router_id_update == NULL) { ++ OSPF_TIMER_ON (ospf->t_router_id_update, ospf_router_id_update_timer, ++ OSPF_ROUTER_ID_UPDATE_DELAY); ++ } ++ } ++ return 0; ++} + + /* Inteface addition message from zebra. */ + int +@@ -153,20 +175,6 @@ + return ifp; + } + +-void +-zebra_interface_if_set_value (struct stream *s, struct interface *ifp) +-{ +- /* Read interface's index. */ +- ifp->ifindex = stream_getl (s); +- +- /* Read interface's value. */ +- ifp->status = stream_getc (s); +- ifp->flags = stream_getl (s); +- ifp->metric = stream_getl (s); +- ifp->mtu = stream_getl (s); +- ifp->bandwidth = stream_getl (s); +-} +- + int + ospf_interface_state_up (int command, struct zclient *zclient, + zebra_size_t length) +@@ -1192,6 +1200,7 @@ + /* Allocate zebra structure. */ + zclient = zclient_new (); + zclient_init (zclient, ZEBRA_ROUTE_OSPF); ++ zclient->router_id_update = ospf_router_id_update_zebra; + zclient->interface_add = ospf_interface_add; + zclient->interface_delete = ospf_interface_delete; + zclient->interface_up = ospf_interface_state_up; +diff --exclude=rsvpd -uNr quagga/vtysh/vtysh_cmd.c quagga-mpls/vtysh/vtysh_cmd.c +--- quagga/vtysh/vtysh_cmd.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/vtysh/vtysh_cmd.c 2004-02-25 23:58:26.000000000 -0600 +@@ -0,0 +1,15415 @@ ++#include ++#include "command.h" ++#include "vtysh.h" ++ ++DEFSH (VTYSH_ZEBRA, no_shutdown_if_cmd_vtysh, ++ "no shutdown", ++ "Negate a command or set its defaults\n" ++ "Shutdown the selected interface\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv6_metric_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_RIPD, rip_offset_list_ifname_cmd_vtysh, ++ "offset-list WORD (in|out) <0-16> IFNAME", ++ "Modify RIP metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n" ++ "Interface to match\n") ++ ++DEFSH (VTYSH_RIPNGD, ipv6_distribute_list_prefix_cmd_vtysh, ++ "distribute-list prefix WORD (in|out) WORD", ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_zebra_cmd_vtysh, ++ "no debug ospf zebra", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Zebra information\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_in_prefix_filter_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X) in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig inbound update\n" ++ "Push out the existing ORF prefix-list\n") ++ ++DEFSH (VTYSH_BGPD, bgp_deterministic_med_cmd_vtysh, ++ "bgp deterministic-med", ++ "BGP specific commands\n" ++ "Pick the best-MED path among paths advertised from the neighboring AS\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_default_information_originate_cmd_vtysh, ++ "no default-information originate", ++ "Negate a command or set its defaults\n" ++ "Control distribution of default information\n" ++ "Distribute a default route\n") ++ ++DEFSH (VTYSH_RIPNGD, show_ipv6_ripng_cmd_vtysh, ++ "show ipv6 ripng", ++ "Show running system information\n" ++ "IP information\n" ++ "Show RIPng routes\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_day_month_day_month_cmd_vtysh, ++ "accept-lifetime HH:MM:SS <1-31> MONTH <1993-2035> HH:MM:SS <1-31> MONTH <1993-2035>", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Day of th month to expire\n" ++ "Month of the year to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_summary_cmd_vtysh, ++ "show ip prefix-list summary", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Summary of prefix lists\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbor_damp_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X) dampened-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the dampened routes received from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community3_exact_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_OSPFD, no_router_ospf_id_cmd_vtysh, ++ "no router-id", ++ "Negate a command or set its defaults\n" ++ "router-id for the OSPF process\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_seq_ge_cmd_vtysh, ++ "ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M ge <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_seq_le_cmd_vtysh, ++ "no ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M le <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_transparent_nexthop_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "transparent-nexthop", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Do not change nexthop even peer is EBGP peer\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, set_metric_cmd_vtysh, ++ "set metric <0-4294967295>", ++ "Set values in destination routing protocol\n" ++ "Metric value for destination routing protocol\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_default_metric_val_cmd_vtysh, ++ "no default-metric <1-16>", ++ "Negate a command or set its defaults\n" ++ "Set a metric of redistribute routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_instance_neighbors_peer_cmd_vtysh, ++ "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_zebra_sub_cmd_vtysh, ++ "debug ospf zebra (interface|redistribute)", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Zebra information\n" ++ "Zebra interface\n" ++ "Zebra redistribute\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_neighbors_cmd_vtysh, ++ "show ip bgp vpnv4 all neighbors", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_expanded_cmd_vtysh, ++ "ip community-list <100-199> (deny|permit) .LINE", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list number (expanded)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_redistribute_type_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf6|bgp)", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_hello_interval_addr_cmd_vtysh, ++ "ip ospf hello-interval <1-65535> A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between HELLO packets\n" ++ "Seconds\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_OSPFD, ospf_router_id_cmd_vtysh, ++ "ospf router-id A.B.C.D", ++ "OSPF specific commands\n" ++ "router-id for the OSPF process\n" ++ "OSPF router-id in IP address format\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_neighbor_damp_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X) dampened-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the dampened routes received from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community_exact_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_sequence_number_cmd_vtysh, ++ "no ipv6 prefix-list sequence-number", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Include/exclude sequence numbers in NVGEN\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_aggregate_address_cmd_vtysh, ++ "aggregate-address X:X::X:X/M", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_soft_in_cmd_vtysh, ++ "clear bgp ipv6 <1-65535> soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_description_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "description", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Neighbor specific description\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv6_metric_cmd_vtysh, ++ "redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295>", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_address_prefix_list_val_cmd_vtysh, ++ "no match ip address prefix-list WORD", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match address of route\n" ++ "Match entries of prefix-lists\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_send_community_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "send-community", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Send Community attribute to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, set_ip_nexthop_peer_cmd_vtysh, ++ "set ip next-hop peer-address", ++ "Set values in destination routing protocol\n" ++ "IP information\n" ++ "Next hop address\n" ++ "Use peer address (for BGP only)\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_remark_arg_cmd_vtysh, ++ "no access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD) remark .LINE", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP extended access list\n" ++ "IP standard access list (expanded range)\n" ++ "IP extended access list (expanded range)\n" ++ "IP zebra access-list\n" ++ "Access list entry comment\n" ++ "Comment up to 100 characters\n") ++ ++DEFSH (VTYSH_BGPD, ip_extcommunity_list_name_standard_cmd_vtysh, ++ "ip extcommunity-list standard WORD (deny|permit) .AA:NN", ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Specify standard extcommunity-list\n" ++ "Extended Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Extended community attribute in 'rt aa:nn_or_IPaddr:nn' OR 'soo aa:nn_or_IPaddr:nn' format\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_import_list_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) import-list NAME", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Set the filter for networks from other areas announced to the specified one\n" ++ "Name of the access-list\n") ++ ++DEFSH (VTYSH_BGPD, no_set_local_pref_val_cmd_vtysh, ++ "no set local-preference <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP local preference path attribute\n" ++ "Preference value\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_summary_name_cmd_vtysh, ++ "show ipv6 prefix-list summary WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Summary of prefix lists\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_vpnv4_soft_out_cmd_vtysh, ++ "clear ip bgp A.B.C.D vpnv4 unicast soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_flags_pref_cmd_vtysh, ++ "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_in_prefix_filter_cmd_vtysh, ++ "clear bgp ipv6 external in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_passive_interface_cmd_vtysh, ++ "no passive-interface (IFNAME|default)", ++ "Negate a command or set its defaults\n" ++ "Suppress routing updates on an interface\n" ++ "Interface name\n" ++ "default for all interfaces\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_mask_natural_cmd_vtysh, ++ "no network A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "Network number\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_instance_neighbors_cmd_vtysh, ++ "show bgp view WORD neighbors", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_mask_as_set_cmd_vtysh, ++ "no aggregate-address A.B.C.D A.B.C.D as-set", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community2_exact_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, neighbor_capability_orf_prefix_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "capability orf prefix-list (both|send|receive)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Advertise capability to the peer\n" ++ "Advertise ORF capability to the peer\n" ++ "Advertise prefixlist ORF capability to this neighbor\n" ++ "Capability to SEND and RECEIVE the ORF to/from this neighbor\n" ++ "Capability to RECEIVE the ORF from this neighbor\n" ++ "Capability to SEND the ORF to this neighbor\n") ++ ++DEFSH (VTYSH_ZEBRA, debug_zebra_packet_direct_cmd_vtysh, ++ "debug zebra packet (recv|send)", ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra packet\n" ++ "Debug option set for receive packet\n" ++ "Debug option set for send packet\n") ++ ++DEFSH (VTYSH_RIPD, rip_route_cmd_vtysh, ++ "route A.B.C.D/M", ++ "RIP static route configuration\n" ++ "IP prefix /\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, clear_ip_prefix_list_name_prefix_cmd_vtysh, ++ "clear ip prefix-list WORD A.B.C.D/M", ++ "Reset functions\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPD, show_ip_rip_cmd_vtysh, ++ "show ip rip", ++ "Show running system information\n" ++ "IP information\n" ++ "Show RIP routes\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_routemap_cmd_vtysh, ++ "default-information originate route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_refresh_timer_cmd_vtysh, ++ "refresh timer <10-1800>", ++ "Adjust refresh parameters\n" ++ "Set refresh timer\n" ++ "Timer value in seconds\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_cmd_vtysh, ++ "no ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n") ++ ++DEFSH (VTYSH_BGPD, no_set_ipv6_nexthop_global_val_cmd_vtysh, ++ "no set ipv6 next-hop global X:X::X:X", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "IPv6 information\n" ++ "IPv6 next-hop address\n" ++ "IPv6 global address\n" ++ "IPv6 address of next hop\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_inter_intra_external_cmd_vtysh, ++ "distance ospf inter-area <1-255> intra-area <1-255> external <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n" ++ "External routes\n" ++ "Distance for external routes\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_authentication_key_chain2_cmd_vtysh, ++ "no ip rip authentication key-chain LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication key-chain\n" ++ "name of key-chain\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_soft_out_cmd_vtysh, ++ "clear bgp ipv6 * soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_cmd_vtysh, ++ "no access-list WORD (deny|permit) A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP zebra access-list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 10.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_le_ge_cmd_vtysh, ++ "no ipv6 prefix-list WORD (deny|permit) X:X::X:X/M le <0-128> ge <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_timers_cmd_vtysh, ++ "no timers basic", ++ "Negate a command or set its defaults\n" ++ "Adjust routing timers\n" ++ "Basic routing protocol update timers\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged1_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged (as-path|next-hop|med)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_ZEBRA, debug_zebra_packet_detail_cmd_vtysh, ++ "debug zebra packet (recv|send) detail", ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra packet\n" ++ "Debug option set for receive packet\n" ++ "Debug option set for send packet\n" ++ "Debug option set detaied information\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_in_prefix_filter_cmd_vtysh, ++ "clear bgp <1-65535> in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_ge_le_cmd_vtysh, ++ "no ip prefix-list WORD (deny|permit) A.B.C.D/M ge <0-32> le <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_RIPD, show_ip_rip_status_cmd_vtysh, ++ "show ip rip status", ++ "Show running system information\n" ++ "IP information\n" ++ "Show RIP routes\n" ++ "IP routing protocol process parameters and statistics\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_as_path_cmd_vtysh, ++ "no ip as-path access-list WORD (deny|permit) .LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "BGP autonomous system path filter\n" ++ "Specify an access list name\n" ++ "Regular expression access list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_BGPD, set_ipv6_nexthop_local_cmd_vtysh, ++ "set ipv6 next-hop local X:X::X:X", ++ "Set values in destination routing protocol\n" ++ "IPv6 information\n" ++ "IPv6 next-hop address\n" ++ "IPv6 local address\n" ++ "IPv6 address of next hop\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_any_cmd_vtysh, ++ "access-list WORD (deny|permit) any", ++ "Add an access list entry\n" ++ "IP zebra access-list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 10.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_soft_cmd_vtysh, ++ "clear bgp ipv6 * soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_mask_distance_cmd_vtysh, ++ "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_ipv4_soft_cmd_vtysh, ++ "clear ip bgp * ipv4 (unicast|multicast) soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged9_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged med next-hop as-path", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Med attribute\n" ++ "Nexthop attribute\n" ++ "As-path attribute\n") ++ ++DEFSH (VTYSH_BGPD, set_community_none_cmd_vtysh, ++ "set community none", ++ "Set values in destination routing protocol\n" ++ "BGP community attribute\n" ++ "No community attribute\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_soft_cmd_vtysh, ++ "clear bgp ipv6 <1-65535> soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_in_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_any_host_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip any host A.B.C.D", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Any source host\n" ++ "A single destination host\n" ++ "Destination address\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_authkey_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication-key|)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Authentication password (key)\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_redistribute_cmd_vtysh, ++ "redistribute (static|kernel|connected|ripng|bgp)", ++ "Redistribute\n" ++ "Static route\n" ++ "Kernel route\n" ++ "Connected route\n" ++ "RIPng route\n" ++ "BGP route\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, show_ip_extcommunity_list_arg_cmd_vtysh, ++ "show ip extcommunity-list (<1-199>|WORD)", ++ "Show running system information\n" ++ "IP information\n" ++ "List extended-community list\n" ++ "Extcommunity-list number\n" ++ "Extcommunity-list name\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_route_cmd_vtysh, ++ "show ip ospf route", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "OSPF routing table\n") ++ ++DEFSH (VTYSH_BGPD, old_no_ipv6_bgp_network_cmd_vtysh, ++ "no ipv6 bgp network X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Specify a network to announce via BGP\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_ge_cmd_vtysh, ++ "no ip prefix-list WORD (deny|permit) A.B.C.D/M ge <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_mask_flags_cmd_vtysh, ++ "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_RIPD, rip_distance_source_access_list_cmd_vtysh, ++ "distance <1-255> A.B.C.D/M WORD", ++ "Administrative distance\n" ++ "Distance value\n" ++ "IP source prefix\n" ++ "Access list name\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_flags_distance2_cmd_vtysh, ++ "ip route A.B.C.D/M (reject|blackhole) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_cmd_vtysh, ++ "clear ip bgp *", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community3_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_ZEBRA, label_map_fwd_cmd_vtysh, ++ "label-map FWD ", ++ "Create a static incoming label-map (ILM)\n" ++ "Type of label \n" ++ "Value of the label gen = >16, atm = vpi/vci, fr = DLCI\n" ++ "Forward\n" ++ "NHLFE index\n") ++ ++DEFSH (VTYSH_RIPD, no_router_rip_cmd_vtysh, ++ "no router rip", ++ "Negate a command or set its defaults\n" ++ "Enable a routing process\n" ++ "Routing Information Protocol (RIP)\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_address_cmd_vtysh, ++ "no ip address A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IP Address (e.g. 10.0.0.1/8)") ++ ++DEFSH (VTYSH_BGPD, no_bgp_client_to_client_reflection_cmd_vtysh, ++ "no bgp client-to-client reflection", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Configure client to client route reflection\n" ++ "reflection of routes allowed\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_out_cmd_vtysh, ++ "clear bgp external out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_external_inter_cmd_vtysh, ++ "distance ospf external <1-255> inter-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "External routes\n" ++ "Distance for external routes\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_extcommunity_list_name_all_cmd_vtysh, ++ "no ip extcommunity-list (standard|expanded) WORD", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Specify standard extcommunity-list\n" ++ "Specify expanded extcommunity-list\n" ++ "Extended Community list name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbor_advertised_route_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_ipv4_soft_out_cmd_vtysh, ++ "clear ip bgp * ipv4 (unicast|multicast) soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_out_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_mask_cmd_vtysh, ++ "no aggregate-address A.B.C.D A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_scan_cmd_vtysh, ++ "show ip bgp scan", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP scan status\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_ifname_flags_pref_cmd_vtysh, ++ "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_send_community_type_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "send-community (both|extended|standard)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Send Community attribute to this neighbor\n" ++ "Send Standard and Extended Community attributes\n" ++ "Send Extended Community attributes\n" ++ "Send Standard Community attributes\n") ++ ++DEFSH (VTYSH_BGPD, set_originator_id_cmd_vtysh, ++ "set originator-id A.B.C.D", ++ "Set values in destination routing protocol\n" ++ "BGP originator ID attribute\n" ++ "IP address of originator\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community_all_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_month_day_month_day_cmd_vtysh, ++ "accept-lifetime HH:MM:SS MONTH <1-31> <1993-2035> HH:MM:SS MONTH <1-31> <1993-2035>", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Month of the year to expire\n" ++ "Day of th month to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_network_area_cmd_vtysh, ++ "network A.B.C.D/M area (A.B.C.D|<0-4294967295>)", ++ "Enable routing on an IP network\n" ++ "OSPF network prefix\n" ++ "Set the OSPF area ID\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_keepalive_cmd_vtysh, ++ "debug bgp keepalives", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP keepalives\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_ism_sub_cmd_vtysh, ++ "no debug ospf ism (status|events|timers)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions\n" ++ "OSPF information\n" ++ "OSPF Interface State Machine\n" ++ "ISM Status Information\n" ++ "ISM Event Information\n" ++ "ISM Timer Information\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_description_cmd_vtysh, ++ "no ip prefix-list WORD description", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Prefix-list specific description\n") ++ ++DEFSH (VTYSH_OSPFD|VTYSH_OSPFD, show_ip_ospf_neighbor_id_cmd_vtysh, ++ "show ip ospf neighbor A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Neighbor list\n" ++ "Neighbor ID\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_soft_cmd_vtysh, ++ "clear ip bgp external soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_type_self_cmd_vtysh, ++ "show ip ospf database (" "asbr-summary|external|network|router|summary" "" "" ") (self-originate|)", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n" ++ "ASBR summary link states\n" "External link states\n" "Network link states\n" "Router link states\n" "Network summary link states\n" "" "" "" "" ++ "Self-originated link states\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_prefix_list_cmd_vtysh, ++ "show bgp ipv6 prefix-list WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes conforming to the prefix-list\n" ++ "IPv6 prefix-list name\n") ++ ++DEFSH (VTYSH_ZEBRA, show_table_cmd_vtysh, ++ "show table", ++ "Show running system information\n" ++ "default routing table to use for all clients\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_retransmit_interval_cmd_vtysh, ++ "ip ospf retransmit-interval <3-65535>", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between retransmitting lost link state advertisements\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_multiple_instance_cmd_vtysh, ++ "no bgp multiple-instance", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "BGP multiple instance\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_cost_cmd_vtysh, ++ "ip ospf cost <1-65535>", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interface cost\n" ++ "Cost") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_interface_area_plist_passive_cmd_vtysh, ++ "interface IFNAME area A.B.C.D prefix-list WORD passive", ++ "Enable routing on an IPv6 interface\n" ++ "Interface name(e.g. ep0)\n" ++ "Set the OSPF6 area ID\n" ++ "OSPF6 area ID in IPv4 address notation\n" ++ "Advertise I/F Address only match entries of prefix-list\n" ++ "IPv6 prefix-list name\n" ++ "IPv6 prefix-list name\n" ++ "Suppress routing updates on an interface\n" ++ ) ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_interface_ifname_cmd_vtysh, ++ "show ipv6 ospf6 interface IFNAME", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Interface infomation\n" ++ "Interface name(e.g. ep0)\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_bgp_router_id_cmd_vtysh, ++ "no bgp router-id", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Override configured router identifier\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_default_metric_cmd_vtysh, ++ "default-metric <1-16>", ++ "Set a metric of redistribute routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_import_list_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) import-list NAME", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Unset the filter for networks announced to other areas\n" ++ "Name of the access-list\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, no_route_map_all_cmd_vtysh, ++ "no route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Create route-map or enter route-map command mode\n" ++ "Route map tag\n") ++ ++DEFSH (VTYSH_BGPD, ip_extcommunity_list_standard2_cmd_vtysh, ++ "ip extcommunity-list <1-99> (deny|permit)", ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Extended Community list number (standard)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged9_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged med next-hop as-path", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Med attribute\n" ++ "Nexthop attribute\n" ++ "As-path attribute\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_out_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X) out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_set_community_delete_cmd_vtysh, ++ "no set comm-list", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "set BGP community list (for deletion)\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_router_id_cmd_vtysh, ++ "no ospf router-id", ++ "Negate a command or set its defaults\n" ++ "OSPF specific commands\n" ++ "router-id for the OSPF process\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_any_host_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip any host A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Any source host\n" ++ "A single destination host\n" ++ "Destination address\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_prefix_longer_cmd_vtysh, ++ "show ip prefix-list WORD A.B.C.D/M longer", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Lookup longer prefix\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_deadinterval_cmd_vtysh, ++ "ipv6 ospf6 dead-interval ROUTER_DEAD_INTERVAL", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Interval after which a neighbor is declared dead\n" ++ "<1-65535> Seconds\n" ++ ) ++ ++DEFSH (VTYSH_ZEBRA, show_ipv6_forwarding_cmd_vtysh, ++ "show ipv6 forwarding", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Forwarding status\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_events_cmd_vtysh, ++ "debug bgp events", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP events\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_out_cmd_vtysh, ++ "clear ip bgp external out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged5_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged as-path next-hop med", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_route_map_cmd_vtysh, ++ "no network A.B.C.D/M route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_ipv4_soft_out_cmd_vtysh, ++ "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_name_expanded_cmd_vtysh, ++ "ip community-list expanded WORD (deny|permit) .LINE", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Add an expanded community-list entry\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_mask_any_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D any", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Source address\n" ++ "Source wildcard bits\n" ++ "Any destination host\n") ++ ++DEFSH (VTYSH_BGPD, bgp_config_type_cmd_vtysh, ++ "bgp config-type (cisco|zebra)", ++ "BGP information\n" ++ "Configuration type\n" ++ "cisco\n" ++ "zebra\n") ++ ++DEFSH (VTYSH_BGPD, no_match_community_val_cmd_vtysh, ++ "no match community (<1-99>|<100-199>|WORD)", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP community list\n" ++ "Community-list number (standard)\n" ++ "Community-list number (expanded)\n" ++ "Community-list name\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_update_direct_cmd_vtysh, ++ "debug bgp updates (in|out)", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP updates\n" ++ "Inbound updates\n" ++ "Outbound updates\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_attr_info_cmd_vtysh, ++ "show ip bgp attribute-info", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "List all bgp attribute information\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbor_routes_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_vpnv4_in_cmd_vtysh, ++ "clear ip bgp <1-65535> vpnv4 unicast in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_out_cmd_vtysh, ++ "clear ip bgp peer-group WORD out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_as_set_cmd_vtysh, ++ "aggregate-address A.B.C.D/M as-set", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_in_prefix_filter_cmd_vtysh, ++ "clear bgp ipv6 <1-65535> in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_route_map_cmd_vtysh, ++ "show ip bgp route-map WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the route-map\n" ++ "A route-map to match on\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_cmd_vtysh, ++ "network A.B.C.D/M", ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, no_dump_bgp_all_cmd_vtysh, ++ "no dump bgp all [PATH] [INTERVAL]", ++ "Negate a command or set its defaults\n" ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump all BGP packets\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_standard_cmd_vtysh, ++ "no access-list (<1-99>|<1300-1999>) (deny|permit) A.B.C.D A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Address to match\n" ++ "Wildcard bits\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_summary_cmd_vtysh, ++ "show ip bgp summary", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_ipv4_soft_cmd_vtysh, ++ "clear ip bgp external ipv4 (unicast|multicast) soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_transmit_delay_cmd_vtysh, ++ "ospf transmit-delay <1-65535>", ++ "OSPF interface commands\n" ++ "Link state transmit delay\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_nsm_sub_cmd_vtysh, ++ "no debug ospf nsm (status|events|timers)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions\n" ++ "OSPF information\n" ++ "OSPF Interface State Machine\n" ++ "NSM Status Information\n" ++ "NSM Event Information\n" ++ "NSM Timer Information\n") ++ ++DEFSH (VTYSH_BGPD, old_ipv6_aggregate_address_summary_only_cmd_vtysh, ++ "ipv6 bgp aggregate-address X:X::X:X/M summary-only", ++ "IPv6 information\n" ++ "BGP information\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_BGPD, ip_extcommunity_list_expanded_cmd_vtysh, ++ "ip extcommunity-list <100-199> (deny|permit) .LINE", ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Extended Community list number (expanded)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_BGPD, match_community_exact_cmd_vtysh, ++ "match community (<1-99>|<100-199>|WORD) exact-match", ++ "Match values from routing table\n" ++ "Match BGP community list\n" ++ "Community-list number (standard)\n" ++ "Community-list number (expanded)\n" ++ "Community-list name\n" ++ "Do exact matching of communities\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community_list_cmd_vtysh, ++ "show ipv6 bgp community-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_authentication_mode_cmd_vtysh, ++ "no ip rip authentication mode", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication mode\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_dont_capability_negotiate_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "dont-capability-negotiate", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Do not perform capability negotiation\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_flags_cmd_vtysh, ++ "ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_priority_cmd_vtysh, ++ "ip ospf priority <0-255>", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Router priority\n" ++ "Priority\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_regexp_cmd_vtysh, ++ "show ip bgp regexp .LINE", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_BGPD, show_debugging_bgp_cmd_vtysh, ++ "show debugging bgp", ++ "Show running system information\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_inter_external_cmd_vtysh, ++ "distance ospf inter-area <1-255> external <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n" ++ "External routes\n" ++ "Distance for external routes\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_neighbor_cmd_vtysh, ++ "no neighbor A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor IP address\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_seq_le_ge_cmd_vtysh, ++ "ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M le <0-128> ge <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authtype_args_md5_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) (message-digest|null) " ++ "(message-digest-key|) <1-255> md5 KEY", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" "Use null authentication\n" "Use message-digest authentication\n" ++ "Message digest authentication password (key)\n" "dummy string \n" "Key ID\n" "Use MD5 algorithm\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_RIPD, rip_timers_cmd_vtysh, ++ "timers basic <5-2147483647> <5-2147483647> <5-2147483647>", ++ "Adjust routing timers\n" ++ "Basic routing protocol update timers\n" ++ "Routing table update timer value in second. Default is 30.\n" ++ "Routing information timeout timer. Default is 180.\n" ++ "Garbage collection timer. Default is 120.\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv6_metric_rmap_cmd_vtysh, ++ "redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295> route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_seq_cmd_vtysh, ++ "ip prefix-list WORD seq <1-4294967295> (deny|permit) (A.B.C.D/M|any)", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Any prefix match. Same as \"0.0.0.0/0 le 32\"\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community_list_cmd_vtysh, ++ "show bgp community-list WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n") ++ ++DEFSH (VTYSH_OSPF6D, show_zebra_cmd_vtysh, ++ "show zebra", ++ "Show running system information\n" ++ "Zebra information\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_in_prefix_filter_cmd_vtysh, ++ "clear bgp peer-group WORD in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_backdoor_cmd_vtysh, ++ "network A.B.C.D/M backdoor", ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Specify a BGP backdoor route\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_timers_val_cmd_vtysh, ++ "no timers basic <0-65535> <0-65535> <0-65535>", ++ "Negate a command or set its defaults\n" ++ "RIPng timers setup\n" ++ "Basic timer\n" ++ "Routing table update timer value in second. Default is 30.\n" ++ "Routing information timeout timer. Default is 180.\n" ++ "Garbage collection timer. Default is 120.\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv4_metric_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_summary_cmd_vtysh, ++ "show ipv6 mbgp summary", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_receive_version_1_cmd_vtysh, ++ "ip rip receive version 1 2", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement reception\n" ++ "Version control\n" ++ "RIP version 1\n" ++ "RIP version 2\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, match_ip_address_cmd_vtysh, ++ "match ip address (<1-199>|<1300-2699>|WORD)", ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match address of route\n" ++ "IP access-list number\n" ++ "IP access-list number (expanded range)\n" ++ "IP Access-list name\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_soft_out_cmd_vtysh, ++ "clear ip bgp A.B.C.D soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_weight_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "weight <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Set default weight for routes from this neighbor\n" ++ "default weight\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_access_list_all_cmd_vtysh, ++ "no ipv6 access-list WORD", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_authentication_addr_cmd_vtysh, ++ "ip ospf authentication A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Enable authentication on this interface\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, no_bgp_timers_arg_cmd_vtysh, ++ "no timers bgp <0-65535> <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Adjust routing timers\n" ++ "BGP timers\n" ++ "Keepalive interval\n" ++ "Holdtime\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_type_routemap_cmd_vtysh, ++ "default-information originate always metric-type (1|2) route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD, no_debug_rip_events_cmd_vtysh, ++ "no debug rip events", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP events\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_interface_area_plist_cmd_vtysh, ++ "interface IFNAME area A.B.C.D prefix-list WORD", ++ "Enable routing on an IPv6 interface\n" ++ "Interface name(e.g. ep0)\n" ++ "Set the OSPF6 area ID\n" ++ "OSPF6 area ID in IPv4 address notation\n" ++ "Advertise I/F Address only match entries of prefix-list\n" ++ "IPv6 prefix-list name\n" ++ ) ++ ++DEFSH (VTYSH_RIPD, no_rip_distance_source_access_list_cmd_vtysh, ++ "no distance <1-255> A.B.C.D/M WORD", ++ "Negate a command or set its defaults\n" ++ "Administrative distance\n" ++ "Distance value\n" ++ "IP source prefix\n" ++ "Access list name\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_filter_list_cmd_vtysh, ++ "show ipv6 bgp filter-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_tags_cmd_vtysh, ++ "show ip bgp vpnv4 all tags", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Display BGP tags for prefixes\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_passive_interface_cmd_vtysh, ++ "no passive-interface IFNAME", ++ "Negate a command or set its defaults\n" ++ "Allow routing updates on an interface\n" ++ "Interface's name\n") ++ ++DEFSH (VTYSH_RIPNGD, debug_ripng_packet_detail_cmd_vtysh, ++ "debug ripng packet (recv|send) detail", ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng packet\n" ++ "Debug option set for receive packet\n" ++ "Debug option set for send packet\n" ++ "Debug option set detaied information\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_prefix_cmd_vtysh, ++ "show bgp ipv6 X:X::X:X/M", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "IPv6 prefix /\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_le_cmd_vtysh, ++ "no ip prefix-list WORD (deny|permit) A.B.C.D/M le <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_RIPNGD, debug_ripng_packet_direct_cmd_vtysh, ++ "debug ripng packet (recv|send)", ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng packet\n" ++ "Debug option set for receive packet\n" ++ "Debug option set for send packet\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_in_cmd_vtysh, ++ "clear bgp ipv6 external WORD in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community3_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_ipv4_out_cmd_vtysh, ++ "clear ip bgp external ipv4 (unicast|multicast) out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_cmd_vtysh, ++ "no aggregate-address A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_default_originate_rmap_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "default-originate route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Originate default route to this neighbor\n" ++ "Route-map to specify criteria to originate default\n" ++ "route-map name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_rfc1583_flag_cmd_vtysh, ++ "ospf rfc1583compatibility", ++ "OSPF specific commands\n" ++ "Enable the RFC1583Compatibility flag\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_interface_area_cmd_vtysh, ++ "interface IFNAME area A.B.C.D", ++ "Enable routing on an IPv6 interface\n" ++ "Interface name(e.g. ep0)\n" ++ "Set the OSPF6 area ID\n" ++ "OSPF6 area ID in IPv4 address notation\n" ++ ) ++ ++DEFSH (VTYSH_OSPF6D, ospf6_flap_damping_route_cmd_vtysh, ++ "flap-damping route <0-4294967295> <0-4294967295> " ++ "<0-4294967295> <0-4294967295>", ++ "enable flap dampening\n" ++ "enable route flap dampening\n" ++ "half-life in second\n" ++ "reuse value\n" ++ "suppress value\n" ++ "t-hold in second (maximum time that the target can be damped)\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, set_ecommunity_rt_cmd_vtysh, ++ "set extcommunity rt .ASN:nn_or_IP-address:nn", ++ "Set values in destination routing protocol\n" ++ "BGP extended community attribute\n" ++ "Route Target extened communityt\n" ++ "VPN extended community\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_name_cmd_vtysh, ++ "show ipv6 prefix-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_soft_reconfiguration_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "soft-reconfiguration inbound", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Per neighbor soft reconfiguration\n" ++ "Allow inbound soft reconfiguration for this neighbor\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_camp_config_cmd_vtysh, ++ "show ipv6 ospf6 damp config", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Flap-dampening information\n" ++ "shows dampening configuration\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_soft_in_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_route_map_cmd_vtysh, ++ "show bgp route-map WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the route-map\n" ++ "A route-map to match on\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_inter_cmd_vtysh, ++ "distance ospf inter-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_out_cmd_vtysh, ++ "clear bgp ipv6 <1-65535> out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_offset_list_ifname_cmd_vtysh, ++ "no offset-list WORD (in|out) <0-16> IFNAME", ++ "Negate a command or set its defaults\n" ++ "Modify RIP metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n" ++ "Interface to match\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_import_check_cmd_vtysh, ++ "no bgp network import-check", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "BGP network command\n" ++ "Check BGP network route exists in IGP\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_cmd_vtysh, ++ "no ipv6 prefix-list WORD", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_route_cmd_vtysh, ++ "no route A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "RIP static route configuration\n" ++ "IP prefix /\n") ++ ++DEFSH (VTYSH_BGPD, match_origin_cmd_vtysh, ++ "match origin (egp|igp|incomplete)", ++ "Match values from routing table\n" ++ "BGP origin code\n" ++ "remote EGP\n" ++ "local IGP\n" ++ "unknown heritage\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_dampening_prefix_cmd_vtysh, ++ "clear ip bgp dampening A.B.C.D/M", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear route flap dampening information\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_default_local_preference_cmd_vtysh, ++ "no bgp default local-preference", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Configure BGP defaults\n" ++ "local preference (higher=more preferred)\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_soft_out_cmd_vtysh, ++ "clear ip bgp <1-65535> soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_ipv6_aggregate_address_summary_only_cmd_vtysh, ++ "no aggregate-address X:X::X:X/M summary-only", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_BGPD, set_atomic_aggregate_cmd_vtysh, ++ "set atomic-aggregate", ++ "Set values in destination routing protocol\n" ++ "BGP atomic aggregate attribute\n" ) ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_name_seq_cmd_vtysh, ++ "show ip prefix-list WORD seq <1-4294967295>", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n") ++ ++DEFSH (VTYSH_BGPD, ip_extcommunity_list_name_standard2_cmd_vtysh, ++ "ip extcommunity-list standard WORD (deny|permit)", ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Specify standard extcommunity-list\n" ++ "Extended Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_metric_type_routemap_cmd_vtysh, ++ "default-information originate metric <0-16777214> metric-type (1|2) route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_ge_le_cmd_vtysh, ++ "ip prefix-list WORD (deny|permit) A.B.C.D/M ge <0-32> le <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_network_cmd_vtysh, ++ "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)", ++ "OSPF interface commands\n" ++ "Network type\n" ++ "Specify OSPF broadcast multi-access network\n" ++ "Specify OSPF NBMA network\n" ++ "Specify OSPF point-to-multipoint network\n" ++ "Specify OSPF point-to-point network\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_passive_interface_cmd_vtysh, ++ "no passive-interface IFNAME", ++ "Negate a command or set its defaults\n" ++ "Suppress routing updates on an interface\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_RIPD, no_if_rmap_cmd_vtysh, ++ "no route-map ROUTEMAP_NAME (in|out) IFNAME", ++ "Negate a command or set its defaults\n" ++ "Route map unset\n" ++ "Route map name\n" ++ "Route map for input filtering\n" ++ "Route map for output filtering\n" ++ "Route map interface name\n") ++ ++DEFSH (VTYSH_RIPNGD, no_debug_ripng_events_cmd_vtysh, ++ "no debug ripng events", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng events\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_regexp_cmd_vtysh, ++ "show ipv6 bgp regexp .LINE", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_split_horizon_cmd_vtysh, ++ "no ip rip split-horizon", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n") ++ ++DEFSH (VTYSH_ZEBRA, debug_zebra_packet_cmd_vtysh, ++ "debug zebra packet", ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra packet\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_neighbor_detail_all_cmd_vtysh, ++ "show ip ospf neighbor detail all", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Neighbor list\n" ++ "detail of all neighbors\n" ++ "include down status neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_vpnv4_out_cmd_vtysh, ++ "clear ip bgp A.B.C.D vpnv4 unicast out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_neighbor_cmd_vtysh, ++ "no neighbor A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Specify a neighbor router\n" ++ "Neighbor address\n") ++ ++DEFSH (VTYSH_BGPD, old_no_ipv6_aggregate_address_summary_only_cmd_vtysh, ++ "no ipv6 bgp aggregate-address X:X::X:X/M summary-only", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_authentication_args_cmd_vtysh, ++ "ip ospf authentication (null|message-digest)", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Enable authentication on this interface\n" ++ "Use null authentication\n" ++ "Use message-digest authentication\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_BGPD, no_match_metric_cmd_vtysh, ++ "no match metric", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match metric of route\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_prefix_longer_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) A.B.C.D/M longer-prefixes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_metric_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214>", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric for redistributed routes\n" ++ "OSPF default metric\n") ++ ++DEFSH (VTYSH_BGPD, bgp_distance_source_access_list_cmd_vtysh, ++ "distance <1-255> A.B.C.D/M WORD", ++ "Define an administrative distance\n" ++ "Administrative distance\n" ++ "IP source prefix\n" ++ "Access list name\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_version_cmd_vtysh, ++ "no version", ++ "Negate a command or set its defaults\n" ++ "Set routing protocol version\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_passive_interface_addr_cmd_vtysh, ++ "no passive-interface IFNAME A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Allow routing updates on an interface\n" ++ "Interface's name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_prefix_longer_cmd_vtysh, ++ "show bgp X:X::X:X/M longer-prefixes", ++ "Show running system information\n" ++ "BGP information\n" ++ "IPv6 prefix /\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_summary_as_set_cmd_vtysh, ++ "no aggregate-address A.B.C.D/M summary-only as-set", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community_all_cmd_vtysh, ++ "show bgp community", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_enforce_first_as_cmd_vtysh, ++ "no bgp enforce-first-as", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Enforce the first AS for EBGP routes\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_seq_ge_cmd_vtysh, ++ "ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M ge <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_forwarding_cmd_vtysh, ++ "no ipv6 forwarding", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Doesn't forward IPv6 protocol packet") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_seq_ge_le_cmd_vtysh, ++ "ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M ge <0-128> le <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_refresh_timer_cmd_vtysh, ++ "no refresh timer", ++ "Adjust refresh parameters\n" ++ "Unset refresh timer\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_default_metric_cmd_vtysh, ++ "no default-metric", ++ "Negate a command or set its defaults\n" ++ "Set a metric of redistribute routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_soft_in_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X) soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_prefix_longer_cmd_vtysh, ++ "show ip bgp flap-statistics A.B.C.D/M longer-prefixes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_prefix_longer_cmd_vtysh, ++ "show bgp ipv6 X:X::X:X/M longer-prefixes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "IPv6 prefix /\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_RIPNGD, ipv6_distribute_list_prefix_all_cmd_vtysh, ++ "distribute-list prefix WORD (in|out)", ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_bgp_neighbor_received_routes_cmd_vtysh, ++ "show ipv6 bgp neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_neighbor_routes_cmd_vtysh, ++ "show ip bgp vpnv4 all neighbors A.B.C.D routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, match_ecommunity_cmd_vtysh, ++ "match extcommunity (<1-99>|<100-199>|WORD)", ++ "Match values from routing table\n" ++ "Match BGP/VPN extended community list\n" ++ "Extended community-list number (standard)\n" ++ "Extended community-list number (expanded)\n" ++ "Extended community-list name\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_bgp_neighbor_routes_cmd_vtysh, ++ "show ipv6 bgp neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_distance_source_cmd_vtysh, ++ "no distance <1-255> A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "Define an administrative distance\n" ++ "Administrative distance\n" ++ "IP source prefix\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_standard_host_cmd_vtysh, ++ "access-list (<1-99>|<1300-1999>) (deny|permit) host A.B.C.D", ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "A single host address\n" ++ "Address to match\n") ++ ++DEFSH (VTYSH_OSPF6D, no_debug_ospf6_damp_cmd_vtysh, ++ "no debug ospf6 damp", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Flap-dampening information\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, no_ospf_rfc1583_flag_cmd_vtysh, ++ "no ospf rfc1583compatibility", ++ "Negate a command or set its defaults\n" ++ "OSPF specific commands\n" ++ "Disable the RFC1583Compatibility flag\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_interface_area_passive_cmd_vtysh, ++ "interface IFNAME area A.B.C.D passive", ++ "Enable routing on an IPv6 interface\n" ++ "Interface name(e.g. ep0)\n" ++ "Set the OSPF6 area ID\n" ++ "OSPF6 area ID in IPv4 address notation\n" ++ "Suppress routing updates on an interface\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_set_weight_cmd_vtysh, ++ "no set weight", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP weight for routing table\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_authentication_mode_cmd_vtysh, ++ "ip rip authentication mode (md5|text)", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication mode\n" ++ "Keyed message digest\n" ++ "Clear text authentication\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_neighbor_int_detail_cmd_vtysh, ++ "show ip ospf neighbor A.B.C.D detail", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Neighbor list\n" ++ "Interface address\n" ++ "detail of all neighbors") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_prefix_cmd_vtysh, ++ "show bgp view WORD ipv6 X:X::X:X/M", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "IPv6 prefix /\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_flags_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ipv6_route_protocol_cmd_vtysh, ++ "show ipv6 route (bgp|connected|kernel|ospf6|ripng|static)", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Connected\n" ++ "Kernel\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community2_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_cluster_id_arg_cmd_vtysh, ++ "no bgp cluster-id A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Configure Route-Reflector Cluster-id\n" ++ "Route-Reflector Cluster-id in IP address format\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_all_cmd_vtysh, ++ "no debug all bgp", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Enable all debugging\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_timers_connect_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "timers connect", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "BGP per neighbor timers\n" ++ "BGP connect timer\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_distance2_cmd_vtysh, ++ "no distance bgp", ++ "Negate a command or set its defaults\n" ++ "Define an administrative distance\n" ++ "BGP distance\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community2_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_range_cost_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "User specified metric for this range\n" ++ "Advertised metric for this range\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_always_compare_med_cmd_vtysh, ++ "no bgp always-compare-med", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Allow comparing MED from different neighbors\n") ++ ++DEFSH (VTYSH_RIPNGD, debug_ripng_packet_cmd_vtysh, ++ "debug ripng packet", ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng packet\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv4_metric_rmap_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295> route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_aggregate_address_cmd_vtysh, ++ "no aggregate-address X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "Delete aggregate RIPng route announcement\n" ++ "Aggregate network") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_mask_flags_distance_cmd_vtysh, ++ "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_extcommunity_list_cmd_vtysh, ++ "show ip extcommunity-list", ++ "Show running system information\n" ++ "IP information\n" ++ "List extended-community list\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_soft_cmd_vtysh, ++ "clear bgp external soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community3_exact_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_ZEBRA, debug_zebra_kernel_cmd_vtysh, ++ "debug zebra kernel", ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra between kernel interface\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_bestpath_med_cmd_vtysh, ++ "no bgp bestpath med (confed|missing-as-worst)", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "MED attribute\n" ++ "Compare MED among confederation paths\n" ++ "Treat missing MED as the least preferred one\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_instance_cmd_vtysh, ++ "ipv6 ospf6 instance-id INSTANCE", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Instance ID\n" ++ "<0-255> Instance ID\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_metric_type_cmd_vtysh, ++ "default-information originate metric <0-16777214> metric-type (1|2)", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_authtype_md5_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) " ++ "(message-digest-key|)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" ++ "Message digest authentication password (key)\n" "dummy string \n" "Key ID\n" "Use MD5 algorithm\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_soft_cmd_vtysh, ++ "clear bgp peer-group WORD soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_out_cmd_vtysh, ++ "clear bgp * out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_mask_flags_cmd_vtysh, ++ "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged7_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged next-hop med as-path", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Nexthop attribute\n" ++ "Med attribute\n" ++ "As-path attribute\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_route_protocol_cmd_vtysh, ++ "show ip route (bgp|connected|kernel|ospf|rip|static)", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Connected\n" ++ "Kernel\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbors_cmd_vtysh, ++ "show bgp ipv6 neighbors", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_send_version_cmd_vtysh, ++ "ip rip send version (1|2)", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement transmission\n" ++ "Version control\n" ++ "RIP version 1\n" ++ "RIP version 2\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_priority_cmd_vtysh, ++ "ipv6 ospf6 priority PRIORITY", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Router priority\n" ++ "<0-255> Priority\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_out_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X) out", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_fsm_cmd_vtysh, ++ "no debug bgp fsm", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "Finite State Machine\n") ++ ++DEFSH (VTYSH_BGPD, old_no_ipv6_aggregate_address_cmd_vtysh, ++ "no ipv6 bgp aggregate-address X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community2_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_auto_cost_reference_bandwidth_cmd_vtysh, ++ "auto-cost reference-bandwidth <1-4294967>", ++ "Calculate OSPF interface cost according to bandwidth\n" ++ "Use reference bandwidth method to assign OSPF cost\n" ++ "The reference bandwidth in terms of Mbits per second\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community3_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_instance_ipv6_neighbors_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_ipv4_soft_in_cmd_vtysh, ++ "clear ip bgp external ipv4 (unicast|multicast) soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community_all_cmd_vtysh, ++ "show ipv6 bgp community", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_vpnv4_soft_cmd_vtysh, ++ "clear ip bgp * vpnv4 unicast soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_network_cmd_vtysh, ++ "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Network type\n" ++ "Specify OSPF broadcast multi-access network\n" ++ "Specify OSPF NBMA network\n" ++ "Specify OSPF point-to-multipoint network\n" ++ "Specify OSPF point-to-point network\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_keepalive_cmd_vtysh, ++ "no debug bgp keepalives", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP keepalives\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_shutdown_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "shutdown", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Administratively shut down this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community_exact_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_soft_out_cmd_vtysh, ++ "clear bgp * soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_default_metric_cmd_vtysh, ++ "no default-metric", ++ "Negate a command or set its defaults\n" ++ "Set metric of redistributed routes\n") ++ ++DEFSH (VTYSH_BGPD, dump_bgp_routes_cmd_vtysh, ++ "dump bgp routes-mrt PATH", ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump whole BGP routing table\n" ++ "Output filename\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_update_cmd_vtysh, ++ "debug bgp updates", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP updates\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv4_rmap_metric_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf|rip|static) route-map WORD metric <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_neighbors_peer_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_cmd_vtysh, ++ "clear ip bgp peer-group WORD", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_neighbors_peer_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_mask_cmd_vtysh, ++ "aggregate-address A.B.C.D A.B.C.D", ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_external_intra_cmd_vtysh, ++ "distance ospf external <1-255> intra-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "External routes\n" ++ "Distance for external routes\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_database_cmd_vtysh, ++ "show ipv6 ospf6 database", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "LSA Database\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community_exact_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_sequence_number_cmd_vtysh, ++ "no ip prefix-list sequence-number", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Include/exclude sequence numbers in NVGEN\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community4_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_set_community_delete_val_cmd_vtysh, ++ "no set comm-list (<1-99>|<100-199>|WORD) delete", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "set BGP community list (for deletion)\n" ++ "Community-list number (standard)\n" ++ "Communitly-list number (expanded)\n" ++ "Community-list name\n" ++ "Delete matching communities\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community4_exact_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, neighbor_passive_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "passive", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Don't send open messages to this neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_metric_routemap_cmd_vtysh, ++ "default-information originate metric <0-16777214> route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, bgp_bestpath_med_cmd_vtysh, ++ "bgp bestpath med (confed|missing-as-worst)", ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "MED attribute\n" ++ "Compare MED among confederation paths\n" ++ "Treat missing MED as the least preferred one\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community_list_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community_list_exact_cmd_vtysh, ++ "show ip bgp community-list WORD exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n" ++ "Exact match of the communities\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_param3_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_RIPD, distribute_list_prefix_cmd_vtysh, ++ "distribute-list prefix WORD (in|out) WORD", ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_flags2_cmd_vtysh, ++ "no ip route A.B.C.D/M (reject|blackhole)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_default_ipv4_unicast_cmd_vtysh, ++ "no bgp default ipv4-unicast", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Configure BGP defaults\n" ++ "Activate ipv4-unicast for a peer by default\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_param4_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_OSPF6D, no_debug_ospf6_all_cmd_vtysh, ++ "no debug ospf6 all", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Turn off ALL OSPFv3 debugging\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_capability_orf_prefix_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "capability orf prefix-list (both|send|receive)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Advertise capability to the peer\n" ++ "Advertise ORF capability to the peer\n" ++ "Advertise prefixlist ORF capability to this neighbor\n" ++ "Capability to SEND and RECEIVE the ORF to/from this neighbor\n" ++ "Capability to RECEIVE the ORF from this neighbor\n" ++ "Capability to SEND the ORF to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, bgp_damp_unset2_cmd_vtysh, ++ "no bgp dampening <1-45> <1-20000> <1-20000> <1-255>", ++ "Negate a command or set its defaults\n" ++ "BGP Specific commands\n" ++ "Enable route-flap dampening\n" ++ "Half-life time for the penalty\n" ++ "Value to start reusing a route\n" ++ "Value to start suppressing a route\n" ++ "Maximum duration to suppress a stable route\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_prefix_cmd_vtysh, ++ "show ipv6 prefix-list WORD X:X::X:X/M", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_default_cost_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Set the summary-default cost of a NSSA or stub area\n" ++ "Stub's advertised default summary cost\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_soft_out_cmd_vtysh, ++ "clear bgp <1-65535> soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_filter_list_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Filter networks between OSPF areas\n" ++ "Filter prefixes between OSPF areas\n" ++ "Name of an IP prefix-list\n" ++ "Filter networks sent to this area\n" ++ "Filter networks sent from this area\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged10_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged med as-path next-hop", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Med attribute\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_intra_cmd_vtysh, ++ "distance ospf intra-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_mask_natural_backdoor_cmd_vtysh, ++ "network A.B.C.D backdoor", ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Specify a BGP backdoor route\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_standard_cmd_vtysh, ++ "ip community-list <1-99> (deny|permit) .AA:NN", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list number (standard)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_timers_cmd_vtysh, ++ "no timers basic", ++ "Negate a command or set its defaults\n" ++ "RIPng timers setup\n" ++ "Basic timer\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_lsa_cmd_vtysh, ++ "debug ospf lsa", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Link State Advertisement\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_host_any_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D any", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "A single source host\n" ++ "Source address\n" ++ "Any destination host\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community_all_cmd_vtysh, ++ "show bgp ipv6 community", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_ifname_cmd_vtysh, ++ "ipv6 route X:X::X:X/M X:X::X:X INTERFACE", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_type_metric_cmd_vtysh, ++ "default-information originate always metric-type (1|2) metric <0-16777214>", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "OSPF default metric\n" ++ "OSPF metric\n") ++ ++DEFSH (VTYSH_BGPD, no_set_ecommunity_soo_cmd_vtysh, ++ "no set extcommunity soo", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP extended community attribute\n" ++ "Site-of-Origin extended community\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp A.B.C.D ipv4 (unicast|multicast) in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n" ++ "Push out the existing ORF prefix-list\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, no_route_map_cmd_vtysh, ++ "no route-map WORD (deny|permit) <1-65535>", ++ "Negate a command or set its defaults\n" ++ "Create route-map or enter route-map command mode\n" ++ "Route map tag\n" ++ "Route map denies set operations\n" ++ "Route map permits set operations\n" ++ "Sequence to insert to/delete from existing route-map entry\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_priority_cmd_vtysh, ++ "no ospf priority", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Router priority\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_timers_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "timers", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP per neighbor timers\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_offset_list_cmd_vtysh, ++ "no offset-list WORD (in|out) <0-16>", ++ "Negate a command or set its defaults\n" ++ "Modify RIPng metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, match_ip_next_hop_cmd_vtysh, ++ "match ip next-hop (<1-199>|<1300-2699>|WORD)", ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match next-hop address of route\n" ++ "IP access-list number\n" ++ "IP access-list number (expanded range)\n" ++ "IP Access-list name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_range_not_advertise_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M not-advertise", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "DoNotAdvertise this range\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_local_as_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "local-as", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Specify a local-as number\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_prefix_list_cmd_vtysh, ++ "show bgp prefix-list WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes conforming to the prefix-list\n" ++ "IPv6 prefix-list name\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_cmd_vtysh, ++ "clear bgp peer-group WORD", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_seq_le_cmd_vtysh, ++ "ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M le <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_RIPD, rip_network_cmd_vtysh, ++ "network (A.B.C.D/M|WORD)", ++ "Enable routing on an IP network\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_type_metric_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214> route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "OSPF exterior metric type for redistributed routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Metric for redistributed routes\n" ++ "OSPF default metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_route_ospf6_external_cmd_vtysh, ++ "show ipv6 ospf6 route redistribute", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Routing Table\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "redistributing External information\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_match_ipv6_next_hop_cmd_vtysh, ++ "no match ipv6 next-hop X:X::X:X", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IPv6 information\n" ++ "Match IPv6 next-hop address of route\n" ++ "IPv6 address of next hop\n") ++ ++DEFSH (VTYSH_RIPD, no_distribute_list_prefix_cmd_vtysh, ++ "no distribute-list prefix WORD (in|out) WORD", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_month_day_day_month_cmd_vtysh, ++ "send-lifetime HH:MM:SS MONTH <1-31> <1993-2035> HH:MM:SS <1-31> MONTH <1993-2035>", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Day of th month to expire\n" ++ "Month of the year to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_view_route_cmd_vtysh, ++ "show ip bgp view WORD A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_cmd_vtysh, ++ "clear bgp <1-65535>", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_route_cmd_vtysh, ++ "show ip bgp A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_summary_name_cmd_vtysh, ++ "show ip prefix-list summary WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Summary of prefix lists\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_weight_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "weight <0-65535>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Set default weight for routes from this neighbor\n" ++ "default weight\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_neighbor_cmd_vtysh, ++ "show ip ospf neighbor", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Neighbor list\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_mask_summary_as_set_cmd_vtysh, ++ "no aggregate-address A.B.C.D A.B.C.D summary-only as-set", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Filter more specific routes from updates\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_ism_sub_cmd_vtysh, ++ "debug ospf ism (status|events|timers)", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Interface State Machine\n" ++ "ISM Status Information\n" ++ "ISM Event Information\n" ++ "ISM TImer Information\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_zebra_cmd_vtysh, ++ "debug ospf zebra", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Zebra information\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_vpnv4_soft_in_cmd_vtysh, ++ "clear ip bgp * vpnv4 unicast soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_ipv4_soft_cmd_vtysh, ++ "clear ip bgp A.B.C.D ipv4 (unicast|multicast) soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_prefix_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged8_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged next-hop as-path med", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Nexthop attribute\n" ++ "As-path attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_cost_addr_cmd_vtysh, ++ "ip ospf cost <1-65535> A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interface cost\n" ++ "Cost\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, show_ip_community_list_cmd_vtysh, ++ "show ip community-list", ++ "Show running system information\n" ++ "IP information\n" ++ "List community-list\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_description_arg_cmd_vtysh, ++ "no ipv6 prefix-list WORD description .LINE", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Prefix-list specific description\n" ++ "Up to 80 characters describing this prefix-list\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community4_exact_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community_list_cmd_vtysh, ++ "show ipv6 mbgp community-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community3_exact_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_cmd_vtysh, ++ "default-information originate", ++ "Control distribution of default information\n" ++ "Distribute a default route\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbor_routes_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_bestpath_aspath_ignore_cmd_vtysh, ++ "no bgp bestpath as-path ignore", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "AS-path attribute\n" ++ "Ignore as-path length in selecting a route\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_mask_summary_as_set_cmd_vtysh, ++ "aggregate-address A.B.C.D A.B.C.D summary-only as-set", ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Filter more specific routes from updates\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_RIPD, show_debugging_rip_cmd_vtysh, ++ "show debugging rip", ++ "Show running system information\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_normal_cmd_vtysh, ++ "undebug bgp", ++ "Disable debugging functions (see also 'debug')\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_transmit_delay_cmd_vtysh, ++ "ip ospf transmit-delay <1-65535>", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Link state transmit delay\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_ifname_flags_cmd_vtysh, ++ "ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community2_exact_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_ipv4_soft_out_cmd_vtysh, ++ "clear ip bgp A.B.C.D ipv4 (unicast|multicast) soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, match_ipv6_address_cmd_vtysh, ++ "match ipv6 address WORD", ++ "Match values from routing table\n" ++ "IPv6 information\n" ++ "Match IPv6 address of route\n" ++ "IPv6 access-list name\n") ++ ++DEFSH (VTYSH_ZEBRA, no_debug_zebra_events_cmd_vtysh, ++ "no debug zebra events", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra events\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_mask_as_set_summary_cmd_vtysh, ++ "aggregate-address A.B.C.D A.B.C.D as-set summary-only", ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Generate AS set path information\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_passive_cmd_vtysh, ++ "ipv6 ospf6 passive", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "passive interface: No Adjacency will be formed on this I/F\n" ++ ) ++ ++DEFSH (VTYSH_RIPNGD, no_debug_ripng_packet_direct_cmd_vtysh, ++ "no debug ripng packet (recv|send)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng packet\n" ++ "Debug option set for receive packet\n" ++ "Debug option set for send packet\n") ++ ++DEFSH (VTYSH_BGPD, no_ipv6_bgp_network_cmd_vtysh, ++ "no network X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "IPv6 prefix /\n") ++ ++DEFSH (VTYSH_ZEBRA, no_debug_zebra_packet_cmd_vtysh, ++ "no debug zebra packet", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra packet\n") ++ ++DEFSH (VTYSH_ZEBRA, config_table_cmd_vtysh, ++ "table TABLENO", ++ "Configure target kernel routing table\n" ++ "TABLE integer\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_cost_cmd_vtysh, ++ "ipv6 ospf6 cost COST", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Interface cost\n" ++ "<1-65535> Cost\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged3_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged next-hop (as-path|med)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Nexthop attribute\n" ++ "As-path attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_hello_interval_cmd_vtysh, ++ "ip ospf hello-interval <1-65535>", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between HELLO packets\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D advertised-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_route_prefix_cmd_vtysh, ++ "show ip route A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_authentication_key_chain_cmd_vtysh, ++ "no ip rip authentication key-chain", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication key-chain\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_infinite_month_day_cmd_vtysh, ++ "send-lifetime HH:MM:SS MONTH <1-31> <1993-2035> infinite", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Never expires") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_regexp_cmd_vtysh, ++ "show ipv6 mbgp regexp .LINE", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the MBGP AS paths\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp * in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_regexp_cmd_vtysh, ++ "show ip bgp flap-statistics regexp .LINE", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_metric_cmd_vtysh, ++ "default-metric <0-16777214>", ++ "Set metric of redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv6_rmap_metric_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf6|ripng|static) route-map WORD metric <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbor_received_routes_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_ZEBRA, show_zebra_client_cmd_vtysh, ++ "show zebra client", ++ "Show running system information\n" ++ "Zebra information" ++ "Client information") ++ ++DEFSH (VTYSH_BGPD, bgp_damp_unset_cmd_vtysh, ++ "no bgp dampening", ++ "Negate a command or set its defaults\n" ++ "BGP Specific commands\n" ++ "Enable route-flap dampening\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbors_cmd_vtysh, ++ "show ip bgp neighbors", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_instance_all_soft_in_cmd_vtysh, ++ "clear bgp view WORD * soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_neighbor_received_prefix_filter_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X) received prefix-filter", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display information received from a BGP neighbor\n" ++ "Display the prefixlist filter\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbor_advertised_route_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_instance_ipv6_neighbors_peer_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_shortcut_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Configure the area's shortcutting mode\n" ++ "Set default shortcutting behavior\n" ++ "Enable shortcutting through the area\n" ++ "Disable shortcutting through the area\n") ++ ++DEFSH (VTYSH_ZEBRA, show_debugging_zebra_cmd_vtysh, ++ "show debugging zebra", ++ "Show running system information\n" ++ "Zebra configuration\n" ++ "Debugging information\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_shutdown_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "shutdown", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Administratively shut down this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_transparent_as_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "transparent-as", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Do not append my AS number even peer is EBGP peer\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_cmd_vtysh, ++ "clear bgp ipv6 <1-65535>", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD, no_match_interface_cmd_vtysh, ++ "no match interface", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match first hop interface of route\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_retransmit_interval_addr_cmd_vtysh, ++ "no ip ospf retransmit-interval A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between retransmitting lost link state advertisements\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, no_bgp_confederation_identifier_arg_cmd_vtysh, ++ "no bgp confederation identifier <1-65535>", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "AS confederation parameters\n" ++ "AS number\n" ++ "Set routing domain confederation AS\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_soft_cmd_vtysh, ++ "clear bgp ipv6 external soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_database_type_id_cmd_vtysh, ++ "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX) (A.B.C.D|*|dump|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "LSA Database\n" ++ "Router-LSA\n" ++ "Network-LSA\n" ++ "AS-External-LSA\n" ++ "Intra-Area-Prefix-LSA\n" ++ "Inter-Area-Router-LSA\n" ++ "Inter-Area-Prefix-LSA\n" ++ "Link-LSA\n" ++ "All LS Type\n" ++ "Specify LS Type by Hex\n" ++ "Link State ID\n" ++ "All Link State ID\n" ++ "Dump raw LSA data in Hex\n" ++ "show detail of LSAs\n" ++ ) ++ ++DEFSH (VTYSH_RIPD|VTYSH_BGPD, set_metric_addsub_cmd_vtysh, ++ "set metric <+/-metric>", ++ "Set values in destination routing protocol\n" ++ "Metric value for destination routing protocol\n" ++ "Add or subtract BGP metric\n") ++ ++DEFSH (VTYSH_ZEBRA, multicast_cmd_vtysh, ++ "multicast", ++ "Set multicast flag to interface\n") ++ ++DEFSH (VTYSH_OSPF6D, no_ipv6_ospf6_advertise_prefix_list_cmd_vtysh, ++ "no ipv6 ospf6 advertise prefix-list", ++ "Negate a command or set its defaults\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Advertising options\n" ++ "Filter prefix using prefix-list\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_vpnv4_in_cmd_vtysh, ++ "clear ip bgp * vpnv4 unicast in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_neighbor_priority_cmd_vtysh, ++ "no neighbor A.B.C.D priority <0-255>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor IP address\n" ++ "Neighbor Priority\n" ++ "Priority\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_seq_ge_le_cmd_vtysh, ++ "no ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M ge <0-32> le <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_nsm_cmd_vtysh, ++ "debug ospf nsm", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Neighbor State Machine\n") ++ ++DEFSH (VTYSH_OSPFD, show_debugging_ospf_cmd_vtysh, ++ "show debugging ospf", ++ "Show running system information\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n") ++ ++DEFSH (VTYSH_RIPD, if_rmap_cmd_vtysh, ++ "route-map RMAP_NAME (in|out) IFNAME", ++ "Route map set\n" ++ "Route map name\n" ++ "Route map set for input filtering\n" ++ "Route map set for output filtering\n" ++ "Route map interface name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_filter_list_cmd_vtysh, ++ "show bgp filter-list WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_address_cmd_vtysh, ++ "no ipv6 address X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IPv6 address (e.g. 3ffe:506::1/48)\n") ++ ++DEFSH (VTYSH_BGPD, no_ipv6_aggregate_address_cmd_vtysh, ++ "no aggregate-address X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_stub_no_summary_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) stub no-summary", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Configure OSPF area as stub\n" ++ "Do not inject inter-area routes into area\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_cmd_vtysh, ++ "show bgp view WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_summary_cmd_vtysh, ++ "show bgp ipv6 summary", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_BGPD, set_local_pref_cmd_vtysh, ++ "set local-preference <0-4294967295>", ++ "Set values in destination routing protocol\n" ++ "BGP local preference path attribute\n" ++ "Preference value\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_mask_any_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D any", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Source address\n" ++ "Source wildcard bits\n" ++ "Any destination host\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community4_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_filter_list_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) filter-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_BGPD, no_set_local_pref_cmd_vtysh, ++ "no set local-preference", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP local preference path attribute\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community3_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X)", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_ifname_pref_cmd_vtysh, ++ "ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_instance_all_soft_out_cmd_vtysh, ++ "clear bgp view WORD * soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_offset_list_cmd_vtysh, ++ "offset-list WORD (in|out) <0-16>", ++ "Modify RIPng metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_type_id_cmd_vtysh, ++ "show ip ospf database (" "asbr-summary|external|network|router|summary" "" "" ") A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n" ++ "ASBR summary link states\n" "External link states\n" "Network link states\n" "Router link states\n" "Network summary link states\n" "" "" "" "" ++ "Link State ID (as an IP address)\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_summary_cmd_vtysh, ++ "show ip bgp vpnv4 all summary", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_ifname_flags_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_normal_cmd_vtysh, ++ "debug bgp", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_prefix_longer_cmd_vtysh, ++ "show ip bgp A.B.C.D/M longer-prefixes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_prefix_list_cmd_vtysh, ++ "show ip bgp flap-statistics prefix-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "Display routes conforming to the prefix-list\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_timers_spf_cmd_vtysh, ++ "no timers spf", ++ "Negate a command or set its defaults\n" ++ "Adjust routing timers\n" ++ "OSPF SPF timers\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, clear_ipv6_prefix_list_cmd_vtysh, ++ "clear ipv6 prefix-list", ++ "Reset functions\n" ++ "IPv6 information\n" ++ "Build a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_set_peer_group_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "peer-group WORD", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Member of the peer-group\n" ++ "peer-group name\n") ++ ++DEFSH (VTYSH_RIPNGD, ipv6_ripng_split_horizon_cmd_vtysh, ++ "ipv6 ripng split-horizon", ++ "IPv6 information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_neighborlist_cmd_vtysh, ++ "show ipv6 ospf6 (summary-list|request-list|retrans-list|dbdesc-list)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Link State summary list\n" ++ "Link State request list\n" ++ "Link State retransmission list\n" ++ "Link State Description list (Used to retrans DbDesc)\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_type_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "OSPF exterior metric type for redistributed routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, match_community_cmd_vtysh, ++ "match community (<1-99>|<100-199>|WORD)", ++ "Match values from routing table\n" ++ "Match BGP community list\n" ++ "Community-list number (standard)\n" ++ "Community-list number (expanded)\n" ++ "Community-list name\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_access_list_name_cmd_vtysh, ++ "show ipv6 access-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "List IPv6 access lists\n" ++ "IPv6 zebra access-list\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community_list_exact_cmd_vtysh, ++ "show ipv6 bgp community-list WORD exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n" ++ "Exact match of the communities\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPF6D, no_router_zebra_cmd_vtysh, ++ "no router zebra", ++ "Negate a command or set its defaults\n" ++ "Configure routing process\n" ++ "Disable connection to zebra daemon\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_soft_out_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv4_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf|rip|static)", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_default_originate_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "default-originate", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Originate default route to this neighbor\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_route_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D route", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Routing Table\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_set_community_val_cmd_vtysh, ++ "no set community .AA:NN", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP community attribute\n" ++ "Community number in aa:nn format or local-AS|no-advertise|no-export|internet or additive\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_cmd_vtysh, ++ "clear ip bgp (A.B.C.D|X:X::X:X)", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor IP address to clear\n" ++ "BGP IPv6 neighbor to clear\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_mask_flags2_cmd_vtysh, ++ "no ip route A.B.C.D A.B.C.D (reject|blackhole)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ipv6_route_cmd_vtysh, ++ "show ipv6 route", ++ "Show running system information\n" ++ "IP information\n" ++ "IPv6 routing table\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_authtype_authkey_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) " ++ "(authentication-key|)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" ++ "Authentication password (key)\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_OSPFD, router_ospf_id_cmd_vtysh, ++ "router-id A.B.C.D", ++ "router-id for the OSPF process\n" ++ "OSPF router-id in IP address format\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_update_cmd_vtysh, ++ "no debug bgp updates", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP updates\n") ++ ++DEFSH (VTYSH_BGPD, no_set_aspath_prepend_cmd_vtysh, ++ "no set as-path prepend", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Prepend string for a BGP AS-path attribute\n" ++ "Prepend to the as-path\n") ++ ++DEFSH (VTYSH_BGPD, dump_bgp_routes_interval_cmd_vtysh, ++ "dump bgp routes-mrt PATH INTERVAL", ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump whole BGP routing table\n" ++ "Output filename\n" ++ "Interval of output\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_send_version_cmd_vtysh, ++ "no ip rip send version", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement transmission\n" ++ "Version control\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_ebgp_multihop_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "ebgp-multihop", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Allow EBGP neighbors not on directly connected networks\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD, no_match_interface_val_cmd_vtysh, ++ "no match interface WORD", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match first hop interface of route\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv6_rmap_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf6|ripng|static) route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ipv6_distribute_list_cmd_vtysh, ++ "no distribute-list WORD (in|out) WORD", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_nexthop_self_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "next-hop-self", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Disable the next hop calculation for this neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_neighbor_all_cmd_vtysh, ++ "show ip ospf neighbor all", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Neighbor list\n" ++ "include down status neighbor\n") ++ ++DEFSH (VTYSH_RIPNGD, show_ipv6_ripng_status_cmd_vtysh, ++ "show ipv6 ripng status", ++ "Show running system information\n" ++ "IP information\n" ++ "Show RIPng routes\n" ++ "IPv6 routing protocol process parameters and statistics\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community_exact_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_access_list_any_cmd_vtysh, ++ "no ipv6 access-list WORD (deny|permit) any", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any prefixi to match\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_name_standard2_cmd_vtysh, ++ "ip community-list standard WORD (deny|permit)", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Add a standard community-list entry\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_bestpath_med3_cmd_vtysh, ++ "no bgp bestpath med missing-as-worst confed", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "MED attribute\n" ++ "Treat missing MED as the least preferred one\n" ++ "Compare MED among confederation paths\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_prefix_cmd_vtysh, ++ "show ip bgp A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_access_list_remark_arg_cmd_vtysh, ++ "no ipv6 access-list WORD remark .LINE", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Access list entry comment\n" ++ "Comment up to 100 characters\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_interface_cmd_vtysh, ++ "show ipv6 ospf6 interface", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Interface infomation\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_neighbor_strict_capability_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "strict-capability-match", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Strict capability negotiation match\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community4_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_metric_routemap_cmd_vtysh, ++ "default-information originate always metric <0-16777214> route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_update_source_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "update-source WORD", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Source of routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_view_prefix_cmd_vtysh, ++ "show ip bgp view WORD A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_type_routemap_cmd_vtysh, ++ "default-information originate metric-type (1|2) route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD, no_set_metric_val_cmd_vtysh, ++ "no set metric (<0-4294967295>|<+/-metric>)", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Metric value for destination routing protocol\n" ++ "Metric value\n" ++ "Add or subtract metric\n") ++ ++DEFSH (VTYSH_RIPD, rip_redistribute_type_metric_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf|bgp) metric <0-16> route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_OSPFD|VTYSH_OSPF6D, no_set_metric_type_val_cmd_vtysh, ++ "no set metric-type (type-1|type-2)", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Type of metric for destination routing protocol\n" ++ "OSPF[6] external type 1 metric\n" ++ "OSPF[6] external type 2 metric\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_nsm_cmd_vtysh, ++ "no debug ospf nsm", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Neighbor State Machine") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_packet_send_recv_cmd_vtysh, ++ "debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv|detail)", ++ "Debugging functions\n" ++ "OSPF information\n" ++ "OSPF packets\n" ++ "OSPF Hello\n" ++ "OSPF Database Description\n" ++ "OSPF Link State Request\n" ++ "OSPF Link State Update\n" ++ "OSPF Link State Acknowledgment\n" ++ "OSPF all packets\n" ++ "Packet sent\n" ++ "Packet received\n" ++ "Detail information\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_override_capability_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "override-capability", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Override capability negotiation result\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbor_flap_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X) flap-statistics", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display flap statistics of the routes learned from neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_type_id_adv_router_cmd_vtysh, ++ "show ip ospf database (" "asbr-summary|external|network|router|summary" "" "" ") A.B.C.D adv-router A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n" ++ "ASBR summary link states\n" "External link states\n" "Network link states\n" "Router link states\n" "Network summary link states\n" "" "" "" "" ++ "Link State ID (as an IP address)\n" ++ "Advertising Router link states\n" ++ "Advertising Router (as an IP address)\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_stub_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) stub", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Configure OSPF area as stub\n") ++ ++DEFSH (VTYSH_BGPD, bgp_bestpath_aspath_ignore_cmd_vtysh, ++ "bgp bestpath as-path ignore", ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "AS-path attribute\n" ++ "Ignore as-path length in selecting a route\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_filter_list_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Filter networks between OSPF areas\n" ++ "Filter prefixes between OSPF areas\n" ++ "Name of an IP prefix-list\n" ++ "Filter networks sent to this area\n" ++ "Filter networks sent from this area\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_name_standard_cmd_vtysh, ++ "no ip community-list standard WORD (deny|permit) .AA:NN", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Specify a standard community-list\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_cmd_vtysh, ++ "no network A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_BGPD, no_set_ipv6_nexthop_local_val_cmd_vtysh, ++ "no set ipv6 next-hop local X:X::X:X", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "IPv6 information\n" ++ "IPv6 next-hop address\n" ++ "IPv6 local address\n" ++ "IPv6 address of next hop\n") ++ ++DEFSH (VTYSH_OSPF6D, no_ipv6_ospf6_advertise_force_prefix_cmd_vtysh, ++ "no ipv6 ospf6 advertise force-prefix", ++ "Negate a command or set its defaults\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Advertising options\n" ++ "Force to advertise prefix, applicable if Loopback or P-to-P\n" ++ ) ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_topology_router_lsid_cmd_vtysh, ++ "show ipv6 ospf6 topology (A.B.C.D|<0-4294967295>) (A.B.C.D|<0-4294967295>)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Inter Area topology information\n" ++ "Specify Router-ID\n" ++ "Specify Router-ID\n" ++ "Specify Link State ID\n" ++ "Specify Link State ID\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_ipv4_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp <1-65535> ipv4 (unicast|multicast) in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_filter_list_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "filter-list WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Establish BGP filters\n" ++ "AS path access-list name\n" ++ "Filter incoming routes\n" ++ "Filter outgoing routes\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_capability_route_refresh_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "capability route-refresh", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Advertise capability to the peer\n" ++ "Advertise route-refresh capability to this neighbor\n") ++ ++DEFSH (VTYSH_ZEBRA, debug_zebra_events_cmd_vtysh, ++ "debug zebra events", ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra events\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_in_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X) in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_stub_no_summary_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) stub no-summary", ++ "OSPF stub parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Configure OSPF area as stub\n" ++ "Do not inject inter-area routes into stub\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_description_cmd_vtysh, ++ "ipv6 prefix-list WORD description .LINE", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Prefix-list specific description\n" ++ "Up to 80 characters describing this prefix-list\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_authentication_key_cmd_vtysh, ++ "ip ospf authentication-key AUTH_KEY", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Authentication password (key)\n" ++ "The OSPF password (key)") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authtype_args_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) (message-digest|null)", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" "Use null authentication\n" "Use message-digest authentication\n") ++ ++DEFSH (VTYSH_BGPD, bgp_confederation_peers_cmd_vtysh, ++ "bgp confederation peers .<1-65535>", ++ "BGP specific commands\n" ++ "AS confederation parameters\n" ++ "Peer ASs in BGP confederation\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_redistribute_type_metric_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf6|bgp) metric <0-16>", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv4_rmap_cmd_vtysh, ++ "redistribute (connected|kernel|ospf|rip|static) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_network_cmd_vtysh, ++ "network IF_OR_ADDR", ++ "RIPng enable on specified interface or network.\n" ++ "Interface or address") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_type_metric_routemap_cmd_vtysh, ++ "default-information originate metric-type (1|2) metric <0-16777214> route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D A.B.C.D A.B.C.D", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Source address\n" ++ "Source wildcard bits\n" ++ "Destination address\n" ++ "Destination Wildcard bits\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_in_prefix_filter_cmd_vtysh, ++ "clear bgp external in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community4_exact_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_cmd_vtysh, ++ "no ip prefix-list WORD", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_flags_cmd_vtysh, ++ "no ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_soft_out_cmd_vtysh, ++ "clear bgp peer-group WORD soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_message_digest_key_cmd_vtysh, ++ "ospf message-digest-key <1-255> md5 KEY", ++ "OSPF interface commands\n" ++ "Message digest authentication password (key)\n" ++ "Key ID\n" ++ "Use MD5 algorithm\n" ++ "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_keepalive_cmd_vtysh, ++ "undebug bgp keepalives", ++ "Disable debugging functions (see also 'debug')\n" ++ "BGP information\n" ++ "BGP keepalives\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_instance_neighbors_peer_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_RIPD, rip_redistribute_rip_cmd_vtysh, ++ "redistribute rip", ++ "Redistribute information from another routing protocol\n" ++ "Routing Information Protocol (RIP)\n") ++ ++DEFSH (VTYSH_RIPNGD, no_debug_ripng_zebra_cmd_vtysh, ++ "no debug ripng zebra", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng and zebra communication\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_compatible_rfc1583_cmd_vtysh, ++ "no compatible rfc1583", ++ "Negate a command or set its defaults\n" ++ "OSPF compatibility list\n" ++ "compatible with RFC 1583\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_ebgp_multihop_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "ebgp-multihop", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Allow EBGP neighbors not on directly connected networks\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_as_set_summary_cmd_vtysh, ++ "aggregate-address A.B.C.D/M as-set summary-only", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Generate AS set path information\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_filter_list_cmd_vtysh, ++ "show ipv6 mbgp filter-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_regexp_cmd_vtysh, ++ "show bgp regexp .LINE", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_abr_type_cmd_vtysh, ++ "ospf abr-type (cisco|ibm|shortcut|standard)", ++ "OSPF specific commands\n" ++ "Set OSPF ABR type\n" ++ "Alternative ABR, cisco implementation\n" ++ "Alternative ABR, IBM implementation\n" ++ "Shortcut ABR\n" ++ "Standard behavior (RFC2328)\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, no_set_metric_cmd_vtysh, ++ "no set metric", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Metric value for destination routing protocol\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_address_label_cmd_vtysh, ++ "ip address A.B.C.D/M label LINE", ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IP address (e.g. 10.0.0.1/8)\n" ++ "Label of this address\n" ++ "Label\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_view_cmd_vtysh, ++ "show ip bgp view WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_seq_le_ge_cmd_vtysh, ++ "no ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M le <0-32> ge <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_OSPF6D, debug_ospf6_all_cmd_vtysh, ++ "debug ospf6 all", ++ "Debugging functions (see also 'undebug')\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Turn on ALL OSPFv3 debugging\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_fsm_cmd_vtysh, ++ "debug bgp fsm", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP Finite State Machine\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_range_advertise_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M (advertise|not-advertise)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "Advertise this range (default)\n" ++ "DoNotAdvertise this range\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_receive_version_num_cmd_vtysh, ++ "no ip rip receive version (1|2)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement reception\n" ++ "Version control\n" ++ "Version 1\n" ++ "Version 2\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_instance_summary_cmd_vtysh, ++ "show bgp view WORD summary", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_BGPD, set_community_delete_cmd_vtysh, ++ "set comm-list (<1-99>|<100-199>|WORD) delete", ++ "Set values in destination routing protocol\n" ++ "set BGP community list (for deletion)\n" ++ "Community-list number (standard)\n" ++ "Communitly-list number (expanded)\n" ++ "Community-list name\n" ++ "Delete matching communities\n") ++ ++DEFSH (VTYSH_RIPNGD, show_debugging_ripng_cmd_vtysh, ++ "show debugging ripng", ++ "Show running system information\n" ++ "RIPng configuration\n" ++ "Debugging information\n") ++ ++DEFSH (VTYSH_ZEBRA, no_debug_zebra_kernel_cmd_vtysh, ++ "no debug zebra kernel", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Zebra configuration\n" ++ "Debug option set for zebra between kernel interface\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_dampened_paths_cmd_vtysh, ++ "show ip bgp dampened-paths", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display paths suppressed due to dampening\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_range_advertise_cost_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "Advertise this range (default)\n" ++ "User specified metric for this range\n" ++ "Advertised metric for this range\n") ++ ++DEFSH (VTYSH_BGPD, no_set_vpnv4_nexthop_val_cmd_vtysh, ++ "no set vpnv4 next-hop A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "VPNv4 information\n" ++ "VPNv4 next-hop address\n" ++ "IP address of next hop\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_soft_cmd_vtysh, ++ "clear ip bgp A.B.C.D soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community_list_cmd_vtysh, ++ "show bgp ipv6 community-list WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbor_received_prefix_filter_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X) received prefix-filter", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display information received from a BGP neighbor\n" ++ "Display the prefixlist filter\n") ++ ++DEFSH (VTYSH_BGPD, no_set_originator_id_cmd_vtysh, ++ "no set originator-id", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP originator ID attribute\n") ++ ++DEFSH (VTYSH_ZEBRA, no_multicast_cmd_vtysh, ++ "no multicast", ++ "Negate a command or set its defaults\n" ++ "Unset multicast flag to interface\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_capability_dynamic_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "capability dynamic", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Advertise capability to the peer\n" ++ "Advertise dynamic capability to this neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_authentication_key_cmd_vtysh, ++ "no ip ospf authentication-key", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Authentication password (key)\n") ++ ++DEFSH (VTYSH_BGPD, bgp_multiple_instance_cmd_vtysh, ++ "bgp multiple-instance", ++ "BGP information\n" ++ "Enable bgp multiple instance\n") ++ ++DEFSH (VTYSH_RIPD, no_key_string_cmd_vtysh, ++ "no key-string [LINE]", ++ "Negate a command or set its defaults\n" ++ "Unset key string\n" ++ "The key\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_seq_cmd_vtysh, ++ "no ip prefix-list WORD seq <1-4294967295> (deny|permit) (A.B.C.D/M|any)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Any prefix match. Same as \"0.0.0.0/0 le 32\"\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_prefix_longer_cmd_vtysh, ++ "show ipv6 mbgp X:X::X:X/M longer-prefixes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_range_advertise_cost_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "Advertise this range (default)\n" ++ "User specified metric for this range\n" ++ "Advertised metric for this range\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_aggregate_address_cmd_vtysh, ++ "aggregate-address X:X::X:X/M", ++ "Set aggregate RIPng route announcement\n" ++ "Aggregate network\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_authentication_key_chain_cmd_vtysh, ++ "ip rip authentication key-chain LINE", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication key-chain\n" ++ "name of key-chain\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_seq_le_cmd_vtysh, ++ "no ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M le <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_default_metric_val_cmd_vtysh, ++ "no default-metric <0-16777214>", ++ "Negate a command or set its defaults\n" ++ "Set metric of redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_retransmit_interval_cmd_vtysh, ++ "ospf retransmit-interval <3-65535>", ++ "OSPF interface commands\n" ++ "Time between retransmitting lost link state advertisements\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, bgp_always_compare_med_cmd_vtysh, ++ "bgp always-compare-med", ++ "BGP specific commands\n" ++ "Allow comparing MED from different neighbors\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_database_type_id_adv_router_cmd_vtysh, ++ "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX) (A.B.C.D|*) (A.B.C.D|*|dump|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "LSA Database\n" ++ "Router-LSA\n" ++ "Network-LSA\n" ++ "AS-External-LSA\n" ++ "Intra-Area-Prefix-LSA\n" ++ "Inter-Area-Router-LSA\n" ++ "Inter-Area-Prefix-LSA\n" ++ "Link-LSA\n" ++ "All LS Type\n" ++ "Specify LS Type by Hex\n" ++ "Link State ID\n" ++ "All Link State ID\n" ++ "Advertising Router\n" ++ "All Advertising Router\n" ++ "Dump raw LSA data in Hex\n" ++ "show detail of LSAs\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_soft_out_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X) soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_seq_ge_le_cmd_vtysh, ++ "no ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M ge <0-128> le <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_in_cmd_vtysh, ++ "clear bgp peer-group WORD in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_cmd_vtysh, ++ "access-list WORD (deny|permit) A.B.C.D/M", ++ "Add an access list entry\n" ++ "IP zebra access-list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 10.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_distance_cmd_vtysh, ++ "no distance <1-255>", ++ "Negate a command or set its defaults\n" ++ "Administrative distance\n" ++ "Distance value\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community2_exact_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_ifname_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community_exact_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_instance_neighbors_cmd_vtysh, ++ "show ip bgp view WORD neighbors", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ipv6_route_prefix_longer_cmd_vtysh, ++ "show ipv6 route X:X::X:X/M longer-prefixes", ++ "Show running system information\n" ++ "IP information\n" ++ "IPv6 routing table\n" ++ "IPv6 prefix\n" ++ "Show route matching the specified Network/Mask pair only\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_route_server_client_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "route-server-client", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Configure a neighbor as Route Server client\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_cmd_vtysh, ++ "show bgp view WORD ipv6", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_redistribute_source_cmd_vtysh, ++ "no redistribute (kernel|connected|static|rip|bgp)", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_cost_cmd_vtysh, ++ "no ospf cost", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Interface cost\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_distribute_list_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "distribute-list (<1-199>|<1300-2699>|WORD) (in|out)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Filter updates to/from this neighbor\n" ++ "IP access-list number\n" ++ "IP access-list number (expanded range)\n" ++ "IP Access-list name\n" ++ "Filter incoming updates\n" ++ "Filter outgoing updates\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_extcommunity_list_name_standard_cmd_vtysh, ++ "no ip extcommunity-list standard WORD (deny|permit) .AA:NN", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Specify standard extcommunity-list\n" ++ "Extended Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Extended community attribute in 'rt aa:nn_or_IPaddr:nn' OR 'soo aa:nn_or_IPaddr:nn' format\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_bestpath_compare_router_id_cmd_vtysh, ++ "no bgp bestpath compare-routerid", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "Compare router-id for identical EBGP paths\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp peer-group WORD ipv4 (unicast|multicast) in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_priority_cmd_vtysh, ++ "ospf priority <0-255>", ++ "OSPF interface commands\n" ++ "Router priority\n" ++ "Priority\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_dead_interval_addr_cmd_vtysh, ++ "ip ospf dead-interval <1-65535> A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interval after which a neighbor is declared dead\n" ++ "Seconds\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_database_type_cmd_vtysh, ++ "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX|dump|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "LSA Database\n" ++ "Router-LSA\n" ++ "Network-LSA\n" ++ "AS-External-LSA\n" ++ "Intra-Area-Prefix-LSA\n" ++ "Inter-Area-Router-LSA\n" ++ "Inter-Area-Prefix-LSA\n" ++ "Link-LSA\n" ++ "All LS Type\n" ++ "Specify LS Type by Hex\n" ++ "Dump raw LSA data in Hex\n" ++ "show detail of LSAs\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_in_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X) in", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_mask_natural_route_map_cmd_vtysh, ++ "network A.B.C.D route-map WORD", ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_hello_interval_cmd_vtysh, ++ "ospf hello-interval <1-65535>", ++ "OSPF interface commands\n" ++ "Time between HELLO packets\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ipv6_distribute_list_all_cmd_vtysh, ++ "no distribute-list WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, no_dump_bgp_routes_cmd_vtysh, ++ "no dump bgp routes-mrt [PATH] [INTERVAL]", ++ "Negate a command or set its defaults\n" ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump whole BGP routing table\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_neighbor_routes_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_authentication_addr_cmd_vtysh, ++ "no ip ospf authentication A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Enable authentication on this interface\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_in_cmd_vtysh, ++ "clear bgp * in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, dump_bgp_all_interval_cmd_vtysh, ++ "dump bgp all PATH INTERVAL", ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump all BGP packets\n" ++ "Output filename\n" ++ "Interval of output\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_cmd_vtysh, ++ "no ip community-list WORD (deny|permit) .AA:NN", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_neighbor_detail_cmd_vtysh, ++ "show ip ospf neighbor detail", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Neighbor list\n" ++ "detail of all neighbors\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_summary_only_cmd_vtysh, ++ "aggregate-address A.B.C.D/M summary-only", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_tags_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn tags", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "Display BGP tags for prefixes\n") ++ ++DEFSH (VTYSH_RIPNGD, debug_ripng_events_cmd_vtysh, ++ "debug ripng events", ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng events\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_metric_type_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> metric-type (1|2) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric for redistributed routes\n" ++ "OSPF default metric\n" ++ "OSPF exterior metric type for redistributed routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_vpnv4_soft_in_cmd_vtysh, ++ "clear ip bgp A.B.C.D vpnv4 unicast soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_default_metric_cmd_vtysh, ++ "no default-metric", ++ "Negate a command or set its defaults\n" ++ "Set a metric of redistribute routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_ipv4_in_cmd_vtysh, ++ "clear ip bgp <1-65535> ipv4 (unicast|multicast) in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_dead_interval_cmd_vtysh, ++ "no ospf dead-interval", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Interval after which a neighbor is declared dead\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_transmit_delay_cmd_vtysh, ++ "no ip ospf transmit-delay", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Link state transmit delay\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_maximum_prefix_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "maximum-prefix <1-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Maximum number of prefix accept from this peer\n" ++ "maximum no. of prefix limit\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_redistribute_type_metric_routemap_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf6|bgp) metric <0-16> route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_authentication_mode_type_cmd_vtysh, ++ "no ip rip authentication mode (md5|text)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication mode\n" ++ "Keyed message digest\n" ++ "Clear text authentication\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_instance_summary_cmd_vtysh, ++ "show ip bgp view WORD summary", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_ZEBRA, no_bandwidth_if_cmd_vtysh, ++ "no bandwidth", ++ "Negate a command or set its defaults\n" ++ "Set bandwidth informational parameter\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_authentication_cmd_vtysh, ++ "no ip ospf authentication", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Enable authentication on this interface\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_maximum_prefix_warning_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "maximum-prefix <1-4294967295> warning-only", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Maximum number of prefix accept from this peer\n" ++ "maximum no. of prefix limit\n" ++ "Only give warning message when limit is exceeded\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_ipv4_soft_in_cmd_vtysh, ++ "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_neighbors_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) neighbors", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_flags_distance_cmd_vtysh, ++ "ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_standard2_cmd_vtysh, ++ "ip community-list <1-99> (deny|permit)", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list number (standard)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community_list_exact_cmd_vtysh, ++ "show ipv6 mbgp community-list WORD exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n" ++ "Exact match of the communities\n") ++ ++DEFSH (VTYSH_BGPD, no_set_vpnv4_nexthop_cmd_vtysh, ++ "no set vpnv4 next-hop", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "VPNv4 information\n" ++ "VPNv4 next-hop address\n") ++ ++DEFSH (VTYSH_BGPD, no_match_aspath_val_cmd_vtysh, ++ "no match as-path WORD", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP AS path list\n" ++ "AS path access-list name\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_soft_cmd_vtysh, ++ "clear bgp * soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_scan_time_cmd_vtysh, ++ "no bgp scan-time", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Configure background scanner interval\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_in_cmd_vtysh, ++ "clear ip bgp external in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbor_damp_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X) dampened-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the dampened routes received from neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_md5_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(message-digest-key|) <1-255>", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Message digest authentication password (key)\n" "dummy string \n" "Key ID\n" "Use MD5 algorithm\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_event_cmd_vtysh, ++ "debug ospf event", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF event information\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_sequence_number_cmd_vtysh, ++ "ipv6 prefix-list sequence-number", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Include/exclude sequence numbers in NVGEN\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_ipv4_in_cmd_vtysh, ++ "clear ip bgp * ipv4 (unicast|multicast) in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD, rip_version_cmd_vtysh, ++ "version <1-2>", ++ "Set routing protocol version\n" ++ "version\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_route_addr_cmd_vtysh, ++ "show ip route A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n" ++ "Network in the IP routing table to display\n") ++ ++DEFSH (VTYSH_RIPNGD, ipv6_ripng_split_horizon_poisoned_reverse_cmd_vtysh, ++ "ipv6 ripng split-horizon poisoned-reverse", ++ "IPv6 information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n" ++ "With poisoned-reverse\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_BGPD, set_ip_nexthop_cmd_vtysh, ++ "set ip next-hop A.B.C.D", ++ "Set values in destination routing protocol\n" ++ "IP information\n" ++ "Next hop address\n" ++ "IP address of next hop\n") ++ ++DEFSH (VTYSH_BGPD, no_match_ecommunity_cmd_vtysh, ++ "no match extcommunity", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP/VPN extended community list\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_host_host_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D host A.B.C.D", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "A single source host\n" ++ "Source address\n" ++ "A single destination host\n" ++ "Destination address\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_mask_flags_distance2_cmd_vtysh, ++ "no ip route A.B.C.D A.B.C.D (reject|blackhole) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_advertise_interval_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "advertisement-interval <0-600>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Minimum interval between sending BGP routing updates\n" ++ "time in seconds\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_redistribute_ripng_cmd_vtysh, ++ "no redistribute ripng", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "RIPng route\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community4_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_cluster_id_cmd_vtysh, ++ "no bgp cluster-id", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Configure Route-Reflector Cluster-id\n") ++ ++DEFSH (VTYSH_RIPD, rip_default_metric_cmd_vtysh, ++ "default-metric <1-16>", ++ "Set a metric of redistribute routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_import_check_cmd_vtysh, ++ "bgp network import-check", ++ "BGP specific commands\n" ++ "BGP network command\n" ++ "Check BGP network route exists in IGP\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_sequence_number_cmd_vtysh, ++ "ip prefix-list sequence-number", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Include/exclude sequence numbers in NVGEN\n") ++ ++DEFSH (VTYSH_BGPD, bgp_router_id_cmd_vtysh, ++ "bgp router-id A.B.C.D", ++ "BGP information\n" ++ "Override configured router identifier\n" ++ "Manually configured router identifier\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_distance_cmd_vtysh, ++ "no distance bgp <1-255> <1-255> <1-255>", ++ "Negate a command or set its defaults\n" ++ "Define an administrative distance\n" ++ "BGP distance\n" ++ "Distance for routes external to the AS\n" ++ "Distance for routes internal to the AS\n" ++ "Distance for local routes\n") ++ ++DEFSH (VTYSH_RIPNGD, no_if_ipv6_rmap_cmd_vtysh, ++ "no route-map ROUTEMAP_NAME (in|out) IFNAME", ++ "Negate a command or set its defaults\n" ++ "Route map unset\n" ++ "Route map name\n" ++ "Route map for input filtering\n" ++ "Route map for output filtering\n" ++ "Route map interface name\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_in_cmd_vtysh, ++ "clear ip bgp <1-65535> in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_cmd_vtysh, ++ "show ip ospf database", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_in_cmd_vtysh, ++ "clear ip bgp A.B.C.D in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_set_originator_id_val_cmd_vtysh, ++ "no set originator-id A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP originator ID attribute\n" ++ "IP address of originator\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_authentication_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) authentication", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Enable authentication\n") ++ ++DEFSH (VTYSH_RIPD, debug_rip_packet_direct_cmd_vtysh, ++ "debug rip packet (recv|send)", ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP packet\n" ++ "RIP receive packet\n" ++ "RIP send packet\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_day_month_month_day_cmd_vtysh, ++ "accept-lifetime HH:MM:SS <1-31> MONTH <1993-2035> HH:MM:SS MONTH <1-31> <1993-2035>", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Month of the year to expire\n" ++ "Day of th month to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_mask_as_set_summary_cmd_vtysh, ++ "no aggregate-address A.B.C.D A.B.C.D as-set summary-only", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Generate AS set path information\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_param2_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_instance_ipv4_summary_cmd_vtysh, ++ "show ip bgp view WORD ipv4 (unicast|multicast) summary", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_remove_private_as_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "remove-private-AS", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Remove private AS number from outbound updates\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_route_reflector_client_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "route-reflector-client", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Configure a neighbor as Route Reflector client\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_prefix_list_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) prefix-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes conforming to the prefix-list\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_extcommunity_list_name_expanded_cmd_vtysh, ++ "no ip extcommunity-list expanded WORD (deny|permit) .LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Specify expanded extcommunity-list\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_neighbor_received_prefix_filter_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X) received prefix-filter", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display information received from a BGP neighbor\n" ++ "Display the prefixlist filter\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_priority_cmd_vtysh, ++ "no ip ospf priority", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Router priority\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_cidr_only_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) cidr-only", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display only routes with non-natural netmasks\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_route_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_default_information_originate_cmd_vtysh, ++ "no default-information originate", ++ "Negate a command or set its defaults\n" ++ "Control distribution of default route\n" ++ "Distribute a default route\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_metric_cmd_vtysh, ++ "default-information originate metric <0-16777214>", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_dampening_address_mask_cmd_vtysh, ++ "clear ip bgp dampening A.B.C.D A.B.C.D", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear route flap dampening information\n" ++ "Network to clear damping information\n" ++ "Network mask\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp view WORD * in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_range_cost_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "User specified metric for this range\n" ++ "Advertised metric for this range\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_description_cmd_vtysh, ++ "ip prefix-list WORD description .LINE", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Prefix-list specific description\n" ++ "Up to 80 characters describing this prefix-list\n") ++ ++DEFSH (VTYSH_OSPF6D|VTYSH_BGPD, no_match_ipv6_address_prefix_list_cmd_vtysh, ++ "no match ipv6 address prefix-list WORD", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IPv6 information\n" ++ "Match address of route\n" ++ "Match entries of prefix-lists\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_redistribute_type_metric_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf|bgp) metric <0-16>", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_regexp_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) regexp .LINE", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_priority_addr_cmd_vtysh, ++ "no ip ospf priority A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Router priority\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_all_cmd_vtysh, ++ "no access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD)", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP extended access list\n" ++ "IP standard access list (expanded range)\n" ++ "IP extended access list (expanded range)\n" ++ "IP zebra access-list name\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_ipv4_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp external ipv4 (unicast|multicast) in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_out_cmd_vtysh, ++ "clear ip bgp * out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_pref_cmd_vtysh, ++ "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_cost_cmd_vtysh, ++ "ospf cost <1-65535>", ++ "OSPF interface commands\n" ++ "Interface cost\n" ++ "Cost") ++ ++DEFSH (VTYSH_BGPD, bgp_damp_set3_cmd_vtysh, ++ "bgp dampening", ++ "BGP Specific commands\n" ++ "Enable route-flap dampening\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_version_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "version", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Neighbor's BGP version\n") ++ ++DEFSH (VTYSH_OSPF6D, no_ipv6_ospf6_passive_cmd_vtysh, ++ "no ipv6 ospf6 passive", ++ "Negate a command or set its defaults\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "passive interface: No Adjacency will be formed on this I/F\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_in_prefix_filter_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X) in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig inbound update\n" ++ "Push out the existing ORF prefix-list\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_any_mask_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip any A.B.C.D A.B.C.D", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Any source host\n" ++ "Destination address\n" ++ "Destination Wildcard bits\n") ++ ++DEFSH (VTYSH_BGPD, no_match_origin_val_cmd_vtysh, ++ "no match origin (egp|igp|incomplete)", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "BGP origin code\n" ++ "remote EGP\n" ++ "local IGP\n" ++ "unknown heritage\n") ++ ++DEFSH (VTYSH_BGPD, no_set_aggregator_as_cmd_vtysh, ++ "no set aggregator as", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP aggregator attribute\n" ++ "AS number of aggregator\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_host_host_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D host A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "A single source host\n" ++ "Source address\n" ++ "A single destination host\n" ++ "Destination address\n") ++ ++DEFSH (VTYSH_BGPD, old_ipv6_aggregate_address_cmd_vtysh, ++ "ipv6 bgp aggregate-address X:X::X:X/M", ++ "IPv6 information\n" ++ "BGP information\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_access_list_cmd_vtysh, ++ "ipv6 access-list WORD (deny|permit) X:X::X:X/M", ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 3ffe:506::/32\n") ++ ++DEFSH (VTYSH_BGPD, no_synchronization_cmd_vtysh, ++ "no synchronization", ++ "Negate a command or set its defaults\n" ++ "Perform IGP synchronization\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_version_val_cmd_vtysh, ++ "no version <1-2>", ++ "Negate a command or set its defaults\n" ++ "Set routing protocol version\n" ++ "version\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_neighbor_priority_cmd_vtysh, ++ "neighbor A.B.C.D priority <0-255>", ++ "Specify neighbor router\n" ++ "Neighbor IP address\n" ++ "Neighbor Priority\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_param4_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_routemap_cmd_vtysh, ++ "default-information originate always route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_local_as_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "local-as <1-65535>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Specify a local-as number\n" ++ "AS number used as local AS\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_vpnv4_soft_out_cmd_vtysh, ++ "clear ip bgp * vpnv4 unicast soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_offset_list_cmd_vtysh, ++ "no offset-list WORD (in|out) <0-16>", ++ "Negate a command or set its defaults\n" ++ "Modify RIP metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_send_version_1_cmd_vtysh, ++ "ip rip send version 1 2", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement transmission\n" ++ "Version control\n" ++ "RIP version 1\n" ++ "RIP version 2\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_soft_in_cmd_vtysh, ++ "clear ip bgp peer-group WORD soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_soft_out_cmd_vtysh, ++ "clear ip bgp peer-group WORD soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, bgp_cluster_id32_cmd_vtysh, ++ "bgp cluster-id <1-4294967295>", ++ "BGP information\n" ++ "Configure Route-Reflector Cluster-id\n" ++ "Route-Reflector Cluster-id as 32 bit quantity\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_routemap_set_forwarding_cmd_vtysh, ++ "set forwarding-address X:X::X:X", ++ "Set value\n" ++ "Forwarding Address\n" ++ "IPv6 Address\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_bgp_neighbor_advertised_route_cmd_vtysh, ++ "show ipv6 bgp neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_BGPD, no_match_metric_val_cmd_vtysh, ++ "no match metric <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match metric of route\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_day_month_day_month_cmd_vtysh, ++ "send-lifetime HH:MM:SS <1-31> MONTH <1993-2035> HH:MM:SS <1-31> MONTH <1993-2035>", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Day of th month to expire\n" ++ "Month of the year to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_mask_cmd_vtysh, ++ "no network A.B.C.D mask A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Network mask\n" ++ "Network mask\n") ++ ++DEFSH (VTYSH_BGPD, vpnv4_network_cmd_vtysh, ++ "network A.B.C.D/M rd ASN:nn_or_IP-address:nn tag WORD", ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Specify Route Distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "BGP tag\n" ++ "tag value\n") ++ ++DEFSH (VTYSH_BGPD, bgp_distance_source_cmd_vtysh, ++ "distance <1-255> A.B.C.D/M", ++ "Define an administrative distance\n" ++ "Administrative distance\n" ++ "IP source prefix\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_authentication_key_cmd_vtysh, ++ "ospf authentication-key AUTH_KEY", ++ "OSPF interface commands\n" ++ "Authentication password (key)\n" ++ "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_passive_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "passive", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Don't send open messages to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community4_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_RIPD, key_string_cmd_vtysh, ++ "key-string LINE", ++ "Set key string\n" ++ "The key\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_as_path_access_list_all_cmd_vtysh, ++ "show ip as-path-access-list", ++ "Show running system information\n" ++ "IP information\n" ++ "List AS path access lists\n") ++ ++DEFSH (VTYSH_OSPFD|VTYSH_OSPF6D, no_set_metric_type_cmd_vtysh, ++ "no set metric-type", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Type of metric for destination routing protocol\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_access_list_name_cmd_vtysh, ++ "show ip access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD)", ++ "Show running system information\n" ++ "IP information\n" ++ "List IP access lists\n" ++ "IP standard access list\n" ++ "IP extended access list\n" ++ "IP standard access list (expanded range)\n" ++ "IP extended access list (expanded range)\n" ++ "IP zebra access-list\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_mask_cmd_vtysh, ++ "no ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n") ++ ++DEFSH (VTYSH_BGPD, ip_extcommunity_list_standard_cmd_vtysh, ++ "ip extcommunity-list <1-99> (deny|permit) .AA:NN", ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Extended Community list number (standard)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Extended community attribute in 'rt aa:nn_or_IPaddr:nn' OR 'soo aa:nn_or_IPaddr:nn' format\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_ebgp_multihop_ttl_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "ebgp-multihop <1-255>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Allow EBGP neighbors not on directly connected networks\n" ++ "maximum hop count\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_network_cmd_vtysh, ++ "no ospf network", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Network type\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_message_digest_key_cmd_vtysh, ++ "no ospf message-digest-key <1-255>", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Message digest authentication password (key)\n" ++ "Key ID\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_vpnv4_soft_cmd_vtysh, ++ "clear ip bgp A.B.C.D vpnv4 unicast soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_month_day_month_day_cmd_vtysh, ++ "send-lifetime HH:MM:SS MONTH <1-31> <1993-2035> HH:MM:SS MONTH <1-31> <1993-2035>", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Month of the year to expire\n" ++ "Day of th month to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_mask_flags_distance_cmd_vtysh, ++ "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Distance value for this route\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbor_received_prefix_filter_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X) received prefix-filter", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display information received from a BGP neighbor\n" ++ "Display the prefixlist filter\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_intra_inter_cmd_vtysh, ++ "distance ospf intra-area <1-255> inter-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_type_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2)", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "OSPF exterior metric type for redistributed routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_duration_month_day_cmd_vtysh, ++ "send-lifetime HH:MM:SS MONTH <1-31> <1993-2035> duration <1-2147483646>", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Duration of the key\n" ++ "Duration seconds\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_cmd_vtysh, ++ "show ip bgp", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_redistribute_type_metric_routemap_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf|bgp) metric <0-16> route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD, no_debug_rip_packet_cmd_vtysh, ++ "no debug rip packet", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP packet\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_ism_cmd_vtysh, ++ "debug ospf ism", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Interface State Machine\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_external_cmd_vtysh, ++ "distance ospf external <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "External routes\n" ++ "Distance for external routes\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_authentication_key_cmd_vtysh, ++ "no ospf authentication-key", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Authentication password (key)\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_neighbor_received_routes_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_mask_route_map_cmd_vtysh, ++ "no network A.B.C.D mask A.B.C.D route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Network mask\n" ++ "Network mask\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_RIPNGD, no_router_ripng_cmd_vtysh, ++ "no router ripng", ++ "Negate a command or set its defaults\n" ++ "Enable a routing process\n" ++ "Make RIPng instance command\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_advertise_prefix_list_cmd_vtysh, ++ "ipv6 ospf6 advertise prefix-list WORD", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Advertising options\n" ++ "Filter prefix using prefix-list\n" ++ "Prefix list name\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged6_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged as-path med next-hop", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Med attribute\n" ++ "Nexthop attribute\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distribute_list_out_cmd_vtysh, ++ "distribute-list WORD out (kernel|connected|static|rip|bgp)", ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter outgoing routing updates\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_RIPD, rip_offset_list_cmd_vtysh, ++ "offset-list WORD (in|out) <0-16>", ++ "Modify RIP metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_BGPD, no_match_community_cmd_vtysh, ++ "no match community", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP community list\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, no_rmap_onmatch_goto_cmd_vtysh, ++ "no on-match goto", ++ "Negate a command or set its defaults\n" ++ "Exit policy on matches\n" ++ "Next clause\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_neighbors_peer_cmd_vtysh, ++ "show ip bgp vpnv4 all neighbors A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_route_map_cmd_vtysh, ++ "show ip bgp flap-statistics route-map WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "Display routes matching the route-map\n" ++ "A route-map to match on\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_range_substitute_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "Announce area range as another prefix\n" ++ "Network prefix to be announced instead of range\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authtype_args_authkey_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) (message-digest|null) " ++ "(authentication-key|) AUTH_KEY", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" "Use null authentication\n" "Use message-digest authentication\n" ++ "Authentication password (key)\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_vpnv4_in_cmd_vtysh, ++ "clear ip bgp A.B.C.D vpnv4 unicast in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_message_digest_key_cmd_vtysh, ++ "ip ospf message-digest-key <1-255> md5 KEY", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Message digest authentication password (key)\n" ++ "Key ID\n" ++ "Use MD5 algorithm\n" ++ "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, neighbor_description_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "description .LINE", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Neighbor specific description\n" ++ "Up to 80 characters describing this neighbor\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_cmd_vtysh, ++ "show ipv6 prefix-list", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_export_list_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) export-list NAME", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Unset the filter for networks announced to other areas\n" ++ "Name of the access-list\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged1_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged (as-path|next-hop|med)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_month_day_day_month_cmd_vtysh, ++ "accept-lifetime HH:MM:SS MONTH <1-31> <1993-2035> HH:MM:SS <1-31> MONTH <1993-2035>", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Day of th month to expire\n" ++ "Month of the year to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_peer_group_cmd_vtysh, ++ "neighbor WORD peer-group", ++ "Specify neighbor router\n" ++ "Neighbor tag\n" ++ "Configure peer-group\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_distance_cmd_vtysh, ++ "no ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_any_any_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip any any", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Any source host\n" ++ "Any destination host\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_neighbor_flap_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X) flap-statistics", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display flap statistics of the routes learned from neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_neighbor_cmd_vtysh, ++ "neighbor A.B.C.D", ++ "Specify neighbor router\n" ++ "Neighbor IP address\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_route_cmd_vtysh, ++ "show ipv6 mbgp X:X::X:X", ++ "Show running system information\n" ++ "IP information\n" ++ "MBGP information\n" ++ "Network in the MBGP routing table to display\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_seq_cmd_vtysh, ++ "ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) (X:X::X:X/M|any)", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Any prefix match. Same as \"::0/0 le 128\"\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_neighbor_flap_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X) flap-statistics", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display flap statistics of the routes learned from neighbor\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_BGPD, no_set_ipv6_nexthop_local_cmd_vtysh, ++ "no set ipv6 next-hop local", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "IPv6 information\n" ++ "IPv6 next-hop address\n" ++ "IPv6 local address\n") ++ ++DEFSH (VTYSH_BGPD, set_vpnv4_nexthop_cmd_vtysh, ++ "set vpnv4 next-hop A.B.C.D", ++ "Set values in destination routing protocol\n" ++ "VPNv4 information\n" ++ "VPNv4 next-hop address\n" ++ "IP address of next hop\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_soft_in_cmd_vtysh, ++ "clear bgp <1-65535> soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_cmd_vtysh, ++ "show bgp ipv6", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_cost_addr_cmd_vtysh, ++ "no ip ospf cost A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interface cost\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_cidr_only_cmd_vtysh, ++ "show ip bgp cidr-only", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display only routes with non-natural netmasks\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_dead_interval_cmd_vtysh, ++ "no ip ospf dead-interval", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interval after which a neighbor is declared dead\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, rmap_onmatch_goto_cmd_vtysh, ++ "on-match goto <1-65535>", ++ "Exit policy on matches\n" ++ "Goto Clause number\n" ++ "Number\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community_all_cmd_vtysh, ++ "show ip bgp community", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n") ++ ++DEFSH (VTYSH_RIPD, rip_distance_source_cmd_vtysh, ++ "distance <1-255> A.B.C.D/M", ++ "Administrative distance\n" ++ "Distance value\n" ++ "IP source prefix\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_prefix_list_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "prefix-list WORD (in|out)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Filter updates to/from this neighbor\n" ++ "Name of a prefix list\n" ++ "Filter incoming updates\n" ++ "Filter outgoing updates\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_local_as_val2_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "local-as <1-65535> no-prepend", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Specify a local-as number\n" ++ "AS number used as local AS\n" ++ "Do not prepend local-as to updates from ebgp peers\n") ++ ++DEFSH (VTYSH_OSPF6D, no_ospf6_interface_area_cmd_vtysh, ++ "no interface IFNAME area A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Disable routing on an IPv6 interface\n" ++ "Interface name(e.g. ep0)\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_filter_list_cmd_vtysh, ++ "show bgp ipv6 filter-list WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_confederation_peers_cmd_vtysh, ++ "no bgp confederation peers .<1-65535>", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "AS confederation parameters\n" ++ "Peer ASs in BGP confederation\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbor_routes_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_distribute_list_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "distribute-list (<1-199>|<1300-2699>|WORD) (in|out)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Filter updates to/from this neighbor\n" ++ "IP access-list number\n" ++ "IP access-list number (expanded range)\n" ++ "IP Access-list name\n" ++ "Filter incoming updates\n" ++ "Filter outgoing updates\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_authentication_string_cmd_vtysh, ++ "ip rip authentication string LINE", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication string\n" ++ "Authentication string\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_le_cmd_vtysh, ++ "no ipv6 prefix-list WORD (deny|permit) X:X::X:X/M le <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged2_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged as-path (next-hop|med)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_cidr_only_cmd_vtysh, ++ "show ip bgp flap-statistics cidr-only", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "Display only routes with non-natural netmasks\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community_all_cmd_vtysh, ++ "show ipv6 mbgp community", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_packet_all_cmd_vtysh, ++ "debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all)", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF packets\n" ++ "OSPF Hello\n" ++ "OSPF Database Description\n" ++ "OSPF Link State Request\n" ++ "OSPF Link State Update\n" ++ "OSPF Link State Acknowledgment\n" ++ "OSPF all packets\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_prefix_cmd_vtysh, ++ "show ip prefix-list WORD A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community_info_cmd_vtysh, ++ "show ip bgp community-info", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "List all bgp community information\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_param3_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, bgp_scan_time_cmd_vtysh, ++ "bgp scan-time <5-60>", ++ "BGP specific commands\n" ++ "Configure background scanner interval\n" ++ "Scanner interval (seconds)\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_enforce_multihop_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "enforce-multihop", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Enforce EBGP neighbors perform multihop\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_soft_in_cmd_vtysh, ++ "clear ip bgp external soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_timers_spf_cmd_vtysh, ++ "timers spf <0-4294967295> <0-4294967295>", ++ "Adjust routing timers\n" ++ "OSPF SPF timers\n" ++ "Delay between receiving a change to SPF calculation\n" ++ "Hold time between consecutive SPF calculations\n") ++ ++DEFSH (VTYSH_BGPD, debug_bgp_filter_cmd_vtysh, ++ "debug bgp filters", ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP filters\n") ++ ++DEFSH (VTYSH_RIPNGD, ipv6_distribute_list_all_cmd_vtysh, ++ "distribute-list WORD (in|out)", ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community4_exact_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_inter_intra_cmd_vtysh, ++ "distance ospf inter-area <1-255> intra-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_BGPD, no_set_ip_nexthop_val_cmd_vtysh, ++ "no set ip next-hop A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "IP information\n" ++ "Next hop address\n" ++ "IP address of next hop\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_le_ge_cmd_vtysh, ++ "ip prefix-list WORD (deny|permit) A.B.C.D/M le <0-32> ge <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community_list_exact_cmd_vtysh, ++ "show bgp ipv6 community-list WORD exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n" ++ "Exact match of the communities\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_le_cmd_vtysh, ++ "ipv6 prefix-list WORD (deny|permit) X:X::X:X/M le <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_prefix_list_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "prefix-list WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Filter updates to/from this neighbor\n" ++ "Name of a prefix list\n" ++ "Filter incoming updates\n" ++ "Filter outgoing updates\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_metric_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric for redistributed routes\n" ++ "OSPF default metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_distance_source_cmd_vtysh, ++ "no distance <1-255> A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "Administrative distance\n" ++ "Distance value\n" ++ "IP source prefix\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_neighbor_poll_interval_cmd_vtysh, ++ "neighbor A.B.C.D poll-interval <1-65535>", ++ "Specify neighbor router\n" ++ "Neighbor IP address\n" ++ "Dead Neighbor Polling interval\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_instance_ipv6_summary_cmd_vtysh, ++ "show bgp view WORD ipv6 summary", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_nsm_sub_cmd_vtysh, ++ "debug ospf nsm (status|events|timers)", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Neighbor State Machine\n" ++ "NSM Status Information\n" ++ "NSM Event Information\n" ++ "NSM Timer Information\n") ++ ++DEFSH (VTYSH_BGPD, no_set_ecommunity_rt_val_cmd_vtysh, ++ "no set extcommunity rt .ASN:nn_or_IP-address:nn", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP extended community attribute\n" ++ "Route Target extened communityt\n" ++ "VPN extended community\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_in_cmd_vtysh, ++ "clear ip bgp peer-group WORD in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_prefix_list_cmd_vtysh, ++ "show ip bgp prefix-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes conforming to the prefix-list\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_host_mask_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D A.B.C.D A.B.C.D", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "A single source host\n" ++ "Source address\n" ++ "Destination address\n" ++ "Destination Wildcard bits\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ipv6_distribute_list_prefix_all_cmd_vtysh, ++ "no distribute-list prefix WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, no_set_aspath_prepend_val_cmd_vtysh, ++ "no set as-path prepend .<1-65535>", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Prepend string for a BGP AS-path attribute\n" ++ "Prepend to the as-path\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPF6D, router_zebra_cmd_vtysh, ++ "router zebra", ++ "Enable a routing process\n" ++ "Make connection to zebra daemon\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_retransmit_interval_cmd_vtysh, ++ "no ospf retransmit-interval", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Time between retransmitting lost link state advertisements\n") ++ ++DEFSH (VTYSH_OSPFD, no_router_ospf_cmd_vtysh, ++ "no router ospf", ++ "Negate a command or set its defaults\n" ++ "Enable a routing process\n" ++ "Start OSPF configuration\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_vpnv4_out_cmd_vtysh, ++ "clear ip bgp <1-65535> vpnv4 unicast out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_offset_list_ifname_cmd_vtysh, ++ "no offset-list WORD (in|out) <0-16> IFNAME", ++ "Negate a command or set its defaults\n" ++ "Modify RIPng metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n" ++ "Interface to match\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_type_cmd_vtysh, ++ "show ip ospf database (" "asbr-summary|external|network|router|summary" "" "" "|max-age|self-originate)", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n" ++ "ASBR summary link states\n" "External link states\n" "Network link states\n" "Router link states\n" "Network summary link states\n" "" "" "" "" ++ "LSAs in MaxAge list\n" ++ "Self-originated link states\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_ipv4_in_cmd_vtysh, ++ "clear ip bgp A.B.C.D ipv4 (unicast|multicast) in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_shortcut_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) shortcut (enable|disable)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Deconfigure the area's shortcutting mode\n" ++ "Deconfigure enabled shortcutting through the area\n" ++ "Deconfigure disabled shortcutting through the area\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_cost_cmd_vtysh, ++ "no ip ospf cost", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interface cost\n") ++ ++DEFSH (VTYSH_OSPF6D, no_ospf6_passive_interface_cmd_vtysh, ++ "no passive-interface IFNAME", ++ "Negate a command or set its defaults\n" ++ "Suppress routing updates on an interface\n" ++ "Interface name(e.g. ep0)\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_regexp_cmd_vtysh, ++ "show bgp ipv6 regexp .LINE", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the AS path regular expression\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_route_prefix_longer_cmd_vtysh, ++ "show ip route A.B.C.D/M longer-prefixes", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Show route matching the specified Network/Mask pair only\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_extcommunity_list_all_cmd_vtysh, ++ "no ip extcommunity-list (<1-99>|<100-199>)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Extended Community list number (standard)\n" ++ "Extended Community list number (expanded)\n") ++ ++DEFSH (VTYSH_ZEBRA, no_linkdetect_cmd_vtysh, ++ "no link-detect", ++ "Negate a command or set its defaults\n" ++ "Disable link detection on interface\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ipv6_route_prefix_cmd_vtysh, ++ "show ipv6 route X:X::X:X/M", ++ "Show running system information\n" ++ "IP information\n" ++ "IPv6 routing table\n" ++ "IPv6 prefix\n") ++ ++DEFSH (VTYSH_BGPD, no_set_community_none_cmd_vtysh, ++ "no set community none", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP community attribute\n" ++ "No community attribute\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_distance_cmd_vtysh, ++ "ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_ipv4_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp view WORD * ipv4 (unicast|multicast) in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, set_origin_cmd_vtysh, ++ "set origin (egp|igp|incomplete)", ++ "Set values in destination routing protocol\n" ++ "BGP origin code\n" ++ "remote EGP\n" ++ "local IGP\n" ++ "unknown heritage\n") ++ ++DEFSH (VTYSH_RIPD, debug_rip_zebra_cmd_vtysh, ++ "debug rip zebra", ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP and ZEBRA communication\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_soft_in_cmd_vtysh, ++ "clear bgp ipv6 * soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_intra_external_cmd_vtysh, ++ "distance ospf intra-area <1-255> external <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n" ++ "External routes\n" ++ "Distance for external routes\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_authentication_args_addr_cmd_vtysh, ++ "ip ospf authentication (null|message-digest) A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Enable authentication on this interface\n" ++ "Use null authentication\n" ++ "Use message-digest authentication\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, ipv6_bgp_network_route_map_cmd_vtysh, ++ "network X:X::X:X/M route-map WORD", ++ "Specify a network to announce via BGP\n" ++ "IPv6 prefix /\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_topology_router_lsid_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D topology (A.B.C.D|<0-4294967295>) (A.B.C.D|<0-4294967295>)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Shortest Path First tree information\n" ++ "Displays SPF topology table\n" ++ "Specify Router-ID\n" ++ "Specify Router-ID\n" ++ "Specify Link State ID\n" ++ "Specify Link State ID\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community3_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_standard_host_cmd_vtysh, ++ "no access-list (<1-99>|<1300-1999>) (deny|permit) host A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "A single host address\n" ++ "Address to match\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_prefix_cmd_vtysh, ++ "show ip bgp flap-statistics A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_route_map_cmd_vtysh, ++ "network A.B.C.D/M route-map WORD", ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_bgp_network_cmd_vtysh, ++ "network X:X::X:X/M", ++ "Specify a network to announce via BGP\n" ++ "IPv6 prefix /\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_redistribute_type_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf|bgp)", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_soft_in_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_ZEBRA, no_bandwidth_if_val_cmd_vtysh, ++ "no bandwidth <1-10000000>", ++ "Negate a command or set its defaults\n" ++ "Set bandwidth informational parameter\n" ++ "Bandwidth in kilobits\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_transmit_delay_addr_cmd_vtysh, ++ "ip ospf transmit-delay <1-65535> A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Link state transmit delay\n" ++ "Seconds\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_update_cmd_vtysh, ++ "undebug bgp updates", ++ "Disable debugging functions (see also 'debug')\n" ++ "BGP information\n" ++ "BGP updates\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_nexthop_self_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "next-hop-self", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Disable the next hop calculation for this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_enforce_multihop_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "enforce-multihop", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Enforce EBGP neighbors perform multihop\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_RIPD, rip_default_information_originate_cmd_vtysh, ++ "default-information originate", ++ "Control distribution of default route\n" ++ "Distribute a default route\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_soft_out_cmd_vtysh, ++ "clear bgp ipv6 external soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_detail_cmd_vtysh, ++ "show ip prefix-list detail", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Detail of prefix lists\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community_list_cmd_vtysh, ++ "show ip bgp community-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_soft_in_cmd_vtysh, ++ "clear bgp peer-group WORD soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_access_list_remark_cmd_vtysh, ++ "no ipv6 access-list WORD remark", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Access list entry comment\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_dampening_cmd_vtysh, ++ "clear ip bgp dampening", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear route flap dampening information\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp peer-group WORD in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_address_cmd_vtysh, ++ "ipv6 address X:X::X:X/M", ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IPv6 address (e.g. 3ffe:506::1/48)\n") ++ ++DEFSH (VTYSH_BGPD, no_match_ipv6_address_cmd_vtysh, ++ "no match ipv6 address WORD", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IPv6 information\n" ++ "Match IPv6 address of route\n" ++ "IPv6 access-list name\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_forwarding_cmd_vtysh, ++ "no ip forwarding", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Turn off IP forwarding") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_network_area_cmd_vtysh, ++ "no network A.B.C.D/M area (A.B.C.D|<0-4294967295>)", ++ "Negate a command or set its defaults\n" ++ "Enable routing on an IP network\n" ++ "OSPF network prefix\n" ++ "Set the OSPF area ID\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_in_prefix_filter_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_default_information_originate_cmd_vtysh, ++ "no default-information originate", ++ "Negate a command or set its defaults\n" ++ "Default route information\n" ++ "Distribute default route\n") ++ ++DEFSH (VTYSH_BGPD, bgp_bestpath_med2_cmd_vtysh, ++ "bgp bestpath med confed missing-as-worst", ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "MED attribute\n" ++ "Compare MED among confederation paths\n" ++ "Treat missing MED as the least preferred one\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_standard_cmd_vtysh, ++ "access-list (<1-99>|<1300-1999>) (deny|permit) A.B.C.D A.B.C.D", ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Address to match\n" ++ "Wildcard bits\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_neighbor_advertised_route_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_cmd_vtysh, ++ "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community2_exact_cmd_vtysh, ++ "show bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_address_label_cmd_vtysh, ++ "no ip address A.B.C.D/M label LINE", ++ "Negate a command or set its defaults\n" ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IP address (e.g. 10.0.0.1/8)\n" ++ "Label of this address\n" ++ "Label\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_route_cmd_vtysh, ++ "show bgp view WORD X:X::X:X", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_redistribute_type_routemap_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf6|bgp) route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_deterministic_med_cmd_vtysh, ++ "no bgp deterministic-med", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Pick the best-MED path among paths advertised from the neighboring AS\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv4_cmd_vtysh, ++ "redistribute (connected|kernel|ospf|rip|static)", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbor_received_routes_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_RIPD, no_key_chain_cmd_vtysh, ++ "no key chain WORD", ++ "Negate a command or set its defaults\n" ++ "Authentication key management\n" ++ "Key-chain management\n" ++ "Key-chain name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_standard_any_cmd_vtysh, ++ "access-list (<1-99>|<1300-1999>) (deny|permit) any", ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any source host\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_soft_cmd_vtysh, ++ "clear ip bgp <1-65535> soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_in_cmd_vtysh, ++ "clear bgp ipv6 * in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD, no_match_tag_val_cmd_vtysh, ++ "no match tag <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match tag of route\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_address_val_cmd_vtysh, ++ "no match ip address (<1-199>|<1300-2699>|WORD)", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match address of route\n" ++ "IP access-list number\n" ++ "IP access-list number (expanded range)\n" ++ "IP Access-list name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD, set_tag_cmd_vtysh, ++ "set tag <0-65535>", ++ "Set values in destination routing protocol\n" ++ "Tag value for routing protocol\n" ++ "Tag value\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_topology_cmd_vtysh, ++ "show ipv6 ospf6 topology", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Inter Area topology information\n" ++ ) ++ ++DEFSH (VTYSH_RIPNGD, ripng_timers_cmd_vtysh, ++ "timers basic <0-65535> <0-65535> <0-65535>", ++ "RIPng timers setup\n" ++ "Basic timer\n" ++ "Routing table update timer value in second. Default is 30.\n" ++ "Routing information timeout timer. Default is 180.\n" ++ "Garbage collection timer. Default is 120.\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_spf_node_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D spf node", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Shortest Path First caculation\n" ++ "vertex infomation\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_ipv4_out_cmd_vtysh, ++ "clear ip bgp A.B.C.D ipv4 (unicast|multicast) out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_next_hop_val_cmd_vtysh, ++ "no match ip next-hop (<1-199>|<1300-2699>|WORD)", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match next-hop address of route\n" ++ "IP access-list number\n" ++ "IP access-list number (expanded range)\n" ++ "IP Access-list name\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_default_information_originate_cmd_vtysh, ++ "default-information originate", ++ "Default route information\n" ++ "Distribute default route\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_refresh_timer_val_cmd_vtysh, ++ "no refresh timer <10-1800>", ++ "Adjust refresh parameters\n" ++ "Unset refresh timer\n" ++ "Timer value in seconds\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_abr_type_cmd_vtysh, ++ "no ospf abr-type (cisco|ibm|shortcut)", ++ "Negate a command or set its defaults\n" ++ "OSPF specific commands\n" ++ "Set OSPF ABR type\n" ++ "Alternative ABR, cisco implementation\n" ++ "Alternative ABR, IBM implementation\n" ++ "Shortcut ABR\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_as_path_access_list_cmd_vtysh, ++ "show ip as-path-access-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "List AS path access lists\n" ++ "AS path access list name\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_mask_cmd_vtysh, ++ "ip route A.B.C.D A.B.C.D (A.B.C.D|INTERFACE|null0)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_ipv4_in_cmd_vtysh, ++ "clear ip bgp external ipv4 (unicast|multicast) in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_name_standard_cmd_vtysh, ++ "ip community-list standard WORD (deny|permit) .AA:NN", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Add a standard community-list entry\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbors_peer_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_OSPF6D|VTYSH_BGPD, match_ipv6_address_prefix_list_cmd_vtysh, ++ "match ipv6 address prefix-list WORD", ++ "Match values from routing table\n" ++ "IPv6 information\n" ++ "Match address of route\n" ++ "Match entries of prefix-lists\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authtype_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|)", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp A.B.C.D in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Soft reconfig inbound update\n" ++ "Push out the existing ORF prefix-list\n") ++ ++DEFSH (VTYSH_BGPD, match_aspath_cmd_vtysh, ++ "match as-path WORD", ++ "Match values from routing table\n" ++ "Match BGP AS path list\n" ++ "AS path access-list name\n") ++ ++DEFSH (VTYSH_BGPD, no_ipv6_bgp_network_route_map_cmd_vtysh, ++ "no network X:X::X:X/M route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "IPv6 prefix /\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_prefix_cmd_vtysh, ++ "no ipv6 prefix-list WORD (deny|permit) (X:X::X:X/M|any)", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Any prefix match. Same as \"::0/0 le 128\"\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_advertise_interval_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "advertisement-interval", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Minimum interval between sending BGP routing updates\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged8_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged next-hop as-path med", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Nexthop attribute\n" ++ "As-path attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_BGPD, no_set_origin_val_cmd_vtysh, ++ "no set origin (egp|igp|incomplete)", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP origin code\n" ++ "remote EGP\n" ++ "local IGP\n" ++ "unknown heritage\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_ifname_flags_pref_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE (reject|blackhole) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_mask_natural_cmd_vtysh, ++ "network A.B.C.D", ++ "Specify a network to announce via BGP\n" ++ "Network number\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_remark_cmd_vtysh, ++ "access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD) remark .LINE", ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP extended access list\n" ++ "IP standard access list (expanded range)\n" ++ "IP extended access list (expanded range)\n" ++ "IP zebra access-list\n" ++ "Access list entry comment\n" ++ "Comment up to 100 characters\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_soft_in_cmd_vtysh, ++ "clear ip bgp A.B.C.D soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_dead_interval_cmd_vtysh, ++ "ospf dead-interval <1-65535>", ++ "OSPF interface commands\n" ++ "Interval after which a neighbor is declared dead\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_default_cost_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Set the summary-default cost of a NSSA or stub area\n" ++ "Stub's advertised default summary cost\n") ++ ++DEFSH (VTYSH_ZEBRA, bandwidth_if_cmd_vtysh, ++ "bandwidth <1-10000000>", ++ "Set bandwidth informational parameter\n" ++ "Bandwidth in kilobits\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community4_exact_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_ZEBRA, ipv6_route_flags_cmd_vtysh, ++ "ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_instance_all_soft_cmd_vtysh, ++ "clear bgp view WORD * soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_route_cmd_vtysh, ++ "show bgp view WORD ipv6 X:X::X:X", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Address family\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_RIPNGD, if_ipv6_rmap_cmd_vtysh, ++ "route-map RMAP_NAME (in|out) IFNAME", ++ "Route map set\n" ++ "Route map name\n" ++ "Route map set for input filtering\n" ++ "Route map set for output filtering\n" ++ "Route map interface name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_host_mask_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D A.B.C.D A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "A single source host\n" ++ "Source address\n" ++ "Destination address\n" ++ "Destination Wildcard bits\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D A.B.C.D A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Source address\n" ++ "Source wildcard bits\n" ++ "Destination address\n" ++ "Destination Wildcard bits\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_ipv4_soft_in_cmd_vtysh, ++ "clear ip bgp A.B.C.D ipv4 (unicast|multicast) soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_set_ecommunity_soo_val_cmd_vtysh, ++ "no set extcommunity soo .ASN:nn_or_IP-address:nn", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP extended community attribute\n" ++ "Site-of-Origin extended community\n" ++ "VPN extended community\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_type_metric_routemap_cmd_vtysh, ++ "default-information originate always metric-type (1|2) metric <0-16777214> route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_seq_le_ge_cmd_vtysh, ++ "ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M le <0-32> ge <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_soft_cmd_vtysh, ++ "clear bgp (A.B.C.D|X:X::X:X) soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_prefix_list_cmd_vtysh, ++ "show ipv6 mbgp prefix-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the prefix-list\n" ++ "IPv6 prefix-list name\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_lsa_sub_cmd_vtysh, ++ "debug ospf lsa (generate|flooding|install|refresh)", ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Link State Advertisement\n" ++ "LSA Generation\n" ++ "LSA Flooding\n" ++ "LSA Install/Delete\n" ++ "LSA Refresh\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_neighbor_damp_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X) dampened-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the dampened routes received from neighbor\n") ++ ++DEFSH (VTYSH_RIPD, debug_rip_packet_detail_cmd_vtysh, ++ "debug rip packet (recv|send) detail", ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP packet\n" ++ "RIP receive packet\n" ++ "RIP send packet\n" ++ "Detailed information display\n") ++ ++DEFSH (VTYSH_RIPD, no_key_cmd_vtysh, ++ "no key <0-2147483647>", ++ "Negate a command or set its defaults\n" ++ "Delete a key\n" ++ "Key identifier number\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_mask_summary_only_cmd_vtysh, ++ "aggregate-address A.B.C.D A.B.C.D summary-only", ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_BGPD, no_set_atomic_aggregate_cmd_vtysh, ++ "no set atomic-aggregate", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP atomic aggregate attribute\n" ) ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_soft_cmd_vtysh, ++ "clear bgp <1-65535> soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_unsuppress_map_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "unsuppress-map WORD", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Route-map to selectively unsuppress suppressed routes\n" ++ "Name of route map\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_prefix_cmd_vtysh, ++ "show ip bgp vpnv4 all A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_cmd_vtysh, ++ "show bgp", ++ "Show running system information\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_route_cmd_vtysh, ++ "show ip route", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_message_digest_key_cmd_vtysh, ++ "no ip ospf message-digest-key <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Message digest authentication password (key)\n" ++ "Key ID\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_maximum_prefix_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "maximum-prefix <1-4294967295>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Maximum number of prefix accept from this peer\n" ++ "maximum no. of prefix limit\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_prefix_cmd_vtysh, ++ "show ipv6 mbgp X:X::X:X/M", ++ "Show running system information\n" ++ "IP information\n" ++ "MBGP information\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_seq_ge_cmd_vtysh, ++ "no ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M ge <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_timers_connect_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "timers connect <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "BGP per neighbor timers\n" ++ "BGP connect timer\n" ++ "Connect timer\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_mask_backdoor_cmd_vtysh, ++ "no network A.B.C.D mask A.B.C.D backdoor", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Network mask\n" ++ "Network mask\n" ++ "Specify a BGP backdoor route\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_ge_le_cmd_vtysh, ++ "ipv6 prefix-list WORD (deny|permit) X:X::X:X/M ge <0-128> le <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_authentication_cmd_vtysh, ++ "ip ospf authentication", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Enable authentication on this interface\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_ipv4_soft_in_cmd_vtysh, ++ "clear ip bgp view WORD * ipv4 (unicast|multicast) soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_BGPD, no_set_ip_nexthop_cmd_vtysh, ++ "no set ip next-hop", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Next hop address\n") ++ ++DEFSH (VTYSH_BGPD, match_ipv6_next_hop_cmd_vtysh, ++ "match ipv6 next-hop X:X::X:X", ++ "Match values from routing table\n" ++ "IPv6 information\n" ++ "Match IPv6 next-hop address of route\n" ++ "IPv6 address of next hop\n") ++ ++DEFSH (VTYSH_BGPD, bgp_client_to_client_reflection_cmd_vtysh, ++ "bgp client-to-client reflection", ++ "BGP specific commands\n" ++ "Configure client to client route reflection\n" ++ "reflection of routes allowed\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_duration_day_month_cmd_vtysh, ++ "send-lifetime HH:MM:SS <1-31> MONTH <1993-2035> duration <1-2147483646>", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Duration of the key\n" ++ "Duration seconds\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_cmd_vtysh, ++ "ipv6 prefix-list WORD (deny|permit) (X:X::X:X/M|any)", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Any prefix match. Same as \"::0/0 le 128\"\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_route_cmd_vtysh, ++ "show ip bgp vpnv4 all A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_BGPD, set_community_cmd_vtysh, ++ "set community .AA:NN", ++ "Set values in destination routing protocol\n" ++ "BGP community attribute\n" ++ "Community number in aa:nn format or local-AS|no-advertise|no-export|internet or additive\n") ++ ++DEFSH (VTYSH_BGPD, no_match_aspath_cmd_vtysh, ++ "no match as-path", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP AS path list\n") ++ ++DEFSH (VTYSH_BGPD, no_vpnv4_network_cmd_vtysh, ++ "no network A.B.C.D/M rd ASN:nn_or_IP-address:nn tag WORD", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Specify Route Distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "BGP tag\n" ++ "tag value\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_address_cmd_vtysh, ++ "show ip bgp flap-statistics A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_ZEBRA, no_mpls_labelspace_cmd_vtysh, ++ "no mpls labelspace", ++ "Negate a command or set its defaults\n" ++ "MPLS interface configuration\n" ++ "labelspace\n") { ++ struct interface *ifp; ++ ifp = vty->index; + -+struct rsvpte *rsvpte_get(); -+void rsvpte_init(); -+int rsvpte_router_id_update(struct rsvpte *rsvpte, struct prefix *router_id); -+int do_rsvpte_router_id_update(struct rsvpte *rsvpte, unsigned int router_id); -+void rsvpte_finish(struct rsvpte *rsvpte); + -+int rsvpte_admin_state_start(struct rsvpte *rsvpte); -+int rsvpte_admin_state_finish(struct rsvpte *rsvpte); + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/rsvpte_interface.c zebra-ldp/mplsd/rsvpte_interface.c ---- zebra/mplsd/rsvpte_interface.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/rsvpte_interface.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,75 @@ -+#include -+#include "memory.h" ++ return 0; ++} + -+#include "rsvpte.h" -+#include "rsvpte_interface.h" ++int ++if_config_write (struct vty *vty) ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd_vtysh, ++ "show ip bgp vpnv4 all neighbors A.B.C.D advertised-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbor_damp_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X) dampened-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the dampened routes received from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, bgp_damp_set_cmd_vtysh, ++ "bgp dampening <1-45> <1-20000> <1-20000> <1-255>", ++ "BGP Specific commands\n" ++ "Enable route-flap dampening\n" ++ "Half-life time for the penalty\n" ++ "Value to start reusing a route\n" ++ "Value to start suppressing a route\n" ++ "Maximum duration to suppress a stable route\n") ++ ++DEFSH (VTYSH_BGPD, no_match_community_exact_cmd_vtysh, ++ "no match community (<1-99>|<100-199>|WORD) exact-match", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP community list\n" ++ "Community-list number (standard)\n" ++ "Community-list number (expanded)\n" ++ "Community-list name\n" ++ "Do exact matching of communities\n") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_all_cmd_vtysh, ++ "undebug all bgp", ++ "Disable debugging functions (see also 'debug')\n" ++ "Enable all debugging\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_ism_cmd_vtysh, ++ "no debug ospf ism", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Interface State Machine") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_neighbor_received_prefix_filter_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X) received prefix-filter", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display information received from a BGP neighbor\n" ++ "Display the prefixlist filter\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_next_hop_prefix_list_val_cmd_vtysh, ++ "no match ip next-hop prefix-list WORD", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match next-hop address of route\n" ++ "Match entries of prefix-lists\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_retransmit_interval_cmd_vtysh, ++ "no ip ospf retransmit-interval", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between retransmitting lost link state advertisements\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_filter_list_cmd_vtysh, ++ "show ip bgp flap-statistics filter-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_standard_any_cmd_vtysh, ++ "no access-list (<1-99>|<1300-1999>) (deny|permit) any", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any source host\n") ++ ++DEFSH (VTYSH_RIPD, debug_rip_packet_cmd_vtysh, ++ "debug rip packet", ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP packet\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_mask_flags2_cmd_vtysh, ++ "ip route A.B.C.D A.B.C.D (reject|blackhole)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_paths_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) paths", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Path information\n") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_events_cmd_vtysh, ++ "undebug bgp events", ++ "Disable debugging functions (see also 'debug')\n" ++ "BGP information\n" ++ "BGP events\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_as_path_all_cmd_vtysh, ++ "no ip as-path access-list WORD", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "BGP autonomous system path filter\n" ++ "Specify an access list name\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_packet_all_cmd_vtysh, ++ "no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF packets\n" ++ "OSPF Hello\n" ++ "OSPF Database Description\n" ++ "OSPF Link State Request\n" ++ "OSPF Link State Update\n" ++ "OSPF Link State Acknowledgment\n" ++ "OSPF all packets\n") ++ ++DEFSH (VTYSH_BGPD, ip_extcommunity_list_name_expanded_cmd_vtysh, ++ "ip extcommunity-list expanded WORD (deny|permit) .LINE", ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Specify expanded extcommunity-list\n" ++ "Extended Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_BGPD, no_set_community_cmd_vtysh, ++ "no set community", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP community attribute\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_redistribute_rip_cmd_vtysh, ++ "no redistribute rip", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Routing Information Protocol (RIP)\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, clear_ip_prefix_list_name_cmd_vtysh, ++ "clear ip prefix-list WORD", ++ "Reset functions\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_RIPD, rip_redistribute_type_metric_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf|bgp) metric <0-16>", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_split_horizon_poisoned_reverse_cmd_vtysh, ++ "ip rip split-horizon poisoned-reverse", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n" ++ "With poisoned-reverse\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbor_advertised_route_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_infinite_day_month_cmd_vtysh, ++ "accept-lifetime HH:MM:SS <1-31> MONTH <1993-2035> infinite", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Never expires") ++ ++DEFSH (VTYSH_BGPD, ipv6_mbgp_neighbor_received_routes_cmd_vtysh, ++ "show ipv6 mbgp neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_RIPD, no_debug_rip_zebra_cmd_vtysh, ++ "no debug rip zebra", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP and ZEBRA communication\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_le_ge_cmd_vtysh, ++ "no ip prefix-list WORD (deny|permit) A.B.C.D/M le <0-32> ge <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_weight_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "weight", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Set default weight for routes from this neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_authentication_key_addr_cmd_vtysh, ++ "ip ospf authentication-key AUTH_KEY A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Authentication password (key)\n" ++ "The OSPF password (key)\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, ipv6_mbgp_neighbor_advertised_route_cmd_vtysh, ++ "show ipv6 mbgp neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_set_peer_group_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "peer-group WORD", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Member of the peer-group\n" ++ "peer-group name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_seq_ge_cmd_vtysh, ++ "no ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M ge <0-32>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community2_exact_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_any_cmd_vtysh, ++ "no access-list WORD (deny|permit) any", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP zebra access-list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 10.0.0.0/8\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_authentication_message_digest_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) authentication message-digest", ++ "OSPF area parameters\n" ++ "Enable authentication\n" ++ "Use message-digest authentication\n") ++ ++DEFSH (VTYSH_BGPD, bgp_log_neighbor_changes_cmd_vtysh, ++ "bgp log-neighbor-changes", ++ "BGP specific commands\n" ++ "Log neighbor up/down and reset reason\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_topology_router_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D topology (A.B.C.D|<0-4294967295>|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Shortest Path First tree information\n" ++ "Displays SPF topology table\n" ++ "Specify Router-ID\n" ++ "Specify Router-ID\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_type_metric_cmd_vtysh, ++ "default-information originate metric-type (1|2) metric <0-16777214>", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "OSPF default metric\n" ++ "OSPF metric\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp external in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_RIPNGD, debug_ripng_zebra_cmd_vtysh, ++ "debug ripng zebra", ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng and zebra communication\n") ++ ++DEFSH (VTYSH_BGPD, no_auto_summary_cmd_vtysh, ++ "no auto-summary", ++ "Negate a command or set its defaults\n" ++ "Enable automatic network number summarization\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_address_cmd_vtysh, ++ "ip address A.B.C.D/M", ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IP address (e.g. 10.0.0.1/8)\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_local_as_no_prepend_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "local-as <1-65535> no-prepend", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Specify a local-as number\n" ++ "AS number used as local AS\n" ++ "Do not prepend local-as to updates from ebgp peers\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_timers_val_cmd_vtysh, ++ "no timers basic <0-65535> <0-65535> <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Adjust routing timers\n" ++ "Basic routing protocol update timers\n" ++ "Routing table update timer value in second. Default is 30.\n" ++ "Routing information timeout timer. Default is 180.\n" ++ "Garbage collection timer. Default is 120.\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_offset_list_ifname_cmd_vtysh, ++ "offset-list WORD (in|out) <0-16> IFNAME", ++ "Modify RIPng metric\n" ++ "Access-list name\n" ++ "For incoming updates\n" ++ "For outgoing updates\n" ++ "Metric value\n" ++ "Interface to match\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_ipv4_soft_out_cmd_vtysh, ++ "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_prefix_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn A.B.C.D/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_ge_cmd_vtysh, ++ "ipv6 prefix-list WORD (deny|permit) X:X::X:X/M ge <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_neighbor_received_routes_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_type_adv_router_cmd_vtysh, ++ "show ip ospf database (" "asbr-summary|external|network|router|summary" "" "" ") adv-router A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n" ++ "ASBR summary link states\n" "External link states\n" "Network link states\n" "Router link states\n" "Network summary link states\n" "" "" "" "" ++ "Advertising Router link states\n" ++ "Advertising Router (as an IP address)\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_timers_cmd_vtysh, ++ "no timers bgp", ++ "Negate a command or set its defaults\n" ++ "Adjust routing timers\n" ++ "BGP timers\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_neighbor_routes_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp)", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_RIPD, rip_neighbor_cmd_vtysh, ++ "neighbor A.B.C.D", ++ "Specify a neighbor router\n" ++ "Neighbor address\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_cmd_vtysh, ++ "distance <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_authtype_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n") ++ ++DEFSH (VTYSH_ZEBRA, ip_address_secondary_cmd_vtysh, ++ "ip address A.B.C.D/M secondary", ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IP address (e.g. 10.0.0.1/8)\n" ++ "Secondary IP address\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_soft_in_cmd_vtysh, ++ "clear ip bgp view WORD * soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_log_neighbor_changes_cmd_vtysh, ++ "no bgp log-neighbor-changes", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Log neighbor up/down and reset reason\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_type_cmd_vtysh, ++ "default-information originate metric-type (1|2)", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_access_list_remark_cmd_vtysh, ++ "ipv6 access-list WORD remark .LINE", ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Access list entry comment\n" ++ "Comment up to 100 characters\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_soft_out_cmd_vtysh, ++ "clear bgp ipv6 <1-65535> soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, ip_community_list_cmd_vtysh, ++ "ip community-list WORD (deny|permit) .AA:NN", ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_authentication_string_cmd_vtysh, ++ "no ip rip authentication string", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication string\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_description_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "description .LINE", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Neighbor specific description\n" ++ "Up to 80 characters describing this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_standard_cmd_vtysh, ++ "no ip community-list <1-99> (deny|permit) .AA:NN", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list number (standard)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Community number in aa:nn format or internet|local-AS|no-advertise|no-export\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community3_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_distance_source_access_list_cmd_vtysh, ++ "no distance <1-255> A.B.C.D/M WORD", ++ "Negate a command or set its defaults\n" ++ "Define an administrative distance\n" ++ "Administrative distance\n" ++ "IP source prefix\n" ++ "Access list name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_neighbor_flap_cmd_vtysh, ++ "show ip bgp neighbors (A.B.C.D|X:X::X:X) flap-statistics", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display flap statistics of the routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_dump_bgp_updates_cmd_vtysh, ++ "no dump bgp updates [PATH] [INTERVAL]", ++ "Negate a command or set its defaults\n" ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump BGP updates only\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_detail_cmd_vtysh, ++ "show ipv6 prefix-list detail", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Detail of prefix lists\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged4_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged med (as-path|next-hop)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Med attribute\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_soft_out_cmd_vtysh, ++ "clear ip bgp external soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_access_list_cmd_vtysh, ++ "no ipv6 access-list WORD (deny|permit) X:X::X:X/M", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 3ffe:506::/32\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_maximum_prefix_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "maximum-prefix", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Maximum number of prefix accept from this peer\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_cmd_vtysh, ++ "clear bgp *", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_seq_ge_le_cmd_vtysh, ++ "ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M ge <0-32> le <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community2_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbor_flap_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X) flap-statistics", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display flap statistics of the routes learned from neighbor\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_route_cmd_vtysh, ++ "show ipv6 ospf6 route", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Routing table\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, neighbor_capability_route_refresh_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "capability route-refresh", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Advertise capability to the peer\n" ++ "Advertise route-refresh capability to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_cmd_vtysh, ++ "show ipv6 mbgp", ++ "Show running system information\n" ++ "IP information\n" ++ "MBGP information\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_param2_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_as_set_cmd_vtysh, ++ "no aggregate-address A.B.C.D/M as-set", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_peer_group_out_cmd_vtysh, ++ "clear bgp peer-group WORD out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_extcommunity_list_standard_cmd_vtysh, ++ "no ip extcommunity-list <1-99> (deny|permit) .AA:NN", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Extended Community list number (standard)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "Extended community attribute in 'rt aa:nn_or_IPaddr:nn' OR 'soo aa:nn_or_IPaddr:nn' format\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_soft_out_cmd_vtysh, ++ "clear ip bgp * soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_flap_statistics_cmd_vtysh, ++ "show ip bgp flap-statistics", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display flap statistics of routes\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_address_secondary_cmd_vtysh, ++ "no ip address A.B.C.D/M secondary", ++ "Negate a command or set its defaults\n" ++ "Interface Internet Protocol config commands\n" ++ "Set the IP address of an interface\n" ++ "IP address (e.g. 10.0.0.1/8)\n" ++ "Secondary IP address\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_summary_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn summary", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_allowas_in_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "allowas-in", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "allow local ASN appears in aspath attribute\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_summary_cmd_vtysh, ++ "show bgp summary", ++ "Show running system information\n" ++ "BGP information\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_database_type_id_adv_router_dump_cmd_vtysh, ++ "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX) (A.B.C.D|*) (A.B.C.D|*) (dump|detail|)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "LSA Database\n" ++ "Router-LSA\n" ++ "Network-LSA\n" ++ "AS-External-LSA\n" ++ "Intra-Area-Prefix-LSA\n" ++ "Inter-Area-Router-LSA\n" ++ "Inter-Area-Prefix-LSA\n" ++ "Link-LSA\n" ++ "All LS Type\n" ++ "Specify LS Type by Hex\n" ++ "Link State ID\n" ++ "All Link State ID\n" ++ "Advertising Router\n" ++ "All Advertising Router\n" ++ "Dump raw LSA data in Hex\n" ++ "show detail of LSAs\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_stub_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) stub", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Configure OSPF area as stub\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged7_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged next-hop med as-path", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Nexthop attribute\n" ++ "Med attribute\n" ++ "As-path attribute\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_route_cmd_vtysh, ++ "show bgp X:X::X:X", ++ "Show running system information\n" ++ "BGP information\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_range_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_out_cmd_vtysh, ++ "clear bgp <1-65535> out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_hello_interval_cmd_vtysh, ++ "no ip ospf hello-interval", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between HELLO packets\n") ++ ++DEFSH (VTYSH_RIPD, no_distribute_list_cmd_vtysh, ++ "no distribute-list WORD (in|out) WORD", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_network_cmd_vtysh, ++ "no ip ospf network", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Network type\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_ifname_pref_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M X:X::X:X INTERFACE <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authtype_md5_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) " ++ "(message-digest-key|) <1-255> md5 KEY", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" ++ "Message digest authentication password (key)\n" "dummy string \n" "Key ID\n" "Use MD5 algorithm\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_RIPD, no_distribute_list_prefix_all_cmd_vtysh, ++ "no distribute-list prefix WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_hello_interval_cmd_vtysh, ++ "no ospf hello-interval", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Time between HELLO packets\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_advertise_interval_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "advertisement-interval <0-600>", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Minimum interval between sending BGP routing updates\n" ++ "time in seconds\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_filter_cmd_vtysh, ++ "no debug bgp filters", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP filters\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_soft_in_cmd_vtysh, ++ "clear bgp * soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_area_range_cmd_vtysh, ++ "area A.B.C.D range X:X::X:X/M", ++ "OSPFv3 area parameters\n" ++ "OSPFv3 area ID in IPv4 address format\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "IPv6 address range\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_md5_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(message-digest-key|) <1-255> md5 KEY", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Message digest authentication password (key)\n" "dummy string \n" "Key ID\n" "Use MD5 algorithm\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_database_type_id_self_cmd_vtysh, ++ "show ip ospf database (" "asbr-summary|external|network|router|summary" "" "" ") A.B.C.D (self-originate|)", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Database summary\n" ++ "ASBR summary link states\n" "External link states\n" "Network link states\n" "Router link states\n" "Network summary link states\n" "" "" "" "" ++ "Link State ID (as an IP address)\n" ++ "Self-originated link states\n" ++ "\n") ++ ++DEFSH (VTYSH_BGPD, bgp_timers_cmd_vtysh, ++ "timers bgp <0-65535> <0-65535>", ++ "Adjust routing timers\n" ++ "BGP timers\n" ++ "Keepalive interval\n" ++ "Holdtime\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_packet_send_recv_detail_cmd_vtysh, ++ "no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) (detail|)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions\n" ++ "OSPF information\n" ++ "OSPF packets\n" ++ "OSPF Hello\n" ++ "OSPF Database Description\n" ++ "OSPF Link State Request\n" ++ "OSPF Link State Update\n" ++ "OSPF Link State Acknowledgment\n" ++ "OSPF all packets\n" ++ "Packet sent\n" ++ "Packet received\n" ++ "Detail Information\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_passive_interface_cmd_vtysh, ++ "passive-interface IFNAME", ++ "Suppress routing updates on an interface\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_receive_version_2_cmd_vtysh, ++ "ip rip receive version 2 1", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement reception\n" ++ "Version control\n" ++ "RIP version 2\n" ++ "RIP version 1\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_lsa_cmd_vtysh, ++ "no debug ospf lsa", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Link State Advertisement\n") ++ ++DEFSH (VTYSH_ZEBRA, mpls_labelspace_cmd_vtysh, ++ "mpls labelspace <1-255>", ++ "MPLS interface configuration\n" ++ "labelspace\n" ++ "labelspace number\n") { ++ struct interface *ifp; + -+#include "mpls.h" -+#include "mpls_interface.h" ++ ifp = vty->index; ++ ifp->mpls_labelspace = atoi(argv[0]) ++ ++DEFSH (VTYSH_BGPD, no_neighbor_dont_capability_negotiate_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "dont-capability-negotiate", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Do not perform capability negotiation\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_cmd_vtysh, ++ "ip route A.B.C.D/M (A.B.C.D|INTERFACE|null0)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Null interface\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_neighbor_routes_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors A.B.C.D routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_set_ecommunity_rt_cmd_vtysh, ++ "no set extcommunity rt", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP extended community attribute\n" ++ "Route Target extened communityt\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_access_list_any_cmd_vtysh, ++ "ipv6 access-list WORD (deny|permit) any", ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any prefixi to match\n") ++ ++DEFSH (VTYSH_RIPD, distribute_list_prefix_all_cmd_vtysh, ++ "distribute-list prefix WORD (in|out)", ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_local_as_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "local-as <1-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Specify a local-as number\n" ++ "AS number used as local AS\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_seq_le_ge_cmd_vtysh, ++ "no ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) X:X::X:X/M le <0-128> ge <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_allowas_in_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "allowas-in", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Accept as-path with my AS present in it\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_access_list_cmd_vtysh, ++ "show ip access-list", ++ "Show running system information\n" ++ "IP information\n" ++ "List IP access lists\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_area_vlink_param1_cmd_vtysh, ++ "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval)", ++ "Negate a command or set its defaults\n" ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_address_cmd_vtysh, ++ "no match ip address", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match address of route\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_soft_in_cmd_vtysh, ++ "clear ip bgp <1-65535> soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_ipv4_out_cmd_vtysh, ++ "clear ip bgp <1-65535> ipv4 (unicast|multicast) out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_ipv4_in_cmd_vtysh, ++ "clear ip bgp peer-group WORD ipv4 (unicast|multicast) in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_cmd_vtysh, ++ "clear bgp external", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n") ++ ++DEFSH (VTYSH_BGPD, no_set_aggregator_as_val_cmd_vtysh, ++ "no set aggregator as <1-65535> A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP aggregator attribute\n" ++ "AS number of aggregator\n" ++ "AS number\n" ++ "IP address of aggregator\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_route_server_client_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "route-server-client", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Configure a neighbor as Route Server client\n") ++ ++DEFSH (VTYSH_BGPD, no_set_ipv6_nexthop_global_cmd_vtysh, ++ "no set ipv6 next-hop global", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "IPv6 information\n" ++ "IPv6 next-hop address\n" ++ "IPv6 global address\n") ++ ++DEFSH (VTYSH_ZEBRA, no_label_map_cmd_vtysh, ++ "no label-map FWD ", ++ "Negate a command or set its defaults\n" ++ "Remove a static incoming label-map (ILM)\n" ++ "Type of label \n" ++ "Value of the label gen = >16, atm = vpi/vci, fr = DLCI\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community_list_exact_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community-list WORD exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n" ++ "Exact match of the communities\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_compatible_rfc1583_cmd_vtysh, ++ "compatible rfc1583", ++ "OSPF compatibility list\n" ++ "compatible with RFC 1583\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_soft_out_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPF6D, show_debug_ospf6_cmd_vtysh, ++ "show debugging ospf6", ++ "Show running system information\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Open Shortest Path First (OSPF) for IPv6\n") ++ ++DEFSH (VTYSH_RIPD, rip_passive_interface_cmd_vtysh, ++ "passive-interface (IFNAME|default)", ++ "Suppress routing updates on an interface\n" ++ "Interface name\n" ++ "default for all interfaces\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_neighbors_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn neighbors", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_events_cmd_vtysh, ++ "no debug bgp events", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "BGP events\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_send_community_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "send-community", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Send Community attribute to this neighbor\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_distribute_list_out_cmd_vtysh, ++ "no distribute-list WORD out (kernel|connected|static|rip|bgp)", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter outgoing routing updates\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbors_cmd_vtysh, ++ "show bgp neighbors", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_description_cmd_vtysh, ++ "no ipv6 prefix-list WORD description", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Prefix-list specific description\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_ipv4_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp * ipv4 (unicast|multicast) in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_cmd_vtysh, ++ "clear bgp ipv6 external", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast)", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_redistribute_ripng_cmd_vtysh, ++ "redistribute ripng", ++ "Redistribute information from another routing protocol\n" ++ "RIPng route\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_update_source_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "update-source", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Source of routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_soft_reconfiguration_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "soft-reconfiguration inbound", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Per neighbor soft reconfiguration\n" ++ "Allow inbound soft reconfiguration for this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv6_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf6|ripng|static)", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_ipv4_soft_cmd_vtysh, ++ "clear ip bgp view WORD * ipv4 (unicast|multicast) soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_detail_name_cmd_vtysh, ++ "show ipv6 prefix-list detail WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Detail of prefix lists\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbor_received_routes_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_in_prefix_filter_cmd_vtysh, ++ "clear ip bgp <1-65535> in prefix-filter", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_range_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged5_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged as-path next-hop med", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_BGPD, bgp_cluster_id_cmd_vtysh, ++ "bgp cluster-id A.B.C.D", ++ "BGP information\n" ++ "Configure Route-Reflector Cluster-id\n" ++ "Route-Reflector Cluster-id in IP address format\n") ++ ++DEFSH (VTYSH_OSPF6D, redistribute_ospf6_cmd_vtysh, ++ "redistribute ospf6", ++ "Redistribute control\n" ++ "OSPF6 route\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_as_in_cmd_vtysh, ++ "clear bgp ipv6 <1-65535> in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_access_list_exact_cmd_vtysh, ++ "no ipv6 access-list WORD (deny|permit) X:X::X:X/M exact-match", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 3ffe:506::/32\n" ++ "Exact match of the prefixes\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community3_exact_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_name_cmd_vtysh, ++ "show ip prefix-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_soft_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, dump_bgp_updates_interval_cmd_vtysh, ++ "dump bgp updates PATH INTERVAL", ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump BGP updates only\n" ++ "Output filename\n" ++ "Interval of output\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_allowas_in_arg_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "allowas-in <1-10>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Accept as-path with my AS present in it\n" ++ "Number of occurances of AS number\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_community_list_exact_cmd_vtysh, ++ "show bgp community-list WORD exact-match", ++ "Show running system information\n" ++ "BGP information\n" ++ "Display routes matching the community-list\n" ++ "community-list name\n" ++ "Exact match of the communities\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_range_advertise_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "OSPF area range for route advertise (default)\n" ++ "Area range prefix\n" ++ "Advertise this range (default)\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_remote_as_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "remote-as <1-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Specify a BGP neighbor\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_RIPNGD, ipv6_distribute_list_cmd_vtysh, ++ "distribute-list WORD (in|out) WORD", ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_ipv4_soft_in_cmd_vtysh, ++ "clear ip bgp * ipv4 (unicast|multicast) soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_mbgp_neighbor_routes_cmd_vtysh, ++ "show ipv6 mbgp neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_prefix_list_le_ge_cmd_vtysh, ++ "ipv6 prefix-list WORD (deny|permit) X:X::X:X/M le <0-128> ge <0-128>", ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, no_set_weight_val_cmd_vtysh, ++ "no set weight <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP weight for routing table\n" ++ "Weight value\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_router_id_cmd_vtysh, ++ "router-id ROUTER_ID", ++ "Configure ospf Router-ID.\n" ++ "specify by IPv4 address notation(e.g. 0.0.0.0)\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_flags_distance2_cmd_vtysh, ++ "no ip route A.B.C.D/M (reject|blackhole) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_port_val_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "port <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Neighbor's BGP port\n" ++ "TCP port number\n") ++ ++DEFSH (VTYSH_BGPD, dump_bgp_updates_cmd_vtysh, ++ "dump bgp updates PATH", ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump BGP updates only\n" ++ "Output filename\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_seq_cmd_vtysh, ++ "no ipv6 prefix-list WORD seq <1-4294967295> (deny|permit) (X:X::X:X/M|any)", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Any prefix match. Same as \"::0/0 le 128\"\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_ipv6_neighbor_routes_cmd_vtysh, ++ "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X) routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "BGP view name\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display routes learned from neighbor\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_transmitdelay_cmd_vtysh, ++ "ipv6 ospf6 transmit-delay TRANSMITDELAY", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Link state transmit delay\n" ++ "<1-65535> Seconds\n" ++ ) ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD, match_interface_cmd_vtysh, ++ "match interface WORD", ++ "Match values from routing table\n" ++ "Match first hop interface of route\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_split_horizon_poisoned_reverse_cmd_vtysh, ++ "no ip rip split-horizon poisoned-reverse", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n" ++ "With poisoned-reverse\n") ++ ++DEFSH (VTYSH_BGPD, no_debug_bgp_normal_cmd_vtysh, ++ "no debug bgp", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_hellointerval_cmd_vtysh, ++ "ipv6 ospf6 hello-interval HELLO_INTERVAL", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Time between HELLO packets\n" ++ "<1-65535> Seconds\n" ++ ) ++ ++DEFSH (VTYSH_RIPD, rip_redistribute_type_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf|bgp) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, dump_bgp_all_cmd_vtysh, ++ "dump bgp all PATH", ++ "Dump packet\n" ++ "BGP packet dump\n" ++ "Dump all BGP packets\n" ++ "Output filename\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_address_prefix_list_cmd_vtysh, ++ "no match ip address prefix-list", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match address of route\n" ++ "Match entries of prefix-lists\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged2_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged as-path (next-hop|med)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_mask_cmd_vtysh, ++ "network A.B.C.D mask A.B.C.D", ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Network mask\n" ++ "Network mask\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_prefix_cmd_vtysh, ++ "show bgp view WORD X:X::X:X/M", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "IPv6 prefix /\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community3_exact_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_cmd_vtysh, ++ "clear bgp ipv6 *", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n") ++ ++DEFSH (VTYSH_OSPF6D, show_version_ospf6_cmd_vtysh, ++ "show version ospf6", ++ "Show running system information\n" ++ "Displays ospf6d version\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_ebgp_multihop_ttl_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "ebgp-multihop <1-255>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Allow EBGP neighbors not on directly connected networks\n" ++ "maximum hop count\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_peer_group_cmd_vtysh, ++ "no neighbor WORD peer-group", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor tag\n" ++ "Configure peer-group\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_override_capability_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "override-capability", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Override capability negotiation result\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_filter_list_cmd_vtysh, ++ "show ip bgp filter-list WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes conforming to the filter-list\n" ++ "Regular expression access list name\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_redistribute_routemap_cmd_vtysh, ++ "redistribute (static|kernel|connected|ripng|bgp) route-map WORD", ++ "Redistribute\n" ++ "Static routes\n" ++ "Kernel route\n" ++ "Connected route\n" ++ "RIPng route\n" ++ "BGP route\n" ++ "Route map reference\n" ++ "Route map name\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_inter_external_intra_cmd_vtysh, ++ "distance ospf inter-area <1-255> external <1-255> intra-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n" ++ "External routes\n" ++ "Distance for external routes\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_routemap_no_set_forwarding_cmd_vtysh, ++ "no set forwarding-address X:X::X:X", ++ "Negate a command or set its defaults\n" ++ "Set value\n" ++ "Forwarding Address\n" ++ "IPv6 Address\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_soft_cmd_vtysh, ++ "clear ip bgp * soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_duration_month_day_cmd_vtysh, ++ "accept-lifetime HH:MM:SS MONTH <1-31> <1993-2035> duration <1-2147483646>", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Duration of the key\n" ++ "Duration seconds\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_default_metric_val_cmd_vtysh, ++ "no default-metric <1-16>", ++ "Negate a command or set its defaults\n" ++ "Set a metric of redistribute routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_mask_flags_distance2_cmd_vtysh, ++ "ip route A.B.C.D A.B.C.D (reject|blackhole) <1-255>", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Distance value for this route\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_soft_cmd_vtysh, ++ "clear ip bgp view WORD * soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, bgp_bestpath_compare_router_id_cmd_vtysh, ++ "bgp bestpath compare-routerid", ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "Compare router-id for identical EBGP paths\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_attr_unchanged3_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged next-hop (as-path|med)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Nexthop attribute\n" ++ "As-path attribute\n" ++ "Med attribute\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_authentication_key_addr_cmd_vtysh, ++ "no ip ospf authentication-key A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Authentication password (key)\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_le_cmd_vtysh, ++ "ip prefix-list WORD (deny|permit) A.B.C.D/M le <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_fast_external_failover_cmd_vtysh, ++ "no bgp fast-external-failover", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Immediately reset session if a link to a directly connected external peer goes down\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_soft_out_cmd_vtysh, ++ "clear ip bgp view WORD * soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_paths_cmd_vtysh, ++ "show ip bgp paths", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Path information\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_metric_type_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> metric-type (1|2)", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric for redistributed routes\n" ++ "OSPF default metric\n" ++ "OSPF exterior metric type for redistributed routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n") ++ ++DEFSH (VTYSH_ZEBRA, linkdetect_cmd_vtysh, ++ "link-detect", ++ "Enable link detection on interface\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_all_cmd_vtysh, ++ "show ip bgp vpnv4 all", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information about all VPNv4 NLRIs\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_redistribute_type_metric_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf6|bgp) metric <0-16>", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_RIPD, rip_distance_cmd_vtysh, ++ "distance <1-255>", ++ "Administrative distance\n" ++ "Distance value\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_soft_cmd_vtysh, ++ "clear ip bgp peer-group WORD soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_neighbor_cmd_vtysh, ++ "show ipv6 ospf6 neighbor", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Neighbor list\n" ++ ) ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_duration_day_month_cmd_vtysh, ++ "accept-lifetime HH:MM:SS <1-31> MONTH <1993-2035> duration <1-2147483646>", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Duration of the key\n" ++ "Duration seconds\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbors_peer_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_ZEBRA, label_map_pop_cmd_vtysh, ++ "label-map POP", ++ "Create a static incoming label-map (ILM)\n" ++ "Type of label \n" ++ "Value of the label gen = >16, atm = vpi/vci, fr = DLCI\n" ++ "Pop and lookup\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_confederation_identifier_cmd_vtysh, ++ "no bgp confederation identifier", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "AS confederation parameters\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_external_inter_intra_cmd_vtysh, ++ "distance ospf external <1-255> inter-area <1-255> intra-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "External routes\n" ++ "Distance for external routes\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv6_metric_rmap_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf6|ripng|static) metric <0-4294967295> route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_ipv4_soft_in_cmd_vtysh, ++ "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_type_cmd_vtysh, ++ "default-information originate always metric-type (1|2)", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_name_all_cmd_vtysh, ++ "no ip community-list (standard|expanded) WORD", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Add a standard community-list entry\n" ++ "Add an expanded community-list entry\n" ++ "Community list name\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_config_type_cmd_vtysh, ++ "no bgp config-type", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Display configuration type\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_route_cmd_vtysh, ++ "show bgp ipv6 X:X::X:X", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_route_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn A.B.C.D", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_out_cmd_vtysh, ++ "clear ip bgp A.B.C.D out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP neighbor address to clear\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_retransmitinterval_cmd_vtysh, ++ "ipv6 ospf6 retransmit-interval RXMTINTERVAL", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Time between retransmitting lost link state advertisements\n" ++ "<1-65535> Seconds\n" ++ ) ++ ++DEFSH (VTYSH_RIPD, no_rip_network_cmd_vtysh, ++ "no network (A.B.C.D/M|WORD)", ++ "Negate a command or set its defaults\n" ++ "Enable routing on an IP network\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_mask_backdoor_cmd_vtysh, ++ "network A.B.C.D mask A.B.C.D backdoor", ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Network mask\n" ++ "Network mask\n" ++ "Specify a BGP backdoor route\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_mask_as_set_cmd_vtysh, ++ "aggregate-address A.B.C.D A.B.C.D as-set", ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_capability_dynamic_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "capability dynamic", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Advertise capability to the peer\n" ++ "Advertise dynamic capability to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_ipv4_soft_out_cmd_vtysh, ++ "clear ip bgp view WORD * ipv4 (unicast|multicast) soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_peer_group_remote_as_cmd_vtysh, ++ "no neighbor WORD remote-as <1-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor tag\n" ++ "Specify a BGP neighbor\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_external_intra_inter_cmd_vtysh, ++ "distance ospf external <1-255> intra-area <1-255> inter-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "External routes\n" ++ "Distance for external routes\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_exact_cmd_vtysh, ++ "no access-list WORD (deny|permit) A.B.C.D/M exact-match", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP zebra access-list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 10.0.0.0/8\n" ++ "Exact match of the prefixes\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community2_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_flags_pref_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) (reject|blackhole) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_ge_le_cmd_vtysh, ++ "no ipv6 prefix-list WORD (deny|permit) X:X::X:X/M ge <0-128> le <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_topology_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D topology", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Shortest Path First tree information\n" ++ "Displays SPF topology table\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv4_metric_rmap_cmd_vtysh, ++ "redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295> route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_priority_addr_cmd_vtysh, ++ "ip ospf priority <0-255> A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Router priority\n" ++ "Priority\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_route_map_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) route-map WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the route-map\n" ++ "A route-map to match on\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_send_version_num_cmd_vtysh, ++ "no ip rip send version (1|2)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement transmission\n" ++ "Version control\n" ++ "Version 1\n" ++ "Version 2\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_metric_type_cmd_vtysh, ++ "default-information originate always metric <0-16777214> metric-type (1|2)", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n") ++ ++DEFSH (VTYSH_OSPFD|VTYSH_OSPF6D, set_metric_type_cmd_vtysh, ++ "set metric-type (type-1|type-2)", ++ "Set values in destination routing protocol\n" ++ "Type of metric for destination routing protocol\n" ++ "OSPF[6] external type 1 metric\n" ++ "OSPF[6] external type 2 metric\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_cmd_vtysh, ++ "ip prefix-list WORD (deny|permit) (A.B.C.D/M|any)", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Any prefix match. Same as \"0.0.0.0/0 le 32\"\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv4_metric_cmd_vtysh, ++ "redistribute (connected|kernel|ospf|rip|static) metric <0-4294967295>", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_backdoor_cmd_vtysh, ++ "no network A.B.C.D/M backdoor", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Specify a BGP backdoor route\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) ", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n") ++ ++DEFSH (VTYSH_ZEBRA, show_interface_cmd_vtysh, ++ "show interface [IFNAME]", ++ "Show running system information\n" ++ "Interface status and configuration\n" ++ "Inteface name\n") ++ ++DEFSH (VTYSH_RIPD, rip_redistribute_type_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf|bgp)", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_next_hop_cmd_vtysh, ++ "no match ip next-hop", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match next-hop address of route\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_route_cmd_vtysh, ++ "no route IPV6ADDR", ++ "Negate a command or set its defaults\n" ++ "Static route setup\n" ++ "Delete static RIPng route announcement\n") ++ ++DEFSH (VTYSH_BGPD, set_aspath_prepend_cmd_vtysh, ++ "set as-path prepend .<1-65535>", ++ "Set values in destination routing protocol\n" ++ "Prepend string for a BGP AS-path attribute\n" ++ "Prepend to the as-path\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_maximum_prefix_val2_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "maximum-prefix <1-4294967295> warning-only", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Maximum number of prefix accept from this peer\n" ++ "maximum no. of prefix limit\n" ++ "Only give warning message when limit is exceeded\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_BGPD, match_metric_cmd_vtysh, ++ "match metric <0-4294967295>", ++ "Match values from routing table\n" ++ "Match metric of route\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_prefix_list_cmd_vtysh, ++ "show ipv6 bgp prefix-list WORD", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the prefix-list\n" ++ "IPv6 prefix-list name\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_route_supernets_cmd_vtysh, ++ "show ip route supernets-only", ++ "Show running system information\n" ++ "IP information\n" ++ "IP routing table\n" ++ "Show supernet entries only\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_interface_cmd_vtysh, ++ "show ip ospf interface [INTERFACE]", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n" ++ "Interface information\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_interface_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "interface WORD", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Interface\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, set_weight_cmd_vtysh, ++ "set weight <0-4294967295>", ++ "Set values in destination routing protocol\n" ++ "BGP weight for routing table\n" ++ "Weight value\n") ++ ++DEFSH (VTYSH_RIPD, debug_rip_events_cmd_vtysh, ++ "debug rip events", ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP events\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_any_mask_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip any A.B.C.D A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Any source host\n" ++ "Destination address\n" ++ "Destination Wildcard bits\n") ++ ++DEFSH (VTYSH_BGPD, no_match_origin_cmd_vtysh, ++ "no match origin", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "BGP origin code\n") ++ ++DEFSH (VTYSH_RIPD, distribute_list_all_cmd_vtysh, ++ "distribute-list WORD (in|out)", ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_prefix_cmd_vtysh, ++ "show ipv6 bgp X:X::X:X/M", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_summary_cmd_vtysh, ++ "show ipv6 prefix-list summary", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Summary of prefix lists\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_neighbors_peer_cmd_vtysh, ++ "show bgp neighbors (A.B.C.D|X:X::X:X)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n") ++ ++DEFSH (VTYSH_RIPD, no_distribute_list_all_cmd_vtysh, ++ "no distribute-list WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_route_cmd_vtysh, ++ "show ipv6 bgp X:X::X:X", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Network in the BGP routing table to display\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_authentication_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) authentication", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Enable authentication\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_intra_external_inter_cmd_vtysh, ++ "distance ospf intra-area <1-255> external <1-255> inter-area <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n" ++ "External routes\n" ++ "Distance for external routes\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_day_month_month_day_cmd_vtysh, ++ "send-lifetime HH:MM:SS <1-31> MONTH <1993-2035> HH:MM:SS MONTH <1-31> <1993-2035>", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Time to expire\n" ++ "Month of the year to expire\n" ++ "Day of th month to expire\n" ++ "Year to expire\n") ++ ++DEFSH (VTYSH_BGPD, set_aggregator_as_cmd_vtysh, ++ "set aggregator as <1-65535> A.B.C.D", ++ "Set values in destination routing protocol\n" ++ "BGP aggregator attribute\n" ++ "AS number of aggregator\n" ++ "AS number\n" ++ "IP address of aggregator\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_strict_capability_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "strict-capability-match", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Strict capability negotiation match\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_mask_host_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D host A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Source address\n" ++ "Source wildcard bits\n" ++ "A single destination host\n" ++ "Destination address\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_prefix_first_match_cmd_vtysh, ++ "show ip prefix-list WORD A.B.C.D/M first-match", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "First matched prefix\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_packet_send_recv_cmd_vtysh, ++ "no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv|detail)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions\n" ++ "OSPF information\n" ++ "OSPF packets\n" ++ "OSPF Hello\n" ++ "OSPF Database Description\n" ++ "OSPF Link State Request\n" ++ "OSPF Link State Update\n" ++ "OSPF Link State Acknowledgment\n" ++ "OSPF all packets\n" ++ "Packet sent\n" ++ "Packet received\n" ++ "Detail Information\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv6_cmd_vtysh, ++ "redistribute (connected|kernel|ospf6|ripng|static)", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_route_reflector_client_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "route-reflector-client", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Configure a neighbor as Route Reflector client\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_port_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "port <0-65535>", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Neighbor's BGP port\n" ++ "TCP port number\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_lsa_sub_cmd_vtysh, ++ "no debug ospf lsa (generate|flooding|install|refresh)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Link State Advertisement\n" ++ "LSA Generation\n" ++ "LSA Flooding\n" ++ "LSA Install/Delete\n" ++ "LSA Refres\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_remove_private_as_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "remove-private-AS", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Remove private AS number from outbound updates\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_prefix_cmd_vtysh, ++ "no ip prefix-list WORD (deny|permit) (A.B.C.D/M|any)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Any prefix match. Same as \"0.0.0.0/0 le 32\"\n") ++ ++DEFSH (VTYSH_OSPF6D, debug_ospf6_damp_cmd_vtysh, ++ "debug ospf6 damp", ++ "Debugging functions (see also 'undebug')\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Flap-dampening information\n" ++ ) ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, no_ipv6_prefix_list_ge_cmd_vtysh, ++ "no ipv6 prefix-list WORD (deny|permit) X:X::X:X/M ge <0-128>", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_auto_cost_reference_bandwidth_cmd_vtysh, ++ "no auto-cost reference-bandwidth", ++ "Negate a command or set its defaults\n" ++ "Calculate OSPF interface cost according to bandwidth\n" ++ "Use reference bandwidth method to assign OSPF cost\n") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_filter_cmd_vtysh, ++ "undebug bgp filters", ++ "Disable debugging functions (see also 'debug')\n" ++ "BGP information\n" ++ "BGP filters\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_out_cmd_vtysh, ++ "clear bgp ipv6 * out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_route_cmd_vtysh, ++ "route IPV6ADDR", ++ "Static route setup\n" ++ "Set static RIPng route announcement\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ipv6_route_pref_cmd_vtysh, ++ "no ipv6 route X:X::X:X/M (X:X::X:X|INTERFACE) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "IPv6 gateway address\n" ++ "IPv6 gateway interface name\n" ++ "Distance value for this prefix\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_access_list_cmd_vtysh, ++ "show ipv6 access-list", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "List IPv6 access lists\n") ++ ++DEFSH (VTYSH_OSPFD, show_ip_ospf_cmd_vtysh, ++ "show ip ospf", ++ "Show running system information\n" ++ "IP information\n" ++ "OSPF information\n") ++ ++DEFSH (VTYSH_BGPD, bgp_network_mask_route_map_cmd_vtysh, ++ "network A.B.C.D mask A.B.C.D route-map WORD", ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Network mask\n" ++ "Network mask\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_extcommunity_list_expanded_cmd_vtysh, ++ "no ip extcommunity-list <100-199> (deny|permit) .LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a extended community list entry\n" ++ "Extended Community list number (expanded)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_port_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "port", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Neighbor's BGP port\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_cmd_vtysh, ++ "clear bgp ipv6 (A.B.C.D|X:X::X:X)", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "BGP neighbor address to clear\n" ++ "BGP IPv6 neighbor to clear\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ipv6_route_addr_cmd_vtysh, ++ "show ipv6 route X:X::X:X", ++ "Show running system information\n" ++ "IP information\n" ++ "IPv6 routing table\n" ++ "IPv6 Address\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_send_community_type_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "send-community (both|extended|standard)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Send Community attribute to this neighbor\n" ++ "Send Standard and Extended Community attributes\n" ++ "Send Extended Community attributes\n" ++ "Send Standard Community attributes\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_hello_interval_addr_cmd_vtysh, ++ "no ip ospf hello-interval A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between HELLO packets\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_default_originate_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "default-originate", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Originate default route to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_default_originate_rmap_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "default-originate route-map WORD", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Originate default route to this neighbor\n" ++ "Route-map to specify criteria to originate default\n" ++ "route-map name\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_cmd_vtysh, ++ "show ipv6 bgp", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, clear_ipv6_prefix_list_name_prefix_cmd_vtysh, ++ "clear ipv6 prefix-list WORD X:X::X:X/M", ++ "Reset functions\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n") ++ ++DEFSH (VTYSH_OSPFD, debug_ospf_packet_send_recv_detail_cmd_vtysh, ++ "debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) (detail|)", ++ "Debugging functions\n" ++ "OSPF information\n" ++ "OSPF packets\n" ++ "OSPF Hello\n" ++ "OSPF Database Description\n" ++ "OSPF Link State Request\n" ++ "OSPF Link State Update\n" ++ "OSPF Link State Acknowledgment\n" ++ "OSPF all packets\n" ++ "Packet sent\n" ++ "Packet received\n" ++ "Detail Information\n") ++ ++DEFSH (VTYSH_RIPD, no_rip_redistribute_type_routemap_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf|bgp) route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPF)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_cmd_vtysh, ++ "show ipv6 ospf6", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_cmd_vtysh, ++ "show ip prefix-list", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_redistribute_type_cmd_vtysh, ++ "no redistribute (kernel|connected|static|ospf6|bgp)", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_forwarding_cmd_vtysh, ++ "ip forwarding", ++ "IP information\n" ++ "Turn on IP forwarding") ++ ++DEFSH (VTYSH_BGPD, show_bgp_prefix_cmd_vtysh, ++ "show bgp X:X::X:X/M", ++ "Show running system information\n" ++ "BGP information\n" ++ "IPv6 prefix /\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_param1_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Time between HELLO packets\n" "Time between retransmitting lost link state advertisements\n" "Link state transmit delay\n" "Interval after which a neighbor is declared dead\n" "Seconds\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_receive_version_cmd_vtysh, ++ "no ip rip receive version", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement reception\n" ++ "Version control\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_unsuppress_map_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "unsuppress-map WORD", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Route-map to selectively unsuppress suppressed routes\n" ++ "Name of route map\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ipv6_distribute_list_prefix_cmd_vtysh, ++ "no distribute-list prefix WORD (in|out) WORD", ++ "Negate a command or set its defaults\n" ++ "Filter networks in routing updates\n" ++ "Filter prefixes in routing updates\n" ++ "Name of an IP prefix-list\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_ipv4_out_cmd_vtysh, ++ "clear ip bgp peer-group WORD ipv4 (unicast|multicast) out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_mask_host_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip A.B.C.D A.B.C.D host A.B.C.D", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Source address\n" ++ "Source wildcard bits\n" ++ "A single destination host\n" ++ "Destination address\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_redistribute_type_metric_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf6|bgp) metric <0-16> route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Metric\n" ++ "Metric value\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ripng_network_cmd_vtysh, ++ "no network IF_OR_ADDR", ++ "Negate a command or set its defaults\n" ++ "RIPng enable on specified interface or network.\n" ++ "Interface or address") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_mbgp_community_exact_cmd_vtysh, ++ "show ipv6 mbgp community (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "MBGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, neighbor_remote_as_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "remote-as <1-65535>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Specify a BGP neighbor\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_BGPD, old_ipv6_bgp_network_cmd_vtysh, ++ "ipv6 bgp network X:X::X:X/M", ++ "IPv6 information\n" ++ "BGP information\n" ++ "Specify a network to announce via BGP\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_as_set_summary_cmd_vtysh, ++ "no aggregate-address A.B.C.D/M as-set summary-only", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Generate AS set path information\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_ZEBRA, shutdown_if_cmd_vtysh, ++ "shutdown", ++ "Shutdown the selected interface\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_bestpath_med2_cmd_vtysh, ++ "no bgp bestpath med confed missing-as-worst", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "MED attribute\n" ++ "Compare MED among confederation paths\n" ++ "Treat missing MED as the least preferred one\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_ip_prefix_list_description_arg_cmd_vtysh, ++ "no ip prefix-list WORD description .LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Prefix-list specific description\n" ++ "Up to 80 characters describing this prefix-list\n") ++ ++DEFSH (VTYSH_BGPD, undebug_bgp_fsm_cmd_vtysh, ++ "undebug bgp fsm", ++ "Disable debugging functions (see also 'debug')\n" ++ "Debugging functions (see also 'undebug')\n" ++ "BGP information\n" ++ "Finite State Machine\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_in_cmd_vtysh, ++ "clear ip bgp * in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_neighbor_priority_poll_interval_cmd_vtysh, ++ "neighbor A.B.C.D priority <0-255> poll-interval <1-65535>", ++ "Specify neighbor router\n" ++ "Neighbor IP address\n" ++ "Neighbor Priority\n" ++ "Priority\n" ++ "Dead Neighbor Polling interval\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_BGPD, no_router_bgp_view_cmd_vtysh, ++ "no router bgp <1-65535> view WORD", ++ "Negate a command or set its defaults\n" ++ "Enable a routing process\n" ++ "BGP information\n" ++ "AS number\n" ++ "BGP view\n" ++ "view name\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_vpnv4_soft_cmd_vtysh, ++ "clear ip bgp <1-65535> vpnv4 unicast soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_ipv4_soft_cmd_vtysh, ++ "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Address Family Modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ipv6_ripng_split_horizon_poisoned_reverse_cmd_vtysh, ++ "no ipv6 ripng split-horizon poisoned-reverse", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n" ++ "With poisoned-reverse\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_ipv4_out_cmd_vtysh, ++ "clear ip bgp * ipv4 (unicast|multicast) out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_transmit_delay_addr_cmd_vtysh, ++ "no ip ospf transmit-delay A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Link state transmit delay\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, clear_ipv6_prefix_list_name_cmd_vtysh, ++ "clear ipv6 prefix-list WORD", ++ "Reset functions\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_OSPF6D, reload_cmd_vtysh, ++ "reload", ++ "Reloads\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_instance_all_cmd_vtysh, ++ "clear bgp view WORD *", ++ "Reset functions\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD, no_set_tag_cmd_vtysh, ++ "no set tag", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Tag value for routing protocol\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_peer_group_soft_cmd_vtysh, ++ "clear bgp ipv6 peer-group WORD soft", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_RIPNGD, no_debug_ripng_packet_cmd_vtysh, ++ "no debug ripng packet", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIPng configuration\n" ++ "Debug option set for ripng packet\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_standard_nomask_cmd_vtysh, ++ "no access-list (<1-99>|<1300-1999>) (deny|permit) A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Address to match\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, show_ip_prefix_list_detail_name_cmd_vtysh, ++ "show ip prefix-list detail WORD", ++ "Show running system information\n" ++ "IP information\n" ++ "Build a prefix list\n" ++ "Detail of prefix lists\n" ++ "Name of a prefix list\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_in_cmd_vtysh, ++ "clear bgp external in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPF6D, no_redistribute_ospf6_cmd_vtysh, ++ "no redistribute ospf6", ++ "Negate a command or set its defaults\n" ++ "Redistribute control\n" ++ "OSPF6 route\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_soft_in_cmd_vtysh, ++ "clear bgp external soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_distance_cmd_vtysh, ++ "no distance <1-255>", ++ "Negate a command or set its defaults\n" ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_default_local_preference_val_cmd_vtysh, ++ "no bgp default local-preference <0-4294967295>", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Configure BGP defaults\n" ++ "local preference (higher=more preferred)\n" ++ "Configure default local preference value\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_metric_type_routemap_cmd_vtysh, ++ "default-information originate always metric <0-16777214> metric-type (1|2) route-map WORD", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "OSPF metric type for default routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_zebra_sub_cmd_vtysh, ++ "no debug ospf zebra (interface|redistribute)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF Zebra information\n" ++ "Zebra interface\n" ++ "Zebra redistribute\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_all_cmd_vtysh, ++ "no ip community-list (WORD|<1-99>|<100-199>)", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list name\n" ++ "Community list number (standard)\n" ++ "Community list number (expanded)\n") ++ ++DEFSH (VTYSH_RIPNGD, no_ipv6_ripng_split_horizon_cmd_vtysh, ++ "no ipv6 ripng split-horizon", ++ "Negate a command or set its defaults\n" ++ "IPv6 information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_route_map_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "route-map WORD (in|out)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Apply route map to neighbor\n" ++ "Name of route map\n" ++ "Apply map to incoming routes\n" ++ "Apply map to outbound routes\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD, no_match_tag_cmd_vtysh, ++ "no match tag", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match tag of route\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_message_digest_key_addr_cmd_vtysh, ++ "no ip ospf message-digest-key <1-255> A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Message digest authentication password (key)\n" ++ "Key ID\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD, match_tag_cmd_vtysh, ++ "match tag <0-65535>", ++ "Match values from routing table\n" ++ "Match tag of route\n" ++ "Metric value\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_spf_tree_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D spf tree", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Shortest Path First caculation\n" ++ "Displays spf tree\n") ++ ++DEFSH (VTYSH_OSPF6D, ipv6_ospf6_advertise_force_prefix_cmd_vtysh, ++ "ipv6 ospf6 advertise force-prefix", ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Advertising options\n" ++ "Force advertising prefix, applicable if Loopback or P-to-P\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community2_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_activate_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "activate", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Enable the Address Family for this Neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_all_in_prefix_filter_cmd_vtysh, ++ "clear bgp ipv6 * in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_route_flapping_cmd_vtysh, ++ "show ipv6 ospf6 route flapping", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged6_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged as-path med next-hop", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "As-path attribute\n" ++ "Med attribute\n" ++ "Nexthop attribute\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_retransmit_interval_addr_cmd_vtysh, ++ "ip ospf retransmit-interval <3-65535> A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Time between retransmitting lost link state advertisements\n" ++ "Seconds\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_OSPFD, ospf_passive_interface_cmd_vtysh, ++ "passive-interface IFNAME", ++ "Suppress routing updates on an interface\n" ++ "Interface's name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_seq_le_cmd_vtysh, ++ "ip prefix-list WORD seq <1-4294967295> (deny|permit) A.B.C.D/M le <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Maximum prefix length to be matched\n" ++ "Maximum prefix length\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_exact_cmd_vtysh, ++ "access-list WORD (deny|permit) A.B.C.D/M exact-match", ++ "Add an access list entry\n" ++ "IP zebra access-list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 10.0.0.0/8\n" ++ "Exact match of the prefixes\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_neighbor_received_routes_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X) received-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the received routes from neighbor\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_area_route_prefix_cmd_vtysh, ++ "show ipv6 ospf6 area A.B.C.D route (X::X|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Area information\n" ++ "Area ID (as an IPv4 notation)\n" ++ "Routing Table\n" ++ "Specify IPv6 address\n" ++ "Detailed information\n" ++ ) ++ ++DEFSH (VTYSH_OSPFD, ospf_area_range_substitute_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Summarize routes matching address/mask (border routers only)\n" ++ "Area range prefix\n" ++ "Announce area range as another prefix\n" ++ "Network prefix to be announced instead of range\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, rmap_onmatch_next_cmd_vtysh, ++ "on-match next", ++ "Exit policy on matches\n" ++ "Next clause\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_topology_router_cmd_vtysh, ++ "show ipv6 ospf6 topology (A.B.C.D|<0-4294967295>|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Inter Area topology information\n" ++ "Specify Router-ID\n" ++ "Specify Router-ID\n" ++ "Detailed information\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_cmd_vtysh, ++ "clear ip bgp external", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n") ++ ++DEFSH (VTYSH_BGPD, bgp_default_local_preference_cmd_vtysh, ++ "bgp default local-preference <0-4294967295>", ++ "BGP specific commands\n" ++ "Configure BGP defaults\n" ++ "local preference (higher=more preferred)\n" ++ "Configure default local preference value\n") ++ ++DEFSH (VTYSH_BGPD, no_router_bgp_cmd_vtysh, ++ "no router bgp <1-65535>", ++ "Negate a command or set its defaults\n" ++ "Enable a routing process\n" ++ "BGP information\n" ++ "AS number\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_route_map_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "route-map WORD (in|out)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Apply route map to neighbor\n" ++ "Name of route map\n" ++ "Apply map to incoming routes\n" ++ "Apply map to outbound routes\n") ++ ++DEFSH (VTYSH_BGPD, bgp_fast_external_failover_cmd_vtysh, ++ "bgp fast-external-failover", ++ "BGP information\n" ++ "Immediately reset session if a link to a directly connected external peer goes down\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_route_prefix_cmd_vtysh, ++ "show ipv6 ospf6 route (X::X|detail)", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Routing table\n" ++ "match IPv6 prefix\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_prefix_longer_cmd_vtysh, ++ "show ipv6 bgp X:X::X:X/M longer-prefixes", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Display route and more specific routes\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_metric_cmd_vtysh, ++ "default-information originate always metric <0-16777214>", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n" ++ "OSPF default metric\n" ++ "OSPF metric\n" ++ "OSPF metric type for default routes\n") ++ ++DEFSH (VTYSH_BGPD, no_match_ecommunity_val_cmd_vtysh, ++ "no match extcommunity (<1-99>|<100-199>|WORD)", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "Match BGP/VPN extended community list\n" ++ "Extended community-list number (standard)\n" ++ "Extended community-list number (expanded)\n" ++ "Extended community-list name\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_out_cmd_vtysh, ++ "clear bgp ipv6 external WORD out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, match_ip_address_prefix_list_cmd_vtysh, ++ "match ip address prefix-list WORD", ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match address of route\n" ++ "Match entries of prefix-lists\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_BGPD, ipv6_aggregate_address_summary_only_cmd_vtysh, ++ "aggregate-address X:X::X:X/M summary-only", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_standard_nomask_cmd_vtysh, ++ "access-list (<1-99>|<1300-1999>) (deny|permit) A.B.C.D", ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP standard access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Address to match\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_ipv6_external_soft_in_cmd_vtysh, ++ "clear bgp ipv6 external soft in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Address family\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD, accept_lifetime_infinite_month_day_cmd_vtysh, ++ "accept-lifetime HH:MM:SS MONTH <1-31> <1993-2035> infinite", ++ "Set accept lifetime of the key\n" ++ "Time to start\n" ++ "Month of the year to start\n" ++ "Day of th month to start\n" ++ "Year to start\n" ++ "Never expires") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_neighbor_advertised_route_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_peer_group_ipv4_soft_cmd_vtysh, ++ "clear ip bgp peer-group WORD ipv4 (unicast|multicast) soft", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all members of peer-group\n" ++ "BGP peer-group name\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_transmit_delay_cmd_vtysh, ++ "no ospf transmit-delay", ++ "Negate a command or set its defaults\n" ++ "OSPF interface commands\n" ++ "Link state transmit delay\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_vpnv4_rd_cmd_vtysh, ++ "show ip bgp vpnv4 rd ASN:nn_or_IP-address:nn", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display VPNv4 NLRI specific information\n" ++ "Display information for a route distinguisher\n" ++ "VPN Route Distinguisher\n") ++ ++DEFSH (VTYSH_BGPD, bgp_enforce_first_as_cmd_vtysh, ++ "bgp enforce-first-as", ++ "BGP information\n" ++ "Enforce the first AS for EBGP routes\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_router_id_val_cmd_vtysh, ++ "no bgp router-id A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "BGP information\n" ++ "Override configured router identifier\n" ++ "Manually configured router identifier\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_route_map_cmd_vtysh, ++ "show bgp ipv6 route-map WORD", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the route-map\n" ++ "A route-map to match on\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_message_digest_key_addr_cmd_vtysh, ++ "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Message digest authentication password (key)\n" ++ "Key ID\n" ++ "Use MD5 algorithm\n" ++ "The OSPF password (key)" ++ "Address of interface") ++ ++DEFSH (VTYSH_RIPD, ip_rip_split_horizon_cmd_vtysh, ++ "ip rip split-horizon", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Perform split horizon\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv6_rmap_cmd_vtysh, ++ "redistribute (connected|kernel|ospf6|ripng|static) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_RIPD, send_lifetime_infinite_day_month_cmd_vtysh, ++ "send-lifetime HH:MM:SS <1-31> MONTH <1993-2035> infinite", ++ "Set send lifetime of the key\n" ++ "Time to start\n" ++ "Day of th month to start\n" ++ "Month of the year to start\n" ++ "Year to start\n" ++ "Never expires") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged4_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged med (as-path|next-hop)", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Med attribute\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_as_in_cmd_vtysh, ++ "clear bgp <1-65535> in", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_summary_only_cmd_vtysh, ++ "no aggregate-address A.B.C.D/M summary-only", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_prefix_longer_cmd_vtysh, ++ "show ipv6 prefix-list WORD X:X::X:X/M longer", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "Lookup longer prefix\n") ++ ++DEFSH (VTYSH_OSPF6D, ospf6_passive_interface_cmd_vtysh, ++ "passive-interface IFNAME", ++ "Suppress routing updates on an interface\n" ++ "Interface name(e.g. ep0)\n") ++ ++DEFSH (VTYSH_OSPF6D, no_ospf6_redistribute_cmd_vtysh, ++ "no redistribute (static|kernel|connected|ripng|bgp)", ++ "Negate a command or set its defaults\n" ++ "Redistribute\n" ++ "Static route\n" ++ "Kernel route\n" ++ "Connected route\n" ++ "RIPng route\n" ++ "BGP route\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_aggregate_address_mask_summary_only_cmd_vtysh, ++ "no aggregate-address A.B.C.D A.B.C.D summary-only", ++ "Negate a command or set its defaults\n" ++ "Configure BGP aggregate entries\n" ++ "Aggregate address\n" ++ "Aggregate mask\n" ++ "Filter more specific routes from updates\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_timers_connect_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "timers connect <0-65535>", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "BGP per neighbor timers\n" ++ "BGP connect timer\n" ++ "Connect timer\n") ++ ++DEFSH (VTYSH_BGPD, bgp_default_ipv4_unicast_cmd_vtysh, ++ "bgp default ipv4-unicast", ++ "BGP specific commands\n" ++ "Configure BGP defaults\n" ++ "Activate ipv4-unicast for a peer by default\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_filter_list_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "filter-list WORD (in|out)", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Establish BGP filters\n" ++ "AS path access-list name\n" ++ "Filter incoming routes\n" ++ "Filter outgoing routes\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_soft_in_cmd_vtysh, ++ "clear ip bgp * soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_OSPFD, no_debug_ospf_event_cmd_vtysh, ++ "no debug ospf event", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "OSPF information\n" ++ "OSPF event information\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv4_rmap_metric_cmd_vtysh, ++ "redistribute (connected|kernel|ospf|rip|static) route-map WORD metric <0-4294967295>", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_mask_natural_backdoor_cmd_vtysh, ++ "no network A.B.C.D backdoor", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Specify a BGP backdoor route\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_vpnv4_soft_in_cmd_vtysh, ++ "clear ip bgp <1-65535> vpnv4 unicast soft in", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig inbound update\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD, no_set_tag_val_cmd_vtysh, ++ "no set tag <0-65535>", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "Tag value for routing protocol\n" ++ "Tag value\n") ++ ++DEFSH (VTYSH_ZEBRA, no_ip_route_flags_distance_cmd_vtysh, ++ "no ip route A.B.C.D/M (A.B.C.D|INTERFACE) (reject|blackhole) <1-255>", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "IP gateway address\n" ++ "IP gateway interface name\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n" ++ "Distance value for this route\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_distance_ospf_intra_inter_external_cmd_vtysh, ++ "distance ospf intra-area <1-255> inter-area <1-255> external <1-255>", ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "Intra-area routes\n" ++ "Distance for intra-area routes\n" ++ "Inter-area routes\n" ++ "Distance for inter-area routes\n" ++ "External routes\n" ++ "Distance for external routes\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_match_ip_next_hop_prefix_list_cmd_vtysh, ++ "no match ip next-hop prefix-list", ++ "Negate a command or set its defaults\n" ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match next-hop address of route\n" ++ "Match entries of prefix-lists\n") ++ ++DEFSH (VTYSH_ZEBRA, ip_route_flags2_cmd_vtysh, ++ "ip route A.B.C.D/M (reject|blackhole)", ++ "IP information\n" ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Emit an ICMP unreachable when matched\n" ++ "Silently discard pkts when matched\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_default_information_originate_always_cmd_vtysh, ++ "default-information originate always", ++ "Control distribution of default information\n" ++ "Distribute a default route\n" ++ "Always advertise default route\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_external_ipv4_soft_out_cmd_vtysh, ++ "clear ip bgp external ipv4 (unicast|multicast) soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_ZEBRA, show_ip_forwarding_cmd_vtysh, ++ "show ip forwarding", ++ "Show running system information\n" ++ "IP information\n" ++ "IP forwarding status\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_vpnv4_soft_out_cmd_vtysh, ++ "clear ip bgp <1-65535> vpnv4 unicast soft out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_OSPF6D, show_debug_ospf6_damp_cmd_vtysh, ++ "show debugging ospf6 damp", ++ "Show running system information\n" ++ "Debugging functions (see also 'undebug')\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Flap-dampening information\n" ++ ) ++ ++DEFSH (VTYSH_BGPD, no_bgp_scan_time_val_cmd_vtysh, ++ "no bgp scan-time <5-60>", ++ "Negate a command or set its defaults\n" ++ "BGP specific commands\n" ++ "Configure background scanner interval\n" ++ "Scanner interval (seconds)\n") ++ ++DEFSH (VTYSH_BGPD, bgp_damp_set2_cmd_vtysh, ++ "bgp dampening <1-45>", ++ "BGP Specific commands\n" ++ "Enable route-flap dampening\n" ++ "Half-life time for the penalty\n") ++ ++DEFSH (VTYSH_RIPNGD, ripng_redistribute_type_routemap_cmd_vtysh, ++ "redistribute (kernel|connected|static|ospf6|bgp) route-map WORD", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Open Shortest Path First (OSPFv3)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, bgp_bestpath_med3_cmd_vtysh, ++ "bgp bestpath med missing-as-worst confed", ++ "BGP specific commands\n" ++ "Change the default bestpath selection\n" ++ "MED attribute\n" ++ "Treat missing MED as the least preferred one\n" ++ "Compare MED among confederation paths\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_summary_cmd_vtysh, ++ "show ipv6 bgp summary", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_redistribute_ipv4_rmap_cmd_vtysh, ++ "no redistribute (connected|kernel|ospf|rip|static) route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPF)\n" ++ "Routing Information Protocol (RIP)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_timers_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "timers <0-65535> <0-65535>", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP per neighbor timers\n" ++ "Keepalive interval\n" ++ "Holdtime\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_neighbor_poll_interval_cmd_vtysh, ++ "no neighbor A.B.C.D poll-interval <1-65535>", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor IP address\n" ++ "Dead Neighbor Polling interval\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_neighbor_poll_interval_priority_cmd_vtysh, ++ "neighbor A.B.C.D poll-interval <1-65535> priority <0-255>", ++ "Specify neighbor router\n" ++ "Neighbor address\n" ++ "OSPF dead-router polling interval\n" ++ "Seconds\n" ++ "OSPF priority of non-broadcast neighbor\n" ++ "Priority\n") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_name_expanded_cmd_vtysh, ++ "no ip community-list expanded WORD (deny|permit) .LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Specify an expanded community-list\n" ++ "Community list name\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community4_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_OSPF6D, show_ipv6_ospf6_neighbor_routerid_cmd_vtysh, ++ "show ipv6 ospf6 neighbor A.B.C.D", ++ "Show running system information\n" ++ "IPv6 Information\n" ++ "Open Shortest Path First (OSPF) for IPv6\n" ++ "Neighbor list\n" ++ "OSPF6 neighbor Router ID in IP address format\n" ++ ) ++ ++DEFSH (VTYSH_RIPD, ip_rip_send_version_2_cmd_vtysh, ++ "ip rip send version 2 1", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement transmission\n" ++ "Version control\n" ++ "RIP version 2\n" ++ "RIP version 1\n") ++ ++DEFSH (VTYSH_BGPD, no_set_origin_cmd_vtysh, ++ "no set origin", ++ "Negate a command or set its defaults\n" ++ "Set values in destination routing protocol\n" ++ "BGP origin code\n") ++ ++DEFSH (VTYSH_RIPD, no_debug_rip_packet_direct_cmd_vtysh, ++ "no debug rip packet (recv|send)", ++ "Negate a command or set its defaults\n" ++ "Debugging functions (see also 'undebug')\n" ++ "RIP information\n" ++ "RIP packet\n" ++ "RIP option set for receive packet\n" ++ "RIP option set for send packet\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_all_in_prefix_filter_cmd_vtysh, ++ "clear bgp * in prefix-filter", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Soft reconfig inbound update\n" ++ "Push out prefix-list ORF and do inbound soft reconfig\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_interface_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X) " "interface WORD", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Interface\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_extended_host_any_cmd_vtysh, ++ "no access-list (<100-199>|<2000-2699>) (deny|permit) ip host A.B.C.D any", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "A single source host\n" ++ "Source address\n" ++ "Any destination host\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, access_list_extended_any_any_cmd_vtysh, ++ "access-list (<100-199>|<2000-2699>) (deny|permit) ip any any", ++ "Add an access list entry\n" ++ "IP extended access list\n" ++ "IP extended access list (expanded range)\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Any Internet Protocol\n" ++ "Any source host\n" ++ "Any destination host\n") ++ ++DEFSH (VTYSH_OSPFD, no_ospf_distance_ospf_cmd_vtysh, ++ "no distance ospf", ++ "Negate a command or set its defaults\n" ++ "Define an administrative distance\n" ++ "OSPF Administrative distance\n" ++ "OSPF Distance\n") ++ ++DEFSH (VTYSH_BGPD, bgp_distance_cmd_vtysh, ++ "distance bgp <1-255> <1-255> <1-255>", ++ "Define an administrative distance\n" ++ "BGP distance\n" ++ "Distance for routes external to the AS\n" ++ "Distance for routes internal to the AS\n" ++ "Distance for local routes\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authtype_authkey_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication|) " ++ "(authentication-key|) AUTH_KEY", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Enable authentication on this virtual link\n" "dummy string \n" ++ "Authentication password (key)\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_instance_all_cmd_vtysh, ++ "clear ip bgp view WORD *", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "view name\n" ++ "Clear all peers\n") ++ ++DEFSH (VTYSH_RIPD, no_ip_rip_authentication_string2_cmd_vtysh, ++ "no ip rip authentication string LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Authentication control\n" ++ "Authentication string\n" ++ "Authentication string\n") ++ ++DEFSH (VTYSH_BGPD, set_ecommunity_soo_cmd_vtysh, ++ "set extcommunity soo .ASN:nn_or_IP-address:nn", ++ "Set values in destination routing protocol\n" ++ "BGP extended community attribute\n" ++ "Site-of-Origin extended community\n" ++ "VPN extended community\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, match_ip_next_hop_prefix_list_cmd_vtysh, ++ "match ip next-hop prefix-list WORD", ++ "Match values from routing table\n" ++ "IP information\n" ++ "Match next-hop address of route\n" ++ "Match entries of prefix-lists\n" ++ "IP prefix-list name\n") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_cmd_vtysh, ++ "aggregate-address A.B.C.D/M", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_community4_exact_cmd_vtysh, ++ "show ip bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, no_ip_community_list_expanded_cmd_vtysh, ++ "no ip community-list <100-199> (deny|permit) .LINE", ++ "Negate a command or set its defaults\n" ++ "IP information\n" ++ "Add a community list entry\n" ++ "Community list number (expanded)\n" ++ "Specify community to reject\n" ++ "Specify community to accept\n" ++ "An ordered list as a regular-expression\n") ++ ++DEFSH (VTYSH_BGPD, show_ipv6_bgp_community2_exact_cmd_vtysh, ++ "show ipv6 bgp community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "BGP information\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_BGPD, bgp_confederation_identifier_cmd_vtysh, ++ "bgp confederation identifier <1-65535>", ++ "BGP specific commands\n" ++ "AS confederation parameters\n" ++ "AS number\n" ++ "Set routing domain confederation AS\n") ++ ++DEFSH (VTYSH_BGPD, clear_bgp_external_soft_out_cmd_vtysh, ++ "clear bgp external soft out", ++ "Reset functions\n" ++ "BGP information\n" ++ "Clear all external peers\n" ++ "Soft reconfig\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_community_cmd_vtysh, ++ "show bgp ipv6 community (AA:NN|local-AS|no-advertise|no-export)", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n") ++ ++DEFSH (VTYSH_RIPD, distribute_list_cmd_vtysh, ++ "distribute-list WORD (in|out) WORD", ++ "Filter networks in routing updates\n" ++ "Access-list name\n" ++ "Filter incoming routing updates\n" ++ "Filter outgoing routing updates\n" ++ "Interface name\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_view_neighbor_advertised_route_cmd_vtysh, ++ "show bgp view WORD neighbors (A.B.C.D|X:X::X:X) advertised-routes", ++ "Show running system information\n" ++ "BGP information\n" ++ "BGP view\n" ++ "View name\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display the routes advertised to a BGP neighbor\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_version_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X) " "version (4|4-)", ++ "Specify neighbor router\n" ++ "Neighbor address\nIPv6 address\n" ++ "Neighbor's BGP version\n" ++ "Border Gateway Protocol 4\n" ++ "Multiprotocol Extensions for BGP-4(Old Draft)\n") ++ ++DEFSH (VTYSH_BGPD, set_ipv6_nexthop_global_cmd_vtysh, ++ "set ipv6 next-hop global X:X::X:X", ++ "Set values in destination routing protocol\n" ++ "IPv6 information\n" ++ "IPv6 next-hop address\n" ++ "IPv6 global address\n" ++ "IPv6 address of next hop\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_cmd_vtysh, ++ "clear ip bgp <1-65535>", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n") ++ ++DEFSH (VTYSH_BGPD, show_bgp_ipv6_neighbor_received_prefix_filter_cmd_vtysh, ++ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X) received prefix-filter", ++ "Show running system information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Detailed information on TCP and BGP neighbor connections\n" ++ "Neighbor to display information about\n" ++ "Neighbor to display information about\n" ++ "Display information received from a BGP neighbor\n" ++ "Display the prefixlist filter\n") ++ ++DEFSH (VTYSH_BGPD, ip_as_path_cmd_vtysh, ++ "ip as-path access-list WORD (deny|permit) .LINE", ++ "IP information\n" ++ "BGP autonomous system path filter\n" ++ "Specify an access list name\n" ++ "Regular expression access list name\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "A regular-expression to match the BGP AS paths\n") ++ ++DEFSH (VTYSH_RIPD, ip_rip_receive_version_cmd_vtysh, ++ "ip rip receive version (1|2)", ++ "IP information\n" ++ "Routing Information Protocol\n" ++ "Advertisement reception\n" ++ "Version control\n" ++ "RIP version 1\n" ++ "RIP version 2\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD, no_rmap_onmatch_next_cmd_vtysh, ++ "no on-match next", ++ "Negate a command or set its defaults\n" ++ "Exit policy on matches\n" ++ "Next clause\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_export_list_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) export-list NAME", ++ "OSPF area parameters\n" ++ "OSPF area ID in IP address format\n" ++ "OSPF area ID as a decimal value\n" ++ "Set the filter for networks announced to other areas\n" ++ "Name of the access-list\n") ++ ++DEFSH (VTYSH_BGPD, no_bgp_network_mask_natural_route_map_cmd_vtysh, ++ "no network A.B.C.D route-map WORD", ++ "Negate a command or set its defaults\n" ++ "Specify a network to announce via BGP\n" ++ "Network number\n" ++ "Route-map to modify the attributes\n" ++ "Name of the route map\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_redistribute_source_type_metric_cmd_vtysh, ++ "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214>", ++ "Redistribute information from another routing protocol\n" ++ "Kernel routes\n" ++ "Connected\n" ++ "Static routes\n" ++ "Routing Information Protocol (RIP)\n" ++ "Border Gateway Protocol (BGP)\n" ++ "OSPF exterior metric type for redistributed routes\n" ++ "Set OSPF External Type 1 metrics\n" ++ "Set OSPF External Type 2 metrics\n" ++ "Metric for redistributed routes\n" ++ "OSPF default metric\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_summary_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) summary", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Summary of BGP neighbor status\n") ++ ++DEFSH (VTYSH_OSPFD, no_ip_ospf_dead_interval_addr_cmd_vtysh, ++ "no ip ospf dead-interval A.B.C.D", ++ "Negate a command or set its defaults\n" ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interval after which a neighbor is declared dead\n" ++ "Address of interface") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_name_seq_cmd_vtysh, ++ "show ipv6 prefix-list WORD seq <1-4294967295>", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "sequence number of an entry\n" ++ "Sequence number\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_community_list_arg_cmd_vtysh, ++ "show ip community-list (<1-199>|WORD)", ++ "Show running system information\n" ++ "IP information\n" ++ "List community-list\n" ++ "Community-list number\n" ++ "Community-list name\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_passive_interface_addr_cmd_vtysh, ++ "passive-interface IFNAME A.B.C.D", ++ "Suppress routing updates on an interface\n" ++ "Interface's name\n") ++ ++DEFSH (VTYSH_BGPD, show_ip_bgp_ipv4_community3_exact_cmd_vtysh, ++ "show ip bgp ipv4 (unicast|multicast) community (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) (AA:NN|local-AS|no-advertise|no-export) exact-match", ++ "Show running system information\n" ++ "IP information\n" ++ "BGP information\n" ++ "Address family\n" ++ "Address Family modifier\n" ++ "Address Family modifier\n" ++ "Display routes matching the communities\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "community number\n" ++ "Do not send outside local AS (well-known community)\n" ++ "Do not advertise to any peer (well-known community)\n" ++ "Do not export to next AS (well-known community)\n" ++ "Exact match of the communities") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, clear_ip_prefix_list_cmd_vtysh, ++ "clear ip prefix-list", ++ "Reset functions\n" ++ "IP information\n" ++ "Build a prefix list\n") ++ ++DEFSH (VTYSH_OSPFD, ip_ospf_dead_interval_cmd_vtysh, ++ "ip ospf dead-interval <1-65535>", ++ "IP Information\n" ++ "OSPF interface commands\n" ++ "Interval after which a neighbor is declared dead\n" ++ "Seconds\n") ++ ++DEFSH (VTYSH_OSPFD, ospf_area_vlink_authkey_cmd_vtysh, ++ "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D " ++ "(authentication-key|) AUTH_KEY", ++ "OSPF area parameters\n" "OSPF area ID in IP address format\n" "OSPF area ID as a decimal value\n" "Configure a virtual link\n" "Router ID of the remote ABR\n" ++ "Authentication password (key)\n" "The OSPF password (key)") ++ ++DEFSH (VTYSH_BGPD, aggregate_address_summary_as_set_cmd_vtysh, ++ "aggregate-address A.B.C.D/M summary-only as-set", ++ "Configure BGP aggregate entries\n" ++ "Aggregate prefix\n" ++ "Filter more specific routes from updates\n" ++ "Generate AS set path information\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_as_out_cmd_vtysh, ++ "clear ip bgp <1-65535> out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear peers with the AS number\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_dampening_address_cmd_vtysh, ++ "clear ip bgp dampening A.B.C.D", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear route flap dampening information\n" ++ "Network to clear damping information\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, no_access_list_remark_cmd_vtysh, ++ "no access-list (<1-99>|<100-199>|<1300-1999>|<2000-2699>|WORD) remark", ++ "Negate a command or set its defaults\n" ++ "Add an access list entry\n" ++ "IP standard access list\n" ++ "IP extended access list\n" ++ "IP standard access list (expanded range)\n" ++ "IP extended access list (expanded range)\n" ++ "IP zebra access-list\n" ++ "Access list entry comment\n") ++ ++DEFSH (VTYSH_BGPD, bgp_redistribute_ipv6_rmap_metric_cmd_vtysh, ++ "redistribute (connected|kernel|ospf6|ripng|static) route-map WORD metric <0-4294967295>", ++ "Redistribute information from another routing protocol\n" ++ "Connected\n" ++ "Kernel routes\n" ++ "Open Shurtest Path First (OSPFv3)\n" ++ "Routing Information Protocol (RIPng)\n" ++ "Static routes\n" ++ "Route map reference\n" ++ "Pointer to route-map entries\n" ++ "Metric for redistributed routes\n" ++ "Default metric\n") ++ ++DEFSH (VTYSH_BGPD, clear_ip_bgp_all_vpnv4_out_cmd_vtysh, ++ "clear ip bgp * vpnv4 unicast out", ++ "Reset functions\n" ++ "IP information\n" ++ "BGP information\n" ++ "Clear all peers\n" ++ "Address family\n" ++ "Address Family Modifier\n" ++ "Soft reconfig outbound update\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, show_ipv6_prefix_list_prefix_first_match_cmd_vtysh, ++ "show ipv6 prefix-list WORD X:X::X:X/M first-match", ++ "Show running system information\n" ++ "IPv6 information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "IPv6 prefix /, e.g., 3ffe::/16\n" ++ "First matched prefix\n") ++ ++DEFSH (VTYSH_RIPNGD|VTYSH_OSPF6D|VTYSH_BGPD, ipv6_access_list_exact_cmd_vtysh, ++ "ipv6 access-list WORD (deny|permit) X:X::X:X/M exact-match", ++ "IPv6 information\n" ++ "Add an access list entry\n" ++ "IPv6 zebra access-list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "Prefix to match. e.g. 3ffe:506::/32\n" ++ "Exact match of the prefixes\n") ++ ++DEFSH (VTYSH_BGPD, no_neighbor_attr_unchanged10_cmd_vtysh, ++ "no neighbor (A.B.C.D|X:X::X:X|WORD) " "attribute-unchanged med as-path next-hop", ++ "Negate a command or set its defaults\n" ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "BGP attribute is propagated unchanged to this neighbor\n" ++ "Med attribute\n" ++ "As-path attribute\n" ++ "Nexthop attribute\n") ++ ++DEFSH (VTYSH_BGPD, neighbor_activate_cmd_vtysh, ++ "neighbor (A.B.C.D|X:X::X:X|WORD) " "activate", ++ "Specify neighbor router\n" ++ "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n" ++ "Enable the Address Family for this Neighbor\n") ++ ++DEFSH (VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD, ip_prefix_list_ge_cmd_vtysh, ++ "ip prefix-list WORD (deny|permit) A.B.C.D/M ge <0-32>", ++ "IP information\n" ++ "Build a prefix list\n" ++ "Name of a prefix list\n" ++ "Specify packets to reject\n" ++ "Specify packets to forward\n" ++ "IP prefix /, e.g., 35.0.0.0/8\n" ++ "Minimum prefix length to be matched\n" ++ "Minimum prefix length\n") + -+struct rsvpte_interface *rsvpte_if_new(struct mpls_interface *mi) { -+ struct rsvpte_interface *li; ++void ++vtysh_init_cmd () ++{ ++ install_element (INTERFACE_NODE, &ipv6_ripng_split_horizon_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_inter_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_in_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_route_server_client_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ip_nexthop_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard_cmd_vtysh); ++ install_element (ZEBRA_NODE, &redistribute_ospf6_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_auto_cost_reference_bandwidth_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_neighbor_routes_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance2_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_scan_cmd_vtysh); ++ install_element (VIEW_NODE, &ipv6_bgp_neighbor_routes_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_zebra_kernel_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_type_id_self_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_forwarding_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_summary_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ecommunity_rt_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_network_area_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_keepalive_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_sequence_number_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_mask_flags_distance_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (CONFIG_NODE, &dump_bgp_routes_interval_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_route_ospf6_external_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_bgp_network_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_cidr_only_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_peer_group_cmd_vtysh); ++ install_element (VIEW_NODE, &show_debug_ospf6_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_distance_source_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_client_to_client_reflection_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_bestpath_aspath_ignore_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community2_exact_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_neighbor_priority_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_range_cost_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbor_damp_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_out_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_access_list_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_abr_type_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_packet_send_recv_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_aspath_prepend_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_type_self_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authkey_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_mask_flags2_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_distribute_list_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_maximum_prefix_val_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_default_local_preference_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_priority_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community4_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_extcommunity_list_expanded_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_capability_route_refresh_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_mask_as_set_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_prefix_first_match_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_capability_dynamic_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community4_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_in_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_distance2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community_list_cmd_vtysh); ++ install_element (RMAP_NODE, &no_rmap_onmatch_goto_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_rip_events_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_soft_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_in_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_prefix_longer_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_param3_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_allowas_in_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_route_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_timers_spf_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf6_damp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ripng_packet_direct_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_instance_summary_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_unsuppress_map_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_addr_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &key_string_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_in_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community3_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community_exact_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_address_secondary_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_default_originate_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbor_damp_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_access_list_name_cmd_vtysh); ++ install_element (BGP_NODE, &old_no_ipv6_aggregate_address_summary_only_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_access_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_host_mask_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_neighbor_routerid_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_route_map_all_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_override_capability_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_summary_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_nsm_sub_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_zebra_events_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_mask_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_packet_send_recv_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_default_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_update_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_next_hop_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_in_prefix_filter_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ipv6_address_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbors_peer_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_mask_as_set_summary_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_enforce_multihop_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_keepalive_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_local_pref_val_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_seq_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_neighbor_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debug_ospf6_damp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_all_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_as_path_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_confederation_identifier_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ripng_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_route_addr_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_retransmitinterval_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_address_prefix_list_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_damp_unset_cmd_vtysh); ++ install_element (RIPNG_NODE, &if_ipv6_rmap_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_cmd_vtysh); ++ install_element (RIP_NODE, &rip_redistribute_type_routemap_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_in_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_allowas_in_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_cidr_only_cmd_vtysh); ++ install_element (RIP_NODE, &rip_default_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_in_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_backdoor_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_name_standard2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_normal_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_seq_ge_le_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_route_prefix_longer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbor_flap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_regexp_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_metric_type_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_activate_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_authentication_args_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_out_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_instance_ipv6_summary_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_mask_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_next_hop_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_as_set_summary_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_route_server_client_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_priority_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_fsm_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_tag_val_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_dump_bgp_routes_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_external_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_allowas_in_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_route_map_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_hellointerval_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_seq_le_ge_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_in_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_default_originate_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_default_ipv4_unicast_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_any_host_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_receive_version_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_rip_packet_direct_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_strict_capability_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_forwarding_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_route_protocol_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_routes_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_zebra_packet_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_send_community_type_cmd_vtysh); ++ install_element (INTERFACE_NODE, &mpls_labelspace_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_name_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbors_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community4_exact_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbor_received_routes_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_packet_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_view_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_filter_list_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_range_substitute_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_send_community_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_fsm_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_route_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_unsuppress_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_advertised_route_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_routemap_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_in_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_regexp_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_packet_all_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_peer_group_remote_as_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_retransmit_interval_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_access_list_remark_arg_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_interface_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community4_exact_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_view_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &old_ipv6_aggregate_address_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_range_advertise_cost_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_router_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_prefix_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community4_exact_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_range_substitute_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_events_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_ism_sub_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_warning_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_mask_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community2_exact_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_passive_interface_addr_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authtype_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_out_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_address_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_summary_as_set_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_route_reflector_client_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_topology_router_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_rip_events_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_allowas_in_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_val2_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_out_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &bgp_network_mask_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_default_originate_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_network_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_neighborlist_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_peer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community3_exact_cmd_vtysh); ++ install_element (RIP_NODE, &no_distribute_list_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_infinite_day_month_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_zebra_events_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_redistribute_type_metric_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_authentication_key_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community4_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debugging_ospf_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_summary_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_redistribute_ipv4_rmap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_instance_summary_cmd_vtysh); ++ install_element (RIP_NODE, &rip_route_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_route_server_client_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_dump_bgp_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_paths_cmd_vtysh); ++ install_element (RIP_NODE, &rip_distance_source_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_passive_interface_cmd_vtysh); ++ install_element (VIEW_NODE, &ipv6_mbgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_tags_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_instance_neighbors_peer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community3_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_route_flapping_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ripng_zebra_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_exact_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_advertise_interval_val_cmd_vtysh); ++ install_element (MPLS_LS_INTERFACE_NODE, &label_map_fwd_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_route_server_client_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_nsm_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community3_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_transmit_delay_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_set_peer_group_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_mask_as_set_summary_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_mask_host_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_aggregate_address_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_set_peer_group_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ripng_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_update_source_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_le_ge_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_unsuppress_map_cmd_vtysh); ++ install_element (RIP_NODE, &distribute_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_allowas_in_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_interface_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_route_protocol_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_dump_bgp_updates_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbor_received_routes_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_mask_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_activate_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_bestpath_med3_cmd_vtysh); ++ install_element (VIEW_NODE, &show_interface_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_activate_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_access_list_remark_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_normal_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_distance_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (RMAP_NODE, &set_metric_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_summary_as_set_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &bgp_network_route_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_seq_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_offset_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_normal_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_route_prefix_longer_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_route_map_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_allowas_in_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_bestpath_med_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_route_addr_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_set_peer_group_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_filter_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_set_peer_group_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ipv6_next_hop_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_detail_name_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_zebra_packet_detail_cmd_vtysh); ++ install_element (CONFIG_NODE, &router_zebra_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community_list_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_param2_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_network_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_topology_router_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_host_any_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_in_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_address_label_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ipv6_nexthop_global_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_summary_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_warning_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_val_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_update_cmd_vtysh); ++ install_element (RMAP_NODE, &set_aspath_prepend_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_router_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_in_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_route_cmd_vtysh); ++ install_element (OSPF6_NODE, &no_ospf6_interface_area_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_nexthop_self_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_route_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_nexthop_self_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ecommunity_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_redistribute_type_metric_routemap_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_mask_any_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_redistribute_ipv4_rmap_metric_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community2_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &dump_bgp_all_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_warning_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_mask_as_set_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_detail_name_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_ge_le_cmd_vtysh); ++ install_element (BGP_NODE, &no_synchronization_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_flap_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ip_next_hop_cmd_vtysh); ++ install_element (RMAP_NODE, &set_ip_nexthop_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_extcommunity_list_name_standard2_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_nsm_sub_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_default_metric_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_description_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_soft_out_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_authentication_addr_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_summary_cmd_vtysh); ++ install_element (RMAP_NODE, &set_aggregator_as_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_neighbor_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_le_ge_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community_list_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ipv6_prefix_list_name_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_prefix_longer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_name_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_default_cost_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community_all_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_maximum_prefix_val2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community2_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_interface_area_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd_vtysh); ++ install_element (VIEW_NODE, &ipv6_bgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_route_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_scan_time_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_interface_ifname_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_bgp_config_type_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_external_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_name_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_neighbor_detail_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_instance_ipv4_summary_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_mask_as_set_summary_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_authentication_mode_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_rip_packet_detail_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_network_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_instance_neighbors_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_address_prefix_list_val_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_passive_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_hello_interval_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_access_list_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_weight_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_camp_config_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_route_reflector_client_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_topology_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_day_month_month_day_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_route_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_redistribute_type_metric_routemap_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_network_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_expanded_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_in_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_prefix_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_authentication_key_cmd_vtysh); ++ install_element (RMAP_NODE, &set_local_pref_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_route_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_metric_routemap_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_summary_as_set_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_duration_month_day_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_dampened_paths_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbors_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_bestpath_compare_router_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbors_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debugging_ripng_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community_all_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ripng_zebra_cmd_vtysh); ++ install_element (RMAP_NODE, &match_interface_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_route_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_access_list_any_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_neighbor_flap_cmd_vtysh); ++ install_element (RIP_NODE, &rip_default_information_originate_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_passive_interface_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_nsm_sub_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_prefix_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_flags_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_type_routemap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_stub_no_summary_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_send_community_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbor_received_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community_exact_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_month_day_day_month_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_neighbor_all_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_weight_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_timers_arg_cmd_vtysh); ++ install_element (RIP_NODE, &rip_distance_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_zebra_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_packet_send_recv_detail_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_rip_zebra_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_self_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_metric_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_shutdown_if_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_route_map_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_timers_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_md5_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_ebgp_multihop_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_authkey_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community4_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community3_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_zebra_packet_direct_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_priority_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_mask_as_set_summary_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_authentication_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_authkey_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_forwarding_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_unsuppress_map_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_hello_interval_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbors_peer_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_le_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_community_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_zebra_packet_detail_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_host_any_cmd_vtysh); ++ install_element (RIP_NODE, &rip_version_cmd_vtysh); ++ install_element (RIPNG_NODE, &ipv6_distribute_list_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &no_key_cmd_vtysh); ++ install_element (MPLS_LS_INTERFACE_NODE, &label_map_pop_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_send_community_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_packet_send_recv_detail_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_addr_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_prefix_list_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_instance_neighbors_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_expanded_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_default_local_preference_val_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_mask_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_access_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_filter_list_cmd_vtysh); ++ install_element (RIP_NODE, &distribute_list_prefix_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_split_horizon_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_neighbor_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ecommunity_soo_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbor_received_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_interface_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_redistribute_type_routemap_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_in_prefix_filter_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_flags2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community2_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_bgp_filter_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_shortcut_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_summary_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_default_cost_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_community_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_bgp_network_mask_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community2_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_activate_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_route_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_deadinterval_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_metric_cmd_vtysh); ++ install_element (RIP_NODE, &rip_offset_list_ifname_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_tags_cmd_vtysh); ++ install_element (RMAP_NODE, &set_ip_nexthop_peer_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_unsuppress_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_type_self_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_mask_natural_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_route_server_client_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community_all_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_arg_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_stub_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_le_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_addr_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_in_cmd_vtysh); ++ install_element (RIP_NODE, &rip_passive_interface_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_authentication_key_chain_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_prefix_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_access_list_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_attr_info_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_nexthop_self_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_authentication_message_digest_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_maximum_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_damp_set_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ripng_status_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_community_delete_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_neighborlist_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_scan_time_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_advertise_interval_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_regexp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community4_exact_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_mask_summary_only_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_cost_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_dead_interval_addr_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_mask_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_detail_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_instance_ipv6_neighbors_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_route_supernets_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community_exact_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community3_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_route_addr_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_duration_month_day_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_offset_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_neighbor_damp_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_seq_le_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_local_as_no_prepend_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_zebra_events_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf6_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_neighbor_flap_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_regexp_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_confederation_peers_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_access_list_name_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_description_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_summary_name_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_summary_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_val2_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_originator_id_val_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_mask_as_set_summary_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_compatible_rfc1583_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ecommunity_val_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_network_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community3_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbor_flap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community3_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_cmd_vtysh); ++ install_element (CONFIG_NODE, &dump_bgp_routes_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_prefix_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_route_reflector_client_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_nexthop_self_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_ebgp_multihop_ttl_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_damp_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_out_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_mpls_labelspace_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_summary_as_set_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_as_set_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_forwarding_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (OSPF_NODE, &router_ospf_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_out_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authtype_md5_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_ifname_flags_pref_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community_cmd_vtysh); ++ install_element (RMAP_NODE, &set_vpnv4_nexthop_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_filter_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbor_flap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community4_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_as_set_summary_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_infinite_day_month_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_nexthop_self_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_sequence_number_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_detail_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_infinite_month_day_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_events_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ipv6_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_as_set_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_client_to_client_reflection_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_set_peer_group_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_default_metric_val_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_seq_ge_le_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_priority_addr_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community3_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community4_cmd_vtysh); ++ install_element (RIP_NODE, &rip_redistribute_type_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_rip_status_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_mask_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_range_advertise_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_in_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_as_path_access_list_all_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_route_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_adv_router_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community4_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_host_mask_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_seq_ge_le_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_param3_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_fsm_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_in_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_route_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_route_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_intra_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_lsa_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_network_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_authentication_cmd_vtysh); ++ install_element (BGP_NODE, &old_ipv6_aggregate_address_summary_only_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_rmap_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_confederation_peers_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_list_exact_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_dampened_paths_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_rip_packet_detail_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debugging_zebra_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_prefix_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_filter_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_allowas_in_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_mask_backdoor_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_flags_distance_cmd_vtysh); ++ install_element (RMAP_NODE, &ospf6_routemap_set_forwarding_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_prefix_list_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_metric_type_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_set_peer_group_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_any_any_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_soft_in_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_bestpath_med2_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_next_hop_val_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ipv6_distribute_list_prefix_all_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &ipv6_aggregate_address_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_val2_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_enforce_multihop_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_bgp_keepalive_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_out_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_redistribute_type_routemap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_database_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ipv6_ripng_split_horizon_poisoned_reverse_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_ge_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_rip_zebra_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ripng_zebra_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_mask_summary_only_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_default_metric_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_neighbor_flap_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_community_list_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_soft_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_extcommunity_list_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_out_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_local_as_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community_list_exact_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_type_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_metric_type_routemap_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged_cmd_vtysh); ++ install_element (RIP_NODE, &rip_network_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_packet_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_type_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_ism_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_name_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_exact_cmd_vtysh); ++ install_element (RMAP_NODE, &no_rmap_onmatch_next_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_rip_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_vpnv4_network_cmd_vtysh); ++ install_element (KEYCHAIN_NODE, &no_key_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_retransmit_interval_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_redistribute_type_routemap_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_update_source_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_redistribute_ipv4_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_route_map_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_instance_ipv6_summary_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_authentication_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_prefix_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_set_peer_group_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_message_digest_key_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_scan_time_val_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_mask_summary_as_set_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community_list_exact_cmd_vtysh); ++ install_element (VIEW_NODE, &ipv6_mbgp_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_zebra_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_in_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_route_map_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_route_reflector_client_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_cmd_vtysh); ++ install_element (RMAP_NODE, &match_community_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_damp_unset_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_timers_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ipv6_ospf6_passive_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_in_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ipv6_nexthop_local_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_out_cmd_vtysh); ++ install_element (OSPF6_NODE, &no_ospf6_redistribute_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_route_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_in_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_soft_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_maximum_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community4_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ipv6_distribute_list_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_addr_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_capability_dynamic_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_neighbor_received_routes_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_interface_area_plist_passive_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_neighbor_routes_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_soft_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_in_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ecommunity_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbors_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_view_route_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_ge_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_route_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &ipv6_bgp_neighbor_received_routes_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_mask_summary_as_set_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_sequence_number_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_router_rip_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_interface_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distribute_list_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_seq_le_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_zebra_sub_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ripng_packet_direct_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_prefix_longer_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_timers_connect_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_message_digest_key_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_distribute_list_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_authentication_key_chain2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbors_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_normal_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_dampening_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_access_list_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_in_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_community_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_soft_out_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_default_metric_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_atomic_aggregate_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_out_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_type_metric_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_stub_no_summary_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_cmd_vtysh); ++ install_element (RIP_NODE, &distribute_list_all_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_cost_addr_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_rmap_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_paths_cmd_vtysh); ++ install_element (INTERFACE_NODE, &linkdetect_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_interface_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_deterministic_med_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_log_neighbor_changes_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_out_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_aspath_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_neighbor_advertised_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_event_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_statistics_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_as_set_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_metric_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_prefix_list_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_aggregator_as_val_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_send_community_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_packet_all_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_filter_list_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_tags_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_import_check_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_packet_send_recv_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_local_as_val2_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_authentication_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_remote_as_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_standard_any_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_network_mask_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ecommunity_soo_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf6_all_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_mask_summary_only_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf6_damp_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_month_day_month_day_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community3_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_capability_route_refresh_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_metric_type_routemap_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authtype_authkey_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_soft_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_address_cmd_vtysh); ++ install_element (RIP_NODE, &rip_offset_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_zebra_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ripng_packet_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_type_adv_router_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debugging_bgp_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_mask_host_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_ge_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_extcommunity_list_standard2_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_hello_interval_addr_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_param4_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_in_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_damp_set2_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_host_host_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_any_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_name_expanded_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_receive_version_1_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_type_metric_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &ipv6_aggregate_address_summary_only_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community_list_exact_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_if_ipv6_rmap_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_description_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_name_expanded_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_packet_send_recv_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_topology_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_detail_name_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_dont_capability_negotiate_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_range_cost_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_authentication_string2_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_in_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_tag_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_default_originate_cmd_vtysh); ++ install_element (VIEW_NODE, &show_debugging_ripng_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_spf_node_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community2_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_out_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_enforce_first_as_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_summary_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_route_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_flags2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_mask_summary_as_set_cmd_vtysh); ++ install_element (ENABLE_NODE, &ipv6_bgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (RIP_NODE, &no_distribute_list_prefix_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &bgp_network_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_standard_any_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_inter_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_send_community_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_filter_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_network_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_neighbor_priority_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_route_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_passive_interface_addr_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_authentication_key_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_any_host_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_metric_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_in_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_rfc1583_flag_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_seq_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_address_secondary_cmd_vtysh); ++ install_element (CONFIG_NODE, &config_table_cmd_vtysh); ++ install_element (INTERFACE_NODE, &bandwidth_if_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_mask_natural_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ipv6_nexthop_global_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_name_seq_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_send_community_type_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_next_hop_prefix_list_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_instance_ipv6_neighbors_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &ipv6_bgp_network_route_map_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_ism_sub_cmd_vtysh); ++ install_element (ENABLE_NODE, &reload_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_cost_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_redistribute_type_metric_cmd_vtysh); ++ install_element (ZEBRA_NODE, &no_rip_redistribute_rip_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_standard2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_neighbor_id_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community_list_exact_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_out_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbor_routes_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_router_id_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_neighbor_damp_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_confederation_identifier_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_cost_addr_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_distance_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_neighbor_received_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_neighbor_cmd_vtysh); ++ install_element (RMAP_NODE, &ospf6_routemap_no_set_forwarding_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community2_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_topology_router_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_seq_le_ge_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_zebra_packet_direct_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_in_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_spf_tree_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_extcommunity_list_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ripng_split_horizon_poisoned_reverse_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community_list_exact_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_as_set_summary_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_summary_only_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community3_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_set_peer_group_cmd_vtysh); ++ install_element (RIP_NODE, &no_distribute_list_prefix_all_cmd_vtysh); ++ install_element (RIP_NODE, &distribute_list_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_rip_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_in_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_cmd_vtysh); ++ install_element (MPLS_LS_INTERFACE_NODE, &no_label_map_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_network_area_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ipv6_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_summary_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_address_label_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_redistribute_type_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &ipv6_bgp_neighbor_routes_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_origin_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_topology_router_lsid_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_neighbor_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_zebra_client_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ripng_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_interface_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_rip_status_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community2_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_route_protocol_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_cidr_only_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_version_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_soft_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_allowas_in_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_metric_routemap_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_local_as_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community4_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_extcommunity_list_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbors_peer_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_as_set_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_flags_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community4_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community_list_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_mask_route_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community_list_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_soft_out_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ip_next_hop_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community_list_exact_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &bgp_network_mask_route_map_cmd_vtysh); ++ install_element (INTERFACE_NODE, &multicast_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_damp_set2_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_transmit_delay_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community4_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_dampening_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_default_metric_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_router_bgp_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_seq_ge_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_damp_set3_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_day_month_day_month_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_rip_zebra_cmd_vtysh); ++ install_element (RMAP_NODE, &set_metric_addsub_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_forwarding_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_version_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_router_bgp_view_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_as_set_summary_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_vpnv4_nexthop_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_as_path_all_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_natural_route_map_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_allowas_in_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_adv_router_dump_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_filter_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_description_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (RMAP_NODE, &set_tag_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_month_day_month_day_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_summary_name_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_update_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_activate_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_route_map_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_advertise_interval_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_neighbor_received_routes_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &ipv6_bgp_network_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbor_routes_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_route_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_lsa_sub_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_authentication_string_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_rip_packet_direct_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_distance_source_access_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_version_ospf6_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_vpnv4_nexthop_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbors_peer_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_ge_le_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_events_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_ifname_pref_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_interface_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_update_direct_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_route_addr_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_spf_tree_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_split_horizon_poisoned_reverse_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_packet_send_recv_detail_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_route_reflector_client_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ripng_packet_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_capability_orf_prefix_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_as_set_summary_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_mask_summary_only_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_received_routes_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_in_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_out_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_backdoor_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_dead_interval_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &bgp_network_mask_natural_route_map_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_unsuppress_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_ism_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_lsa_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ipv6_address_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_route_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_summary_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_authentication_string_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_in_prefix_filter_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_host_host_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community3_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_soft_out_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_version_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_name_seq_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ripng_events_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_unsuppress_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_seq_ge_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_timers_connect_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_route_map_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_router_id_cmd_vtysh); ++ install_element (RMAP_NODE, &set_metric_type_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_route_server_client_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_zebra_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community4_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_community_list_arg_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_passive_interface_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_mask_flags_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_distance_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_route_map_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_as_path_cmd_vtysh); ++ install_element (VIEW_NODE, &ipv6_bgp_neighbor_received_routes_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_filter_list_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_export_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_bgp_update_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ip_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &undebug_bgp_filter_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_offset_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_extcommunity_list_arg_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_damp_unset2_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_regexp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbor_damp_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_activate_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_addr_cmd_vtysh); ++ install_element (RMAP_NODE, &match_community_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_mask_any_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_neighbor_routes_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_mask_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_network_mask_natural_route_map_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_val_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_authentication_mode_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_default_information_originate_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community_list_exact_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_neighbor_all_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_distribute_list_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_metric_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_regexp_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_damp_unset2_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_extcommunity_list_name_standard_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_addr_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_out_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_area_range_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_route_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_mask_summary_as_set_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_route_map_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_timers_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_zebra_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ripng_packet_detail_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_confederation_identifier_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_day_month_month_day_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_any_mask_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_view_route_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_unsuppress_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_in_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_mask_as_set_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_send_community_type_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_bandwidth_if_val_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (BGP_NODE, &old_ipv6_bgp_network_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_summary_name_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_summary_only_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ripng_events_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_warning_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_cmd_vtysh); ++ install_element (RIP_NODE, &no_if_rmap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_soft_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_type_adv_router_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community3_exact_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_paths_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_name_standard_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_flags_distance2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_neighbor_routerid_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_route_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_send_community_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_summary_only_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_route_reflector_client_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_default_metric_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_in_prefix_filter_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_topology_router_cmd_vtysh); ++ install_element (BGP_NODE, &old_no_ipv6_bgp_network_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_tags_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_default_information_originate_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_duration_day_month_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_nexthop_self_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_md5_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community_info_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_community_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_community3_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_param2_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ipv6_ospf6_advertise_force_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_neighbor_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_route_map_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ripng_events_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_param4_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_prefix_list_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_type_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_ism_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_redistribute_routemap_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_name_seq_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_filter_list_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_range_advertise_cost_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_sequence_number_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community3_exact_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ipv6_next_hop_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ripng_packet_direct_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_cost_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_addr_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_bgp_network_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community2_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_route_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_zebra_kernel_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_paths_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_out_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_damp_set3_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_out_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_compatible_rfc1583_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_prefix_list_name_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community_list_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_mask_flags2_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_as_out_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_origin_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_rip_zebra_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community3_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_in_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_distribute_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_nsm_sub_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community_list_exact_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_import_list_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_dead_interval_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_regexp_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_type_metric_routemap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbor_received_prefix_filter_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_name_standard_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ip_address_prefix_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_ifname_flags_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_as_set_cmd_vtysh); ++ install_element (VIEW_NODE, &show_debugging_zebra_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_hello_interval_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_type_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_router_ospf_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_authentication_mode_type_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community_all_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged1_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_standard_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community2_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_standard_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_cmd_vtysh); ++ install_element (RMAP_NODE, &match_ipv6_address_prefix_list_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_port_val_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_transparent_nexthop_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_external_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_receive_version_2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community2_exact_cmd_vtysh); ++ install_element (CONFIG_NODE, &dump_bgp_updates_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_neighbor_advertised_routes_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_always_compare_med_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_aggregate_address_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_metric_type_val_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_activate_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_shutdown_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ospf_cost_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_flags_pref_cmd_vtysh); ++ install_element (CONFIG_NODE, &bgp_multiple_instance_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ripng_status_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_filter_list_cmd_vtysh); ++ install_element (RMAP_NODE, &match_tag_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_set_peer_group_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_priority_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_route_protocol_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_as_path_access_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_regexp_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_override_capability_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &ipv6_mbgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_metric_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_peer_group_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_rip_events_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community4_exact_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_send_community_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_send_community_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_filter_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_nexthop_self_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_timers_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_refresh_timer_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbor_advertised_routes_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_passive_interface_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_transparent_as_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_range_advertise_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_route_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_standard_host_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_in_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbor_routes_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_import_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_table_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbors_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_seq_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community4_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_route_cmd_vtysh); ++ install_element (INTERFACE_NODE, &shutdown_if_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_offset_list_ifname_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &vpnv4_network_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_dampening_address_mask_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_key_chain_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_prefix_filter_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_addr_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_ism_cmd_vtysh); ++ install_element (ZEBRA_NODE, &no_ripng_redistribute_ripng_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_instance_ipv4_summary_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_cluster_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_vpnv4_soft_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_description_arg_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_prefix_longer_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_flags_distance2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community3_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_extcommunity_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_network_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_route_map_cmd_vtysh); ++ install_element (RMAP_NODE, &set_atomic_aggregate_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_activate_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_fast_external_failover_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_send_version_1_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community3_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_filter_list_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_mask_natural_backdoor_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_statistics_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_router_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_route_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_prefix_list_name_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_neighbor_advertised_route_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_range_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_transmitdelay_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_bandwidth_if_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community3_exact_cmd_vtysh); ++ install_element (RIP_NODE, &rip_redistribute_type_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &bgp_network_mask_route_map_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_default_local_preference_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_rfc1583_flag_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_type_metric_routemap_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community4_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_ipv4_soft_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_zebra_sub_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_zebra_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_topology_router_lsid_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_cost_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_route_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_mask_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_keepalive_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_tag_cmd_vtysh); ++ install_element (RIPNG_NODE, &ipv6_distribute_list_all_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_authentication_addr_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_topology_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbor_damp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_type_routemap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community2_exact_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_description_arg_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_timers_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_event_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_instance_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_forwarding_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community2_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_version_ospf6_cmd_vtysh); ++ install_element (ZEBRA_NODE, &ripng_redistribute_ripng_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbor_flap_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_ifname_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_standard_host_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_distance_source_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_route_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_receive_version_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_rip_packet_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_auto_cost_reference_bandwidth_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_route_server_client_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_import_check_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_network_mask_natural_route_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &dump_bgp_all_interval_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_route_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_ge_le_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_access_list_remark_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community_exact_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_route_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_filter_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community4_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community4_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbor_advertised_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_send_community_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_interface_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_soft_out_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_unsuppress_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_any_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_day_month_day_month_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_summary_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_external_ipv4_out_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_remote_as_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community4_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_filter_list_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ipv6_distribute_list_all_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_mask_as_set_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_redistribute_type_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_md5_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_community_none_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_always_compare_med_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_route_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_inter_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_route_prefix_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_seq_ge_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_out_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community4_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_group_in_prefix_filter_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community3_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_flap_damping_route_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_mask_as_set_summary_cmd_vtysh); ++ install_element (RMAP_NODE, &set_origin_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_packet_send_recv_detail_cmd_vtysh); ++ install_element (RMAP_NODE, &match_metric_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_receive_version_num_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_rip_packet_direct_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_route_pref_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_refresh_timer_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_rip_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_soft_out_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_seq_le_ge_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_duration_day_month_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_interface_ifname_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_bestpath_med3_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_distance_source_access_list_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_community_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_summary_as_set_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_zebra_sub_cmd_vtysh); ++ install_element (RMAP_NODE, &match_aspath_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_filter_list_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_distance_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_topology_router_lsid_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_forwarding_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community2_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_timers_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_soft_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_stub_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_neighbor_detail_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_in_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_md5_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_timers_val_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_originator_id_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_prefix_cmd_vtysh); ++ install_element (RIP_NODE, &rip_neighbor_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_route_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_any_any_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_log_neighbor_changes_cmd_vtysh); ++ install_element (BGP_NODE, &no_auto_summary_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_route_reflector_client_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_le_ge_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_deterministic_med_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &no_key_chain_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_split_horizon_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_filter_list_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_priority_addr_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_community_delete_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_adv_router_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_rmap_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_standard_nomask_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_adv_router_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_neighbor_damp_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_local_pref_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_bgp_multiple_instance_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_zebra_sub_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_metric_type_routemap_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_nsm_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_as_set_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ipv6_nexthop_local_cmd_vtysh); ++ install_element (CONFIG_NODE, &bgp_config_type_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_prefix_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_routemap_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_val2_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_mask_natural_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_route_ospf6_external_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_mask_distance_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debugging_rip_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_route_map_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_passive_cmd_vtysh); ++ install_element (BGP_NODE, &no_aggregate_address_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_neighbor_damp_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_cidr_only_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_route_server_client_cmd_vtysh); ++ install_element (OSPF_NODE, &no_router_ospf_id_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_intra_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_vpnv4_soft_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_name_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_redistribute_type_metric_routemap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community4_exact_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_redistribute_source_routemap_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_bgp_events_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_aspath_val_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_remove_private_as_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_route_reflector_client_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_ospf6_area_route_prefix_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_authentication_args_addr_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_prefix_longer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_neighbor_damp_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_type_routemap_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_ip_address_val_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_passive_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_router_zebra_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_le_cmd_vtysh); ++ install_element (VIEW_NODE, &show_zebra_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_send_community_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community2_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_prefix_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_community3_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_distribute_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_topology_router_lsid_cmd_vtysh); ++ install_element (ENABLE_NODE, &ipv6_mbgp_neighbor_routes_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ripng_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_send_version_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_flags_distance_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_send_community_type_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_route_reflector_client_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_send_community_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ipv6_distribute_list_prefix_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_community_exact_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_offset_list_ifname_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_seq_ge_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_distance_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_event_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_timers_spf_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community3_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_community_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_cmd_vtysh); ++ install_element (ZEBRA_NODE, &no_redistribute_ospf6_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_soft_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_split_horizon_poisoned_reverse_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_event_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_param1_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_type_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_ge_le_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_metric_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_distribute_list_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_type_metric_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_ge_cmd_vtysh); ++ install_element (RIPNG_NODE, &ripng_default_information_originate_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community_all_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_mask_flags_distance2_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd_vtysh); ++ install_element (RMAP_NODE, &set_weight_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_route_prefix_longer_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_linkdetect_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_seq_le_ge_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_seq_ge_le_cmd_vtysh); ++ install_element (VIEW_NODE, &ipv6_mbgp_neighbor_received_routes_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_events_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_instance_neighbors_peer_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_mask_summary_only_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ip_nexthop_val_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_neighbor_priority_poll_interval_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_activate_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_neighbor_poll_interval_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_timers_val_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_ospf_authentication_key_addr_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_route_reflector_client_cmd_vtysh); ++ install_element (RIPNG_NODE, &ipv6_distribute_list_prefix_all_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &send_lifetime_infinite_month_day_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_soft_out_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_default_ipv4_unicast_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_detail_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_route_flags_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_route_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_lsa_sub_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_bestpath_aspath_ignore_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_cluster_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &old_no_ipv6_aggregate_address_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_ism_sub_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_neighbor_received_routes_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_interface_area_passive_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_zebra_events_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ripng_zebra_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_le_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_param1_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_regexp_cmd_vtysh); ++ install_element (RMAP_NODE, &rmap_onmatch_goto_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_community_list_standard_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_redistribute_ipv4_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_scan_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_prefix_list_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_mask_summary_as_set_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_offset_list_ifname_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_soft_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_version_val_cmd_vtysh); ++ install_element (RMAP_NODE, &set_ipv6_nexthop_local_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_extended_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_export_list_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_ebgp_multihop_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_send_version_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_nsm_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_prefix_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_metric_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_cmd_vtysh); ++ install_element (RIP_NODE, &rip_distance_source_access_list_cmd_vtysh); ++ install_element (ZEBRA_NODE, &rip_redistribute_rip_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_prefix_list_description_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_redistribute_type_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_route_flapping_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_priority_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_ipv4_soft_cmd_vtysh); ++ install_element (RMAP_NODE, &rmap_onmatch_next_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_neighbor_poll_interval_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_vpnv4_soft_in_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_rip_events_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_prefix_first_match_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &aggregate_address_mask_as_set_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_rd_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_zebra_kernel_cmd_vtysh); ++ install_element (RMAP_NODE, &set_ecommunity_soo_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_prefix_longer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_origin_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_external_out_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_neighbor_advertised_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_regexp_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_prefix_list_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_intra_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_pref_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_val_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_neighbor_received_routes_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_distance_source_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_dont_capability_negotiate_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_prefix_list_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_bgp_network_route_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_filter_list_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_distance_source_access_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_as_path_access_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ospf_dead_interval_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_zebra_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_prefix_list_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_type_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_nexthop_self_cmd_vtysh); ++ install_element (RIP_NODE, &if_rmap_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_soft_out_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_bestpath_med2_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_neighbors_cmd_vtysh); ++ install_element (RMAP_NODE, &set_ipv6_nexthop_global_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_interface_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_aspath_prepend_val_cmd_vtysh); ++ install_element (RIPNG_NODE, &ipv6_distribute_list_prefix_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged2_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_cluster_id32_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_neighbor_int_detail_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_as_set_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ospf_nsm_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_origin_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_prefix_longer_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged7_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_prefix_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_lsa_sub_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_advertise_prefix_list_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_neighbor_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_zebra_kernel_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &neighbor_default_originate_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_access_list_exact_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_attr_info_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_vlink_authkey_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_peer_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_flags_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_enforce_first_as_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_metric_rmap_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_mask_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_damp_set_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_nexthop_self_cmd_vtysh); ++ install_element (VIEW_NODE, &show_table_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_mask_summary_as_set_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_port_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_abr_type_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_redistribute_ipv4_metric_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_detail_cmd_vtysh); ++ install_element (KEYCHAIN_NODE, &no_key_chain_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_remark_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_neighbor_poll_interval_priority_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_ism_sub_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_type_metric_routemap_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_route_map_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_expanded_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_remark_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_rip_send_version_num_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_regexp_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_timers_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_dampening_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_prefix_first_match_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_activate_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_bgp_network_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_community_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_all_out_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_prefix_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ipv6_ospf6_advertise_prefix_list_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_prefix_longer_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_remark_arg_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_mask_flags_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_aggregator_as_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_vpnv4_all_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_shutdown_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_aggregate_address_summary_only_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community3_exact_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_port_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_instance_summary_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_weight_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_rip_packet_direct_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_as_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_cidr_only_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_metric_routemap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_debug_ospf6_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_community3_exact_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_update_direct_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged4_cmd_vtysh); ++ install_element (CONFIG_NODE, &ipv6_access_list_any_cmd_vtysh); ++ install_element (RMAP_NODE, &set_originator_id_cmd_vtysh); ++ install_element (RMAP_NODE, &no_match_tag_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_instance_neighbors_peer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_community_list_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_interface_area_plist_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_redistribute_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_prefix_list_le_ge_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_community_list_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_seq_le_cmd_vtysh); ++ install_element (RIP_NODE, &no_rip_network_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_mask_summary_only_cmd_vtysh); ++ install_element (CONFIG_NODE, &access_list_standard_nomask_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_distribute_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_prefix_list_summary_name_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_in_cmd_vtysh); ++ install_element (RIP_NODE, &no_distribute_list_all_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_prefix_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community2_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_view_ipv6_neighbor_flap_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_all_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_send_version_2_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged6_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_self_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_neighbor_route_map_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_send_community_type_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_summary_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ripng_packet_detail_cmd_vtysh); ++ install_element (RMAP_NODE, &set_community_delete_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_lsa_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_route_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_prefix_longer_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_redistribute_ipv4_metric_rmap_cmd_vtysh); ++ install_element (RIP_NODE, &rip_redistribute_type_metric_routemap_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_set_peer_group_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged5_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_community_info_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_ebgp_multihop_ttl_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_rmap_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_adv_router_dump_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_community_exact_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ipv6_ospf6_advertise_force_prefix_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_regexp_cmd_vtysh); ++ install_element (RIPNG_NODE, &no_ripng_redistribute_type_metric_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_bgp_summary_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_route_distance_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_bestpath_compare_router_id_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_default_information_originate_always_metric_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_community2_exact_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbor_routes_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged3_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_vpnv4_all_cmd_vtysh); ++ install_element (RMAP_NODE, &set_community_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_local_as_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_mbgp_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_extended_any_mask_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_route_supernets_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ipv6_ripng_split_horizon_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_access_list_standard_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_ipv4_soft_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ipv6_prefix_list_name_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_community_list_all_cmd_vtysh); ++ install_element (ENABLE_NODE, &ipv6_mbgp_neighbor_received_routes_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_cluster_id_arg_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_range_not_advertise_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_cmd_vtysh); ++ install_element (RMAP_NODE, &match_origin_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_ifname_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_type_id_adv_router_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_route_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_detail_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_distribute_list_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_area_range_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_in_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_soft_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_prefix_list_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_ecommunity_rt_val_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_bgp_normal_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_ipv6_aggregate_address_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_prefix_list_prefix_first_match_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_aggregate_address_summary_only_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_ipv6_address_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged9_cmd_vtysh); ++ install_element (RMAP_NODE, &set_ecommunity_rt_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_metric_type_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_view_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_bgp_network_mask_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_neighbors_peer_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_instance_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_external_in_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_bgp_fsm_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_bgp_update_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_router_ripng_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged10_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_allowas_in_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_timers_connect_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_ospf_zebra_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_weight_val_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_soft_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_seq_le_cmd_vtysh); ++ install_element (RMAP_NODE, &set_community_none_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_mask_backdoor_cmd_vtysh); ++ install_element (INTERFACE_NODE, &no_multicast_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_instance_all_soft_in_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &no_key_string_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_prefix_list_description_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_router_id_val_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_bestpath_med_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_passive_interface_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &aggregate_address_summary_only_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_cmd_vtysh); ++ install_element (BGP_NODE, &bgp_fast_external_failover_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_route_prefix_longer_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_prefix_longer_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_bgp_keepalive_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_ipv6_community2_cmd_vtysh); ++ install_element (RIP_NODE, &rip_timers_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_ospf_lsa_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_mask_as_set_cmd_vtysh); ++ install_element (CONFIG_NODE, &debug_rip_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &no_debug_ripng_packet_direct_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ipv6_prefix_list_name_seq_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &neighbor_route_map_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_area_shortcut_cmd_vtysh); ++ install_element (VIEW_NODE, &show_bgp_ipv6_regexp_cmd_vtysh); ++ install_element (OSPF6_NODE, &ospf6_passive_interface_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_attr_unchanged8_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_ospf_database_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &neighbor_soft_reconfiguration_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_cmd_vtysh); ++ install_element (KEYCHAIN_KEY_NODE, &accept_lifetime_month_day_day_month_cmd_vtysh); ++ install_element (CONFIG_NODE, &dump_bgp_updates_interval_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_bgp_prefix_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_maximum_prefix_warning_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_view_prefix_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_ipv6_neighbor_routes_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_view_neighbor_advertised_route_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_filter_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_neighbor_flap_cmd_vtysh); ++ install_element (CONFIG_NODE, &ip_extcommunity_list_standard_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_bgp_fsm_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_ipv4_summary_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_instance_neighbors_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &neighbor_distribute_list_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_peer_ipv4_out_cmd_vtysh); ++ install_element (OSPF_NODE, &no_ospf_refresh_timer_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ripng_events_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_strict_capability_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_all_ipv4_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_group_soft_out_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_all_in_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_debug_rip_packet_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_as_path_access_list_all_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_unsuppress_map_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_instance_all_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_area_spf_node_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_peer_soft_in_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_mask_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_mbgp_community_all_cmd_vtysh); ++ install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_prefix_list_detail_name_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_ip_bgp_flap_address_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_bgp_network_mask_natural_cmd_vtysh); ++ install_element (BGP_NODE, &no_bgp_network_mask_natural_backdoor_cmd_vtysh); ++ install_element (BGP_IPV6_NODE, &no_ipv6_aggregate_address_summary_only_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_ip_bgp_as_in_prefix_filter_cmd_vtysh); ++ install_element (ENABLE_NODE, &debug_ospf_lsa_sub_cmd_vtysh); ++ install_element (RMAP_NODE, &no_set_weight_cmd_vtysh); ++ install_element (ENABLE_NODE, &clear_bgp_ipv6_peer_group_in_prefix_filter_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_remove_private_as_cmd_vtysh); ++ install_element (BGP_NODE, &neighbor_allowas_in_cmd_vtysh); ++ install_element (BGP_IPV4M_NODE, &no_bgp_network_mask_route_map_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_flap_cidr_only_cmd_vtysh); ++ install_element (ENABLE_NODE, &show_bgp_regexp_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ipv6_ospf6_topology_cmd_vtysh); ++ install_element (OSPF6_NODE, &no_ospf6_passive_interface_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_routes_cmd_vtysh); ++ install_element (BGP_IPV4_NODE, &no_neighbor_route_server_client_cmd_vtysh); ++ install_element (OSPF_NODE, &ospf_neighbor_cmd_vtysh); ++ install_element (BGP_VPNV4_NODE, &no_neighbor_route_server_client_cmd_vtysh); ++ install_element (BGP_NODE, &no_neighbor_description_cmd_vtysh); ++ install_element (VIEW_NODE, &show_ip_bgp_ipv4_community2_cmd_vtysh); ++ install_element (BGP_NODE, &aggregate_address_summary_as_set_cmd_vtysh); ++ install_element (INTERFACE_NODE, &ip_rip_authentication_key_chain_cmd_vtysh); ++} +diff --exclude=rsvpd -uNr quagga/zebra/interface.c quagga-mpls/zebra/interface.c +--- quagga/zebra/interface.c 2004-02-25 13:47:26.000000000 -0600 ++++ quagga-mpls/zebra/interface.c 2004-07-14 23:38:32.680427976 -0500 +@@ -39,6 +39,7 @@ + #include "zebra/zserv.h" + #include "zebra/redistribute.h" + #include "zebra/debug.h" ++#include "zebra/mpls_vty.h" + + /* Allocate a new internal interface index + * This works done from the top so that %d macros +@@ -548,6 +549,13 @@ + vty_out(vty, "%s", VTY_NEWLINE); + } + ++ /* MPLS labelspace */ ++ if (ifp->mpls_labelspace != -1) ++ { ++ vty_out(vty, " MPLS labelspace %u", ifp->mpls_labelspace); ++ vty_out(vty, "%s", VTY_NEWLINE); ++ } + -+ li = XMALLOC(MTYPE_MPLS_RSVPTE, sizeof(struct rsvpte_interface)); -+ memset(li, 0, sizeof(struct rsvpte_interface)); -+ li->mi = mi; + for (node = listhead (ifp->connected); node; nextnode (node)) + { + connected = getdata (node); +@@ -1313,6 +1321,39 @@ + } + #endif /* KAME */ + ++DEFUN (mpls_labelspace, ++ mpls_labelspace_cmd, ++ "mpls labelspace <0-255>", ++ "MPLS interface configuration\n" ++ "labelspace\n" ++ "labelspace number\n") ++{ ++ struct interface *ifp; ++ ++ ifp = vty->index; ++ ifp->mpls_labelspace = atoi(argv[0]); + -+ li->admin_up = MPLS_BOOL_TRUE; -+ li->create_on_hold = MPLS_BOOL_FALSE; ++ mpls_ctrl_set_interface_labelspace(ifp); + -+ return li; ++ return CMD_SUCCESS; +} + -+void rsvpte_if_free(struct rsvpte_interface *li) { -+ XFREE(MTYPE_MPLS_RSVPTE, li); -+} ++DEFUN (no_mpls_labelspace, ++ no_mpls_labelspace_cmd, ++ "no mpls labelspace", ++ NO_STR ++ "MPLS interface configuration\n" ++ "labelspace\n") ++{ ++ struct interface *ifp; ++ ifp = vty->index; + -+void rsvpte_interface_create(struct mpls_interface *mi) { -+ mi->rsvpte->create_on_hold = MPLS_BOOL_FALSE; ++ ifp->mpls_labelspace = -1; ++ mpls_ctrl_set_interface_labelspace(ifp); + -+ rsvpte_interface_admin_state_finish(mi); ++ return CMD_SUCCESS; +} + -+void rsvpte_interface_delete(struct mpls_interface *mi) { -+ struct rsvpte *rsvpte = mi->mpls->rsvpte; + int + if_config_write (struct vty *vty) + { +@@ -1328,6 +1369,10 @@ + struct prefix *p; + + ifp = getdata (node); + -+ mi->rsvpte->create_on_hold = MPLS_BOOL_TRUE; ++ if (ifp->node != INTERFACE_NODE) ++ continue; + -+ if (rsvpte) { -+ rsvpte_interface_admin_state_start(mi); -+ } -+} + if_data = ifp->info; + + vty_out (vty, "interface %s%s", ifp->name, +@@ -1342,6 +1387,9 @@ + if (ifp->bandwidth != 0) + vty_out(vty, " bandwidth %u%s", ifp->bandwidth, VTY_NEWLINE); + ++ if (ifp->mpls_labelspace != -1) ++ vty_out(vty, " mpls labelspace %u%s",ifp->mpls_labelspace,VTY_NEWLINE); + -+int rsvpte_interface_startup(struct mpls_interface *mi) { -+ return MPLS_SUCCESS; -+} + if (CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION)) + vty_out(vty, " link-detect%s", VTY_NEWLINE); + +@@ -1424,6 +1472,8 @@ + install_element (INTERFACE_NODE, &ip_tunnel_cmd); + install_element (INTERFACE_NODE, &no_ip_tunnel_cmd); + #endif /* KAME */ ++ install_element (INTERFACE_NODE, &mpls_labelspace_cmd); ++ install_element (INTERFACE_NODE, &no_mpls_labelspace_cmd); + #ifdef HAVE_NETLINK + install_element (INTERFACE_NODE, &ip_address_secondary_cmd); + install_element (INTERFACE_NODE, &ip_address_label_cmd); +diff --exclude=rsvpd -uNr quagga/zebra/interface.h quagga-mpls/zebra/interface.h +--- quagga/zebra/interface.h 2004-02-25 13:47:26.000000000 -0600 ++++ quagga-mpls/zebra/interface.h 2004-03-03 14:17:06.000000000 -0600 +@@ -153,6 +153,8 @@ + #ifdef RTADV + struct rtadvconf rtadv; + #endif /* RTADV */ ++ ++ unsigned int mpls_tunnel; + }; + + void if_delete_update (struct interface *ifp); +diff --exclude=rsvpd -uNr quagga/zebra/main.c quagga-mpls/zebra/main.c +--- quagga/zebra/main.c 2004-02-25 13:47:31.000000000 -0600 ++++ quagga-mpls/zebra/main.c 2004-02-25 13:57:55.000000000 -0600 +@@ -34,7 +34,7 @@ + #include "zebra/rib.h" + #include "zebra/zserv.h" + #include "zebra/debug.h" +-#include "zebra/rib.h" ++#include "zebra/router-id.h" + + /* Zebra instance */ + struct zebra_t zebrad = +@@ -299,6 +299,7 @@ + rib_init (); + zebra_if_init (); + zebra_debug_init (); ++ router_id_init(); + zebra_vty_init (); + access_list_init (); + rtadv_init (); +diff --exclude=rsvpd -uNr quagga/zebra/Makefile.am quagga-mpls/zebra/Makefile.am +--- quagga/zebra/Makefile.am 2004-02-25 13:47:20.000000000 -0600 ++++ quagga-mpls/zebra/Makefile.am 2004-05-03 18:32:28.000000000 -0500 +@@ -14,19 +14,21 @@ + rtread_method = @RTREAD_METHOD@ + kernel_method = @KERNEL_METHOD@ + other_method = @OTHER_METHOD@ ++mpls_method = mpls_null.o + + otherobj = $(ipforward) $(if_method) $(if_proc) $(rt_method) \ +- $(rtread_method) $(kernel_method) $(other_method) ++ $(rtread_method) $(kernel_method) $(other_method) $(mpls_method) + + sbin_PROGRAMS = zebra + + zebra_SOURCES = \ + zserv.c main.c interface.c connected.c ioctl.c zebra_rib.c \ +- redistribute.c debug.c rtadv.c zebra_snmp.c zebra_vty.c ++ redistribute.c debug.c rtadv.c zebra_snmp.c zebra_vty.c router-id.c \ ++ mpls_vty.c + + noinst_HEADERS = \ + connected.h ioctl.h rib.h rt.h zserv.h redistribute.h debug.h rtadv.h \ +- interface.h ipforward.h ++ interface.h ipforward.h router-id.h + + zebra_LDADD = ../lib/libzebra.a $(otherobj) $(LIBCAP) $(LIB_IPV6) + +diff --exclude=rsvpd -uNr quagga/zebra/mpls_linux.c quagga-mpls/zebra/mpls_linux.c +--- quagga/zebra/mpls_linux.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/zebra/mpls_linux.c 2004-07-14 23:37:41.009283184 -0500 +@@ -0,0 +1,168 @@ ++#include ++#include "zebra.h" ++#include "mpls_vty.h" + -+int rsvpte_interface_shutdown(struct mpls_interface *mi) { -+ return MPLS_SUCCESS; -+} ++static int mpls_linux_fd = 0; + -+int rsvpte_interface_admin_state_start(struct mpls_interface *mi) { -+ if (mi->rsvpte->admin_up == MPLS_BOOL_TRUE && mpls_if_is_up(mi)) { -+ return rsvpte_interface_shutdown(mi); -+ } -+ return MPLS_SUCCESS; -+} ++int ++mpls_ctrl_init() ++{ ++ mpls_linux_fd = socket(AF_INET,SOCK_DGRAM,0); ++#if 0 ++ struct ifreq ifr; ++#endif + -+int rsvpte_interface_admin_state_finish(struct mpls_interface *mi) { -+ if (mi->rsvpte->admin_up == MPLS_BOOL_TRUE && mpls_if_is_up(mi)) { -+ return rsvpte_interface_startup(mi); ++ if(mpls_linux_fd < 0) ++ { ++ return -1; + } -+ return MPLS_SUCCESS; -+} + -+void rsvpte_if_up(struct mpls_interface *mi) { -+ if (mi->rsvpte && mi->rsvpte->admin_up == MPLS_BOOL_TRUE) { -+ rsvpte_interface_startup(mi); -+ } -+} ++#if 0 ++ ioctl(mpls_linux_fd,SIOCMPLSILMFLUSH,&ifr); ++ ioctl(mpls_linux_fd,SIOCMPLSNHLFEFLUSH,&ifr); ++#endif + -+void rsvpte_if_down(struct mpls_interface *mi) { -+ if (mi->rsvpte && mi->rsvpte->admin_up == MPLS_BOOL_TRUE) { -+ rsvpte_interface_shutdown(mi); -+ } ++ return 0; +} -diff --exclude=.p4config -uNr zebra/mplsd/rsvpte_interface.h zebra-ldp/mplsd/rsvpte_interface.h ---- zebra/mplsd/rsvpte_interface.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/rsvpte_interface.h 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,29 @@ -+#ifndef RSVPTE_IF_H -+#define RSVPTE_IF_H -+ -+#include "mpls_struct.h" -+ -+struct mpls_interface; -+ -+struct rsvpte_interface { -+ struct mpls_interface *mi; -+ mpls_bool admin_up; -+ mpls_bool create_on_hold; -+}; -+ -+struct rsvpte_interface *rsvpte_if_new(struct mpls_interface *mi); -+void rsvpte_if_free(struct rsvpte_interface *li); -+ -+void rsvpte_if_up(struct mpls_interface *mi); -+void rsvpte_if_down(struct mpls_interface *mi); + -+int rsvpte_interface_startup(struct mpls_interface *mi); -+int rsvpte_interface_shutdown(struct mpls_interface *mi); ++int ++mpls_ctrl_nhlfe_unregister(struct zmpls_out_segment *old) ++{ ++ struct mpls_out_label_req mol_req; + -+void rsvpte_interface_create(struct mpls_interface *mi); -+void rsvpte_interface_delete(struct mpls_interface *mi); -+int rsvpte_interface_admin_state_start(struct mpls_interface *mi); -+int rsvpte_interface_admin_state_finish(struct mpls_interface *mi); ++ mol_req.mol_label.ml_type = MPLS_LABEL_KEY; ++ mol_req.mol_label.u.ml_key = old->out_key; ++ return ioctl(mpls_linux_fd,SIOCMPLSNHLFEDEL,&mol_req); ++} + ++int ++mpls_ctrl_nhlfe_register(struct zmpls_out_segment *new) ++{ ++ struct mpls_out_label_req mol_req; ++ struct mpls_instr_req mir_req; ++ struct interface *ifp; ++ int result; + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/rsvpte_vty.c zebra-ldp/mplsd/rsvpte_vty.c ---- zebra/mplsd/rsvpte_vty.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/rsvpte_vty.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,261 @@ -+#include ++ mol_req.mol_label.ml_type = MPLS_LABEL_KEY; ++ mol_req.mol_label.u.ml_key = 0; ++ ++ result = ioctl(mpls_linux_fd,SIOCMPLSNHLFEADD,&mol_req); ++ if (result < 0) ++ { ++ return -1; ++ } ++ new->out_key = mol_req.mol_label.u.ml_key; + -+#include "rsvpte.h" -+#include "rsvpte_interface.h" ++ mir_req.mir_direction = MPLS_OUT; ++ memcpy(&mir_req.mir_label,&mol_req.mol_label,sizeof(struct mpls_label)); + -+#include "impl_mpls.h" ++ mir_req.mir_instr[0].mir_opcode = MPLS_OP_PUSH; ++ mir_req.mir_instr[0].mir_data.push.ml_type = MPLS_LABEL_GEN; ++ mir_req.mir_instr[0].mir_data.push.u.ml_gen = new->push.u.gen; + -+#include "mpls.h" -+#include "mpls_interface.h" ++ mir_req.mir_instr[1].mir_opcode = MPLS_OP_SET; + -+#include "command.h" -+#include "zclient.h" -+#include "vty.h" ++ switch (new->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ ifp = if_lookup_by_name (new->nh.ifname); ++ mir_req.mir_instr[1].mir_data.set.mni_if = ifp ? ifp->ifindex : 0; ++ break; ++ case NEXTHOP_TYPE_IPV4: ++ case NEXTHOP_TYPE_IPV6: ++ default: ++ assert(0); ++ } + -+extern struct zclient *zclient; ++ switch (new->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ break; ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ { ++ struct sockaddr_in addr; ++ addr.sin_family = AF_INET; ++ addr.sin_addr = new->nh.gate.ipv4; ++ memcpy(&mir_req.mir_instr[1].mir_data.set.mni_addr, &addr, sizeof(addr)); ++ break; ++ } ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ { ++ struct sockaddr_in6 addr; ++ addr.sin6_family = AF_INET6; ++ addr.sin6_addr = new->nh.gate.ipv6; ++ memcpy(&mir_req.mir_instr[1].mir_data.set.mni_addr, &addr, sizeof(addr)); ++ break; ++ } ++ default: ++ assert(0); ++ } + -+DEFUN (mpls_rsvpte, -+ mpls_rsvpte_cmd, -+ "mpls rsvpte", -+ "MPLS configuration\n" -+ "Start RSVPTE configuration\n") { ++ mir_req.mir_instr_length = 2; + -+ vty->node = MPLS_RSVPTE_NODE; -+ vty->index = rsvpte_get(); ++ result = ioctl(mpls_linux_fd,SIOCSMPLSOUTINSTR,&mir_req); + -+ return CMD_SUCCESS; ++ return (result < 0) ? mpls_ctrl_nhlfe_unregister(new) : 0; +} + -+DEFUN (no_mpls_rsvpte, -+ no_mpls_rsvpte_cmd, -+ "no mpls rsvpte", -+ NO_STR -+ "MPLS configuration\n" -+ "Global RSVPTE configuration\n") { -+ struct mpls *mpls = mpls_get(); ++int ++mpls_ctrl_ilm_unregister(struct zmpls_in_segment *old) ++{ ++ struct mpls_in_label_req mil_req; + -+ if (!mpls->rsvpte) { -+ vty_out (vty, "There isn't active an RSVPTE instance.%s", VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++ mil_req.mil_label.ml_type = MPLS_LABEL_GEN; ++ mil_req.mil_label.u.ml_gen = old->label.u.gen; ++ mil_req.mil_label.ml_index = old->labelspace; + -+ rsvpte_finish(mpls->rsvpte); -+ return CMD_SUCCESS; ++ return ioctl(mpls_linux_fd,SIOCMPLSILMDEL,&mil_req); +} + -+DEFUN (mpls_rsvpte_lsrid, -+ mpls_rsvpte_lsrid_cmd, -+ "lsr-id A.B.C.D", -+ "RSVPTE Label Switch Router Identifier\n" -+ "IP Address\n") { -+ struct rsvpte *rsvpte = (struct rsvpte*)vty->index; ++int ++mpls_ctrl_ilm_register(struct zmpls_in_segment *new, ++ struct zmpls_out_segment *out) ++{ ++ struct mpls_in_label_req mil_req; ++ int result; + -+ rsvpte->lsr_id_is_static = MPLS_BOOL_TRUE; ++ mil_req.mil_label.ml_type = MPLS_LABEL_GEN; ++ mil_req.mil_label.u.ml_gen = new->label.u.gen; ++ mil_req.mil_label.ml_index = new->labelspace; + -+ rsvpte_admin_state_start(rsvpte); -+ do_rsvpte_router_id_update(rsvpte, ntohl(inet_addr(argv[0]))); -+ rsvpte_admin_state_finish(rsvpte); ++ result = ioctl(mpls_linux_fd,SIOCMPLSILMADD,&mil_req); + -+ return CMD_SUCCESS; -+} ++ if (result < 0) ++ { ++ return -1; ++ } + -+DEFUN (no_mpls_rsvpte_lsrid, -+ no_mpls_rsvpte_lsrid_cmd, -+ "no lsr-id", -+ NO_STR -+ "RSVPTE LSRID\n") { -+ struct rsvpte *rsvpte = (struct rsvpte*)vty->index; ++ if (new->fwd && out) ++ { ++ struct mpls_xconnect_req mx_req; + -+ rsvpte->lsr_id_is_static = MPLS_BOOL_FALSE; ++ memcpy(&mx_req.mx_in, &mil_req.mil_label,sizeof(struct mpls_label)); ++ mx_req.mx_out.ml_type = MPLS_LABEL_KEY; ++ mx_req.mx_out.u.ml_key = out->out_key; + -+ rsvpte_admin_state_start(rsvpte); -+ do_rsvpte_router_id_update(rsvpte, ntohl(rsvpte->mpls->router_id.u.prefix4.s_addr)); -+ rsvpte_admin_state_finish(rsvpte); ++ result = ioctl(mpls_linux_fd,SIOCMPLSXCADD,&mx_req); + -+ return CMD_SUCCESS; ++ if (result < 0) ++ { ++ return mpls_ctrl_ilm_unregister(new); ++ } ++ } ++ ++ return 0; +} + -+DEFUN (mpls_rsvpte_disable, -+ mpls_rsvpte_disable_cmd, -+ "disable", -+ "Disable\n") { -+ struct rsvpte *rsvpte = (struct rsvpte*)vty->index; ++int mpls_ctrl_set_interface_labelspace(struct interface *ifp) ++{ ++ struct mpls_labelspace_req mls_req; + -+ rsvpte_admin_state_start(rsvpte); -+ rsvpte->admin_up = MPLS_BOOL_FALSE; -+ rsvpte_admin_state_finish(rsvpte); ++ mls_req.mls_ifindex = ifp->ifindex; ++ mls_req.mls_labelspace = ifp->mpls_labelspace; ++ ioctl(mpls_linux_fd,SIOCSLABELSPACEMPLS,&mls_req); + -+ return CMD_SUCCESS; ++ return 0; +} +diff --exclude=rsvpd -uNr quagga/zebra/mpls_null.c quagga-mpls/zebra/mpls_null.c +--- quagga/zebra/mpls_null.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/zebra/mpls_null.c 2004-07-14 23:37:50.586827176 -0500 +@@ -0,0 +1,38 @@ ++#include ++#include "mpls_vty.h" + -+DEFUN (no_mpls_rsvpte_disable, -+ no_mpls_rsvpte_disable_cmd, -+ "no disable", -+ NO_STR -+ "Disable\n") { -+ struct rsvpte *rsvpte = (struct rsvpte*)vty->index; -+ -+ rsvpte_admin_state_start(rsvpte); -+ rsvpte->admin_up = MPLS_BOOL_TRUE; -+ rsvpte_admin_state_finish(rsvpte); -+ -+ return CMD_SUCCESS; ++int ++mpls_ctrl_init() ++{ ++ return 0; +} + -+DEFUN (mpls_show_rsvpte, mpls_show_rsvpte_cmd, -+ "show rsvpte", -+ SHOW_STR -+ "RSVPTE global setting\n") { -+ struct mpls *mpls = mpls_get(); ++int ++mpls_ctrl_nhlfe_unregister(struct zmpls_out_segment *old) ++{ ++ return 0; ++} + -+ if (!mpls->rsvpte) { -+ vty_out (vty, "There isn't an active RSVPTE instance.%s", VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++int ++mpls_ctrl_nhlfe_register(struct zmpls_out_segment *new) ++{ ++ return 0; ++} + -+ return CMD_SUCCESS; ++int ++mpls_ctrl_ilm_unregister(struct zmpls_in_segment *old) ++{ ++ return 0; +} + -+extern void convert_seconds_to_string(uint32_t secs, char* buf); ++int ++mpls_ctrl_ilm_register(struct zmpls_in_segment *new, ++ struct zmpls_out_segment *out) ++{ ++ return 0; ++} + -+void rsvpte_print_label(struct vty *vty, mpls_label_struct *l) { -+ switch(l->type) { -+ case MPLS_LABEL_TYPE_NONE: -+ vty_out(vty, "label: unknown"); -+ break; -+ case MPLS_LABEL_TYPE_GENERIC: -+ vty_out(vty, "label: gen %d",l->u.gen); -+ break; -+ case MPLS_LABEL_TYPE_ATM: -+ vty_out(vty, "label: atm %d/%d",l->u.atm.vpi,l->u.atm.vci); -+ break; -+ case MPLS_LABEL_TYPE_FR: -+ vty_out(vty, "label: dlci %d",l->u.fr.dlci); -+ break; -+ } ++int mpls_ctrl_set_interface_labelspace(struct interface *ifp) ++{ ++ return 0; +} +diff --exclude=rsvpd -uNr quagga/zebra/mpls_vty.c quagga-mpls/zebra/mpls_vty.c +--- quagga/zebra/mpls_vty.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/zebra/mpls_vty.c 2004-07-14 23:40:33.788016824 -0500 +@@ -0,0 +1,1219 @@ ++#include ++#include "zmpls.h" ++#include "linklist.h" ++#include "vty.h" ++#include "memory.h" ++#include "command.h" ++#include "if.h" ++#include "ioctl.h" + -+DEFUN(rsvpte_intf, -+ rsvpte_intf_cmd, -+ "mpls rsvpte", -+ "MPLS interface configuration\n" -+ "Enable RSVPTE\n") { -+ struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; -+ struct mpls *mpls = mi->mpls; ++#include "zebra/rib.h" ++#include "zebra/zserv.h" ++#include "zebra/interface.h" ++#include "zebra/redistribute.h" ++#include "zebra/router-id.h" ++#include "zebra/connected.h" + -+ if (!mi->rsvpte) { -+ /* user is trying to create a new RSVPTE interface */ -+ /* if a labelspace hasn't been set yet, set it to 0 */ -+ if (mi->labelspace == -1) { -+ mi->labelspace = 0; -+ do_mpls_labelspace(mi); -+ } -+ mi->rsvpte = rsvpte_if_new(mi); ++static ++int label_parse(struct vty *vty, char **argv, struct zmpls_label *label) ++{ ++ if (!strncmp(argv[0], "gen", 3)) ++ { ++ label->type = ZEBRA_MPLS_LABEL_GEN; ++ } ++ else if (!strncmp(argv[0], "atm", 3)) ++ { ++ label->type = ZEBRA_MPLS_LABEL_ATM; ++ } ++ else if (!strncmp(argv[0], "fr", 2)) ++ { ++ label->type = ZEBRA_MPLS_LABEL_FR; ++ } ++ else ++ { ++ vty_out (vty, "'%s' is not a valid label type (gen|atm|fr)%s", ++ argv[0], VTY_NEWLINE); ++ return CMD_WARNING; + } + -+ /* if the global RSVPTE has been created, go ahead and tell RSVPTE about it -+ * otherwise just mark the interface as "on hold" -+ */ -+ if (mpls->rsvpte) { -+ rsvpte_interface_create(mi); -+ } else { -+ mi->rsvpte->create_on_hold = MPLS_BOOL_TRUE; ++ switch (label->type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ if ((!sscanf(argv[1], "%u", &label->u.gen))) ++ { ++ vty_out (vty, "'%s' is not an valid gen label value (16 .. 2^20 - 1)%s", ++ argv[1], VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ if ((sscanf(argv[1], "%hu/%hu", &label->u.atm.vpi, ++ &label->u.atm.vci) != 2)) ++ { ++ vty_out (vty, "'%s' is not an valid atm label value (vpi/vci)%s", ++ argv[1], VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ if ((!sscanf(argv[1], "%u", &label->u.fr))) ++ { ++ vty_out (vty, "'%s' is not an valid fr label value (1 .. 2^17 - 1)%s", ++ argv[1], VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ break; + } -+ -+ vty->node = MPLS_RSVPTE_IF_NODE; -+ + return CMD_SUCCESS; +} + -+DEFUN(no_rsvpte_intf, -+ no_rsvpte_intf_cmd, -+ "no mpls rsvpte", -+ NO_STR -+ "MPLS interface configuration\n" -+ "remove RSVPTE\n") { -+ struct interface *ifp = vty->index; -+ struct mpls_interface *mi = (struct mpls_interface*)ifp->info; ++/*************************** out segment *****************************/ + -+ if (mi->rsvpte) { -+ rsvpte_interface_delete(mi); -+ rsvpte_if_free(mi->rsvpte); -+ mi->rsvpte = NULL; -+ } -+ return CMD_SUCCESS; -+} ++static int mpls_out_segment_cmp(void *val1, void *val2) ++{ ++ struct zmpls_out_segment *v1 = val1; ++ struct zmpls_out_segment *v2 = val2; + -+static int rsvpte_if_config_write (struct vty *vty) { ++ if (v1->index > v2->index) ++ { ++ return 1; ++ } ++ else if (v1->index < v2->index) ++ { ++ return -1; ++ } + return 0; +} + -+static int rsvpte_config_write (struct vty *vty) { -+ struct mpls *mpls = mpls_get(); -+ struct rsvpte *rsvpte = mpls->rsvpte; -+ int write = 0; ++static int mpls_out_segment_nextindex = 1; + -+ if (rsvpte) { -+ vty_out (vty, "!%s", VTY_NEWLINE); -+ vty_out (vty, "mpls rsvpte%s", VTY_NEWLINE); -+ write++; -+ } -+ return write; -+} ++struct list mpls_out_segment_list = { ++ .head = NULL, ++ .tail = NULL, ++ .count = 0, ++ .cmp = mpls_out_segment_cmp, ++ .del = NULL, ++}; + -+int rsvpte_interface_config_write(struct vty *vty, struct mpls_interface *mi) { -+ struct rsvpte_interface *li; -+ struct mpls *mpls; -+ struct rsvpte *rsvpte; -+ int write = 0; ++int ++nhlfe_parse(struct vty *vty, char **argv, struct zmpls_out_segment *out, ++ char* addr) ++{ ++ struct prefix p; ++ int result; + -+ if (mi && mi->rsvpte) { -+ li = mi->rsvpte; -+ mpls = mi->mpls; -+ rsvpte = mpls->rsvpte; ++ result = label_parse (vty, argv, &out->push); ++ if (result != CMD_SUCCESS) ++ return result; + -+ vty_out(vty, " mpls rsvpte%s", VTY_NEWLINE); -+ write++; ++ out->nh.type = NEXTHOP_TYPE_IFNAME; ++ out->nh.ifname = XSTRDUP (0, argv[2]); + -+ vty_out(vty, " !%s",VTY_NEWLINE); ++ if (addr) ++ { ++ str2prefix (addr, &p); ++ if ((p.family == AF_INET && p.prefixlen != IPV4_MAX_BITLEN) || ++ (p.family == AF_INET6 && p.prefixlen != IPV6_MAX_BITLEN)) ++ { ++ vty_out (vty, "Nexthop IP address must be a host address(%s)%s", ++ addr, VTY_NEWLINE); ++ return CMD_WARNING; + } -+ -+ return write; ++ switch (p.family) ++ { ++ case AF_INET: ++ if (p.prefixlen != IPV4_MAX_BITLEN) ++ { ++ vty_out (vty, "Nexthop IP address must be a host address(%s)%s", ++ addr, VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ out->nh.gate.ipv4 = p.u.prefix4; ++ out->nh.type = NEXTHOP_TYPE_IPV4_IFNAME; ++ break; ++ case AF_INET6: ++ if (p.prefixlen != IPV6_MAX_BITLEN) ++ { ++ vty_out (vty, "Nexthop IP address must be a host address(%s)%s", ++ addr, VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ out->nh.gate.ipv6 = p.u.prefix6; ++ out->nh.type = NEXTHOP_TYPE_IPV6_IFNAME; ++ break; ++ default: ++ vty_out (vty, "Invalid nexthop(%s)%s", addr, VTY_NEWLINE); ++ return CMD_WARNING; ++ break; ++ } ++ } ++ return CMD_SUCCESS; +} + -+void rsvpte_vty_show_init() { -+ -+ install_element(VIEW_NODE, &mpls_show_rsvpte_cmd); -+ install_element(ENABLE_NODE, &mpls_show_rsvpte_cmd); ++unsigned int ++mpls_out_segment_find_index_by_nhlfe(struct zmpls_out_segment *out) ++{ ++ listnode node; ++ struct zmpls_out_segment *old; + ++ for (node = listhead (&mpls_out_segment_list); node; nextnode (node)) ++ { ++ old = getdata (node); ++ if (old->owner == out->owner && ++ mpls_label_match(&old->push, &out->push) && ++ nexthop_match(&old->nh, &out->nh)) ++ goto found; ++ } ++ return 0; ++found: ++ return old->index; +} + -+static struct cmd_node rsvpte_if_node = {MPLS_RSVPTE_IF_NODE,"%s(config-if-rsvpte)# ",1}; -+ -+void rsvpte_vty_if_init() { -+ -+ install_node (&rsvpte_if_node, rsvpte_if_config_write); -+ install_default (MPLS_RSVPTE_IF_NODE); -+ -+ install_element(INTERFACE_NODE,&rsvpte_intf_cmd); -+ install_element(INTERFACE_NODE,&no_rsvpte_intf_cmd); ++struct zmpls_out_segment* ++mpls_out_segment_find(unsigned int index) ++{ ++ listnode node; ++ struct zmpls_out_segment *old; + ++ for (node = listhead (&mpls_out_segment_list); node; nextnode (node)) ++ { ++ old = getdata (node); ++ if (index == old->index) ++ { ++ goto found; ++ } ++ } ++ return NULL; ++found: ++ return old; +} + -+static struct cmd_node rsvpte_node = {MPLS_RSVPTE_NODE,"%s(config-rsvpte)# ",1}; -+ -+void rsvpte_vty_init () { -+ -+ fprintf(stderr,"rsvpte_vty_init\n"); -+ -+ install_node (&rsvpte_node, rsvpte_config_write); -+ install_default (MPLS_RSVPTE_NODE); -+ -+ install_element (CONFIG_NODE, &mpls_rsvpte_cmd); -+ install_element (CONFIG_NODE, &no_mpls_rsvpte_cmd); ++static void ++do_mpls_out_segment_unregister(struct zmpls_out_segment *old) ++{ ++ mpls_ctrl_nhlfe_unregister(old); ++ redistribute_delete_mpls_out_segment (old); ++ LISTNODE_DELETE(&mpls_out_segment_list, &old->global); ++ XFREE (MTYPE_TMP, old); ++} + -+ install_element (MPLS_RSVPTE_NODE, &mpls_rsvpte_disable_cmd); -+ install_element (MPLS_RSVPTE_NODE, &no_mpls_rsvpte_disable_cmd); ++int ++mpls_out_segment_unregister(struct zmpls_out_segment *out) ++{ ++ struct zmpls_out_segment *old = mpls_out_segment_find (out->index); + -+ install_element (MPLS_RSVPTE_NODE, &mpls_rsvpte_lsrid_cmd); -+ install_element (MPLS_RSVPTE_NODE, &no_mpls_rsvpte_lsrid_cmd); ++ if (!old) ++ { ++ return 1; ++ } ++ do_mpls_out_segment_unregister (old); ++ return 0; +} -diff --exclude=.p4config -uNr zebra/mplsd/rsvpte_vty.h zebra-ldp/mplsd/rsvpte_vty.h ---- zebra/mplsd/rsvpte_vty.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/rsvpte_vty.h 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,11 @@ -+#ifndef RSVPTE_VTY_H -+#define RSVPTE_VTY_H -+ -+#include "mpls_interface.h" + -+int rsvpte_interface_config_write(struct vty *vty, struct mpls_interface *mi); -+void rsvpte_vty_show_init(); -+void rsvpte_vty_if_init(); -+void rsvpte_vty_init(); ++int ++mpls_out_segment_unregister_by_index(unsigned int index) ++{ ++ struct zmpls_out_segment *old = mpls_out_segment_find (index); + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/static.c zebra-ldp/mplsd/static.c ---- zebra/mplsd/static.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/static.c 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,101 @@ -+#include ++ if (!old) ++ { ++ return 1; ++ } ++ do_mpls_out_segment_unregister (old); ++ return 0; ++} + -+#include "vty.h" -+#include "command.h" -+#include "memory.h" ++int ++mpls_out_segment_register(struct zmpls_out_segment *out) ++{ ++ struct zmpls_out_segment *new; ++ if (out->index) ++ { ++ new = mpls_out_segment_find (out->index); ++ if (new) ++ { ++ return 1; ++ } ++ } + -+#include "static.h" ++ new = XMALLOC (MTYPE_TMP, sizeof (*new)); ++ if (!new) ++ { ++ return 1; ++ } + -+static struct static_outsegment *static_outsegment_new(struct mpls_static *mstatic) { -+ struct static_outsegment *new = XMALLOC(MTYPE_MPLS_STATIC, sizeof(*new)); -+ memset(new,0,sizeof(*new)); -+ new->node.data = new; -+ new->mstatic = mstatic; -+ return new; -+} ++ memcpy (new, out, sizeof (*new)); ++ new->nh.ifname = XSTRDUP (0, out->nh.ifname); ++ new->global.data = new; ++ new->global.next = NULL; ++ new->global.prev = NULL; ++ new->index = mpls_out_segment_nextindex++; ++ out->index = new->index; + -+struct static_outsegment *static_outsegment_get(struct mpls_static *mstatic, -+ unsigned int index, char create) { -+ struct listnode *tmp; -+ struct static_outsegment *out; ++ LISTNODE_ADD(&mpls_out_segment_list, &new->global); + -+ LIST_LOOP(mstatic->outsegment,out,tmp) { -+ if (out->index == index) { -+ return out; -+ } -+ } ++ mpls_ctrl_nhlfe_register(new); ++ out->out_key = new->out_key; + -+ if (create) { -+ out = static_outsegment_new(mstatic); -+ out->index = index; -+ LISTNODE_ADD(mstatic->outsegment, &out->node); -+ return out; -+ } -+ return NULL; -+} ++ redistribute_add_mpls_out_segment (new); + -+void static_outsegment_finish(struct static_outsegment *out) { -+ LISTNODE_DELETE(out->mstatic->outsegment, &out->node); -+ XFREE(MTYPE_MPLS_STATIC,out); ++ return 0; +} + -+static struct static_insegment *static_insegment_new(struct mpls_static *mstatic) { -+ struct static_insegment *new = XMALLOC(MTYPE_MPLS_STATIC, sizeof(*new)); -+ memset(new,0,sizeof(*new)); -+ new->node.data = new; -+ new->mstatic = mstatic; -+ return new; -+} ++/*************************** in segment *****************************/ + -+struct static_insegment *static_insegment_get(struct mpls_static *mstatic, -+ unsigned int index, char create) { -+ struct listnode *tmp; -+ struct static_insegment *in; ++struct list mpls_in_segment_list = { ++ .head = NULL, ++ .tail = NULL, ++ .count = 0, ++ .cmp = NULL, ++ .del = NULL, ++}; + -+ LIST_LOOP(mstatic->insegment,in,tmp) { -+ if (in->index == index) { -+ return in; -+ } -+ } ++static struct zmpls_in_segment* ++mpls_in_segment_find(struct zmpls_in_segment *in) ++{ ++ listnode node; ++ struct zmpls_in_segment *old; + -+ if (create) { -+ in = static_insegment_new(mstatic); -+ in->index = index; -+ LISTNODE_ADD(mstatic->insegment, &in->node); -+ return in; ++ for (node = listhead (&mpls_in_segment_list); node; nextnode (node)) ++ { ++ old = getdata (node); ++ if (in->labelspace == old->labelspace && in->label.type == old->label.type) ++ { ++ switch (in->label.type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ if (in->label.u.gen == old->label.u.gen) ++ { ++ goto found; ++ } ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ if (in->label.u.atm.vpi == old->label.u.atm.vpi && ++ in->label.u.atm.vci == old->label.u.atm.vci) ++ { ++ goto found; ++ } ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ if (in->label.u.fr == old->label.u.fr) ++ { ++ goto found; ++ } ++ break; ++ } + } -+ return NULL; ++ } ++ return NULL; ++found: ++ return old; +} + -+void static_insegment_finish(struct static_insegment *in) { -+ LISTNODE_DELETE(in->mstatic->insegment, &in->node); -+ XFREE(MTYPE_MPLS_STATIC,in); -+} -+ -+static struct mpls_static *static_new(struct mpls *mpls) { -+ struct mpls_static *new = XMALLOC(MTYPE_MPLS_STATIC, sizeof(*new)); -+ -+ memset(new,0,sizeof(*new)); -+ new->mpls = mpls; -+ new->outsegment = list_new(); -+ new->insegment = list_new(); ++int ++mpls_in_segment_unregister(struct zmpls_in_segment *in) ++{ ++ struct zmpls_in_segment *old = mpls_in_segment_find (in); + -+ return new; -+} ++ if (!old) ++ { ++ return 1; ++ } + -+struct mpls_static *static_get() { -+ struct mpls *mpls = mpls_get(); -+ if (mpls->mstatic) { -+ return mpls->mstatic; -+ } ++ mpls_ctrl_ilm_unregister(old); + -+ mpls->mstatic = static_new(mpls); -+ return mpls->mstatic; -+} ++ if (old->fwd) ++ { ++ mpls_out_segment_unregister_by_index (old->fwd); ++ } + -+void static_finish(struct mpls_static *mstatic) { -+ struct mpls *mpls = mstatic->mpls; ++ redistribute_delete_mpls_in_segment (old); + -+ XFREE(MTYPE_MPLS_STATIC,mstatic); -+ mpls->mstatic = NULL; ++ LISTNODE_DELETE(&mpls_in_segment_list, &old->global); ++ XFREE (MTYPE_TMP, old); ++ return 0; +} -diff --exclude=.p4config -uNr zebra/mplsd/static.h zebra-ldp/mplsd/static.h ---- zebra/mplsd/static.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/static.h 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,42 @@ -+#ifndef STATIC_H -+#define STATIC_H + -+#include -+#include "linklist.h" ++int ++mpls_in_segment_register(struct zmpls_in_segment *in) ++{ ++ struct zmpls_in_segment *new = mpls_in_segment_find (in); + -+#include "mpls.h" -+#include "lsr_struct.h" ++ if (new) ++ { ++ return 1; ++ } + -+struct mpls_static { -+ struct mpls *mpls; -+ mpls_cfg_handle h; -+ struct list *insegment; -+ struct list *outsegment; -+}; ++ new = XMALLOC (MTYPE_TMP, sizeof (*new)); ++ if (!new) ++ { ++ return 1; ++ } + -+struct static_insegment { -+ struct listnode node; -+ struct mpls_static *mstatic; -+ unsigned int index; -+ lsr_insegment in; -+ lsr_xconnect xc; -+ unsigned int out_index; -+}; ++ memcpy (new, in, sizeof (*new)); ++ new->global.data = new; ++ new->global.next = NULL; ++ new->global.prev = NULL; + -+struct static_outsegment { -+ struct listnode node; -+ struct mpls_static *mstatic; -+ unsigned int index; -+ lsr_outsegment out; -+}; ++ LISTNODE_ADD(&mpls_in_segment_list, &new->global); + -+struct mpls_static *static_get(); -+void static_finish(struct mpls_static *mstatic); -+struct static_outsegment *static_outsegment_get(struct mpls_static *mstatic, -+ unsigned int index, char create); -+void static_outsegment_finish(struct static_outsegment *out); -+struct static_insegment *static_insegment_get(struct mpls_static *mstatic, -+ unsigned int index, char create); -+void static_insegment_finish(struct static_insegment *in); ++ { ++ struct zmpls_out_segment *out = NULL; ++ if (new->fwd) ++ out = mpls_out_segment_find(new->fwd); ++ mpls_ctrl_ilm_register(new, out); ++ } + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/static_tunnel.c zebra-ldp/mplsd/static_tunnel.c ---- zebra/mplsd/static_tunnel.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/static_tunnel.c 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,260 @@ -+#include ++ redistribute_add_mpls_in_segment (new); + -+#include "if.h" -+#include "vty.h" -+#include "command.h" -+#include "memory.h" -+#include "out-segment.h" ++ return 0; ++} + -+#include "tunnel.h" -+#include "interface.h" -+#include "utility.h" -+#include ++/******************************** labelspace ******************************/ + -+struct list *mplsd_tunnel_list; ++static unsigned char labelspace_map[32]; + -+struct mplsd_tunnel *mplsd_tunnel_lookup_by_name(char *name) { -+ listnode node; -+ struct mplsd_tunnel *ifp; ++int ++mpls_labelspace_register(int labelspace) ++{ ++ unsigned char byte; ++ div_t res; + -+ for (node = listhead(mplsd_tunnel_list); node; nextnode(node)) { -+ ifp = getdata(node); -+ if (strncmp(name, ifp->iff.name, sizeof(ifp->iff.name)) == 0) { -+ return ifp; -+ } -+ } -+ return NULL; ++ res = div(labelspace, 8); ++ byte = labelspace_map[res.quot]; ++ byte |= 1 << res.rem; ++ labelspace_map[res.quot] = byte; ++ ++ redistribute_add_mpls_labelspace (labelspace); ++ return 0; +} + -+struct mplsd_tunnel *mplsd_tunnel_create(char *name, int mode) { -+ struct mplsd_tunnel *ifp; -+ struct ifreq ifr; -+ int result; -+ -+ ifp = XMALLOC(MTYPE_MPLS_STATIC, sizeof(struct mplsd_tunnel)); -+ if(!ifp) return NULL; -+ memset(ifp, 0, sizeof(struct mplsd_tunnel)); ++int ++mpls_labelspace_unregister(int labelspace) ++{ ++ unsigned char byte; ++ div_t res; + -+ listnode_add(mplsd_tunnel_list, ifp); ++ res = div(labelspace, 8); ++ byte = labelspace_map[res.quot]; ++ byte &= ~(1 << res.rem); ++ labelspace_map[res.quot] = byte; + -+ strncpy(ifr.ifr_name,name,IFNAMSIZ); -+ if(mode) { -+ result = mplsd_ioctl(SIOCMPLSTUNNELADD, (caddr_t)&ifr); -+ } -+ result = mplsd_ioctl(SIOCGIFINDEX, (caddr_t)&ifr); -+ strncpy(ifp->iff.name, name, INTERFACE_NAMSIZ); -+ ifp->iff.ifindex = ifr.ifr_ifindex; -+ return ifp; ++ redistribute_delete_mpls_labelspace (labelspace); ++ return 0; +} + -+void mplsd_tunnel_delete(struct mplsd_tunnel *ifp, int mode) { -+ -+ listnode_delete(mplsd_tunnel_list, ifp); ++int ++mpls_labelspace_is_registered(int labelspace) ++{ ++ unsigned char byte; ++ div_t res; + -+ if (mode) { -+ struct ifreq ifr; -+ int result; ++ res = div(labelspace, 8); ++ byte = labelspace_map[res.quot]; ++ return (byte & (1 << res.rem)) ? 1 : 0; ++} + -+ strncpy(ifr.ifr_name,ifp->iff.name,IFNAMSIZ); -+ result = mplsd_ioctl(SIOCMPLSTUNNELDEL, (caddr_t)&ifr); -+ } ++/******************************** vty commands ******************************/ + -+ XFREE(MTYPE_MPLS_STATIC, ifp); ++DEFUN (mpls_labelspace_num, ++ mpls_labelspace_num_cmd, ++ "mpls labelspace <0-255>", ++ "Multi-protocol Label Switching\n" ++ "Labelspace\n" ++ "Labelspace number\n") ++{ ++ int labelspace = -1; ++ if (!sscanf(argv[0], "%u", &labelspace)) { ++ vty_out (vty, "'%s' is not an valid labelspace (0 .. 255)%s", ++ argv[0], VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ vty->index = (void*)labelspace; ++ vty->node = MPLS_LABELSPACE_NODE; ++ if (!mpls_labelspace_is_registered (labelspace)) ++ { ++ mpls_labelspace_register(labelspace); ++ } ++ return CMD_SUCCESS; +} + -+DEFUN (mplsd_tunnel, -+ mplsd_tunnel_cmd, -+ "tunnel IFNAME", -+ "Create a pseudo tunnel\n" -+ "Tunnel's name\n") { -+ struct mplsd_interface_wait *wait; -+ struct interface *ifp; -+ struct mplsd_tunnel *tun; -+ int num; -+ -+ if(sscanf(argv[0],"mpls%d",&num) != 1) { -+ vty_out (vty, "Tunnel names must be in the form 'mpls%%d'%s", VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ -+ if (!(tun = mplsd_tunnel_lookup_by_name(argv[0]))) { -+ tun = mplsd_tunnel_create(argv[0], 1); ++DEFUN (no_mpls_labelspace_num, ++ no_mpls_labelspace_num_cmd, ++ "no mpls labelspace <0-255>", ++ NO_STR ++ "Multi-protocol Label Switching\n" ++ "Labelspace\n" ++ "Labelspace number\n") ++{ ++ listnode node, next; ++ struct zmpls_in_segment *in; ++ int labelspace = -1; + -+ if (!(wait = mplsd_interface_wait_new())) { -+ vty_out(vty, "Unable to register for interface%s", VTY_NEWLINE); -+ return CMD_ERR_INCOMPLETE; ++ if (!sscanf(argv[0], "%u", &labelspace)) { ++ vty_out (vty, "'%s' is not an valid labelspace (0 .. 255)%s", ++ argv[0], VTY_NEWLINE); ++ return CMD_WARNING; + } + -+ wait->data[0] = tun; -+ strncpy(wait->ifname, argv[0], INTERFACE_NAMSIZ); -+ tun->wait = wait; -+ -+ if (!(ifp = if_lookup_by_name(argv[0]))) { -+#if 0 -+ wait->callback = mplsd_tunnel_callback_add; -+ mplsd_interface_add_wait_add(wait); -+#endif -+ } else { -+#if 0 -+ wait->callback = mplsd_tunnel_callback_delete; -+ mplsd_interface_add_wait_del(wait); -+#endif ++ if (!mpls_labelspace_is_registered (labelspace)) ++ { ++ return CMD_SUCCESS; + } -+ } + -+ vty->index = tun; -+ vty->node = MPLS_IF_NODE; ++ node = listhead (&mpls_in_segment_list); ++ while (node) ++ { ++ next = node; ++ nextnode (next); + -+ return CMD_SUCCESS; ++ in = getdata (node); ++ if (in->labelspace == labelspace) ++ { ++ mpls_in_segment_unregister(in); ++ } ++ node = next; ++ } ++ mpls_labelspace_unregister(labelspace); ++ return CMD_SUCCESS; +} + -+DEFUN (no_mplsd_tunnel, -+ no_mplsd_tunnel_cmd, -+ "no tunnel IFNAME", -+ "Delete a pseudo tunnel's configuration\n" -+ "Tunnel's name\n") { -+ struct mplsd_tunnel *tun; -+ -+ tun = mplsd_tunnel_lookup_by_name(argv[0]); -+ if (!tun) { -+ vty_out (vty, "Tunnel %s does not exist%s", argv[0], VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ -+#if 0 -+ mplsd_interface_remove_wait_add(tun->wait); -+ mplsd_interface_remove_wait_del(tun->wait); -+#endif -+ -+ /* Delete tunnel */ -+ mplsd_tunnel_delete(tun, 1); ++DEFUN (label_map_pop, ++ label_map_pop_cmd, ++ "label-map (gen|atm|fr) VALUE pop", ++ "Create a static incoming label-map (ILM)\n" ++ "In-coming Generic label\n" ++ "In-coming ATM VC\n" ++ "In-coming FR DLCI\n" ++ "Label value\n" ++ "Pop and lookup\n") ++{ ++ struct zmpls_in_segment in; ++ int result; + -+ return CMD_SUCCESS; -+} ++ in.owner = ZEBRA_MPLS_OWNER_STATIC; ++ in.labelspace = (int)vty->index; ++ ++ result = label_parse(vty,argv,&in.label); ++ if (result != CMD_SUCCESS) ++ return result; ++ ++ in.pop = 1; ++ in.fwd = 0; ++ ++ return mpls_in_segment_register(&in) ? CMD_WARNING : CMD_SUCCESS; ++} ++ ++DEFUN (label_map_swap_if, ++ label_map_swap_if_cmd, ++ "label-map (gen|atm|fr) VALUE swap (gen|atm|fr) VALUE nexthop INTERFACE", ++ "Create a static incoming label-map (ILM)\n" ++ "In-coming Generic label\n" ++ "In-coming ATM VC\n" ++ "In-coming FR DLCI\n" ++ "Label value\n" ++ "Forward\n" ++ "Out-going Generic label\n" ++ "Out-going ATM VC\n" ++ "Out-going FR DLCI\n" ++ "Label value\n" ++ "Nexthop\n" ++ "Out-going interface name\n") ++{ ++ struct zmpls_in_segment in; ++ struct zmpls_out_segment out; ++ int result; + -+extern struct mplsd_static_info *mplsd_static_info; ++ in.owner = ZEBRA_MPLS_OWNER_STATIC; + -+DEFUN (mplsd_tunnel_out_segment, -+ mplsd_tunnel_out_segment_cmd, -+ "out-segment INDEX", -+ "Assign an out-segment to this tunnel\n" -+ "MPLS out-segment index\n") { ++ in.labelspace = (int)vty->index; + -+ struct mplsd_out_segment *out_old; -+ struct mplsd_out_segment *out; -+ struct interface *tun; -+ struct mpls_label ml; -+ struct ifreq ifr; ++ result = label_parse (vty, argv, &in.label); ++ if (result != CMD_SUCCESS) ++ return result; + -+ tun = vty->index; ++ memset (&out, 0, sizeof (out)); ++ out.owner = ZEBRA_MPLS_OWNER_STATIC; ++ result = nhlfe_parse (vty, &argv[2], &out, NULL); ++ if (result != CMD_SUCCESS) ++ return result; + -+ if (!(out = mplsd_out_segment_lookup_by_index(mplsd_static_info, -+ atoi(argv[0])))) { -+ vty_out(vty, "Unable to find out-segment %s%s", argv[0], VTY_NEWLINE); ++ if (mpls_out_segment_find_index_by_nhlfe(&out)) ++ { ++ vty_out(vty, "NHLFE already exists%s",VTY_NEWLINE); + return CMD_WARNING; + } + -+ out_old = (struct mplsd_out_segment*)tun->info; -+ if (out_old) { -+ mos2ml(out_old,&ml); -+ memcpy(&ifr.ifr_data,&ml,sizeof(struct mpls_label)); -+ mplsd_ioctl(SIOCMPLSTUNNELDELOUT,(caddr_t)&ifr); ++ out.index = 0; ++ if (mpls_out_segment_register (&out)) ++ { ++ vty_out(vty, "Unable to register NHLFE%s",VTY_NEWLINE); ++ return CMD_WARNING; + } + -+ mos2ml(out,&ml); -+ memcpy(&ifr.ifr_data,&ml,sizeof(struct mpls_label)); -+ if (mplsd_ioctl(SIOCMPLSTUNNELADDOUT,(caddr_t)&ifr)) { -+ vty_out(vty, "Unable to set out-segment %s on tunnel %s%s", argv[0], -+ tun->name, VTY_NEWLINE); ++ in.pop = 1; ++ in.fwd = out.index; ++ ++ if (mpls_in_segment_register (&in)) ++ { ++ if (mpls_out_segment_unregister (&out)) ++ { ++ vty_out (vty, "no such out-segment%s", VTY_NEWLINE); ++ } + return CMD_WARNING; + } -+ tun->info = out; + return CMD_SUCCESS; +} + -+DEFUN (no_mplsd_tunnel_out_segment, -+ no_mplsd_tunnel_out_segment_cmd, -+ "no out-segment", -+ "Delete the out-segment associated with this tunnel\n" -+ "MPLS out-segment index\n") { -+ -+ struct interface *tun; -+ -+ tun = vty->index; -+ -+ if (tun->info) { -+ struct mplsd_out_segment *out = tun->info; -+ struct mpls_label ml; -+ struct ifreq ifr; ++DEFUN (label_map_swap_if_addr, ++ label_map_swap_if_addr_cmd, ++ "label-map (gen|atm|fr) VALUE swap (gen|atm|fr) VALUE nexthop INTERFACE IPADDR", ++ "Incoming label-map (ILM)\n" ++ "In-coming Generic label\n" ++ "In-coming ATM VC\n" ++ "In-coming FR DLCI\n" ++ "Label value\n" ++ "Forward\n" ++ "Out-going Generic label\n" ++ "Out-going ATM VC\n" ++ "Out-going FR DLCI\n" ++ "Label value\n" ++ "Nexthop\n" ++ "Out-going interface name\n" ++ "Nexthop IP address\n") ++{ ++ struct zmpls_in_segment in; ++ struct zmpls_out_segment out; ++ int result; + -+ mos2ml(out,&ml); -+ memcpy(&ifr.ifr_data,&ml,sizeof(struct mpls_label)); -+ mplsd_ioctl(SIOCMPLSTUNNELDELOUT,(caddr_t)&ifr); -+ } ++ in.owner = ZEBRA_MPLS_OWNER_STATIC; ++ out.owner = ZEBRA_MPLS_OWNER_STATIC; + -+ return CMD_SUCCESS; -+} ++ in.labelspace = (int)vty->index; + -+static void mplsd_dump_tunnel_vty(struct vty *vty, struct mplsd_tunnel *ifp) { -+ vty_out (vty, "Tunnel %s%s", ifp->iff.name, VTY_NEWLINE); -+ if (ifp->iff.desc) { -+ vty_out (vty, " Description: %s%s", ifp->iff.desc, VTY_NEWLINE); -+ } -+ if (ifp->iff.ifindex <= 0) { -+ vty_out(vty, " index %d pseudo tunnel%s", ifp->iff.ifindex, VTY_NEWLINE); -+ } -+ vty_out (vty, "%s", VTY_NEWLINE); -+} ++ result = label_parse (vty, argv, &in.label); ++ if (result != CMD_SUCCESS) ++ return result; + -+DEFUN (mplsd_show_tunnel, mplsd_show_tunnel_cmd, -+ "show tunnel [IFNAME]", -+ SHOW_STR -+ "MPLS Tunnel status and configuration\n" -+ "Inteface name\n") { -+ listnode node; -+ struct mplsd_tunnel *ifp; ++ result = nhlfe_parse (vty, &argv[2], &out, argv[5]); ++ if (result != CMD_SUCCESS) ++ return result; + -+ if (argc != 0) { -+ ifp = mplsd_tunnel_lookup_by_name(argv[0]); -+ if (ifp == NULL) { -+ vty_out(vty, "%% Can't find tunnel %s%s", argv[0], VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ mplsd_dump_tunnel_vty(vty, ifp); -+ return CMD_SUCCESS; ++ if (mpls_out_segment_find_index_by_nhlfe(&out)) ++ { ++ vty_out(vty, "NHLFE already exists%s",VTY_NEWLINE); ++ return CMD_WARNING; + } + -+ for (node = listhead(mplsd_tunnel_list); node; nextnode(node)) { -+ mplsd_dump_tunnel_vty(vty, getdata(node)); ++ out.index = 0; ++ if (mpls_out_segment_register (&out)) ++ { ++ vty_out(vty, "Unable to register NHLFE%s",VTY_NEWLINE); ++ return CMD_WARNING; + } + ++ in.pop = 1; ++ in.fwd = out.index; ++ ++ if (mpls_in_segment_register (&in)) ++ { ++ if (mpls_out_segment_unregister (&out)) ++ { ++ vty_out (vty, "no such out-segment%s", VTY_NEWLINE); ++ } ++ return CMD_WARNING; ++ } + return CMD_SUCCESS; +} + -+static int mplsd_tunnel_config_write(struct vty *vty) { -+ listnode node; -+ struct interface *ifp; ++DEFUN (no_label_map, ++ no_label_map_cmd, ++ "no label-map (gen|atm|fr) VALUE", ++ NO_STR ++ "Incoming label-map (ILM)\n" ++ "In-coming Generic label\n" ++ "In-coming ATM VC\n" ++ "In-coming FR DLCI\n" ++ "Label value\n") ++{ ++ struct zmpls_in_segment in; ++ int result; + -+ for (node = listhead(mplsd_tunnel_list); node; nextnode(node)) { -+ ifp = getdata(node); -+ vty_out (vty, "tunnel %s%s", ifp->name, VTY_NEWLINE); -+ } ++ in.labelspace = (int)vty->index; + -+ vty_out (vty, "!%s", VTY_NEWLINE); -+ return 0; -+} ++ result = label_parse(vty, argv, &in.label); ++ if (result != CMD_SUCCESS) ++ return result; + -+static struct cmd_node mplsd_tunnel_node = {MPLS_IF_NODE, "%s(config-tun)# ", 1}; ++ return mpls_in_segment_unregister(&in) ? CMD_WARNING : CMD_SUCCESS; ++} + -+void mplsd_tunnel_init () { -+ mplsd_tunnel_list = list_new(); ++DEFUN (tunnel_destination_addr, ++ tunnel_destination_addr_cmd, ++ "tunnel destination IPADDR", ++ "Tunnel configuration\n" ++ "Destination of tunnel\n" ++ "IP Address of the destination of tunnel\n") ++{ ++ struct interface *ifp; ++ struct connected *ifc; ++ struct prefix dest; ++ struct prefix *p; ++ int ret; + -+ install_node(&mplsd_tunnel_node, mplsd_tunnel_config_write); -+ install_default(MPLS_IF_NODE); ++ ifp = (struct interface *) vty->index; ++ ret = str2prefix (argv[0], &dest); ++ if (ret <= 0) ++ { ++ vty_out (vty, "%% Malformed address %s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ install_element(VIEW_NODE, &mplsd_show_tunnel_cmd); -+ install_element(ENABLE_NODE, &mplsd_show_tunnel_cmd); ++ if (listcount (ifp->connected)) ++ { ++ vty_out (vty, "%% Tunnel destination already configured %s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ install_element(CONFIG_NODE, &mplsd_tunnel_cmd); -+ install_element(CONFIG_NODE, &no_mplsd_tunnel_cmd); -+} -diff --exclude=.p4config -uNr zebra/mplsd/static_tunnel.h zebra-ldp/mplsd/static_tunnel.h ---- zebra/mplsd/static_tunnel.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/static_tunnel.h 2003-03-10 14:57:29.000000000 -0600 -@@ -0,0 +1,17 @@ -+#ifndef MPLS_TUNNEL_H -+#define MPLS_TUNNEL_H -+#include -+#include "if.h" ++ ifc = connected_new (); ++ ifc->ifp = ifp; + -+struct mplsd_tunnel { -+ struct interface iff; -+ struct mplsd_interface_wait *wait; -+ struct mplsd_out_segment *out; -+}; ++ /* source */ ++ p = prefix_new (); ++ router_id_get (p); ++ ifc->address = (struct prefix *) p; + -+extern void mplsd_tunnel_init(); -+extern struct mplsd_tunnel *mplsd_tunnel_lookup_by_name(char *name); -+extern struct mplsd_tunnel *mplsd_tunnel_create(char *name, int mode); -+extern void mplsd_tunnel_delete(struct mplsd_tunnel *ifp, int mode); ++ /* destination. */ ++ p = prefix_new (); ++ *p = dest; ++ p->prefixlen = (p->family == AF_INET)?IPV4_MAX_BITLEN:IPV6_MAX_PREFIXLEN; ++ ifc->destination = (struct prefix *) p; + -+#endif -diff --exclude=.p4config -uNr zebra/mplsd/static_vty.c zebra-ldp/mplsd/static_vty.c ---- zebra/mplsd/static_vty.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/static_vty.c 2003-03-29 01:12:03.000000000 -0600 -@@ -0,0 +1,581 @@ -+#include ++ /* Add to linked list. */ ++ listnode_add (ifp->connected, ifc); + -+#include "vty.h" -+#include "command.h" ++ SET_FLAG (ifc->conf, ZEBRA_IFC_CONFIGURED); + -+#include "mpls.h" -+#include "mpls_vty.h" -+#include "static.h" ++ if_set_flags (ifp, IFF_UP | IFF_RUNNING); ++ if_refresh (ifp); + -+#include "lsr_cfg.h" ++ ret = if_set_prefix (ifp, ifc); ++ if (ret < 0) ++ { ++ vty_out (vty, "%% Can't set interface IP address: %s.%s", ++ strerror(errno), VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+char *owner_name[4] = { "LDP", "CR-LDP", "STATIC", "RSVP" }; ++ /* IP address propery set. */ ++ SET_FLAG (ifc->conf, ZEBRA_IFC_REAL); + -+DEFUN (mpls_static, -+ mpls_static_cmd, -+ "mpls static", -+ "MPLS configuration\n" -+ "Static MPLS configuration\n") { ++ /* Update interface address information to protocol daemon. */ ++ zebra_interface_address_add_update (ifp, ifc); + -+ vty->node = MPLS_STATIC_NODE; -+ vty->index = static_get(); ++ /* If interface is up register connected route. */ ++ if (if_is_operative(ifp)) ++ connected_up_ipv4 (ifp, ifc); + -+ return CMD_SUCCESS; ++ return CMD_SUCCESS; +} + -+DEFUN (no_mpls_static, -+ no_mpls_static_cmd, -+ "no mpls static", ++DEFUN (no_tunnel_destination, ++ no_tunnel_destination_cmd, ++ "no tunnel destination", + NO_STR -+ "MPLS configuration\n" -+ "Static MPLS configuration\n") { -+ struct mpls *mpls = mpls_get(); ++ "Tunnel configuration\n" ++ "Destination of tunnel\n") ++{ ++ struct interface *ifp; ++ struct connected *ifc; ++ int ret; + -+ if (!mpls->mstatic) { -+ vty_out (vty, "There isn't an active static MPLS instance.%s", -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++ ifp = (struct interface *) vty->index; ++ ifc = getdata (listhead (ifp->connected)); + -+ static_finish(mpls->mstatic); -+ return CMD_SUCCESS; -+} ++ /* This is real route. */ ++ ret = if_unset_prefix (ifp, ifc); ++ if (ret < 0) ++ { ++ vty_out (vty, "%% Can't unset interface IP address: %s.%s", ++ strerror(errno), VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+static int do_mpls_static_insegment(struct static_insegment *in, -+ unsigned int label, unsigned int labelspace) { -+ in->in.info.label.type = MPLS_LABEL_TYPE_GENERIC; -+ in->in.info.label.u.gen = label; -+ in->in.info.labelspace = labelspace; -+ in->in.info.owner = MPLS_OWNER_STATIC; -+ in->in.info.family = MPLS_FAMILY_IPV4; -+ in->in.info.npop = 1; -+ return lsr_cfg_insegment_set(in->mstatic->mpls->h,&in->in,LSR_CFG_ADD| -+ LSR_INSEGMENT_CFG_NPOP|LSR_INSEGMENT_CFG_FAMILY| -+ LSR_INSEGMENT_CFG_LABELSPACE|LSR_INSEGMENT_CFG_LABEL| -+ LSR_INSEGMENT_CFG_OWNER); -+} -+ -+static int do_mpls_static_outsegment(struct static_outsegment *out, -+ unsigned int label, mpls_nexthop *nh) { -+ out->out.info.label.type = MPLS_LABEL_TYPE_GENERIC; -+ out->out.info.label.u.gen = label; -+ out->out.info.owner = MPLS_OWNER_STATIC; -+ out->out.info.push_label = MPLS_BOOL_TRUE; -+ memcpy(&out->out.info.nexthop, nh, sizeof(mpls_nexthop)); -+ -+ return lsr_cfg_outsegment_set(out->mstatic->mpls->h,&out->out, LSR_CFG_ADD| -+ LSR_OUTSEGMENT_CFG_PUSH_LABEL|LSR_OUTSEGMENT_CFG_OWNER| -+ LSR_OUTSEGMENT_CFG_LABEL|LSR_OUTSEGMENT_CFG_NEXTHOP); -+} -+ -+static int do_mpls_static_xconnect(struct static_insegment *in, -+ struct static_outsegment *out) { -+ in->xc.insegment_index = in->in.index; -+ in->xc.outsegment_index = out->out.index; -+ in->xc.info.owner = MPLS_OWNER_STATIC; -+ in->xc.info.lspid = 1; -+ return lsr_cfg_xconnect_set2(in->mstatic->mpls->h, &in->xc, LSR_CFG_ADD| -+ LSR_XCONNECT_CFG_OUTSEGMENT|LSR_XCONNECT_CFG_INSEGMENT| -+ LSR_XCONNECT_CFG_LSPID|LSR_XCONNECT_CFG_OWNER); -+} -+ -+DEFUN (mpls_static_in_segment, -+ mpls_static_in_segment_cmd, -+ "in-segment INDEX generic LABEL LABELSPACE", -+ "Create an MPLS in-segment\n" -+ "Insegment index\n" -+ "Generic label family\n" -+ "Generic label value\n" -+ "LabelSpace\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_insegment *in; -+ unsigned int index; -+ unsigned int label; -+ unsigned int labelspace; -+ -+ VTY_GET_UINT32("INDEX",index,argv[0]); -+ VTY_GET_UINT32_RANGE("LABEL",label,argv[1],16,0xFFFFF); -+ VTY_GET_UINT32_RANGE("LABELSPACE",labelspace,argv[2],0,255); -+ -+ if ((in = static_insegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There is an insegment with index %d already.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++ /* Redistribute this information. */ ++ zebra_interface_address_delete_update (ifp, ifc); + -+ in = static_insegment_get(mstatic, index, 1); -+ do_mpls_static_insegment(in, label, labelspace); -+ return CMD_SUCCESS; -+} ++ /* Remove connected route. */ ++ connected_down_ipv4 (ifp, ifc); + -+DEFUN (mpls_static_in_segment_xc, -+ mpls_static_in_segment_xc_cmd, -+ "in-segment INDEX generic LABEL LABELSPACE cross-connect OUTINDEX", -+ "Create an MPLS in-segment\n" -+ "Insegment index\n" -+ "Generic label family\n" -+ "Generic label value\n" -+ "LabelSpace\n" -+ "Cross Connect\n" -+ "Outsegment Index\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_insegment *in; -+ struct static_outsegment *out; -+ unsigned int index; -+ unsigned int label; -+ unsigned int labelspace; -+ unsigned int out_index; -+ -+ VTY_GET_UINT32("INDEX",index,argv[0]); -+ VTY_GET_UINT32_RANGE("LABEL",label,argv[1],16,0xFFFFF); -+ VTY_GET_UINT32_RANGE("LABELSPACE",labelspace,argv[2],0,255); -+ VTY_GET_UINT32("OUTINDEX",out_index,argv[3]); -+ -+ if (!(out = static_outsegment_get(mstatic, out_index, 0))) { -+ vty_out (vty, "There isn't an outsegment with index %d.%s", out_index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ -+ in = static_insegment_get(mstatic, index, 1); -+ if (in->in.index) { -+ if (in->in.info.label.type != MPLS_LABEL_TYPE_GENERIC || -+ in->in.info.label.u.gen != label || -+ in->in.info.labelspace != labelspace || -+ in->in.info.owner != MPLS_OWNER_STATIC) { -+ vty_out (vty, "There is an insegment with index %d, label %d," -+ "and labelspace %d already.%s", index, label, labelspace, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ } else { -+ do_mpls_static_insegment(in, label, labelspace); -+ } ++ /* Free address information. */ ++ listnode_delete (ifp->connected, ifc); ++ connected_free (ifc); + -+ if (in->out_index) { -+ vty_out (vty, "Insegment %d is already cross-connect to " -+ "outsegment %d.%s", index, in->out_index, VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ in->out_index = out_index; -+ do_mpls_static_xconnect(in, out); -+ -+ return CMD_SUCCESS; ++ return CMD_SUCCESS; +} + -+DEFUN (mpls_static_in_segment_xc2, -+ mpls_static_in_segment_xc2_cmd, -+ "in-segment INDEX cross-connect OUTINDEX", -+ "Create an MPLS in-segment\n" -+ "Insegment index\n" -+ "Cross Connect\n" -+ "Outsegment Index\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_insegment *in; -+ struct static_outsegment *out; -+ unsigned int index; -+ unsigned int out_index; -+ -+ VTY_GET_UINT32("INDEX",index,argv[0]); -+ VTY_GET_UINT32("OUTINDEX",out_index,argv[1]); -+ -+ if (!(in = static_insegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There isn't an insegment with index %d.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ -+ if (!(out = static_outsegment_get(mstatic, out_index, 0))) { -+ vty_out (vty, "There isn't an outsegment with index %d.%s", out_index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++DEFUN (tunnel_mode_mpls_static_if, ++ tunnel_mode_mpls_static_if_cmd, ++ "tunnel mode mpls static (gen|atm|fr) VALUE nexthop INTERFACE", ++ "Tunnel configuration\n" ++ "Tunnel mode\n" ++ "MPLS tunnel type\n" ++ "Static MPLS tunnel\n" ++ "Out-going Generic label\n" ++ "Out-going ATM VC\n" ++ "Out-going FR DLCI\n" ++ "Label value\n" ++ "Nexthop\n" ++ "Out-going interface name\n") ++{ ++ struct zmpls_out_segment out; ++ struct zebra_if *zif; ++ struct interface *ifp; ++ int result; ++ ++ ifp = (struct interface *) vty->index; ++ zif = ifp->info; + -+ do_mpls_static_xconnect(in, out); ++ memset (&out, 0, sizeof (out)); + -+ return CMD_SUCCESS; -+} ++ out.owner = ZEBRA_MPLS_OWNER_STATIC; ++ result = nhlfe_parse (vty, argv, &out, NULL); ++ if (result != CMD_SUCCESS) ++ return result; + -+DEFUN (no_mpls_static_in_segment, -+ no_mpls_static_in_segment_cmd, -+ "no in-segment INDEX", -+ NO_STR -+ "Delete an MPLS in-segment\n" -+ "Index of In-segment\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_insegment *in; -+ int index; ++ if (mpls_out_segment_find_index_by_nhlfe(&out)) ++ { ++ vty_out(vty, "NHLFE already exists%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ VTY_GET_UINT32("INDEX",index,argv[0]); ++ out.index = 0; ++ if (mpls_out_segment_register (&out)) ++ { ++ vty_out(vty, "Unable to register NHLFE%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ if (!(in = static_insegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There isn't an insegment with the index %d.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ lsr_cfg_insegment_set(in->mstatic->mpls->h,&in->in,LSR_CFG_DEL); -+ static_insegment_finish(in); -+ return CMD_SUCCESS; ++ zif->mpls_tunnel = out.index; ++ return CMD_SUCCESS; +} + -+DEFUN (no_mpls_static_in_segment_xc, -+ no_mpls_static_in_segment_xc_cmd, -+ "no in-segment INDEX cross-connect", -+ NO_STR -+ "Delete an MPLS in-segment\n" -+ "Index of In-segment\n" -+ "Cross Connect\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_insegment *in; -+ int index; -+ -+ VTY_GET_UINT32("INDEX",index,argv[0]); -+ -+ if (!(in = static_insegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There isn't an insegment with the index %d.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ if (!in->out_index) { -+ vty_out (vty, "Insegment %d is not cross-conencted to anything.%s", -+ index, VTY_NEWLINE); -+ return CMD_WARNING; -+ } -+ lsr_cfg_xconnect_set(in->mstatic->mpls->h,&in->xc,LSR_CFG_DEL); -+ in->out_index = 0; -+ return CMD_SUCCESS; -+} ++DEFUN (tunnel_mode_mpls_static_if_addr, ++ tunnel_mode_mpls_static_if_addr_cmd, ++ "tunnel mode mpls static (gen|atm|fr) VALUE nexthop INTERFACE IPADDR", ++ "Tunnel configuration\n" ++ "Tunnel mode\n" ++ "MPLS tunnel type\n" ++ "Static MPLS tunnel\n" ++ "Out-going Generic label\n" ++ "Out-going ATM VC\n" ++ "Out-going FR DLCI\n" ++ "Label value\n" ++ "Nexthop\n" ++ "Out-going interface name\n" ++ "Nexthop IP address\n") ++{ ++ struct zmpls_out_segment out; ++ struct interface *ifp; ++ struct zebra_if *zif; ++ int result; ++ ++ ifp = (struct interface *) vty->index; ++ zif = ifp->info; + -+DEFUN (mpls_static_out_segment_nh_ipaddr, -+ mpls_static_out_segment_nh_ipaddr_cmd, -+ "out-segment INDEX generic LABEL next-hop IPADDR", -+ "Create an MPLS out-segment\n" -+ "Index for the out-segment\n" -+ "Generic label family\n" -+ "Generic label value\n" -+ "Next Hop\n" -+ "IP Address\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_outsegment *out; -+ struct interface *iff; -+ unsigned int index; -+ unsigned int label; -+ struct in_addr ip; -+ mpls_nexthop nh; -+ -+ VTY_GET_UINT32("INDEX",index,argv[0]); -+ VTY_GET_UINT32("LABEL",label,argv[1]); -+ VTY_GET_IPV4_ADDRESS("NEXTHOP",nh.ip.u.ipv4,argv[2]); -+ ip.s_addr = htonl(nh.ip.u.ipv4); -+ -+ if ((out = static_outsegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There is an insegment with index %d already.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++ memset (&out, 0, sizeof (out)); ++ ++ out.owner = ZEBRA_MPLS_OWNER_STATIC; ++ result = nhlfe_parse (vty, argv, &out, argv[3]); ++ if (result != CMD_SUCCESS) ++ return result; + -+ out = static_outsegment_get(mstatic, index, 1); -+ iff = if_lookup_address(ip); -+ nh.type = MPLS_NH_IP|MPLS_NH_IF; -+ nh.if_handle = iff; ++ if (mpls_out_segment_find_index_by_nhlfe(&out)) ++ { ++ vty_out(vty, "NHLFE already exists%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ do_mpls_static_outsegment(out, label, &nh); ++ out.index = 0; ++ if (mpls_out_segment_register (&out)) ++ { ++ vty_out(vty, "Unable to register NHLFE%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ return CMD_SUCCESS; ++ zif->mpls_tunnel = out.index; ++ return CMD_SUCCESS; +} + -+DEFUN (mpls_static_out_segment_nh_intf, -+ mpls_static_out_segment_nh_intf_cmd, -+ "out-segment INDEX generic LABEL interface IFNAME", -+ "Create an MPLS out-segment\n" -+ "Index for the out-segment\n" -+ "Generic label family\n" -+ "Generic label value\n" -+ "Next Hop\n" -+ "Interface\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_outsegment *out; -+ struct interface *iff; -+ unsigned int index; -+ unsigned int label; -+ mpls_nexthop nh; -+ -+ VTY_GET_UINT32("INDEX",index,argv[0]); -+ VTY_GET_UINT32("LABEL",label,argv[1]); ++DEFUN (no_tunnel_mode_mpls_static, ++ no_tunnel_mode_mpls_static_cmd, ++ "no tunnel mode mpls static", ++ NO_STR ++ "Tunnel configuration\n" ++ "Tunnel mode\n" ++ "MPLS tunnel type\n" ++ "Static MPLS tunnel\n") ++{ ++ struct interface *ifp; ++ struct zebra_if *zif; + -+ if ((out = static_outsegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There is an insegment with index %d already.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++ ifp = (struct interface *) vty->index; ++ zif = ifp->info; + -+ out = static_outsegment_get(mstatic, index, 1); -+ iff = if_lookup_by_name(argv[2]); -+ nh.type = MPLS_NH_IF; -+ nh.if_handle = iff; ++ if (mpls_out_segment_unregister_by_index (zif->mpls_tunnel)) ++ { ++ vty_out (vty, "no such out-segment%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ return CMD_SUCCESS; ++} + -+ do_mpls_static_outsegment(out, label, &nh); ++char *owner_name[6] = { "", "STATIC", "BGP", "LDP", "RSVP", "CR-LDP" }; + -+ return CMD_SUCCESS; ++void mpls_print_label(struct zmpls_label *label, char *buf) ++{ ++ switch (label->type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ sprintf(buf, "%u", label->u.gen); ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ sprintf(buf, "%hu/%hu", label->u.atm.vpi, label->u.atm.vci); ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ sprintf(buf, "%u", label->u.fr); ++ break; ++ } +} + -+DEFUN (no_mpls_static_out_segment, -+ no_mpls_static_out_segment_cmd, -+ "no out-segment INDEX", -+ NO_STR -+ "Delete an MPLS out-segment\n" -+ "Index of the out-segment\n") { -+ struct mpls_static *mstatic = (struct mpls_static*)vty->index; -+ struct static_outsegment *out; -+ unsigned int index; ++DEFUN (mpls_show_mpls_fwd, ++ mpls_show_mpls_fwd_cmd, ++ "show mpls forwarding", ++ SHOW_STR ++ "MPLS commands\n" ++ "forwarding table\n") ++{ ++ struct zmpls_out_segment *out; ++ struct zmpls_in_segment *in; ++ listnode node; ++ int count; + -+ VTY_GET_UINT32("INDEX",index,argv[0]); ++ vty_out(vty, "Insegments:%s",VTY_NEWLINE); + -+ if (!(out = static_outsegment_get(mstatic, index, 0))) { -+ vty_out (vty, "There isn't an outsegment with the index %d.%s", index, -+ VTY_NEWLINE); -+ return CMD_WARNING; -+ } ++ count = 0; ++ for (node = listhead (&mpls_in_segment_list); node; nextnode (node)) ++ { ++ char buf[16]; + -+ lsr_cfg_outsegment_set(out->mstatic->mpls->h,&out->out,LSR_CFG_DEL); -+ static_outsegment_finish(out); -+ return CMD_SUCCESS; -+} ++ in = getdata(node); + -+DEFUN (mpls_show_mpls_fwd, mpls_show_mpls_fwd_cmd, -+ "show mpls forwarding", -+ SHOW_STR -+ "MPLS related commands\n" -+ "MPLS forwarding table\n") { -+ struct mpls *mpls = mpls_get(); -+ struct lsr_outsegment out; -+ struct lsr_insegment in; -+ struct lsr_xconnect xc; -+ struct in_addr ip; -+ struct interface *iff; -+ int count; ++ mpls_print_label(&in->label, buf); + -+ if (!mpls) { -+ vty_out (vty, "There isn't an active MPLS instance.%s", -+ VTY_NEWLINE); -+ return CMD_WARNING; ++ if (!count) { ++ vty_out(vty, " Lbl Spc Label Owner%s", VTY_NEWLINE); + } ++ vty_out(vty, " %-3d %7s %-6s%s", in->labelspace, ++ buf, owner_name[in->owner], VTY_NEWLINE); ++ count++; ++ } ++ if (!count) { ++ vty_out(vty, "%s", VTY_NEWLINE); ++ } ++ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); ++ vty_out(vty, "%s", VTY_NEWLINE); + -+ vty_out(vty, "Insegments:%s",VTY_NEWLINE); ++ vty_out(vty, "Outsegments:%s",VTY_NEWLINE); ++ count = 0; ++ for (node = listhead (&mpls_out_segment_list); node; nextnode (node)) ++ { ++ char buf2[16]; ++ char buf[48]; ++ char *ifname; ++ ++ out = getdata(node); + -+ count = 0; -+ in.index = 0; -+ while (lsr_cfg_insegment_getnext(mpls->h,&in,0xFFFFFFFF)==MPLS_SUCCESS) { -+ if (!count) { -+ vty_out(vty, " Lbl Spc Label Owner%s", VTY_NEWLINE); -+ } -+ vty_out(vty, " %-3d %7d %-6s%s", in.info.labelspace, -+ in.info.label.u.gen, owner_name[in.info.owner], VTY_NEWLINE); -+ count++; -+ } + if (!count) { -+ vty_out(vty, "%s", VTY_NEWLINE); ++ vty_out (vty, " Interface Label Next Hop Owner%s", ++ VTY_NEWLINE); + } -+ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); -+ vty_out(vty, "%s", VTY_NEWLINE); + -+ vty_out(vty, "Outsegments:%s",VTY_NEWLINE); -+ count = 0; -+ out.index = 0; -+ while (lsr_cfg_outsegment_getnext(mpls->h,&out,0xFFFFFFFF)==MPLS_SUCCESS) { -+ if (!count) { -+ vty_out(vty, " Interface Label Next Hop Owner%s", -+ VTY_NEWLINE); -+ } -+ if (out.info.nexthop.type & MPLS_NH_IP) { -+ ip.s_addr = htonl(out.info.nexthop.ip.u.ipv4); -+ } else { -+ ip.s_addr = 0; -+ } -+ if (out.info.nexthop.type & MPLS_NH_IF) { -+ iff = out.info.nexthop.if_handle; -+ } else { -+ iff = NULL; -+ } -+ vty_out(vty, " %-16s %7d %-15s %-6s%s",iff->name, -+ out.info.label.u.gen, inet_ntoa(ip), owner_name[out.info.owner], -+ VTY_NEWLINE); -+ count++; ++ switch (out->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ ifname = out->nh.ifname; ++ break; ++ case NEXTHOP_TYPE_IPV4: ++ case NEXTHOP_TYPE_IPV6: ++ ifname = "(remote)"; ++ break; ++ default: ++ assert(0); + } -+ if (!count) { -+ vty_out(vty, "%s", VTY_NEWLINE); ++ ++ switch (out->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ strcpy (buf, "0.0.0.0"); ++ break; ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ case NEXTHOP_TYPE_IPV4: ++ inet_ntop (AF_INET, &out->nh.gate.ipv6, buf, sizeof(buf)); ++ break; ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ case NEXTHOP_TYPE_IPV6: ++ inet_ntop (AF_INET6, &out->nh.gate.ipv6, buf, sizeof(buf)); ++ break; ++ default: ++ assert(0); + } -+ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); ++ ++ mpls_print_label(&out->push, buf2); ++ ++ vty_out(vty, " %-16s %7s %-15s %-6s%s", ifname, ++ buf2, buf, owner_name[out->owner], VTY_NEWLINE); ++ count++; ++ } ++ if (!count) { + vty_out(vty, "%s", VTY_NEWLINE); ++ } ++ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); ++ vty_out(vty, "%s", VTY_NEWLINE); + ++#if 0 + vty_out(vty, "Cross Connects:%s",VTY_NEWLINE); + count = 0; + xc.index = 0; + while (lsr_cfg_xconnect_getnext(mpls->h,&xc,0xFFFFFFFF) == MPLS_SUCCESS) { + if (!count) { + vty_out(vty, " Lbl Spc In Label Out Label Interface " -+ "Next Hop Owner%s", VTY_NEWLINE); -+ } ++ "Next Hop Owner%s", VTY_NEWLINE); ++ } + -+ in.index = xc.insegment_index; -+ lsr_cfg_insegment_get(mpls->h,&in,0xFFFFFFFF); ++ in.index = xc.insegment_index; ++ lsr_cfg_insegment_get(mpls->h,&in,0xFFFFFFFF); + -+ out.index = xc.outsegment_index; -+ lsr_cfg_outsegment_get(mpls->h,&out,0xFFFFFFFF); -+ if (out.info.nexthop.type & MPLS_NH_IP) { -+ ip.s_addr = htonl(out.info.nexthop.ip.u.ipv4); -+ } else { -+ ip.s_addr = 0; -+ } -+ if (out.info.nexthop.type & MPLS_NH_IF) { -+ iff = out.info.nexthop.if_handle; -+ } else { -+ iff = NULL; -+ } ++ out.index = xc.outsegment_index; ++ lsr_cfg_outsegment_get(mpls->h,&out,0xFFFFFFFF); ++ if (out.info.nexthop.type & MPLS_NH_IP) { ++ ip.s_addr = htonl(out.info.nexthop.ip.u.ipv4); ++ } else { ++ ip.s_addr = 0; ++ } ++ if (out.info.nexthop.type & MPLS_NH_IF) { ++ iff = out.info.nexthop.if_handle; ++ } else { ++ iff = NULL; ++ } ++ ++ vty_out(vty, " %-3d %7d %7d %-16s %-15s %-6s%s", ++ in.info.labelspace, in.info.label.u.gen, out.info.label.u.gen, ++ iff->name, inet_ntoa(ip), owner_name[in.info.owner], VTY_NEWLINE); ++ count++; ++ } ++ if (!count) { ++ vty_out(vty, "%s", VTY_NEWLINE); ++ } ++ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); ++ vty_out(vty, "%s", VTY_NEWLINE); ++#endif ++ ++ return CMD_SUCCESS; ++} ++ ++static void ++mpls_label_config_write (struct vty *vty, struct zmpls_label *label) ++{ ++ switch (label->type) ++ { ++ case ZEBRA_MPLS_LABEL_GEN: ++ vty_out (vty, "gen %d", label->u.gen); ++ break; ++ case ZEBRA_MPLS_LABEL_ATM: ++ vty_out (vty, "atm %d/%d", label->u.atm.vpi, label->u.atm.vci); ++ break; ++ case ZEBRA_MPLS_LABEL_FR: ++ vty_out (vty, "fr %d", label->u.fr); ++ break; ++ } ++} ++ ++void ++mpls_out_segment_config_write (struct vty *vty, struct zmpls_out_segment *out) ++{ ++ char buf[128]; ++ ++ assert(out->owner == ZEBRA_MPLS_OWNER_STATIC); ++ ++ mpls_label_config_write (vty, &out->push); ++ vty_out (vty, " nexthop %s", out->nh.ifname); ++ switch (out->nh.type) ++ { ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ inet_ntop (AF_INET6, &out->nh.gate.ipv6, buf, sizeof (buf)); ++ break; ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ inet_ntop (AF_INET, &out->nh.gate.ipv4, buf, sizeof (buf)); ++ break; ++ case NEXTHOP_TYPE_IPV6: ++ case NEXTHOP_TYPE_IPV4: ++ /* fall through */ ++ default: ++ assert(0); ++ } ++ vty_out (vty, " %s", buf); ++} + -+ vty_out(vty, " %-3d %7d %7d %-16s %-15s %-6s%s", -+ in.info.labelspace, in.info.label.u.gen, out.info.label.u.gen, -+ iff->name, inet_ntoa(ip), owner_name[in.info.owner], VTY_NEWLINE); -+ count++; ++static void ++mpls_in_segment_config_write (struct vty *vty, struct zmpls_in_segment *in) ++{ ++ mpls_label_config_write (vty, &in->label); ++ ++ if (in->pop) ++ { ++ vty_out (vty, " pop"); ++ } ++ if (in->fwd) ++ { ++ struct zmpls_out_segment *out; ++ vty_out (vty, " swap "); ++ out = mpls_out_segment_find (in->fwd); ++ if (out) ++ { ++ mpls_out_segment_config_write (vty, out); + } -+ if (!count) { -+ vty_out(vty, "%s", VTY_NEWLINE); ++ else ++ { ++ vty_out (vty, "(unable to find out-segment with index %d)", in->fwd); + } -+ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); -+ vty_out(vty, "%s", VTY_NEWLINE); -+ -+ return CMD_SUCCESS; ++ } +} + -+DEFUN (mpls_show_mpls_ftn, mpls_show_mpls_ftn_cmd, -+ "show mpls ftn", -+ SHOW_STR -+ "MPLS related commands\n" -+ "MPLS FTN bindings\n") { -+ struct mpls *mpls = mpls_get(); -+ lsr_outsegment out; -+ char buf[24]; -+ struct interface *iff; -+ struct in_addr ip; -+ lsr_ftn ftn; -+ int count = 0; ++static int ++mpls_labelspace_config_write (struct vty *vty) ++{ ++ listnode node; ++ struct zmpls_in_segment *in; ++ int labelspace; + -+ vty_out(vty, "FTNs:%s",VTY_NEWLINE); -+ ftn.index = 0; -+ while (lsr_cfg_ftn_getnext(mpls->h,&ftn,0xFFFFFFFF) == MPLS_SUCCESS) { -+ if (!count) { -+ vty_out(vty, " FEC Out Label Interface " -+ "Next Hop Owner%s", VTY_NEWLINE); -+ } ++ for (labelspace = 0;labelspace < 256;labelspace++) ++ { ++ if (!mpls_labelspace_is_registered(labelspace)) ++ continue; + -+ out.index = ftn.outsegment_index; -+ lsr_cfg_outsegment_get(mpls->h,&out,0xFFFFFFFF); ++ vty_out (vty, "mpls labelspace %d%s", labelspace, VTY_NEWLINE); + -+ vty_out(vty, " "); -+ switch(ftn.fec.type) { -+ case MPLS_FEC_PREFIX: -+ ip.s_addr = htonl(ftn.fec.u.prefix.network.u.ipv4); -+ sprintf(buf, "%s/%d", inet_ntoa(ip),ftn.fec.u.prefix.length); -+ vty_out(vty, "%-18s", buf); -+ break; -+ case MPLS_FEC_HOST: -+ ip.s_addr = htonl(ftn.fec.u.host.u.ipv4); -+ vty_out(vty, "%-18s", inet_ntoa(ip)); -+ break; -+ case MPLS_FEC_L2CC: -+ default: -+ vty_out(vty, "%-18s", "(unknown)"); -+ } -+ vty_out(vty, " "); ++ for (node = listhead (&mpls_in_segment_list); node; nextnode (node)) ++ { ++ in = getdata(node); + -+ if (out.info.nexthop.type & MPLS_NH_IP) { -+ ip.s_addr = htonl(out.info.nexthop.ip.u.ipv4); -+ } else { -+ ip.s_addr = 0; -+ } -+ if (out.info.nexthop.type & MPLS_NH_IF) { -+ iff = out.info.nexthop.if_handle; -+ } else { -+ iff = NULL; -+ } -+ vty_out(vty, "%7d %-15s %-15s %-6s%s", out.info.label.u.gen, -+ iff->name, inet_ntoa(ip), owner_name[out.info.owner], VTY_NEWLINE); ++ if (in->owner != ZEBRA_MPLS_OWNER_STATIC) ++ continue; + -+ count++; -+ } ++ if (in->labelspace != labelspace) ++ continue; + -+ if (!count) { -+ vty_out(vty, "%s", VTY_NEWLINE); ++ vty_out (vty, " label-map "); ++ mpls_in_segment_config_write (vty, in); ++ vty_out (vty, "%s", VTY_NEWLINE); + } -+ vty_out(vty, "Total %d%s",count, VTY_NEWLINE); -+ vty_out(vty, "%s", VTY_NEWLINE); -+ return CMD_SUCCESS; ++ vty_out (vty, "!%s", VTY_NEWLINE); ++ } ++ return 0; +} + -+static int mpls_static_config_write (struct vty *vty) { -+ struct mpls *mpls = mpls_get(); -+ struct mpls_static *mstatic = mpls->mstatic; -+ struct static_outsegment *out; -+ struct static_insegment *in; -+ struct listnode *tmp; ++static ++struct cmd_node mpls_labelspace_node = ++{ ++ MPLS_LABELSPACE_NODE, ++ "%s(config-ls)# ", ++ 1 ++}; + -+ if (!mstatic) { -+ return 0; -+ } ++static int ++mpls_tun_interface_config_write (struct vty *vty) ++{ ++ listnode node; ++ ++ for (node = listhead (iflist); node; nextnode (node)) ++ { ++ struct interface *ifp; ++ struct zebra_if *zif; ++ ifp = getdata (node); + -+ vty_out(vty, "mpls static%s", VTY_NEWLINE); ++ if (ifp->node != MPLS_TUN_INTERFACE_NODE) ++ continue; + -+ LIST_LOOP(mstatic->outsegment, out, tmp) { -+ vty_out(vty, " out-segment %d generic %d", out->index, -+ out->out.info.label.u.gen); -+ if (out->out.info.nexthop.type & MPLS_NH_IF) { -+ vty_out(vty, " interface %s", -+ out->out.info.nexthop.if_handle->name); -+ } -+ if (out->out.info.nexthop.type & MPLS_NH_IP) { -+ struct in_addr ip; -+ ip.s_addr = htonl(out->out.info.nexthop.ip.u.ipv4); -+ vty_out(vty, " next-hop %s", inet_ntoa(ip)); -+ } -+ vty_out(vty,"%s", VTY_NEWLINE); ++ zif = ifp->info; ++ ++ vty_out (vty, "int %s%s", ifp->name, VTY_NEWLINE); ++ if (listcount (ifp->connected)) ++ { ++ struct connected *ifc; ++ char buf[48]; ++ ++ ifc = getdata (listhead (ifp->connected)); ++ inet_ntop (ifc->destination->family,&ifc->destination->u.prefix, buf, 48); ++ ++ vty_out (vty, " tunnel destination %s%s", buf, VTY_NEWLINE); + } + -+ LIST_LOOP(mstatic->insegment, in, tmp) { -+ vty_out(vty, " in-segment %d generic %d %d", in->index, -+ in->in.info.label.u.gen, in->in.info.labelspace); -+ if (in->out_index) { -+ vty_out(vty, " cross-connect %d", in->out_index); -+ } -+ vty_out(vty, "%s", VTY_NEWLINE); ++ if (zif->mpls_tunnel) ++ { ++ struct zmpls_out_segment *out; ++ ++ out = mpls_out_segment_find(zif->mpls_tunnel); ++ if (out) ++ { ++ vty_out (vty, " tunnel mode mpls static "); ++ mpls_out_segment_config_write (vty, out); ++ vty_out (vty, "%s", VTY_NEWLINE); ++ } + } -+ vty_out(vty,"!%s", VTY_NEWLINE); -+ return 0; ++ ++ vty_out (vty, "!%s", VTY_NEWLINE); ++ } ++ return 0; +} + -+static struct cmd_node static_node = {MPLS_STATIC_NODE,"%s(config-mpls)# ",1}; ++static ++struct cmd_node mpls_tun_interface_node = ++{ ++ MPLS_TUN_INTERFACE_NODE, ++ "%s(config-if)# ", ++ 1 ++}; + -+void static_vty_show_init() { -+ install_element (VIEW_NODE, &mpls_show_mpls_fwd_cmd); -+ install_element (ENABLE_NODE, &mpls_show_mpls_fwd_cmd); ++void ++mpls_vty_init () ++{ ++ memset(labelspace_map, 0, sizeof(labelspace_map)); + -+ install_element (VIEW_NODE, &mpls_show_mpls_ftn_cmd); -+ install_element (ENABLE_NODE, &mpls_show_mpls_ftn_cmd); -+} ++ mpls_ctrl_init(); + -+void static_vty_init () { ++ install_element (CONFIG_NODE, &mpls_labelspace_num_cmd); ++ install_element (CONFIG_NODE, &no_mpls_labelspace_num_cmd); + -+ install_node (&static_node, mpls_static_config_write); -+ install_default (MPLS_STATIC_NODE); ++ install_node (&mpls_labelspace_node, mpls_labelspace_config_write); ++ install_default (MPLS_LABELSPACE_NODE); + -+ install_element (CONFIG_NODE, &mpls_static_cmd); -+ install_element (CONFIG_NODE, &no_mpls_static_cmd); ++ install_element (MPLS_LABELSPACE_NODE, &label_map_pop_cmd); ++ install_element (MPLS_LABELSPACE_NODE, &label_map_swap_if_cmd); ++ install_element (MPLS_LABELSPACE_NODE, &label_map_swap_if_addr_cmd); ++ install_element (MPLS_LABELSPACE_NODE, &no_label_map_cmd); + -+ install_element(MPLS_STATIC_NODE, &mpls_static_in_segment_cmd); -+ install_element(MPLS_STATIC_NODE, &mpls_static_in_segment_xc_cmd); -+ install_element(MPLS_STATIC_NODE, &no_mpls_static_in_segment_cmd); -+ install_element(MPLS_STATIC_NODE, &no_mpls_static_in_segment_xc_cmd); ++ install_node (&mpls_tun_interface_node, mpls_tun_interface_config_write); ++ install_default (MPLS_TUN_INTERFACE_NODE); + -+ install_element(MPLS_STATIC_NODE, &mpls_static_out_segment_nh_ipaddr_cmd); -+ install_element(MPLS_STATIC_NODE, &mpls_static_out_segment_nh_intf_cmd); -+ install_element(MPLS_STATIC_NODE, &no_mpls_static_out_segment_cmd); ++ install_element (MPLS_TUN_INTERFACE_NODE, &tunnel_destination_addr_cmd); ++ install_element (MPLS_TUN_INTERFACE_NODE, &no_tunnel_destination_cmd); ++ install_element (MPLS_TUN_INTERFACE_NODE, &tunnel_mode_mpls_static_if_cmd); ++ install_element (MPLS_TUN_INTERFACE_NODE, &tunnel_mode_mpls_static_if_addr_cmd); ++ install_element (MPLS_TUN_INTERFACE_NODE, &no_tunnel_mode_mpls_static_cmd); ++ ++ install_element (VIEW_NODE, &mpls_show_mpls_fwd_cmd); ++ install_element (ENABLE_NODE, &mpls_show_mpls_fwd_cmd); +} -diff --exclude=.p4config -uNr zebra/mplsd/static_vty.h zebra-ldp/mplsd/static_vty.h ---- zebra/mplsd/static_vty.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/mplsd/static_vty.h 2003-03-10 14:57:30.000000000 -0600 -@@ -0,0 +1,7 @@ -+#ifndef STATIC_VTY_H -+#define STATIC_VTY_H +diff --exclude=rsvpd -uNr quagga/zebra/mpls_vty.h quagga-mpls/zebra/mpls_vty.h +--- quagga/zebra/mpls_vty.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/zebra/mpls_vty.h 2004-07-14 23:37:59.300502496 -0500 +@@ -0,0 +1,99 @@ ++#ifndef _ZEBRA_MPLS_VTY_H ++#define _ZEBRA_MPLS_VTY_H + -+void static_vty_init(); -+void static_vty_show_init(); ++#include "vty.h" ++#include "zmpls.h" + -+#endif -diff --exclude=.p4config -uNr zebra/ospfd/ospfd.c zebra-ldp/ospfd/ospfd.c ---- zebra/ospfd/ospfd.c 2003-03-29 18:16:22.000000000 -0600 -+++ zebra-ldp/ospfd/ospfd.c 2003-03-10 14:58:38.000000000 -0600 -@@ -56,6 +56,7 @@ - struct ospf *ospf_top; - - extern struct zclient *zclient; -+extern struct in_addr router_id_zebra; - - - void ospf_remove_vls_through_area (struct ospf_area *); -@@ -63,33 +64,6 @@ - void ospf_area_free (struct ospf_area *); - void ospf_network_run (struct ospf *, struct prefix *, struct ospf_area *); - --/* Get Router ID from ospf interface list. */ --struct in_addr --ospf_router_id_get (list if_list) --{ -- listnode node; -- struct in_addr router_id; -- -- memset (&router_id, 0, sizeof (struct in_addr)); -- -- for (node = listhead (if_list); node; nextnode (node)) -- { -- struct ospf_interface *oi = getdata (node); -- -- if (!if_is_up (oi->ifp) || -- OSPF_IF_PARAM (oi, passive_interface) == OSPF_IF_PASSIVE) -- continue; -- -- /* Ignore virtual link interface. */ -- if (oi->type != OSPF_IFTYPE_VIRTUALLINK && -- oi->type != OSPF_IFTYPE_LOOPBACK) -- if (IPV4_ADDR_CMP (&router_id, &oi->address->u.prefix4) < 0) -- router_id = oi->address->u.prefix4; -- } -- -- return router_id; --} -- - #define OSPF_EXTERNAL_LSA_ORIGINATE_DELAY 1 - - void -@@ -106,7 +80,7 @@ - if (ospf_top->router_id_static.s_addr != 0) - router_id = ospf_top->router_id_static; - else -- router_id = ospf_router_id_get (ospf_top->oiflist); -+ router_id = router_id_zebra; - - ospf_top->router_id = router_id; - -diff --exclude=.p4config -uNr zebra/ospfd/ospf_lsdb.c zebra-ldp/ospfd/ospf_lsdb.c ---- zebra/ospfd/ospf_lsdb.c 2003-03-29 18:15:59.000000000 -0600 -+++ zebra-ldp/ospfd/ospf_lsdb.c 2003-03-10 14:58:06.000000000 -0600 -@@ -284,8 +284,8 @@ - } - - struct ospf_lsa * --foreach_lsa (struct route_table *table, void *p_arg, int int_arg, -- int (*callback) (struct ospf_lsa *, void *, int)) -+foreach_lsa (struct route_table *table, void *p_arg, int int_arg, -+ int (*callback) (struct ospf_lsa *, void *, int)) - { - struct route_node *rn; - struct ospf_lsa *lsa; -@@ -293,6 +293,21 @@ - for (rn = route_top (table); rn; rn = route_next (rn)) - if ((lsa = rn->info) != NULL) - if (callback (lsa, p_arg, int_arg)) -+ return lsa; ++#include "zebra/rib.h" + -+ return NULL; -+} ++struct zmpls_in_segment ++{ ++ struct listnode global; ++ u_char owner; ++ u_char labelspace; ++ u_short protocol; ++ u_int fwd; ++ struct zmpls_label label; ++ u_char pop; ++}; + -+struct ospf_lsa * -+foreach_lsa_sum (struct route_table *table, void *p_arg, int *sum, int int_arg, -+ int (*callback) (struct ospf_lsa *, void *, int*, int)) ++struct zmpls_out_segment +{ -+ struct route_node *rn; -+ struct ospf_lsa *lsa; ++ struct listnode global; ++ u_char owner; ++ struct zmpls_label push; ++ struct nexthop nh; ++ u_int index; ++ u_int out_key; ++}; + -+ for (rn = route_top (table); rn; rn = route_next (rn)) -+ if ((lsa = rn->info) != NULL) -+ if (callback (lsa, p_arg, sum, int_arg)) - return lsa; - - return NULL; -diff --exclude=.p4config -uNr zebra/ospfd/ospf_lsdb.h zebra-ldp/ospfd/ospf_lsdb.h ---- zebra/ospfd/ospf_lsdb.h 2003-03-29 18:15:59.000000000 -0600 -+++ zebra-ldp/ospfd/ospf_lsdb.h 2003-03-10 14:58:06.000000000 -0600 -@@ -79,5 +79,7 @@ - unsigned long ospf_lsdb_isempty (struct ospf_lsdb *); - struct ospf_lsa *foreach_lsa (struct route_table *, void *, int, - int (*callback) (struct ospf_lsa *, void *, int)); -+struct ospf_lsa *foreach_lsa_sum (struct route_table *, void *, int *, int, -+ int (*callback) (struct ospf_lsa *, void *, int *, int)); - - #endif /* _ZEBRA_OSPF_LSDB_H */ -diff --exclude=.p4config -uNr zebra/ospfd/ospf_vty.c zebra-ldp/ospfd/ospf_vty.c ---- zebra/ospfd/ospf_vty.c 2003-03-29 18:16:18.000000000 -0600 -+++ zebra-ldp/ospfd/ospf_vty.c 2003-03-10 14:58:35.000000000 -0600 -@@ -3046,7 +3046,7 @@ - - /* Show functions */ - int --show_lsa_summary (struct ospf_lsa *lsa, void *v, int self) -+show_lsa_summary (struct ospf_lsa *lsa, void *v, int *sum, int self) - { - struct vty *vty = (struct vty *) v; - struct router_lsa *rl; -@@ -3059,6 +3059,7 @@ - if (self == 0 || IS_LSA_SELF (lsa)) - { - /* LSA common part show. */ -+ (*sum) += ntohs (lsa->data->checksum); - vty_out (vty, "%-15s ", inet_ntoa (lsa->data->id)); - vty_out (vty, "%-15s %4d 0x%08lx 0x%04x", - inet_ntoa (lsa->data->adv_router), LS_AGE (lsa), -@@ -3592,6 +3593,7 @@ - void - show_ip_ospf_database_summary (struct vty *vty, int self) - { -+ unsigned int sum; - listnode node; - int type; - -@@ -3619,9 +3621,10 @@ - VTY_NEWLINE, VTY_NEWLINE); - vty_out (vty, "%s%s", show_database_header[type], VTY_NEWLINE); - -- foreach_lsa (AREA_LSDB (area, type), vty, self, show_lsa_summary); -- -- vty_out (vty, "%s", VTY_NEWLINE); -+ sum = 0; -+ foreach_lsa_sum (AREA_LSDB (area, type), vty, &sum, self, show_lsa_summary); -+ vty_out (vty, "%s Sum of CkSum: 0x%08x%s%s", -+ VTY_NEWLINE, sum, VTY_NEWLINE, VTY_NEWLINE); - } - } - } -@@ -3646,8 +3649,11 @@ - VTY_NEWLINE, VTY_NEWLINE); - vty_out (vty, "%s%s", show_database_header[type], - VTY_NEWLINE); -- foreach_lsa (AS_LSDB (ospf_top, type), vty, self, show_lsa_summary); -- vty_out (vty, "%s", VTY_NEWLINE); ++struct zmpls_xc ++{ ++ u_int index; ++ struct zmpls_in_segment *in; ++ struct zmpls_out_segmen *out; ++}; + -+ sum = 0; -+ foreach_lsa_sum (AS_LSDB (ospf_top, type), vty, &sum, self, show_lsa_summary); -+ vty_out (vty, "%s Sum of CkSum: 0x%08x%s%s", -+ VTY_NEWLINE, sum, VTY_NEWLINE, VTY_NEWLINE); - } - } - -diff --exclude=.p4config -uNr zebra/ospfd/ospf_zebra.c zebra-ldp/ospfd/ospf_zebra.c ---- zebra/ospfd/ospf_zebra.c 2003-03-29 18:16:20.000000000 -0600 -+++ zebra-ldp/ospfd/ospf_zebra.c 2003-03-10 14:58:36.000000000 -0600 -@@ -53,6 +53,23 @@ - - /* For registering threads. */ - extern struct thread_master *master; -+struct in_addr router_id_zebra; + -+/* Router-id update message from zebra. */ -+int -+ospf_router_id_update_zebra (int command, struct zclient *zclient, -+ zebra_size_t length) -+{ -+ struct prefix router_id; -+ zebra_router_id_update_read(zclient->ibuf,&router_id); ++extern void mpls_vty_init(); + -+ router_id_zebra = router_id.u.prefix4; ++extern struct list mpls_in_segment_list; ++extern struct list mpls_out_segment_list; + -+ if (ospf_top && ospf_top->t_router_id_update == NULL) -+ ospf_top->t_router_id_update = thread_add_timer (master, -+ ospf_router_id_update_timer, ospf_top, OSPF_ROUTER_ID_UPDATE_DELAY); -+ return 0; -+} - - /* Inteface addition message from zebra. */ - int -@@ -147,19 +164,6 @@ - return ifp; - } - --void --zebra_interface_if_set_value (struct stream *s, struct interface *ifp) --{ -- /* Read interface's index. */ -- ifp->ifindex = stream_getl (s); -- -- /* Read interface's value. */ -- ifp->flags = stream_getl (s); -- ifp->metric = stream_getl (s); -- ifp->mtu = stream_getl (s); -- ifp->bandwidth = stream_getl (s); --} -- - int - ospf_interface_state_up (int command, struct zclient *zclient, - zebra_size_t length) -@@ -1166,6 +1170,7 @@ - /* Allocate zebra structure. */ - zclient = zclient_new (); - zclient_init (zclient, ZEBRA_ROUTE_OSPF); -+ zclient->router_id_update = ospf_router_id_update_zebra; - zclient->interface_add = ospf_interface_add; - zclient->interface_delete = ospf_interface_delete; - zclient->interface_up = ospf_interface_state_up; -diff --exclude=.p4config -uNr zebra/zebra/main.c zebra-ldp/zebra/main.c ---- zebra/zebra/main.c 2003-03-29 18:17:22.000000000 -0600 -+++ zebra-ldp/zebra/main.c 2003-03-10 14:59:27.000000000 -0600 -@@ -34,7 +34,7 @@ - #include "zebra/rib.h" - #include "zebra/zserv.h" - #include "zebra/debug.h" --#include "zebra/rib.h" -+#include "zebra/router-id.h" - - /* Master of threads. */ - struct thread_master *master; -@@ -258,6 +258,7 @@ - rib_init (); - zebra_if_init (); - zebra_debug_init (); -+ router_id_init(); - zebra_vty_init (); - access_list_init (); - rtadv_init (); -diff --exclude=.p4config -uNr zebra/zebra/Makefile.am zebra-ldp/zebra/Makefile.am ---- zebra/zebra/Makefile.am 2003-03-29 18:17:16.000000000 -0600 -+++ zebra-ldp/zebra/Makefile.am 2003-03-10 14:59:23.000000000 -0600 -@@ -21,11 +21,11 @@ - - zebra_SOURCES = \ - zserv.c main.c interface.c connected.c ioctl.c zebra_rib.c \ -- redistribute.c debug.c rtadv.c zebra_snmp.c zebra_vty.c -+ redistribute.c debug.c rtadv.c zebra_snmp.c zebra_vty.c router-id.c - - noinst_HEADERS = \ - connected.h ioctl.h rib.h rt.h zserv.h redistribute.h debug.h rtadv.h \ -- interface.h ipforward.h -+ interface.h ipforward.h router-id.h - - zebra_LDADD = ../lib/libzebra.a $(otherobj) $(LIB_IPV6) - -diff --exclude=.p4config -uNr zebra/zebra/redistribute.c zebra-ldp/zebra/redistribute.c ---- zebra/zebra/redistribute.c 2003-03-29 18:17:22.000000000 -0600 -+++ zebra-ldp/zebra/redistribute.c 2003-03-10 14:59:27.000000000 -0600 ++extern int ++mpls_in_segment_register(struct zmpls_in_segment *in); ++ ++extern int ++mpls_in_segment_unregister(struct zmpls_in_segment *in); ++ ++extern int ++mpls_out_segment_register(struct zmpls_out_segment *out); ++ ++extern int ++mpls_out_segment_unregister(struct zmpls_out_segment *out); ++ ++extern int ++mpls_out_segment_unregister_by_index(unsigned int index); ++ ++extern int ++mpls_labelspace_register(int labelspace); ++ ++extern int ++mpls_labelspace_unregister(int labelspace); ++ ++extern int ++mpls_labelspace_is_registered(int labelspace); ++ ++extern void ++mpls_out_segment_config_write (struct vty *vty, struct zmpls_out_segment *out); ++ ++extern struct zmpls_out_segment* ++mpls_out_segment_find(unsigned int index); ++ ++extern unsigned int ++mpls_out_segment_find_index_by_nhlfe (struct zmpls_out_segment *out); ++ ++extern int ++nhlfe_parse(struct vty *vty, char **argv, struct zmpls_out_segment *out, ++ char* addr); ++ ++extern int ++mpls_ctrl_init(void); ++ ++extern int ++mpls_ctrl_nhlfe_unregister(struct zmpls_out_segment *old); ++ ++extern int ++mpls_ctrl_nhlfe_register(struct zmpls_out_segment *new); ++ ++extern int ++mpls_ctrl_ilm_unregister(struct zmpls_in_segment *old); ++ ++extern int ++mpls_ctrl_ilm_register(struct zmpls_in_segment *new, ++ struct zmpls_out_segment *out); ++ ++extern int ++mpls_ctrl_set_interface_labelspace(struct interface *ifp); ++ ++#endif /* _ZEBRA_MPLS_VTY_H */ +diff --exclude=rsvpd -uNr quagga/zebra/redistribute.c quagga-mpls/zebra/redistribute.c +--- quagga/zebra/redistribute.c 2004-02-25 13:47:32.000000000 -0600 ++++ quagga-mpls/zebra/redistribute.c 2004-07-14 22:58:12.968280136 -0500 @@ -35,6 +35,7 @@ #include "zebra/zserv.h" #include "zebra/redistribute.h" #include "zebra/debug.h" +#include "zebra/router-id.h" - int - zebra_check_addr (struct prefix *p) -@@ -379,6 +380,8 @@ + /* master zebra server structure */ + extern struct zebra_t zebrad; +@@ -380,6 +381,8 @@ p->prefixlen, ifc->ifp->name); } + router_id_add_address(ifc); + - for (node = listhead (client_list); node; nextnode (node)) + for (node = listhead (zebrad.client_list); node; nextnode (node)) if ((client = getdata (node)) != NULL) if (client->ifinfo && CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL)) -@@ -403,6 +406,8 @@ +@@ -404,8 +407,106 @@ p->prefixlen, ifc->ifp->name); } + router_id_del_address(ifc); + - for (node = listhead (client_list); node; nextnode (node)) + for (node = listhead (zebrad.client_list); node; nextnode (node)) if ((client = getdata (node)) != NULL) if (client->ifinfo && CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL)) -diff --exclude=.p4config -uNr zebra/zebra/rib.h zebra-ldp/zebra/rib.h ---- zebra/zebra/rib.h 2003-03-29 18:17:23.000000000 -0600 -+++ zebra-ldp/zebra/rib.h 2003-03-10 14:59:27.000000000 -0600 -@@ -135,6 +135,9 @@ - unsigned int ifindex; - char *ifname; - -+ /* MPLS index */ -+ unsigned int mplsindex; + zsend_interface_address_delete (client, ifp, ifc); + } + - /* Nexthop address or interface name. */ - union - { -@@ -147,6 +150,7 @@ - /* Recursive lookup nexthop. */ - u_char rtype; - unsigned int rifindex; -+ unsigned int rmplsindex; - union ++void ++redistribute_add_mpls_xc (struct zmpls_xc *xc) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_xc_add (client, xc); ++} ++ ++void ++redistribute_delete_mpls_xc (struct zmpls_xc *xc) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_xc_delete (client, xc); ++} ++ ++void ++redistribute_add_mpls_in_segment (struct zmpls_in_segment *in) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_in_segment_add (client, in); ++} ++ ++void ++redistribute_delete_mpls_in_segment (struct zmpls_in_segment *in) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_in_segment_delete (client, in); ++} ++ ++void ++redistribute_add_mpls_out_segment (struct zmpls_out_segment *out) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_out_segment_add (client, out); ++} ++ ++void ++redistribute_delete_mpls_out_segment (struct zmpls_out_segment *out) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_out_segment_delete (client, out); ++} ++ ++void ++redistribute_add_mpls_labelspace (int labelspace) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_labelspace_add (client, labelspace); ++} ++ ++void ++redistribute_delete_mpls_labelspace (int labelspace) ++{ ++ listnode node; ++ struct zserv *client; ++ ++ for (node = listhead (zebrad.client_list); node; nextnode (node)) ++ if ((client = getdata (node)) != NULL) ++ if (client->mplsinfo) ++ zsend_mpls_labelspace_delete (client, labelspace); ++} +diff --exclude=rsvpd -uNr quagga/zebra/redistribute.h quagga-mpls/zebra/redistribute.h +--- quagga/zebra/redistribute.h 2004-02-25 13:47:32.000000000 -0600 ++++ quagga-mpls/zebra/redistribute.h 2004-07-14 22:57:17.087775264 -0500 +@@ -45,5 +45,14 @@ + void zebra_interface_address_delete_update (struct interface *, + struct connected *c); + ++void redistribute_add_mpls_xc (struct zmpls_xc *xc); ++void redistribute_delete_mpls_xc (struct zmpls_xc *xc); ++void redistribute_add_mpls_in_segment (struct zmpls_in_segment *in); ++void redistribute_delete_mpls_in_segment (struct zmpls_in_segment *in); ++void redistribute_add_mpls_out_segment (struct zmpls_out_segment *out); ++void redistribute_delete_mpls_out_segment (struct zmpls_out_segment *out); ++void redistribute_add_mpls_labelspace (int labelspace); ++void redistribute_delete_mpls_labelspace (int labelspace); ++ + #endif /* _ZEBRA_REDISTRIBUTE_H */ + +diff --exclude=rsvpd -uNr quagga/zebra/rib.h quagga-mpls/zebra/rib.h +--- quagga/zebra/rib.h 2004-02-25 13:47:33.000000000 -0600 ++++ quagga-mpls/zebra/rib.h 2004-04-16 21:39:59.000000000 -0500 +@@ -77,12 +77,14 @@ + #define STATIC_IPV4_GATEWAY 1 + #define STATIC_IPV4_IFNAME 2 + #define STATIC_IPV4_BLACKHOLE 3 ++#define STATIC_IPV4_MPLS 4 + + /* Nexthop value. */ + union { struct in_addr ipv4; -@@ -215,6 +219,11 @@ - void rib_close (); - void rib_init (); + char *ifname; ++ u_int32_t mpls; + } gate; + + /* bit flags */ +@@ -109,10 +111,12 @@ + #define STATIC_IPV6_GATEWAY 1 + #define STATIC_IPV6_GATEWAY_IFNAME 2 + #define STATIC_IPV6_IFNAME 3 ++#define STATIC_IPV6_MPLS 4 + + /* Nexthop value. */ + struct in6_addr ipv6; + char *ifname; ++ u_int32_t mpls; + + /* bit flags */ + u_char flags; +@@ -134,6 +138,7 @@ + NEXTHOP_TYPE_IPV6_IFINDEX, /* IPv6 nexthop with ifindex. */ + NEXTHOP_TYPE_IPV6_IFNAME, /* IPv6 nexthop with ifname. */ + NEXTHOP_TYPE_BLACKHOLE, /* Null0 nexthop. */ ++ NEXTHOP_TYPE_MPLS, /* MPLS nexthop. */ + }; + + /* Nexthop structure. */ +@@ -160,6 +165,7 @@ + #ifdef HAVE_IPV6 + struct in6_addr ipv6; + #endif /* HAVE_IPV6*/ ++ unsigned int mpls; + } gate; + + /* Recursive lookup nexthop. */ +@@ -171,6 +177,7 @@ + #ifdef HAVE_IPV6 + struct in6_addr ipv6; + #endif /* HAVE_IPV6 */ ++ unsigned int mpls; + } rgate; + + struct nexthop *indirect; +@@ -198,6 +205,7 @@ + struct route_table *stable[AFI_MAX][SAFI_MAX]; + }; + ++int nexthop_match(struct nexthop *, struct nexthop *); + struct nexthop *nexthop_ifindex_add (struct rib *, unsigned int); + struct nexthop *nexthop_ifname_add (struct rib *, char *); + struct nexthop *nexthop_blackhole_add (struct rib *); +@@ -235,11 +243,11 @@ -+#include "prefix.h" -+#include "table.h" -+ -+void rib_process (struct route_node *rn, struct rib *del); -+ int static_add_ipv4 (struct prefix *p, struct in_addr *gate, char *ifname, - u_char distance, u_int32_t vrf_id); -diff --exclude=.p4config -uNr zebra/zebra/router-id.c zebra-ldp/zebra/router-id.c ---- zebra/zebra/router-id.c 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/zebra/router-id.c 2003-03-10 14:59:28.000000000 -0600 -@@ -0,0 +1,239 @@ +- u_char flags, u_char distance, u_int32_t vrf_id); ++ u_int32_t mpls, u_char flags, u_char distance, u_int32_t vrf_id); + + int + static_delete_ipv4 (struct prefix *p, struct in_addr *gate, char *ifname, +- u_char distance, u_int32_t vrf_id); ++ u_int32_t mpls, u_char distance, u_int32_t vrf_id); + + #ifdef HAVE_IPV6 + int +@@ -258,11 +266,13 @@ + + int + static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate, +- char *ifname, u_char flags, u_char distance, u_int32_t vrf_id); ++ char *ifname, u_int32_t mpls, u_char flags, u_char distance, ++ u_int32_t vrf_id); + + int + static_delete_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate, +- char *ifname, u_char distance, u_int32_t vrf_id); ++ char *ifname, u_int32_t mpls, u_char distance, ++ u_int32_t vrf_id); + + #endif /* HAVE_IPV6 */ + +diff --exclude=rsvpd -uNr quagga/zebra/router-id.c quagga-mpls/zebra/router-id.c +--- quagga/zebra/router-id.c 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/zebra/router-id.c 2004-03-01 23:05:28.000000000 -0600 +@@ -0,0 +1,245 @@ +#include + +#include "if.h" @@ -8753,7 +25266,9 @@ diff --exclude=.p4config -uNr zebra/zebra/router-id.c zebra-ldp/zebra/router-id. +static struct list rid_all_sorted_list; +static struct list rid_lo_sorted_list; +static struct prefix rid_user_assigned; -+extern struct list *client_list; ++ ++/* master zebra server structure */ ++extern struct zebra_t zebrad; + +static struct connected *router_id_find_node(struct list *l, + struct connected *ifc) { @@ -8776,6 +25291,10 @@ diff --exclude=.p4config -uNr zebra/zebra/router-id.c zebra-ldp/zebra/router-id. + n.prefixlen = 8; + n.family = AF_INET; + ++ if (ifc->address->family != AF_INET) { ++ return 1; ++ } ++ + if (prefix_match(&n,ifc->address)) { + return 1; + } @@ -8811,7 +25330,7 @@ diff --exclude=.p4config -uNr zebra/zebra/router-id.c zebra-ldp/zebra/router-id. + rid_user_assigned.u.prefix4.s_addr = p->u.prefix4.s_addr; + + router_id_get(&p2); -+ for (node = listhead(client_list); node; nextnode(node)) ++ for (node = listhead(zebrad.client_list); node; nextnode(node)) + if ((client = getdata(node)) != NULL) + zsend_router_id_update(client,&p2); +} @@ -8844,7 +25363,7 @@ diff --exclude=.p4config -uNr zebra/zebra/router-id.c zebra-ldp/zebra/router-id. + return; + } + -+ for (node = listhead(client_list); node; nextnode(node)) ++ for (node = listhead(zebrad.client_list); node; nextnode(node)) + if ((client = getdata(node)) != NULL) + zsend_router_id_update(client,&after); +} @@ -8863,397 +25382,1844 @@ diff --exclude=.p4config -uNr zebra/zebra/router-id.c zebra-ldp/zebra/router-id. + + router_id_get(&before); + -+ if (!strncmp(ifc->ifp->name,"lo",2) || !strncmp(ifc->ifp->name,"dummy",5)) { -+ l = &rid_lo_sorted_list; -+ } else { -+ l = &rid_all_sorted_list; -+ } ++ if (!strncmp(ifc->ifp->name,"lo",2) || !strncmp(ifc->ifp->name,"dummy",5)) { ++ l = &rid_lo_sorted_list; ++ } else { ++ l = &rid_all_sorted_list; ++ } ++ ++ if ((c = router_id_find_node(l,ifc))) { ++ listnode_delete(l,c); ++ } ++ ++ router_id_get(&after); ++ ++ if (prefix_same(&before, &after)) { ++ return; ++ } ++ ++ for (node = listhead(zebrad.client_list); node; nextnode(node)) ++ if ((client = getdata(node)) != NULL) ++ zsend_router_id_update(client,&after); ++} ++ ++void router_id_write(struct vty *vty) { ++ if (rid_user_assigned.u.prefix4.s_addr) { ++ vty_out(vty, "router-id %s%s", inet_ntoa(rid_user_assigned.u.prefix4), ++ VTY_NEWLINE); ++ } ++} ++ ++DEFUN (router_id, ++ router_id_cmd, ++ "router-id A.B.C.D", ++ "Manually set the router-id\n" ++ "IP address to use for router-id\n") ++{ ++ struct prefix rid; ++ ++ rid.u.prefix4.s_addr = inet_addr(argv[0]); ++ if (!rid.u.prefix4.s_addr) { ++ return CMD_WARNING; ++ } ++ rid.prefixlen = 32; ++ rid.family = AF_INET; ++ ++ router_id_set(&rid); ++ ++ return CMD_SUCCESS; ++} ++ ++DEFUN (no_router_id, ++ no_router_id_cmd, ++ "no router-id", ++ NO_STR ++ "Remove the manually configured router-id\n") ++{ ++ struct prefix rid; ++ ++ rid.u.prefix4.s_addr = 0; ++ rid.prefixlen = 0; ++ rid.family = AF_INET; ++ ++ router_id_set(&rid); ++ ++ return CMD_SUCCESS; ++} ++ ++DEFUN (show_router_id, ++ show_router_id_cmd, ++ "show router-id", ++ SHOW_STR ++ "current router ID\n") ++{ ++ struct prefix rid; ++ router_id_get(&rid); ++ ++ vty_out(vty, "router-id: %s%s", inet_ntoa(rid.u.prefix4),VTY_NEWLINE); ++ return CMD_SUCCESS; ++} ++ ++int router_id_cmp(void *a, void *b) { ++ unsigned int A, B; ++ ++ A = ((struct connected*)a)->address->u.prefix4.s_addr; ++ B = ((struct connected*)b)->address->u.prefix4.s_addr; ++ ++ if (A > B) { ++ return 1; ++ } else if (A < B) { ++ return -1; ++ } ++ return 0; ++} ++ ++void router_id_init(void) { ++ install_element(VIEW_NODE, &show_router_id_cmd); ++ install_element(ENABLE_NODE, &show_router_id_cmd); ++ install_element(CONFIG_NODE, &router_id_cmd); ++ install_element(CONFIG_NODE, &no_router_id_cmd); ++ ++ memset(&rid_all_sorted_list,0,sizeof(rid_all_sorted_list)); ++ memset(&rid_lo_sorted_list,0,sizeof(rid_lo_sorted_list)); ++ memset(&rid_user_assigned,0,sizeof(rid_user_assigned)); ++ ++ rid_all_sorted_list.cmp = router_id_cmp; ++ rid_lo_sorted_list.cmp = router_id_cmp; ++ ++ rid_user_assigned.family = AF_INET; ++ rid_user_assigned.prefixlen = 32; ++} +diff --exclude=rsvpd -uNr quagga/zebra/router-id.h quagga-mpls/zebra/router-id.h +--- quagga/zebra/router-id.h 1969-12-31 18:00:00.000000000 -0600 ++++ quagga-mpls/zebra/router-id.h 2004-02-25 13:57:55.000000000 -0600 +@@ -0,0 +1,20 @@ ++#ifndef _ROUTER_ID_H_ ++#define _ROUTER_ID_H_ ++ ++#include ++ ++#include "memory.h" ++#include "prefix.h" ++#include "zclient.h" ++#include "if.h" ++ ++extern void router_id_add_address(struct connected *); ++extern void router_id_del_address(struct connected *); ++extern void router_id_init(void); ++extern void router_id_write(struct vty *); ++extern void router_id_get(struct prefix *); ++ ++extern void zread_router_id_add(struct zserv *, u_short); ++extern void zread_router_id_delete(struct zserv *, u_short); ++ ++#endif +diff --exclude=rsvpd -uNr quagga/zebra/rt_ioctl.c quagga-mpls/zebra/rt_ioctl.c +--- quagga/zebra/rt_ioctl.c 2004-02-25 13:47:34.000000000 -0600 ++++ quagga-mpls/zebra/rt_ioctl.c 2004-03-20 02:50:53.000000000 -0600 +@@ -215,7 +215,8 @@ + rtentry.rt_flags |= RTF_GATEWAY; + } + if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX +- || nexthop->rtype == NEXTHOP_TYPE_IFNAME) ++ || nexthop->rtype == NEXTHOP_TYPE_IFNAME ++ || nexthop->rtype == NEXTHOP_TYPE_MPLS) + { + ifp = if_lookup_by_index (nexthop->rifindex); + if (ifp) +@@ -237,7 +238,8 @@ + rtentry.rt_flags |= RTF_GATEWAY; + } + if (nexthop->type == NEXTHOP_TYPE_IFINDEX +- || nexthop->type == NEXTHOP_TYPE_IFNAME) ++ || nexthop->type == NEXTHOP_TYPE_IFNAME ++ || nexthop->type == NEXTHOP_TYPE_MPLS) + { + ifp = if_lookup_by_index (nexthop->ifindex); + if (ifp) +@@ -472,6 +474,7 @@ + } + if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IFNAME ++ || nexthop->rtype == NEXTHOP_TYPE_MPLS + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFNAME + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFINDEX) + rtm.rtmsg_ifindex = nexthop->rifindex; +@@ -490,6 +493,7 @@ + } + if (nexthop->type == NEXTHOP_TYPE_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IFNAME ++ || nexthop->type == NEXTHOP_TYPE_MPLS + || nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME + || nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX) + rtm.rtmsg_ifindex = nexthop->ifindex; +diff --exclude=rsvpd -uNr quagga/zebra/rt_netlink.c quagga-mpls/zebra/rt_netlink.c +--- quagga/zebra/rt_netlink.c 2004-03-03 11:46:00.000000000 -0600 ++++ quagga-mpls/zebra/rt_netlink.c 2004-03-20 02:47:46.000000000 -0600 +@@ -1380,6 +1380,7 @@ + #endif /* HAVE_IPV6 */ + if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IFNAME ++ || nexthop->rtype == NEXTHOP_TYPE_MPLS + || nexthop->rtype == NEXTHOP_TYPE_IPV4_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFNAME) +@@ -1412,6 +1413,7 @@ + #endif /* HAVE_IPV6 */ + if (nexthop->type == NEXTHOP_TYPE_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IFNAME ++ || nexthop->type == NEXTHOP_TYPE_MPLS + || nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME) +@@ -1482,6 +1484,7 @@ + /* ifindex */ + if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IFNAME ++ || nexthop->rtype == NEXTHOP_TYPE_MPLS + || nexthop->rtype == NEXTHOP_TYPE_IPV4_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFNAME) +@@ -1518,6 +1521,7 @@ + /* ifindex */ + if (nexthop->type == NEXTHOP_TYPE_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IFNAME ++ || nexthop->type == NEXTHOP_TYPE_MPLS + || nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME + || nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX) +@@ -1633,6 +1637,12 @@ + addattr_l (&req.n, sizeof req, IFA_BROADCAST, &p->u.prefix, + bytelen); + } ++ else if (if_is_pointopoint (ifp) && ifc->destination) ++ { ++ p = ifc->destination; ++ addattr_l (&req.n, sizeof req, IFA_ADDRESS, &p->u.prefix, ++ bytelen); ++ } + } + + if (CHECK_FLAG (ifc->flags, ZEBRA_IFA_SECONDARY)) +diff --exclude=rsvpd -uNr quagga/zebra/rt_socket.c quagga-mpls/zebra/rt_socket.c +--- quagga/zebra/rt_socket.c 2004-02-25 13:47:38.000000000 -0600 ++++ quagga-mpls/zebra/rt_socket.c 2004-03-20 02:52:31.000000000 -0600 +@@ -117,6 +117,7 @@ + } + if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IFNAME ++ || nexthop->rtype == NEXTHOP_TYPE_MPLS + || nexthop->rtype == NEXTHOP_TYPE_IPV4_IFINDEX) + ifindex = nexthop->rifindex; + } +@@ -130,6 +131,7 @@ + } + if (nexthop->type == NEXTHOP_TYPE_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IFNAME ++ || nexthop->type == NEXTHOP_TYPE_MPLS + || nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX) + ifindex = nexthop->ifindex; + if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE) +@@ -358,6 +360,7 @@ + } + if (nexthop->rtype == NEXTHOP_TYPE_IFINDEX + || nexthop->rtype == NEXTHOP_TYPE_IFNAME ++ || nexthop->rtype == NEXTHOP_TYPE_MPLS + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFNAME + || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFINDEX) + ifindex = nexthop->rifindex; +@@ -373,6 +376,7 @@ + } + if (nexthop->type == NEXTHOP_TYPE_IFINDEX + || nexthop->type == NEXTHOP_TYPE_IFNAME ++ || nexthop->type == NEXTHOP_TYPE_MPLS + || nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME + || nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX) + ifindex = nexthop->ifindex; +diff --exclude=rsvpd -uNr quagga/zebra/zebra_rib.c quagga-mpls/zebra/zebra_rib.c +--- quagga/zebra/zebra_rib.c 2004-02-25 13:47:45.000000000 -0600 ++++ quagga-mpls/zebra/zebra_rib.c 2004-07-14 23:46:53.341315952 -0500 +@@ -34,6 +34,7 @@ + #include "zebra/rt.h" + #include "zebra/zserv.h" + #include "zebra/redistribute.h" ++#include "zebra/mpls_vty.h" + #include "zebra/debug.h" + + /* Default rtm_table for all clients */ +@@ -153,6 +154,60 @@ + return vrf->stable[afi][safi]; + } + ++int ++nexthop_match(struct nexthop *a, struct nexthop *b) ++{ ++ int no_match = 0; ++ ++ if (a->type != b->type) ++ return 0; + -+ if ((c = router_id_find_node(l,ifc))) { -+ listnode_delete(l,c); ++ switch (a->type) ++ { ++ case NEXTHOP_TYPE_IPV6_IFINDEX: ++ case NEXTHOP_TYPE_IPV4_IFINDEX: ++ case NEXTHOP_TYPE_IFINDEX: ++ if (a->ifindex != b->ifindex) ++ return 0; ++ break; ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ case NEXTHOP_TYPE_IFNAME: ++ if (strncmp (a->ifname, b->ifname, IFNAMSIZ)) ++ return 0; ++ break; ++ case NEXTHOP_TYPE_MPLS: ++ if (a->gate.mpls != b->gate.mpls) ++ return 0; ++ break; ++ default: ++ no_match++; + } + -+ router_id_get(&after); -+ -+ if (prefix_same(&before, &after)) { -+ return; ++ switch (a->type) ++ { ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ case NEXTHOP_TYPE_IPV4_IFINDEX: ++ case NEXTHOP_TYPE_IPV4: ++ if (memcmp (&a->gate.ipv4, &b->gate.ipv4, sizeof(struct in_addr))) ++ return 0; ++ break; ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ case NEXTHOP_TYPE_IPV6_IFINDEX: ++ case NEXTHOP_TYPE_IPV6: ++ if (memcmp (&a->gate.ipv6, &b->gate.ipv6, sizeof(struct in6_addr))) ++ return 0; ++ break; ++ default: ++ no_match++; + } + -+ for (node = listhead(client_list); node; nextnode(node)) -+ if ((client = getdata(node)) != NULL) -+ zsend_router_id_update(client,&after); -+} ++ if (no_match == 2) ++ return 0; + -+void router_id_write(struct vty *vty) { -+ if (rid_user_assigned.u.prefix4.s_addr) { -+ vty_out(vty, "router-id %s%s", inet_ntoa(rid_user_assigned.u.prefix4), -+ VTY_NEWLINE); -+ } ++ return 1; +} + -+DEFUN (router_id, -+ router_id_cmd, -+ "router-id A.B.C.D", -+ "Manually set the router-id\n" -+ "IP address to use for router-id\n") + /* Add nexthop to the end of the list. */ + void + nexthop_add (struct rib *rib, struct nexthop *nexthop) +@@ -223,6 +278,37 @@ + } + + struct nexthop * ++nexthop_mpls_add (struct rib *rib, u_int32_t mpls) +{ -+ struct prefix rid; -+ -+ rid.u.prefix4.s_addr = inet_addr(argv[0]); -+ if (!rid.u.prefix4.s_addr) { -+ return CMD_WARNING; ++ struct nexthop *nexthop; ++ struct zmpls_out_segment *out; ++ ++ out = mpls_out_segment_find(mpls); ++ if (!out) ++ return NULL; ++ ++ nexthop = XMALLOC (MTYPE_NEXTHOP, sizeof (struct nexthop)); ++ memset (nexthop, 0, sizeof (struct nexthop)); ++ nexthop->type = NEXTHOP_TYPE_MPLS; ++ nexthop->gate.mpls = mpls; ++ ++ switch (out->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ nexthop->ifname = XSTRDUP (0, out->nh.ifname); ++ break; ++ default: ++ assert (0); + } -+ rid.prefixlen = 32; -+ rid.family = AF_INET; + -+ router_id_set(&rid); ++ nexthop_add (rib, nexthop); + -+ return CMD_SUCCESS; ++ return nexthop; +} + -+DEFUN (no_router_id, -+ no_router_id_cmd, -+ "no router-id", -+ NO_STR -+ "Remove the manually configured router-id\n") -+{ -+ struct prefix rid; -+ -+ rid.u.prefix4.s_addr = 0; -+ rid.prefixlen = 0; -+ rid.family = AF_INET; ++struct nexthop * + nexthop_ipv4_add (struct rib *rib, struct in_addr *ipv4) + { + struct nexthop *nexthop; +@@ -400,8 +486,11 @@ + nexthop->rgate.ipv4 = newhop->gate.ipv4; + if (newhop->type == NEXTHOP_TYPE_IFINDEX + || newhop->type == NEXTHOP_TYPE_IFNAME ++ || newhop->type == NEXTHOP_TYPE_MPLS + || newhop->type == NEXTHOP_TYPE_IPV4_IFINDEX) + nexthop->rifindex = newhop->ifindex; ++ if (newhop->type == NEXTHOP_TYPE_MPLS) ++ nexthop->rgate.mpls = newhop->gate.mpls; + } + return 1; + } +@@ -499,9 +588,12 @@ + nexthop->rgate.ipv6 = newhop->gate.ipv6; + if (newhop->type == NEXTHOP_TYPE_IFINDEX + || newhop->type == NEXTHOP_TYPE_IFNAME ++ || newhop->type == NEXTHOP_TYPE_MPLS + || newhop->type == NEXTHOP_TYPE_IPV6_IFINDEX + || newhop->type == NEXTHOP_TYPE_IPV6_IFNAME) + nexthop->rifindex = newhop->ifindex; ++ if (newhop->type == NEXTHOP_TYPE_MPLS) ++ nexthop->rgate.mpls = newhop->gate.mpls; + } + return 1; + } +@@ -690,6 +782,7 @@ + else + UNSET_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE); + break; ++ case NEXTHOP_TYPE_MPLS: + case NEXTHOP_TYPE_IFNAME: + case NEXTHOP_TYPE_IPV6_IFNAME: + ifp = if_lookup_by_name (nexthop->ifname); +@@ -765,6 +858,9 @@ + && active != CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) + SET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); + ++ if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_CHANGED_MPLS)) ++ SET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); + -+ router_id_set(&rid); + if (CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) + rib->nexthop_active_num++; + } +@@ -845,7 +941,10 @@ + { + if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED)) + { +- redistribute_delete (&rn->p, rib); ++ /* JLEU: this might no longer be true since MPLS is a seperate NH*/ ++ if (!CHECK_FLAG (rib->flags, ZEBRA_FLAG_CHANGED_MPLS)) ++ redistribute_delete (&rn->p, rib); + -+ return CMD_SUCCESS; + if (! RIB_SYSTEM_ROUTE (rib)) + rib_uninstall_kernel (rn, rib); + UNSET_FLAG (rib->flags, ZEBRA_FLAG_SELECTED); +@@ -894,7 +993,9 @@ + { + if (CHECK_FLAG (select->flags, ZEBRA_FLAG_CHANGED)) + { +- redistribute_delete (&rn->p, select); ++ /* JLEU: this may no longer be true since MPLS is a real NH */ ++ if (!CHECK_FLAG (select->flags, ZEBRA_FLAG_CHANGED_MPLS)) ++ redistribute_delete (&rn->p, select); + if (! RIB_SYSTEM_ROUTE (select)) + rib_uninstall_kernel (rn, select); + +@@ -903,7 +1004,11 @@ + + if (! RIB_SYSTEM_ROUTE (select)) + rib_install_kernel (rn, select); +- redistribute_add (&rn->p, select); ++ ++ if (!CHECK_FLAG (select->flags, ZEBRA_FLAG_CHANGED_MPLS)) ++ redistribute_add (&rn->p, select); ++ ++ UNSET_FLAG (select->flags, ZEBRA_FLAG_CHANGED_MPLS); + } + else if (! RIB_SYSTEM_ROUTE (select)) + { +@@ -1314,6 +1419,9 @@ + case STATIC_IPV4_IFNAME: + nexthop_ifname_add (rib, si->gate.ifname); + break; ++ case STATIC_IPV4_MPLS: ++ nexthop_mpls_add (rib, si->gate.mpls); ++ break; + case STATIC_IPV4_BLACKHOLE: + nexthop_blackhole_add (rib); + break; +@@ -1339,6 +1447,9 @@ + case STATIC_IPV4_IFNAME: + nexthop_ifname_add (rib, si->gate.ifname); + break; ++ case STATIC_IPV4_MPLS: ++ nexthop_mpls_add (rib, si->gate.mpls); ++ break; + case STATIC_IPV4_BLACKHOLE: + nexthop_blackhole_add (rib); + break; +@@ -1366,6 +1477,10 @@ + && si->type == STATIC_IPV4_IFNAME + && strcmp (nexthop->ifname, si->gate.ifname) == 0) + return 1; ++ if (nexthop->type == NEXTHOP_TYPE_MPLS ++ && si->type == STATIC_IPV4_MPLS ++ && nexthop->gate.mpls == si->gate.mpls) ++ return 1; + if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE + && si->type == STATIC_IPV4_BLACKHOLE) + return 1; +@@ -1437,7 +1552,8 @@ + /* Add static route into static route configuration. */ + int + static_add_ipv4 (struct prefix *p, struct in_addr *gate, char *ifname, +- u_char flags, u_char distance, u_int32_t vrf_id) ++ u_int32_t mpls, u_char flags, u_char distance, ++ u_int32_t vrf_id) + { + u_char type = 0; + struct route_node *rn; +@@ -1460,6 +1576,8 @@ + type = STATIC_IPV4_GATEWAY; + else if (ifname) + type = STATIC_IPV4_IFNAME; ++ else if (mpls) ++ type = STATIC_IPV4_MPLS; + else + type = STATIC_IPV4_BLACKHOLE; + +@@ -1468,7 +1586,8 @@ + { + if (type == si->type + && (! gate || IPV4_ADDR_SAME (gate, &si->gate.ipv4)) +- && (! ifname || strcmp (ifname, si->gate.ifname) == 0)) ++ && (! ifname || strcmp (ifname, si->gate.ifname) == 0) ++ && (! mpls || (mpls == si->gate.mpls))) + { + if (distance == si->distance) + { +@@ -1482,7 +1601,7 @@ + + /* Distance chaged. */ + if (update) +- static_delete_ipv4 (p, gate, ifname, update->distance, vrf_id); ++ static_delete_ipv4 (p, gate, ifname, mpls, update->distance, vrf_id); + + /* Make new static route structure. */ + si = XMALLOC (MTYPE_STATIC_IPV4, sizeof (struct static_ipv4)); +@@ -1496,6 +1615,8 @@ + si->gate.ipv4 = *gate; + if (ifname) + si->gate.ifname = XSTRDUP (0, ifname); ++ if (mpls) ++ si->gate.mpls = mpls; + + /* Add new static route information to the tree with sort by + distance value and gateway address. */ +@@ -1533,7 +1654,7 @@ + /* Delete static route from static route configuration. */ + int + static_delete_ipv4 (struct prefix *p, struct in_addr *gate, char *ifname, +- u_char distance, u_int32_t vrf_id) ++ u_int32_t mpls, u_char distance, u_int32_t vrf_id) + { + u_char type = 0; + struct route_node *rn; +@@ -1555,6 +1676,8 @@ + type = STATIC_IPV4_GATEWAY; + else if (ifname) + type = STATIC_IPV4_IFNAME; ++ else if (mpls) ++ type = STATIC_IPV4_MPLS; + else + type = STATIC_IPV4_BLACKHOLE; + +@@ -1562,7 +1685,8 @@ + for (si = rn->info; si; si = si->next) + if (type == si->type + && (! gate || IPV4_ADDR_SAME (gate, &si->gate.ipv4)) +- && (! ifname || strcmp (ifname, si->gate.ifname) == 0)) ++ && (! ifname || strcmp (ifname, si->gate.ifname) == 0) ++ && (! mpls || (mpls == si->gate.mpls))) + break; + + /* Can't find static route. */ +@@ -1878,6 +2002,9 @@ + case STATIC_IPV6_IFNAME: + nexthop_ifname_add (rib, si->ifname); + break; ++ case STATIC_IPV6_MPLS: ++ nexthop_mpls_add (rib, si->mpls); ++ break; + case STATIC_IPV6_GATEWAY_IFNAME: + nexthop_ipv6_ifname_add (rib, &si->ipv6, si->ifname); + break; +@@ -1903,6 +2030,9 @@ + case STATIC_IPV6_IFNAME: + nexthop_ifname_add (rib, si->ifname); + break; ++ case STATIC_IPV6_MPLS: ++ nexthop_mpls_add (rib, si->mpls); ++ break; + case STATIC_IPV6_GATEWAY_IFNAME: + nexthop_ipv6_ifname_add (rib, &si->ipv6, si->ifname); + break; +@@ -1930,6 +2060,10 @@ + && si->type == STATIC_IPV6_IFNAME + && strcmp (nexthop->ifname, si->ifname) == 0) + return 1; ++ if (nexthop->type == NEXTHOP_TYPE_MPLS ++ && si->type == STATIC_IPV6_MPLS ++ && nexthop->gate.mpls == si->mpls) ++ return 1; + if (nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME + && si->type == STATIC_IPV6_GATEWAY_IFNAME + && IPV6_ADDR_SAME (&nexthop->gate.ipv6, &si->ipv6) +@@ -2001,7 +2135,8 @@ + /* Add static route into static route configuration. */ + int + static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate, +- char *ifname, u_char flags, u_char distance, u_int32_t vrf_id) ++ char *ifname, u_int32_t mpls, u_char flags, u_char distance, ++ u_int32_t vrf_id) + { + struct route_node *rn; + struct static_ipv6 *si; +@@ -2023,6 +2158,7 @@ + if (distance == si->distance + && type == si->type + && (! gate || IPV6_ADDR_SAME (gate, &si->ipv6)) ++ && (! mpls || mpls == si->mpls) + && (! ifname || strcmp (ifname, si->ifname) == 0)) + { + route_unlock_node (rn); +@@ -2046,6 +2182,9 @@ + case STATIC_IPV6_IFNAME: + si->ifname = XSTRDUP (0, ifname); + break; ++ case STATIC_IPV6_MPLS: ++ si->mpls = mpls; ++ break; + case STATIC_IPV6_GATEWAY_IFNAME: + si->ipv6 = *gate; + si->ifname = XSTRDUP (0, ifname); +@@ -2081,7 +2220,8 @@ + /* Delete static route from static route configuration. */ + int + static_delete_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate, +- char *ifname, u_char distance, u_int32_t vrf_id) ++ char *ifname, u_int32_t mpls, u_char distance, ++ u_int32_t vrf_id) + { + struct route_node *rn; + struct static_ipv6 *si; +@@ -2102,6 +2242,7 @@ + if (distance == si->distance + && type == si->type + && (! gate || IPV6_ADDR_SAME (gate, &si->ipv6)) ++ && (! mpls || mpls == si->mpls) + && (! ifname || strcmp (ifname, si->ifname) == 0)) + break; + +diff --exclude=rsvpd -uNr quagga/zebra/zebra_vty.c quagga-mpls/zebra/zebra_vty.c +--- quagga/zebra/zebra_vty.c 2004-02-25 13:47:50.000000000 -0600 ++++ quagga-mpls/zebra/zebra_vty.c 2004-07-14 23:22:03.934740168 -0500 +@@ -26,6 +26,7 @@ + #include "command.h" + #include "table.h" + #include "rib.h" ++#include "mpls_vty.h" + + /* Return route type string for VTY output. */ + const char * +@@ -86,10 +87,10 @@ + }; + + /* General fucntion for static route. */ +-int ++static int + zebra_static_ipv4 (struct vty *vty, int add_cmd, + char *dest_str, char *mask_str, char *gate_str, +- char *flag_str, char *distance_str) ++ char *flag_str, char *distance_str, u_int32_t mpls) + { + int ret; + u_char distance; +@@ -136,9 +137,9 @@ + return CMD_WARNING; + } + if (add_cmd) +- static_add_ipv4 (&p, NULL, NULL, ZEBRA_FLAG_BLACKHOLE, distance, 0); ++ static_add_ipv4 (&p, NULL, NULL, mpls, ZEBRA_FLAG_BLACKHOLE, distance, 0); + else +- static_delete_ipv4 (&p, NULL, NULL, distance, 0); ++ static_delete_ipv4 (&p, NULL, NULL, mpls, distance, 0); + return CMD_SUCCESS; + } + +@@ -162,9 +163,9 @@ + if (gate_str == NULL) + { + if (add_cmd) +- static_add_ipv4 (&p, NULL, NULL, flag, distance, 0); ++ static_add_ipv4 (&p, NULL, NULL, mpls, flag, distance, 0); + else +- static_delete_ipv4 (&p, NULL, NULL, distance, 0); ++ static_delete_ipv4 (&p, NULL, NULL, mpls, distance, 0); + + return CMD_SUCCESS; + } +@@ -178,9 +179,9 @@ + ifname = gate_str; + + if (add_cmd) +- static_add_ipv4 (&p, ifname ? NULL : &gate, ifname, flag, distance, 0); ++ static_add_ipv4 (&p, ifname ? NULL : &gate, ifname, mpls, flag, distance, 0); + else +- static_delete_ipv4 (&p, ifname ? NULL : &gate, ifname, distance, 0); ++ static_delete_ipv4 (&p, ifname ? NULL : &gate, ifname, mpls, distance, 0); + + return CMD_SUCCESS; + } +@@ -196,7 +197,7 @@ + "IP gateway interface name\n" + "Null interface\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, NULL); ++ return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, NULL, 0); + } + + DEFUN (ip_route_flags, +@@ -210,7 +211,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], NULL); ++ return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], NULL, 0); + } + + DEFUN (ip_route_flags2, +@@ -222,7 +223,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], NULL); ++ return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], NULL, 0); + } + + /* Mask as A.B.C.D format. */ +@@ -237,7 +238,7 @@ + "IP gateway interface name\n" + "Null interface\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, NULL); ++ return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, NULL, 0); + } + + DEFUN (ip_route_mask_flags, +@@ -252,7 +253,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL); ++ return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL, 0); + } + + DEFUN (ip_route_mask_flags2, +@@ -265,7 +266,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], NULL); ++ return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], NULL, 0); + } + + /* Distance option value. */ +@@ -280,7 +281,7 @@ + "Null interface\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, argv[2]); ++ return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], NULL, argv[2], 0); + } + + DEFUN (ip_route_flags_distance, +@@ -295,7 +296,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], argv[3]); ++ return zebra_static_ipv4 (vty, 1, argv[0], NULL, argv[1], argv[2], argv[3], 0); + } + + DEFUN (ip_route_flags_distance2, +@@ -308,7 +309,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], argv[2]); ++ return zebra_static_ipv4 (vty, 1, argv[0], NULL, NULL, argv[1], argv[2], 0); + } + + DEFUN (ip_route_mask_distance, +@@ -323,7 +324,7 @@ + "Null interface\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3]); ++ return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3], 0); + } + + DEFUN (ip_route_mask_flags_distance, +@@ -339,7 +340,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4]); ++ return zebra_static_ipv4 (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4], 0); + } + + DEFUN (ip_route_mask_flags_distance2, +@@ -353,7 +354,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3]); ++ return zebra_static_ipv4 (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3], 0); + } + + DEFUN (no_ip_route, +@@ -367,7 +368,7 @@ + "IP gateway interface name\n" + "Null interface\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, NULL); ++ return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, NULL, 0); + } + + ALIAS (no_ip_route, +@@ -392,7 +393,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, NULL, NULL); ++ return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, NULL, NULL, 0); + } + + DEFUN (no_ip_route_mask, +@@ -407,7 +408,7 @@ + "IP gateway interface name\n" + "Null interface\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, NULL); ++ return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, NULL, 0); + } + + ALIAS (no_ip_route_mask, +@@ -434,7 +435,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, NULL, NULL); ++ return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, NULL, NULL, 0); + } + + DEFUN (no_ip_route_distance, +@@ -449,7 +450,7 @@ + "Null interface\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, argv[2]); ++ return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], NULL, argv[2], 0); + } + + DEFUN (no_ip_route_flags_distance, +@@ -465,7 +466,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], argv[2], argv[3]); ++ return zebra_static_ipv4 (vty, 0, argv[0], NULL, argv[1], argv[2], argv[3], 0); + } + + DEFUN (no_ip_route_flags_distance2, +@@ -479,7 +480,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, argv[1], argv[2]); ++ return zebra_static_ipv4 (vty, 0, argv[0], NULL, NULL, argv[1], argv[2], 0); + } + + DEFUN (no_ip_route_mask_distance, +@@ -495,7 +496,7 @@ + "Null interface\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3]); ++ return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3], 0); + } + + DEFUN (no_ip_route_mask_flags_distance, +@@ -512,7 +513,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4]); ++ return zebra_static_ipv4 (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4], 0); + } + + DEFUN (no_ip_route_mask_flags_distance2, +@@ -527,7 +528,348 @@ + "Silently discard pkts when matched\n" + "Distance value for this route\n") + { +- return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3]); ++ return zebra_static_ipv4 (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3], 0); +} + -+DEFUN (show_router_id, -+ show_router_id_cmd, -+ "show router-id", -+ SHOW_STR -+ "current router ID\n") ++/* Static route + MPLS configuration. */ ++ ++static int ++zebra_static_ipv4_mpls (struct vty *vty, int add_cmd, char *dest, char *addr, char *mask, ++ char *distance, char **argv) +{ -+ struct prefix rid; -+ router_id_get(&rid); ++ struct zmpls_out_segment out; ++ int result; + -+ vty_out(vty, "router-id: %s%s", inet_ntoa(rid.u.prefix4),VTY_NEWLINE); -+ return CMD_SUCCESS; -+} ++ memset (&out, 0, sizeof (out)); ++ out.owner = ZEBRA_MPLS_OWNER_STATIC; ++ result = nhlfe_parse (vty, argv, &out, addr); ++ if (result != CMD_SUCCESS) ++ return result; + -+int router_id_cmp(void *a, void *b) { -+ unsigned int A, B; ++ out.index = mpls_out_segment_find_index_by_nhlfe(&out); ++ vty_out(vty, "NHLFE %ds%s",out.index, VTY_NEWLINE); + -+ A = ((struct connected*)a)->address->u.prefix4.s_addr; -+ B = ((struct connected*)b)->address->u.prefix4.s_addr; ++ if (add_cmd) ++ { ++ if (out.index) ++ { ++ vty_out(vty, "NHLFE already exists%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } + -+ if (A > B) { -+ return 1; -+ } else if (A < B) { -+ return -1; ++ if (mpls_out_segment_register (&out)) ++ { ++ vty_out(vty, "Unable to register NHLFE%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ } ++ ++ result = zebra_static_ipv4 (vty, add_cmd, dest, mask, NULL, NULL, distance, ++ out.index); ++ ++ if (add_cmd) ++ { ++ if (result != CMD_SUCCESS) ++ { ++ mpls_out_segment_unregister_by_index (out.index); ++ return CMD_WARNING; ++ } ++ } ++ else ++ { ++ mpls_out_segment_unregister_by_index (out.index); + } -+ return 0; ++ return CMD_SUCCESS; +} + -+void router_id_init(void) { -+ install_element(VIEW_NODE, &show_router_id_cmd); -+ install_element(ENABLE_NODE, &show_router_id_cmd); -+ install_element(CONFIG_NODE, &router_id_cmd); -+ install_element(CONFIG_NODE, &no_router_id_cmd); ++DEFUN (ip_route_mpls, ++ ip_route_mpls_cmd, ++ "ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], NULL, NULL, NULL, &argv[1]); ++} ++ ++DEFUN (ip_route_mpls_addr, ++ ip_route_mpls_addr_cmd, ++ "ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], argv[4], NULL, NULL, &argv[1]); ++} ++ ++/* Mask as A.B.C.D format. */ ++DEFUN (ip_route_mpls_mask, ++ ip_route_mpls_mask_cmd, ++ "ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], argv[1], NULL, NULL, &argv[2]); ++} ++ ++DEFUN (ip_route_mpls_mask_addr, ++ ip_route_mpls_mask_addr_cmd, ++ "ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE ADDR", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], argv[1], argv[5], NULL, &argv[2]); ++} ++ ++/* Distance option value. */ ++DEFUN (ip_route_mpls_distance, ++ ip_route_mpls_distance_cmd, ++ "ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE <1-255>", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], NULL, NULL, argv[4], &argv[1]); ++} ++ ++DEFUN (ip_route_mpls_distance_addr, ++ ip_route_mpls_distance_addr_cmd, ++ "ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR <1-255>", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], NULL, argv[4], argv[5], &argv[1]); ++} ++ ++DEFUN (ip_route_mpls_mask_distance, ++ ip_route_mpls_mask_distance_cmd, ++ "ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE <1-255>", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], argv[1], NULL, argv[5], &argv[2]); ++} ++ ++DEFUN (ip_route_mpls_mask_distance_addr, ++ ip_route_mpls_mask_distance_addr_cmd, ++ "ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE ADDR <1-255>", ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 1, argv[0], argv[1], argv[5], argv[6], &argv[2]); ++} + -+ memset(&rid_all_sorted_list,0,sizeof(rid_all_sorted_list)); -+ memset(&rid_lo_sorted_list,0,sizeof(rid_lo_sorted_list)); -+ memset(&rid_user_assigned,0,sizeof(rid_user_assigned)); ++DEFUN (no_ip_route_mpls, ++ no_ip_route_mpls_cmd, ++ "no ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], NULL, NULL, NULL, &argv[1]); ++} + -+ rid_all_sorted_list.cmp = router_id_cmp; -+ rid_lo_sorted_list.cmp = router_id_cmp; ++DEFUN (no_ip_route_mpls_addr, ++ no_ip_route_mpls_addr_cmd, ++ "no ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], argv[4], NULL, NULL, &argv[1]); ++} + -+ rid_user_assigned.family = AF_INET; -+ rid_user_assigned.prefixlen = 32; ++DEFUN (no_ip_route_mpls_mask, ++ no_ip_route_mpls_mask_cmd, ++ "no ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], argv[1], NULL, NULL, &argv[2]); +} -diff --exclude=.p4config -uNr zebra/zebra/router-id.h zebra-ldp/zebra/router-id.h ---- zebra/zebra/router-id.h 1969-12-31 18:00:00.000000000 -0600 -+++ zebra-ldp/zebra/router-id.h 2003-03-10 14:59:28.000000000 -0600 -@@ -0,0 +1,20 @@ -+#ifndef _ROUTER_ID_H_ -+#define _ROUTER_ID_H_ + -+#include ++DEFUN (no_ip_route_mpls_mask_addr, ++ no_ip_route_mpls_mask_addr_cmd, ++ "no ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE ADDR", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], argv[1], argv[5], NULL, &argv[2]); ++} + -+#include "memory.h" -+#include "prefix.h" -+#include "zclient.h" -+#include "if.h" ++DEFUN (no_ip_route_mpls_distance, ++ no_ip_route_mpls_distance_cmd, ++ "no ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE <1-255>", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], NULL, NULL, argv[4], &argv[1]); ++} + -+extern void router_id_add_address(struct connected *); -+extern void router_id_del_address(struct connected *); -+extern void router_id_init(void); -+extern void router_id_write(struct vty *); -+extern void router_id_get(struct prefix *); ++DEFUN (no_ip_route_mpls_distance_addr, ++ no_ip_route_mpls_distance_addr_cmd, ++ "no ip route A.B.C.D/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR <1-255>", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix (e.g. 10.0.0.0/8)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], NULL, argv[4], argv[5], &argv[1]); ++} + -+extern void zread_router_id_add(struct zserv *, u_short); -+extern void zread_router_id_delete(struct zserv *, u_short); ++DEFUN (no_ip_route_mpls_mask_distance, ++ no_ip_route_mpls_mask_distance_cmd, ++ "no ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE <1-255>", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], argv[1], NULL, argv[5], &argv[2]); ++} + -+#endif -diff --exclude=.p4config -uNr zebra/zebra/rt_netlink.c zebra-ldp/zebra/rt_netlink.c ---- zebra/zebra/rt_netlink.c 2003-03-29 18:17:24.000000000 -0600 -+++ zebra-ldp/zebra/rt_netlink.c 2003-03-10 14:59:30.000000000 -0600 -@@ -606,6 +606,7 @@ - - char anyaddr[16] = {0}; ++DEFUN (no_ip_route_mpls_mask_distance_addr, ++ no_ip_route_mpls_mask_distance_addr_cmd, ++ "no ip route A.B.C.D A.B.C.D (gen|atm|fr) VALUE nexthop INTERFACE ADDR <1-255>", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IP destination prefix\n" ++ "IP destination prefix mask\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IP gateway interface name\n" ++ "IP gateway address\n" ++ "Distance value for this route\n") ++{ ++ return zebra_static_ipv4_mpls (vty, 0, argv[0], argv[1], argv[5], argv[6], &argv[2]); + } -+ unsigned int mplsindex; - int index; - int table; - void *dest; -@@ -662,10 +663,14 @@ - return 0; + /* New RIB. Detailed information for IPv4 route. */ +@@ -602,6 +944,17 @@ + case NEXTHOP_TYPE_IFNAME: + vty_out (vty, " directly connected, %s", nexthop->ifname); + break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->gate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->gate.mpls); ++ break; ++ } + case NEXTHOP_TYPE_BLACKHOLE: + vty_out (vty, " directly connected, Null0"); + break; +@@ -626,6 +979,17 @@ + vty_out (vty, " is directly connected, %s)", + ifindex2ifname (nexthop->rifindex)); + break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->rgate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->rgate.mpls); ++ break; ++ } + default: + break; + } +@@ -685,6 +1049,17 @@ + case NEXTHOP_TYPE_IFNAME: + vty_out (vty, " is directly connected, %s", nexthop->ifname); + break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->gate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->gate.mpls); ++ break; ++ } + case NEXTHOP_TYPE_BLACKHOLE: + vty_out (vty, " is directly connected, Null0"); + break; +@@ -709,6 +1084,17 @@ + vty_out (vty, " is directly connected, %s)", + ifindex2ifname (nexthop->rifindex)); + break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->rgate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->rgate.mpls); ++ break; ++ } + default: + break; + } +@@ -1077,6 +1463,19 @@ + case STATIC_IPV4_IFNAME: + vty_out (vty, " %s", si->gate.ifname); + break; ++ case STATIC_IPV4_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (si->gate.mpls); ++ if (out) ++ { ++ vty_out (vty, " "); ++ mpls_out_segment_config_write (vty, out); ++ } ++ else ++ vty_out (vty, " nhlfe %u", si->gate.mpls); ++ break; ++ } + case STATIC_IPV4_BLACKHOLE: + vty_out (vty, " Null0"); + break; +@@ -1104,9 +1503,10 @@ + + #ifdef HAVE_IPV6 + /* General fucntion for IPv6 static route. */ +-int ++static int + static_ipv6_func (struct vty *vty, int add_cmd, char *dest_str, +- char *gate_str, char *ifname, char *flag_str, char *distance_str) ++ char *gate_str, char *ifname, char *flag_str, ++ char *distance_str, u_int32_t mpls) + { + int ret; + u_char distance; +@@ -1154,7 +1554,18 @@ + nexthop address other case gate is treated as interface name. */ + ret = inet_pton (AF_INET6, gate_str, &gate_addr); + +- if (ifname) ++ if (mpls) ++ { ++ /* When mpls is specified. It must not come with a gateway ++ address. */ ++ if (ret == 1) ++ { ++ vty_out (vty, "%% Malformed MPLS nexthop%s", VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ type = STATIC_IPV6_MPLS; ++ } ++ else if (ifname) + { + /* When ifname is specified. It must be come with gateway + address. */ +@@ -1181,9 +1592,9 @@ } - -+ mplsindex = 0; - index = 0; - dest = NULL; - gate = NULL; -+ if (tb[RTA_LSP]) -+ mplsindex = *(unsigned int *) RTA_DATA (tb[RTA_LSP]); -+ - if (tb[RTA_OIF]) - index = *(int *) RTA_DATA (tb[RTA_OIF]); + if (add_cmd) +- static_add_ipv6 (&p, type, gate, ifname, flag, distance, table); ++ static_add_ipv6 (&p, type, gate, ifname, mpls, flag, distance, table); + else +- static_delete_ipv6 (&p, type, gate, ifname, distance, table); ++ static_delete_ipv6 (&p, type, gate, ifname, mpls, distance, table); -@@ -1208,6 +1213,10 @@ - || nexthop->rtype == NEXTHOP_TYPE_IPV6_IFNAME) - addattr32 (&req.n, sizeof req, RTA_OIF, - nexthop->rifindex); -+ -+ if (nexthop->rmplsindex) -+ addattr32 (&req.n, sizeof req, RTA_LSP, -+ nexthop->rmplsindex); - } - else - { -@@ -1228,6 +1237,11 @@ - || nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX - || nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME) - addattr32 (&req.n, sizeof req, RTA_OIF, nexthop->ifindex); -+ -+ if (nexthop->mplsindex) { -+fprintf(stderr,"Adding RTA_LSP = 0x%x\n",nexthop->mplsindex); -+ addattr32 (&req.n, sizeof req, RTA_LSP, nexthop->mplsindex); -+ } - } + return CMD_SUCCESS; + } +@@ -1197,7 +1608,7 @@ + "IPv6 gateway address\n" + "IPv6 gateway interface name\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, NULL, 0); + } - if (cmd == RTM_NEWROUTE) -@@ -1290,6 +1304,9 @@ - rtnh->rtnh_ifindex = nexthop->rifindex; - else - rtnh->rtnh_ifindex = 0; -+ -+ if (nexthop->rmplsindex) -+ rtnh->rtnh_lsp = nexthop->rmplsindex; - } - else - { -@@ -1316,6 +1333,11 @@ - rtnh->rtnh_ifindex = nexthop->ifindex; - else - rtnh->rtnh_ifindex = 0; -+ -+ if (nexthop->mplsindex) { -+fprintf(stderr,"Setting rtnh_lsp = 0x%x\n",nexthop->mplsindex); -+ rtnh->rtnh_lsp = nexthop->mplsindex; -+ } - } - rtnh = RTNH_NEXT(rtnh); - -diff --exclude=.p4config -uNr zebra/zebra/zebra_rib.c zebra-ldp/zebra/zebra_rib.c ---- zebra/zebra/zebra_rib.c 2003-03-29 18:17:27.000000000 -0600 -+++ zebra-ldp/zebra/zebra_rib.c 2003-03-13 22:09:09.000000000 -0600 -@@ -396,6 +396,7 @@ - { - SET_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE); - nexthop->rtype = newhop->type; -+ nexthop->rmplsindex = newhop->mplsindex; - if (newhop->type == NEXTHOP_TYPE_IPV4 || - newhop->type == NEXTHOP_TYPE_IPV4_IFINDEX) - nexthop->rgate.ipv4 = newhop->gate.ipv4; -@@ -494,6 +495,7 @@ - { - SET_FLAG (nexthop->flags, NEXTHOP_FLAG_RECURSIVE); - nexthop->rtype = newhop->type; -+ nexthop->rmplsindex = newhop->mplsindex; - if (newhop->type == NEXTHOP_TYPE_IPV6 - || newhop->type == NEXTHOP_TYPE_IPV6_IFINDEX - || newhop->type == NEXTHOP_TYPE_IPV6_IFNAME) -@@ -763,6 +765,9 @@ - rib->nexthop_active_num += nexthop_active_check (rn, rib, nexthop, set); - if (active != CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) - SET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); -+ -+ if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_MPLS_CHANGED)) -+ SET_FLAG (rib->flags, ZEBRA_FLAG_CHANGED); - } - return rib->nexthop_active_num; + DEFUN (ipv6_route_flags, +@@ -1211,7 +1622,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], NULL, 0); } -@@ -840,7 +845,9 @@ + + DEFUN (ipv6_route_ifname, +@@ -1223,7 +1634,7 @@ + "IPv6 gateway address\n" + "IPv6 gateway interface name\n") { - if (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED)) - { -- redistribute_delete (&rn->p, rib); -+ if (!CHECK_FLAG (rib->flags, ZEBRA_FLAG_MPLS_CHANGED)) -+ redistribute_delete (&rn->p, rib); -+ - if (! RIB_SYSTEM_ROUTE (rib)) - rib_uninstall_kernel (rn, rib); - UNSET_FLAG (rib->flags, ZEBRA_FLAG_SELECTED); -@@ -887,7 +894,9 @@ - { - if (CHECK_FLAG (select->flags, ZEBRA_FLAG_CHANGED)) - { -- redistribute_delete (&rn->p, select); -+ if (!CHECK_FLAG (select->flags, ZEBRA_FLAG_MPLS_CHANGED)) -+ redistribute_delete (&rn->p, select); -+ - if (! RIB_SYSTEM_ROUTE (select)) - rib_uninstall_kernel (rn, select); +- return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, NULL, 0); + } -@@ -896,7 +905,11 @@ - - if (! RIB_SYSTEM_ROUTE (select)) - rib_install_kernel (rn, select); -- redistribute_add (&rn->p, select); -+ -+ if (!CHECK_FLAG (select->flags, ZEBRA_FLAG_MPLS_CHANGED)) -+ redistribute_add (&rn->p, select); -+ -+ UNSET_FLAG (select->flags, ZEBRA_FLAG_MPLS_CHANGED); - } - return; - } -diff --exclude=.p4config -uNr zebra/zebra/zebra_vty.c zebra-ldp/zebra/zebra_vty.c ---- zebra/zebra/zebra_vty.c 2003-03-29 18:17:29.000000000 -0600 -+++ zebra-ldp/zebra/zebra_vty.c 2003-03-10 14:59:35.000000000 -0600 -@@ -345,6 +345,10 @@ + DEFUN (ipv6_route_ifname_flags, +@@ -1237,7 +1648,7 @@ + "Emit an ICMP unreachable when matched\n" + "Silently discard pkts when matched\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], NULL, 0); + } + + DEFUN (ipv6_route_pref, +@@ -1250,7 +1661,7 @@ + "IPv6 gateway interface name\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2]); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, NULL, argv[2], 0); + } + + DEFUN (ipv6_route_flags_pref, +@@ -1265,7 +1676,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3]); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], NULL, argv[2], argv[3], 0); + } + + DEFUN (ipv6_route_ifname_pref, +@@ -1278,7 +1689,7 @@ + "IPv6 gateway interface name\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3]); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], NULL, argv[3], 0); + } + + DEFUN (ipv6_route_ifname_flags_pref, +@@ -1293,7 +1704,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4]); ++ return static_ipv6_func (vty, 1, argv[0], argv[1], argv[2], argv[3], argv[4], 0); + } + + DEFUN (no_ipv6_route, +@@ -1306,7 +1717,7 @@ + "IPv6 gateway address\n" + "IPv6 gateway interface name\n") + { +- return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL); ++ return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, NULL, 0); + } + + ALIAS (no_ipv6_route, +@@ -1331,7 +1742,7 @@ + "IPv6 gateway address\n" + "IPv6 gateway interface name\n") + { +- return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL); ++ return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, NULL, 0); + } + + ALIAS (no_ipv6_route_ifname, +@@ -1357,7 +1768,7 @@ + "IPv6 gateway interface name\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2]); ++ return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, NULL, argv[2], 0); + } + + DEFUN (no_ipv6_route_flags_pref, +@@ -1374,7 +1785,7 @@ + "Distance value for this prefix\n") + { + /* We do not care about argv[2] */ +- return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3]); ++ return static_ipv6_func (vty, 0, argv[0], argv[1], NULL, argv[2], argv[3], 0); + } + + DEFUN (no_ipv6_route_ifname_pref, +@@ -1388,7 +1799,7 @@ + "IPv6 gateway interface name\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3]); ++ return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], NULL, argv[3], 0); + } + + DEFUN (no_ipv6_route_ifname_flags_pref, +@@ -1404,7 +1815,7 @@ + "Silently discard pkts when matched\n" + "Distance value for this prefix\n") + { +- return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4]); ++ return static_ipv6_func (vty, 0, argv[0], argv[1], argv[2], argv[3], argv[4], 0); + } + + /* New RIB. Detailed information for IPv6 route. */ +@@ -1486,6 +1897,17 @@ + vty_out (vty, " directly connected, %s", + nexthop->ifname); + break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->gate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->gate.mpls); ++ break; ++ } default: break; } -+ -+ if (nexthop->mplsindex) -+ vty_out (vty, " MPLS 0x%x", nexthop->mplsindex); -+ - if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) - vty_out (vty, " inactive"); - -@@ -356,16 +360,21 @@ - { - case NEXTHOP_TYPE_IPV4: - case NEXTHOP_TYPE_IPV4_IFINDEX: -- vty_out (vty, " via %s)", inet_ntoa (nexthop->rgate.ipv4)); -+ vty_out (vty, " via %s", inet_ntoa (nexthop->rgate.ipv4)); - break; - case NEXTHOP_TYPE_IFINDEX: - case NEXTHOP_TYPE_IFNAME: -- vty_out (vty, " is directly connected, %s)", -+ vty_out (vty, " is directly connected, %s", +@@ -1512,6 +1934,17 @@ + vty_out (vty, " is directly connected, %s)", ifindex2ifname (nexthop->rifindex)); break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->rgate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->rgate.mpls); ++ break; ++ } default: break; } -+ -+ if (nexthop->rmplsindex) -+ vty_out (vty, " MPLS 0x%x", nexthop->rmplsindex); -+ -+ vty_out (vty, ")"); - } - vty_out (vty, "%s", VTY_NEWLINE); - } -@@ -427,6 +436,10 @@ +@@ -1577,6 +2010,17 @@ + vty_out (vty, " is directly connected, %s", + nexthop->ifname); + break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->gate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->gate.mpls); ++ break; ++ } default: break; } -+ -+ if (nexthop->mplsindex) -+ vty_out (vty, " MPLS 0x%x", nexthop->mplsindex); -+ - if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) - vty_out (vty, " inactive"); - -@@ -438,16 +451,21 @@ - { - case NEXTHOP_TYPE_IPV4: - case NEXTHOP_TYPE_IPV4_IFINDEX: -- vty_out (vty, " via %s)", inet_ntoa (nexthop->rgate.ipv4)); -+ vty_out (vty, " via %s", inet_ntoa (nexthop->rgate.ipv4)); - break; - case NEXTHOP_TYPE_IFINDEX: - case NEXTHOP_TYPE_IFNAME: -- vty_out (vty, " is directly connected, %s)", -+ vty_out (vty, " is directly connected, %s", +@@ -1603,6 +2047,17 @@ + vty_out (vty, " is directly connected, %s)", ifindex2ifname (nexthop->rifindex)); break; ++ case NEXTHOP_TYPE_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (nexthop->rgate.mpls); ++ vty_out (vty, " via "); ++ if (out) ++ mpls_out_segment_config_write (vty, out); ++ else ++ vty_out (vty, " nhlfe %u", nexthop->rgate.mpls); ++ break; ++ } default: break; } +@@ -1881,6 +2336,19 @@ + case STATIC_IPV6_IFNAME: + vty_out (vty, " %s", si->ifname); + break; ++ case STATIC_IPV6_MPLS: ++ { ++ struct zmpls_out_segment *out = NULL; ++ out = mpls_out_segment_find (si->mpls); ++ if (out) ++ { ++ vty_out (vty, " "); ++ mpls_out_segment_config_write (vty, out); ++ } ++ else ++ vty_out (vty, " nhlfe %u", si->mpls); ++ break; ++ } + case STATIC_IPV6_GATEWAY_IFNAME: + vty_out (vty, " %s %s", + inet_ntop (AF_INET6, &si->ipv6, buf, BUFSIZ), si->ifname); +@@ -1901,6 +2369,195 @@ + } + return write; + } + -+ if (nexthop->rmplsindex) -+ vty_out (vty, " MPLS 0x%x", nexthop->rmplsindex); ++static int ++static_ipv6_func_mpls (struct vty *vty, int add_cmd, char *dest, ++ char *addr, char *distance, char **argv) ++{ ++ struct zmpls_out_segment out; ++ int result; ++ ++ memset (&out, 0, sizeof (out)); ++ out.owner = ZEBRA_MPLS_OWNER_STATIC; ++ result = nhlfe_parse (vty, argv, &out, addr); ++ if (result != CMD_SUCCESS) ++ return result; + -+ vty_out (vty, ")"); - } - - if (rib->type == ZEBRA_ROUTE_RIP -@@ -1072,6 +1090,10 @@ - default: - break; - } ++ out.index = mpls_out_segment_find_index_by_nhlfe(&out); + -+ if (nexthop->mplsindex) -+ vty_out (vty, " MPLS 0x%x", nexthop->mplsindex); -+ - if (! CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) - vty_out (vty, " inactive"); - -@@ -1084,7 +1106,7 @@ - case NEXTHOP_TYPE_IPV6: - case NEXTHOP_TYPE_IPV6_IFINDEX: - case NEXTHOP_TYPE_IPV6_IFNAME: -- vty_out (vty, " via %s)", -+ vty_out (vty, " via %s", - inet_ntop (AF_INET6, &nexthop->rgate.ipv6, - buf, BUFSIZ)); - if (nexthop->rifindex) -@@ -1092,12 +1114,17 @@ - break; - case NEXTHOP_TYPE_IFINDEX: - case NEXTHOP_TYPE_IFNAME: -- vty_out (vty, " is directly connected, %s)", -+ vty_out (vty, " is directly connected, %s", - ifindex2ifname (nexthop->rifindex)); - break; - default: - break; - } ++ if (add_cmd) ++ { ++ if (out.index) ++ { ++ vty_out(vty, "NHLFE already exists%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ ++ if (mpls_out_segment_register (&out)) ++ { ++ vty_out(vty, "Unable to register NHLFE%s",VTY_NEWLINE); ++ return CMD_WARNING; ++ } ++ } + -+ if (nexthop->rmplsindex) -+ vty_out (vty, " MPLS 0x%x", nexthop->rmplsindex); ++ result = static_ipv6_func (vty, add_cmd, dest, NULL, NULL, NULL, distance, ++ out.index); ++ ++ if (add_cmd) ++ { ++ if (result != CMD_SUCCESS) ++ { ++ mpls_out_segment_unregister_by_index (out.index); ++ return CMD_WARNING; ++ } ++ } ++ else ++ { ++ mpls_out_segment_unregister_by_index (out.index); ++ } ++ return CMD_SUCCESS; ++} ++ ++DEFUN (ipv6_route_mpls, ++ ipv6_route_mpls_cmd, ++ "ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE", ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n") ++{ ++ return static_ipv6_func_mpls (vty, 1, argv[0], NULL, NULL, &argv[1]); ++} ++ ++DEFUN (ipv6_route_mpls_addr, ++ ipv6_route_mpls_addr_cmd, ++ "ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR", ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n" ++ "IPv6 gateway address\n") ++{ ++ return static_ipv6_func_mpls (vty, 1, argv[0], argv[4], NULL, &argv[1]); ++} ++ ++DEFUN (ipv6_route_mpls_pref, ++ ipv6_route_mpls_pref_cmd, ++ "ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE <1-255>", ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n" ++ "Distance value for this prefix\n") ++{ ++ return static_ipv6_func_mpls (vty, 1, argv[0], NULL, argv[4], &argv[1]); ++} ++ ++DEFUN (ipv6_route_mpls_pref_addr, ++ ipv6_route_mpls_pref_addr_cmd, ++ "ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR <1-255>", ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n" ++ "IPv6 gateway address\n" ++ "Distance value for this prefix\n") ++{ ++ return static_ipv6_func_mpls (vty, 1, argv[0], argv[4], argv[5], &argv[1]); ++} ++ ++DEFUN (no_ipv6_route_mpls, ++ no_ipv6_route_mpls_cmd, ++ "no ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n") ++{ ++ return static_ipv6_func_mpls (vty, 0, argv[0], NULL, NULL, &argv[1]); ++} ++ ++DEFUN (no_ipv6_route_mpls_addr, ++ no_ipv6_route_mpls_addr_cmd, ++ "no ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n" ++ "IPv6 gateway address\n") ++{ ++ return static_ipv6_func_mpls (vty, 0, argv[0], argv[4], NULL, &argv[1]); ++} ++ ++DEFUN (no_ipv6_route_mpls_pref, ++ no_ipv6_route_mpls_pref_cmd, ++ "no ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE <1-255>", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n" ++ "Distance value for this prefix\n") ++{ ++ return static_ipv6_func_mpls (vty, 0, argv[0], NULL, argv[4], &argv[1]); ++} ++ ++DEFUN (no_ipv6_route_mpls_pref_addr, ++ no_ipv6_route_mpls_pref_addr_cmd, ++ "no ipv6 route X:X::X:X/M (gen|atm|fr) VALUE nexthop INTERFACE ADDR <1-255>", ++ NO_STR ++ IP_STR ++ "Establish static routes\n" ++ "IPv6 destination prefix (e.g. 3ffe:506::/32)\n" ++ "Out-going generic MPLS label (16 - 2^20-1)\n" ++ "Out-going ATM MPLS label (VPI/VCI)\n" ++ "Out-going Frame Relay MPLS label (16 - 2^17-1)\n" ++ "Out-going label value\n" ++ "Nexthop\n" ++ "IPv6 gateway interface name\n" ++ "IPv6 gateway address\n" ++ "Distance value for this prefix\n") ++{ ++ return static_ipv6_func_mpls (vty, 0, argv[0], argv[4], argv[5], &argv[1]); ++} + -+ vty_out (vty, ")"); - } - vty_out (vty, "%s", VTY_NEWLINE); - } -diff --exclude=.p4config -uNr zebra/zebra/zserv.c zebra-ldp/zebra/zserv.c ---- zebra/zebra/zserv.c 2003-03-29 18:17:29.000000000 -0600 -+++ zebra-ldp/zebra/zserv.c 2003-03-10 14:59:35.000000000 -0600 -@@ -35,6 +35,7 @@ + #endif /* HAVE_IPV6 */ + + /* Static ip route configuration write function. */ +@@ -1950,6 +2607,23 @@ + install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance_cmd); + install_element (CONFIG_NODE, &no_ip_route_mask_flags_distance2_cmd); + ++ install_element (CONFIG_NODE, &ip_route_mpls_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_addr_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_mask_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_mask_addr_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_distance_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_distance_addr_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_mask_distance_cmd); ++ install_element (CONFIG_NODE, &ip_route_mpls_mask_distance_addr_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_addr_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_mask_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_mask_addr_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_distance_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_distance_addr_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_mask_distance_cmd); ++ install_element (CONFIG_NODE, &no_ip_route_mpls_mask_distance_addr_cmd); ++ + install_element (VIEW_NODE, &show_ip_route_cmd); + install_element (VIEW_NODE, &show_ip_route_addr_cmd); + install_element (VIEW_NODE, &show_ip_route_prefix_cmd); +@@ -1985,6 +2659,16 @@ + install_element (CONFIG_NODE, &no_ipv6_route_flags_pref_cmd); + install_element (CONFIG_NODE, &no_ipv6_route_ifname_pref_cmd); + install_element (CONFIG_NODE, &no_ipv6_route_ifname_flags_pref_cmd); ++ ++ install_element (CONFIG_NODE, &ipv6_route_mpls_cmd); ++ install_element (CONFIG_NODE, &ipv6_route_mpls_addr_cmd); ++ install_element (CONFIG_NODE, &ipv6_route_mpls_pref_cmd); ++ install_element (CONFIG_NODE, &ipv6_route_mpls_pref_addr_cmd); ++ install_element (CONFIG_NODE, &no_ipv6_route_mpls_cmd); ++ install_element (CONFIG_NODE, &no_ipv6_route_mpls_addr_cmd); ++ install_element (CONFIG_NODE, &no_ipv6_route_mpls_pref_cmd); ++ install_element (CONFIG_NODE, &no_ipv6_route_mpls_pref_addr_cmd); ++ + install_element (VIEW_NODE, &show_ipv6_route_cmd); + install_element (VIEW_NODE, &show_ipv6_route_protocol_cmd); + install_element (VIEW_NODE, &show_ipv6_route_addr_cmd); +@@ -2002,4 +2686,5 @@ + zebra_vty_init () + { + zebra_vty_route_init (); ++ mpls_vty_init (); + } +diff --exclude=rsvpd -uNr quagga/zebra/zserv.c quagga-mpls/zebra/zserv.c +--- quagga/zebra/zserv.c 2004-02-25 13:47:53.000000000 -0600 ++++ quagga-mpls/zebra/zserv.c 2004-07-14 23:45:39.714508928 -0500 +@@ -34,8 +34,10 @@ + #include "log.h" #include "zclient.h" + #include "privs.h" ++#include "mpls_vty.h" #include "zebra/zserv.h" +#include "zebra/router-id.h" #include "zebra/redistribute.h" #include "zebra/debug.h" #include "zebra/ipforward.h" -@@ -73,7 +74,11 @@ +@@ -70,7 +72,18 @@ "ZEBRA_IPV4_NEXTHOP_LOOKUP", "ZEBRA_IPV6_NEXTHOP_LOOKUP", "ZEBRA_IPV4_IMPORT_LOOKUP", @@ -9262,11 +27228,226 @@ diff --exclude=.p4config -uNr zebra/zebra/zserv.c zebra-ldp/zebra/zserv.c + "ZEBRA_ROUTER_ID_ADD", + "ZEBRA_ROUTER_ID_DELETE", + "ZEBRA_ROUTER_ID_UPDATE", -+ "ZEBRA_IPV4_SET_MPLSINDEX" ++ "ZEBRA_MPLS_XC_ADD", ++ "ZEBRA_MPLS_XC_DELETE", ++ "ZEBRA_MPLS_IN_SEGMENT_ADD", ++ "ZEBRA_MPLS_IN_SEGMENT_DELETE", ++ "ZEBRA_MPLS_OUT_SEGMENT_ADD", ++ "ZEBRA_MPLS_OUT_SEGMENT_DELETE", ++ "ZEBRA_MPLS_LABELSPACE_ADD", ++ "ZEBRA_MPLS_LABELSPACE_DELETE", }; struct zebra_message_queue -@@ -983,6 +988,38 @@ +@@ -528,6 +541,180 @@ + return 0; + } + ++int ++zsend_mpls_xc_add (struct zserv *client, struct zmpls_xc *p) ++{ ++ struct zapi_mpls_xc api; ++ struct stream *s; ++ ++ s = client->obuf; ++ mpls_xc_stream_write (s, &api, ZEBRA_MPLS_XC_ADD); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_xc_delete (struct zserv *client, struct zmpls_xc *p) ++{ ++ struct zapi_mpls_xc api; ++ struct stream *s; ++ ++ s = client->obuf; ++ mpls_xc_stream_write (s, &api, ZEBRA_MPLS_XC_DELETE); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_in_segment_add (struct zserv *client, struct zmpls_in_segment *in) ++{ ++ struct zapi_mpls_in_segment api; ++ struct stream *s; ++ ++ s = client->obuf; ++ ++ api.owner = in->owner; ++ api.labelspace = in->labelspace; ++ api.protocol = in->protocol; ++ api.pop = in->pop; ++ api.fwd = in->fwd; ++ memcpy (&api.label, &in->label, sizeof (api.label)); ++ ++ mpls_in_segment_stream_write (s, &api, ZEBRA_MPLS_IN_SEGMENT_ADD); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_in_segment_delete (struct zserv *client, struct zmpls_in_segment *in) ++{ ++ struct zapi_mpls_in_segment api; ++ struct stream *s; ++ ++ s = client->obuf; ++ ++ api.owner = in->owner; ++ api.labelspace = in->labelspace; ++ api.protocol = in->protocol; ++ api.pop = in->pop; ++ api.fwd = in->fwd; ++ memcpy (&api.label, &in->label, sizeof (api.label)); ++ ++ mpls_in_segment_stream_write (s, &api, ZEBRA_MPLS_IN_SEGMENT_DELETE); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_out_segment_add (struct zserv *client, struct zmpls_out_segment *out) ++{ ++ struct zapi_mpls_out_segment api; ++ struct stream *s; ++ ++ s = client->obuf; ++ ++ api.owner = out->owner; ++ api.index = out->index; ++ memcpy (&api.push, &out->push, sizeof (struct zmpls_label)); ++ ++ switch (out->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ strcpy (api.ifname, out->nh.ifname); ++ break; ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ strcpy (api.ifname, out->nh.ifname); ++ /* fall through */ ++ case NEXTHOP_TYPE_IPV4: ++ api.gate.family = AF_INET; ++ api.gate.prefixlen = IPV4_MAX_BITLEN; ++ api.gate.u.prefix4 = out->nh.gate.ipv4; ++ break; ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ strcpy (api.ifname, out->nh.ifname); ++ /* fall through */ ++ case NEXTHOP_TYPE_IPV6: ++ api.gate.family = AF_INET6; ++ api.gate.prefixlen = IPV6_MAX_BITLEN; ++ api.gate.u.prefix6 = out->nh.gate.ipv6; ++ break; ++ default: ++ assert(0); ++ } ++ ++ mpls_out_segment_stream_write (s, &api, ZEBRA_MPLS_OUT_SEGMENT_ADD); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_out_segment_delete (struct zserv *client, struct zmpls_out_segment *out) ++{ ++ struct zapi_mpls_out_segment api; ++ struct stream *s; ++ ++ s = client->obuf; ++ ++ api.owner = out->owner; ++ api.index = out->index; ++ memcpy (&api.push, &out->push, sizeof (struct zmpls_label)); ++ ++ switch (out->nh.type) ++ { ++ case NEXTHOP_TYPE_IFNAME: ++ strcpy (api.ifname, out->nh.ifname); ++ break; ++ case NEXTHOP_TYPE_IPV4_IFNAME: ++ strcpy (api.ifname, out->nh.ifname); ++ /* fall through */ ++ case NEXTHOP_TYPE_IPV4: ++ api.gate.family = AF_INET; ++ api.gate.prefixlen = IPV4_MAX_BITLEN; ++ api.gate.u.prefix4 = out->nh.gate.ipv4; ++ break; ++ case NEXTHOP_TYPE_IPV6_IFNAME: ++ strcpy (api.ifname, out->nh.ifname); ++ /* fall through */ ++ case NEXTHOP_TYPE_IPV6: ++ api.gate.family = AF_INET6; ++ api.gate.prefixlen = IPV6_MAX_BITLEN; ++ api.gate.u.prefix6 = out->nh.gate.ipv6; ++ break; ++ default: ++ assert(0); ++ } ++ ++ mpls_out_segment_stream_write (s, &api, ZEBRA_MPLS_OUT_SEGMENT_DELETE); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_labelspace_add (struct zserv *client, int labelspace) ++{ ++ struct zapi_mpls_labelspace api; ++ struct stream *s; ++ ++ s = client->obuf; ++ api.labelspace = labelspace; ++ mpls_labelspace_stream_write (s, &api, ZEBRA_MPLS_LABELSPACE_ADD); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ ++int ++zsend_mpls_labelspace_delete (struct zserv *client, int labelspace) ++{ ++ struct zapi_mpls_labelspace api; ++ struct stream *s; ++ ++ s = client->obuf; ++ api.labelspace = labelspace; ++ mpls_labelspace_stream_write (s, &api, ZEBRA_MPLS_LABELSPACE_DELETE); ++ ++ return zebra_server_send_message (client->sock, s->data, stream_get_endp (s)); ++} ++ + #if 0 + #warning oldies + int +@@ -862,6 +1049,8 @@ + case ZEBRA_NEXTHOP_IFNAME: + stream_putl (s, nexthop->ifindex); + break; ++ default: ++ assert (0); + } + num++; + } +@@ -921,6 +1110,8 @@ + case ZEBRA_NEXTHOP_IFNAME: + stream_putl (s, nexthop->ifindex); + break; ++ default: ++ assert (0); + } + num++; + } +@@ -979,6 +1170,8 @@ + case ZEBRA_NEXTHOP_IFNAME: + stream_putl (s, nexthop->ifindex); + break; ++ default: ++ assert (0); + } + num++; + } +@@ -997,6 +1190,38 @@ return 0; } @@ -9305,106 +27486,34 @@ diff --exclude=.p4config -uNr zebra/zebra/zserv.c zebra-ldp/zebra/zserv.c /* Register zebra server interface information. Send current all interface and address information. */ void -@@ -1022,6 +1059,71 @@ - client->ifinfo = 0; - } - -+void -+zread_ipv4_set_mplsindex (struct zserv *client, u_short length) -+{ -+ struct prefix_ipv4 p; -+ struct in_addr gate; -+ struct stream *s; -+ unsigned int mplsindex; -+ unsigned int ifindex; -+ struct route_node *rn; -+ struct rib *rib; -+ struct nexthop *nexthop; -+ struct route_table *table; -+ -+ /* Get input stream. */ -+ s = client->ibuf; -+ -+ /* IPv4 prefix. */ -+ memset (&p, 0, sizeof (struct prefix_ipv4)); -+ p.family = AF_INET; -+ p.prefixlen = stream_getc (s); -+ stream_get (&p.prefix, s, PSIZE (p.prefixlen)); -+ -+ /* Nexthop info */ -+ gate.s_addr = stream_get_ipv4 (s); -+ ifindex = stream_getl (s); -+ -+ /* the MPLS index */ -+ mplsindex = stream_getl (s); -+ -+ apply_mask_ipv4 (&p); -+ -+ /* Lookup table. */ -+ table = vrf_table (AFI_IP, SAFI_UNICAST, 0); -+ if (! table) -+ return; -+ -+ rn = route_node_get (table, (struct prefix *)&p); -+ if (!rn) -+ return; -+ -+ for (rib = rn->info; rib; rib = rib->next) -+ { -+ if (!CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED)) -+ { -+ continue; -+ } -+ -+ for (nexthop = rib->nexthop; nexthop; nexthop = nexthop->next) -+ { -+ if (!CHECK_FLAG (nexthop->flags, NEXTHOP_FLAG_ACTIVE)) -+ { -+ continue; -+ } -+ if (nexthop->ifindex == ifindex -+ && nexthop->gate.ipv4.s_addr == gate.s_addr) -+ { -+ SET_FLAG (rib->flags, ZEBRA_FLAG_MPLS_CHANGED); -+ nexthop->mplsindex = mplsindex; -+ } -+ } -+ -+ } -+ rib_process (rn, NULL); -+} -+ - /* This function support multiple nexthop. */ - void - zread_ipv4_add (struct zserv *client, u_short length) -@@ -1113,7 +1215,7 @@ +@@ -1127,6 +1352,8 @@ u_char nexthop_num; u_char nexthop_type; u_char ifname_len; -- + ++ memset(&api,0,sizeof(api)); + s = client->ibuf; ifindex = 0; - nexthop.s_addr = 0; -@@ -1207,7 +1309,7 @@ +@@ -1221,6 +1448,8 @@ struct in6_addr nexthop; unsigned long ifindex; struct prefix_ipv6 p; -- + ++ memset(&api,0,sizeof(api)); + s = client->ibuf; ifindex = 0; - memset (&nexthop, 0, sizeof (struct in6_addr)); -@@ -1271,7 +1373,7 @@ +@@ -1285,6 +1514,8 @@ struct in6_addr nexthop; unsigned long ifindex; struct prefix_ipv6 p; -- + ++ memset(&api,0,sizeof(api)); + s = client->ibuf; ifindex = 0; - memset (&nexthop, 0, sizeof (struct in6_addr)); -@@ -1379,6 +1481,27 @@ +@@ -1393,6 +1624,198 @@ } #endif /* HAVE_IPV6 */ @@ -9429,16 +27538,184 @@ diff --exclude=.p4config -uNr zebra/zebra/zserv.c zebra-ldp/zebra/zserv.c + client->ridinfo = 0; +} + ++void ++zread_mpls_xc_add (struct zserv *client, u_short length) ++{ ++ struct zapi_mpls_xc api; ++ mpls_xc_stream_read (client->ibuf, &api); ++} ++ ++void ++zread_mpls_xc_delete (struct zserv *client, u_short length) ++{ ++ struct zapi_mpls_xc api; ++ mpls_xc_stream_read (client->ibuf, &api); ++} ++ ++void ++zread_mpls_in_segment_add (struct zserv *client, u_short length) ++{ ++ struct zapi_mpls_in_segment api; ++ struct zmpls_in_segment in; ++ ++ mpls_in_segment_stream_read (client->ibuf, &api); ++ ++ in.owner = api.owner; ++ in.labelspace = api.labelspace; ++ in.protocol = api.protocol; ++ in.pop = api.pop; ++ in.fwd = api.fwd; ++ memcpy (&in.label, &api.label, sizeof (api.label)); ++ ++ mpls_in_segment_register (&in); ++} ++ ++void ++zread_mpls_in_segment_delete (struct zserv *client, u_short length) ++{ ++ struct zapi_mpls_in_segment api; ++ struct zmpls_in_segment in; ++ ++ mpls_in_segment_stream_read (client->ibuf, &api); ++ in.owner = api.owner; ++ in.labelspace = api.labelspace; ++ in.protocol = api.protocol; ++ in.pop = api.pop; ++ in.fwd = api.fwd; ++ memcpy (&in.label, &api.label, sizeof (api.label)); ++ ++ mpls_in_segment_unregister (&in); ++} ++ ++void ++zread_mpls_out_segment_add (struct zserv *client, u_short length) ++{ ++ struct zapi_mpls_out_segment api; ++ struct zmpls_out_segment out; ++ ++ mpls_out_segment_stream_read (client->ibuf, &api); ++ ++ out.owner = api.owner; ++ out.index = api.index; ++ memcpy (&out.push, &api.push, sizeof (api.push)); ++ ++ /* this will be XSTRDUP'd in mpls_out_segment_register() */ ++ out.nh.ifname = api.ifname; ++ ++ switch (api.gate.family) ++ { ++ case 0: ++ assert (strlen(out.nh.ifname)); ++ out.nh.type = NEXTHOP_TYPE_IFNAME; ++ break; ++ case AF_INET: ++ out.nh.gate.ipv4 = api.gate.u.prefix4; ++ out.nh.type = (strlen(out.nh.ifname) > 0) ? ++ NEXTHOP_TYPE_IPV4_IFNAME : ++ NEXTHOP_TYPE_IPV4; ++ break; ++ case AF_INET6: ++ out.nh.gate.ipv6 = api.gate.u.prefix6; ++ out.nh.type = (strlen(out.nh.ifname) > 0) ? ++ NEXTHOP_TYPE_IPV6_IFNAME : ++ NEXTHOP_TYPE_IPV6; ++ break; ++ default: ++ assert(0); ++ } ++ ++ mpls_out_segment_register (&out); ++} ++ ++void ++zread_mpls_out_segment_delete (struct zserv *client, u_short length) ++{ ++ struct zapi_mpls_out_segment api; ++ struct zmpls_out_segment out; ++ ++ mpls_out_segment_stream_read (client->ibuf, &api); ++ ++ out.owner = api.owner; ++ out.index = api.index; ++ memcpy (&out.push, &api.push, sizeof (api.push)); ++ ++ out.nh.ifname = api.ifname; ++ ++ switch (api.gate.family) ++ { ++ case 0: ++ assert (strlen(out.nh.ifname)); ++ out.nh.type = NEXTHOP_TYPE_IFNAME; ++ break; ++ case AF_INET: ++ out.nh.gate.ipv4 = api.gate.u.prefix4; ++ out.nh.type = (strlen(out.nh.ifname) > 0) ? ++ NEXTHOP_TYPE_IPV4_IFNAME : ++ NEXTHOP_TYPE_IPV4; ++ break; ++ case AF_INET6: ++ out.nh.gate.ipv6 = api.gate.u.prefix6; ++ out.nh.type = (strlen(out.nh.ifname) > 0) ? ++ NEXTHOP_TYPE_IPV6_IFNAME : ++ NEXTHOP_TYPE_IPV6; ++ break; ++ default: ++ assert(0); ++ } ++ ++ mpls_out_segment_unregister (&out); ++} ++ ++/* Register zebra server labelspace information. Send current all ++ labelspace information. */ ++void ++zread_mpls_labelspace_add (struct zserv *client, u_short length) ++{ ++ listnode node; ++ struct zmpls_in_segment *in; ++ struct zmpls_out_segment *out; ++ int labelspace; ++ ++ /* Interface information is needed. */ ++ client->mplsinfo = 1; ++ ++ for (labelspace = 0;labelspace < 256;labelspace++) ++ { ++ if (!mpls_labelspace_is_registered (labelspace)) ++ continue; ++ ++ zsend_mpls_labelspace_add (client, labelspace); ++ } ++ ++ for (node = listhead (&mpls_in_segment_list); node; node = nextnode (node)) ++ { ++ in = getdata (node); ++ ++ zsend_mpls_in_segment_add (client, in); ++ } ++ ++ for (node = listhead (&mpls_out_segment_list); node; node = nextnode (node)) ++ { ++ out = getdata (node); ++ ++ zsend_mpls_out_segment_add (client, out); ++ } ++} ++ ++/* Unregister zebra server interface information. */ ++void ++zread_mpls_labelspace_delete (struct zserv *client, u_short length) ++{ ++ client->mplsinfo = 0; ++} ++ /* Close zebra client. */ void zebra_client_close (struct zserv *client) -@@ -1490,6 +1613,15 @@ +@@ -1504,6 +1927,12 @@ switch (command) { -+ case ZEBRA_IPV4_SET_MPLSINDEX: -+ zread_ipv4_set_mplsindex (client, length); -+ break; + case ZEBRA_ROUTER_ID_ADD: + zread_router_id_add (client, length); + break; @@ -9448,26 +27725,94 @@ diff --exclude=.p4config -uNr zebra/zebra/zserv.c zebra-ldp/zebra/zserv.c case ZEBRA_INTERFACE_ADD: zread_interface_add (client, length); break; -diff --exclude=.p4config -uNr zebra/zebra/zserv.h zebra-ldp/zebra/zserv.h ---- zebra/zebra/zserv.h 2003-03-29 18:17:29.000000000 -0600 -+++ zebra-ldp/zebra/zserv.h 2003-03-10 14:59:35.000000000 -0600 -@@ -56,6 +56,9 @@ +@@ -1547,6 +1976,30 @@ + case ZEBRA_IPV4_IMPORT_LOOKUP: + zread_ipv4_import_lookup (client, length); + break; ++ case ZEBRA_MPLS_XC_ADD: ++ zread_mpls_xc_add (client, length); ++ break; ++ case ZEBRA_MPLS_XC_DELETE: ++ zread_mpls_xc_delete (client, length); ++ break; ++ case ZEBRA_MPLS_IN_SEGMENT_ADD: ++ zread_mpls_in_segment_add (client, length); ++ break; ++ case ZEBRA_MPLS_IN_SEGMENT_DELETE: ++ zread_mpls_in_segment_delete (client, length); ++ break; ++ case ZEBRA_MPLS_OUT_SEGMENT_ADD: ++ zread_mpls_out_segment_add (client, length); ++ break; ++ case ZEBRA_MPLS_OUT_SEGMENT_DELETE: ++ zread_mpls_out_segment_delete (client, length); ++ break; ++ case ZEBRA_MPLS_LABELSPACE_ADD: ++ zread_mpls_labelspace_add (client, length); ++ break; ++ case ZEBRA_MPLS_LABELSPACE_DELETE: ++ zread_mpls_labelspace_delete (client, length); ++ break; + default: + zlog_info ("Zebra received unknown command %d", command); + break; +diff --exclude=rsvpd -uNr quagga/zebra/zserv.h quagga-mpls/zebra/zserv.h +--- quagga/zebra/zserv.h 2004-02-25 13:47:53.000000000 -0600 ++++ quagga-mpls/zebra/zserv.h 2004-07-14 22:58:51.716389528 -0500 +@@ -22,6 +22,9 @@ + #ifndef _ZEBRA_ZSERV_H + #define _ZEBRA_ZSERV_H + ++#include "mpls_vty.h" ++#include "rib.h" ++ + /* Default port information. */ + #define ZEBRA_PORT 2600 + #define ZEBRA_VTY_PORT 2601 +@@ -54,6 +57,12 @@ /* Interface information. */ u_char ifinfo; + + /* Router-id information. */ + u_char ridinfo; ++ ++ /* MPLS in/out segment and XCs */ ++ u_char mplsinfo; }; - /* Count prefix size from mask length */ -@@ -126,6 +129,9 @@ + /* Zebra instance */ +@@ -142,6 +151,33 @@ #endif /* HAVE_IPV6 */ +int +zsend_router_id_update(struct zserv *, struct prefix *); + ++int ++zsend_mpls_xc_add (struct zserv *client, struct zmpls_xc *p); ++ ++int ++zsend_mpls_xc_delete (struct zserv *client, struct zmpls_xc *p); ++ ++int ++zsend_mpls_in_segment_add (struct zserv *client, struct zmpls_in_segment *p); ++ ++int ++zsend_mpls_in_segment_delete (struct zserv *client, struct zmpls_in_segment *p); ++ ++int ++zsend_mpls_out_segment_add (struct zserv *client, struct zmpls_out_segment *p); ++ ++int ++zsend_mpls_out_segment_delete (struct zserv *client, struct zmpls_out_segment *p); ++ ++int ++zsend_mpls_labelspace_add (struct zserv *client, int labelspace); ++ ++int ++zsend_mpls_labelspace_delete (struct zserv *client, int labelspace); ++ extern pid_t pid; extern pid_t old_pid; -- 2.11.4.GIT