2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* IS-IS Rout(e)ing protocol - isisd.c
|
|
|
|
*
|
|
|
|
* Copyright (C) 2001,2002 Sampo Saaristo
|
|
|
|
* Tampere University of Technology
|
|
|
|
* Institute of Communications Engineering
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public Licenseas published by the Free
|
|
|
|
* Software Foundation; either version 2 of the License, or (at your option)
|
|
|
|
* any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,but WITHOUT
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
|
* more details.
|
|
|
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <zebra.h>
|
|
|
|
|
|
|
|
#include "thread.h"
|
|
|
|
#include "vty.h"
|
|
|
|
#include "command.h"
|
|
|
|
#include "log.h"
|
|
|
|
#include "memory.h"
|
2012-03-24 16:35:20 +01:00
|
|
|
#include "time.h"
|
2003-12-23 09:09:43 +01:00
|
|
|
#include "linklist.h"
|
|
|
|
#include "if.h"
|
|
|
|
#include "hash.h"
|
|
|
|
#include "stream.h"
|
|
|
|
#include "prefix.h"
|
|
|
|
#include "table.h"
|
|
|
|
|
|
|
|
#include "isisd/dict.h"
|
|
|
|
#include "isisd/include-netbsd/iso.h"
|
|
|
|
#include "isisd/isis_constants.h"
|
|
|
|
#include "isisd/isis_common.h"
|
|
|
|
#include "isisd/isis_flags.h"
|
2012-03-24 16:35:20 +01:00
|
|
|
#include "isisd/isis_circuit.h"
|
|
|
|
#include "isisd/isis_csm.h"
|
2003-12-23 09:09:43 +01:00
|
|
|
#include "isisd/isisd.h"
|
|
|
|
#include "isisd/isis_dynhn.h"
|
|
|
|
#include "isisd/isis_adjacency.h"
|
|
|
|
#include "isisd/isis_pdu.h"
|
|
|
|
#include "isisd/isis_misc.h"
|
|
|
|
#include "isisd/isis_constants.h"
|
|
|
|
#include "isisd/isis_tlv.h"
|
|
|
|
#include "isisd/isis_lsp.h"
|
|
|
|
#include "isisd/isis_spf.h"
|
|
|
|
#include "isisd/isis_route.h"
|
|
|
|
#include "isisd/isis_zebra.h"
|
|
|
|
#include "isisd/isis_events.h"
|
2016-04-19 19:03:05 +02:00
|
|
|
#include "isisd/isis_te.h"
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
#ifdef TOPOLOGY_GENERATE
|
|
|
|
#include "spgrid.h"
|
2004-09-10 22:48:21 +02:00
|
|
|
u_char DEFAULT_TOPOLOGY_BASEIS[6] = { 0xFE, 0xED, 0xFE, 0xED, 0x00, 0x00 };
|
2003-12-23 09:09:43 +01:00
|
|
|
#endif /* TOPOLOGY_GENERATE */
|
|
|
|
|
|
|
|
struct isis *isis = NULL;
|
|
|
|
|
2006-12-08 02:09:50 +01:00
|
|
|
/*
|
|
|
|
* Prototypes.
|
|
|
|
*/
|
|
|
|
int isis_area_get(struct vty *, const char *);
|
|
|
|
int isis_area_destroy(struct vty *, const char *);
|
2012-03-24 16:35:20 +01:00
|
|
|
int area_net_title(struct vty *, const char *);
|
|
|
|
int area_clear_net_title(struct vty *, const char *);
|
|
|
|
int show_isis_interface_common(struct vty *, const char *ifname, char);
|
|
|
|
int show_isis_neighbor_common(struct vty *, const char *id, char);
|
|
|
|
int clear_isis_neighbor_common(struct vty *, const char *id);
|
2006-12-08 02:09:50 +01:00
|
|
|
int isis_config_write(struct vty *);
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
void
|
|
|
|
isis_new (unsigned long process_id)
|
|
|
|
{
|
2005-09-01 19:52:33 +02:00
|
|
|
isis = XCALLOC (MTYPE_ISIS, sizeof (struct isis));
|
2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* Default values
|
|
|
|
*/
|
|
|
|
isis->max_area_addrs = 3;
|
|
|
|
isis->process_id = process_id;
|
2012-03-24 16:35:20 +01:00
|
|
|
isis->router_id = 0;
|
2003-12-23 09:09:43 +01:00
|
|
|
isis->area_list = list_new ();
|
|
|
|
isis->init_circ_list = list_new ();
|
|
|
|
isis->uptime = time (NULL);
|
|
|
|
isis->nexthops = list_new ();
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
isis->nexthops6 = list_new ();
|
|
|
|
#endif /* HAVE_IPV6 */
|
2012-03-24 16:35:20 +01:00
|
|
|
dyn_cache_init ();
|
2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* uncomment the next line for full debugs
|
|
|
|
*/
|
2004-09-10 22:48:21 +02:00
|
|
|
/* isis->debugs = 0xFFFF; */
|
2016-04-19 19:03:05 +02:00
|
|
|
isisMplsTE.status = disable; /* Only support TE metric */
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
struct isis_area *
|
2012-03-24 16:35:20 +01:00
|
|
|
isis_area_create (const char *area_tag)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2005-09-01 19:52:33 +02:00
|
|
|
area = XCALLOC (MTYPE_ISIS_AREA, sizeof (struct isis_area));
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* The first instance is level-1-2 rest are level-1, unless otherwise
|
|
|
|
* configured
|
|
|
|
*/
|
|
|
|
if (listcount (isis->area_list) > 0)
|
|
|
|
area->is_type = IS_LEVEL_1;
|
|
|
|
else
|
|
|
|
area->is_type = IS_LEVEL_1_AND_2;
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* intialize the databases
|
|
|
|
*/
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->is_type & IS_LEVEL_1)
|
|
|
|
{
|
|
|
|
area->lspdb[0] = lsp_db_init ();
|
|
|
|
area->route_table[0] = route_table_init ();
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
area->route_table6[0] = route_table_init ();
|
|
|
|
#endif /* HAVE_IPV6 */
|
|
|
|
}
|
|
|
|
if (area->is_type & IS_LEVEL_2)
|
|
|
|
{
|
|
|
|
area->lspdb[1] = lsp_db_init ();
|
|
|
|
area->route_table[1] = route_table_init ();
|
2003-12-23 09:09:43 +01:00
|
|
|
#ifdef HAVE_IPV6
|
2012-03-24 16:35:20 +01:00
|
|
|
area->route_table6[1] = route_table_init ();
|
2003-12-23 09:09:43 +01:00
|
|
|
#endif /* HAVE_IPV6 */
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
spftree_area_init (area);
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
area->circuit_list = list_new ();
|
|
|
|
area->area_addrs = list_new ();
|
2004-09-10 22:48:21 +02:00
|
|
|
THREAD_TIMER_ON (master, area->t_tick, lsp_tick, area, 1);
|
2008-01-29 20:29:44 +01:00
|
|
|
flags_initialize (&area->flags);
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* Default values
|
|
|
|
*/
|
2012-03-24 16:35:20 +01:00
|
|
|
area->max_lsp_lifetime[0] = DEFAULT_LSP_LIFETIME; /* 1200 */
|
|
|
|
area->max_lsp_lifetime[1] = DEFAULT_LSP_LIFETIME; /* 1200 */
|
|
|
|
area->lsp_refresh[0] = DEFAULT_MAX_LSP_GEN_INTERVAL; /* 900 */
|
|
|
|
area->lsp_refresh[1] = DEFAULT_MAX_LSP_GEN_INTERVAL; /* 900 */
|
|
|
|
area->lsp_gen_interval[0] = DEFAULT_MIN_LSP_GEN_INTERVAL;
|
|
|
|
area->lsp_gen_interval[1] = DEFAULT_MIN_LSP_GEN_INTERVAL;
|
2003-12-23 09:09:43 +01:00
|
|
|
area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
|
|
|
|
area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
|
|
|
|
area->dynhostname = 1;
|
2012-03-24 16:35:20 +01:00
|
|
|
area->oldmetric = 0;
|
|
|
|
area->newmetric = 1;
|
2003-12-23 09:09:43 +01:00
|
|
|
area->lsp_frag_threshold = 90;
|
2015-11-10 18:43:31 +01:00
|
|
|
area->lsp_mtu = DEFAULT_LSP_MTU;
|
2003-12-23 09:09:43 +01:00
|
|
|
#ifdef TOPOLOGY_GENERATE
|
|
|
|
memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
|
|
|
|
#endif /* TOPOLOGY_GENERATE */
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
area->area_tag = strdup (area_tag);
|
|
|
|
listnode_add (isis->area_list, area);
|
|
|
|
area->isis = isis;
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return area;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct isis_area *
|
2004-10-11 15:11:56 +02:00
|
|
|
isis_area_lookup (const char *area_tag)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2005-09-28 20:45:54 +02:00
|
|
|
struct listnode *node;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
|
2003-12-23 09:09:43 +01:00
|
|
|
if ((area->area_tag == NULL && area_tag == NULL) ||
|
2004-09-10 22:48:21 +02:00
|
|
|
(area->area_tag && area_tag
|
|
|
|
&& strcmp (area->area_tag, area_tag) == 0))
|
|
|
|
return area;
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
int
|
2004-10-11 15:11:56 +02:00
|
|
|
isis_area_get (struct vty *vty, const char *area_tag)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
area = isis_area_lookup (area_tag);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
|
|
|
if (area)
|
|
|
|
{
|
|
|
|
vty->node = ISIS_NODE;
|
|
|
|
vty->index = area;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
area = isis_area_create (area_tag);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2005-09-04 23:36:36 +02:00
|
|
|
if (isis->debugs & DEBUG_EVENTS)
|
|
|
|
zlog_debug ("New IS-IS area instance %s", area->area_tag);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
vty->node = ISIS_NODE;
|
|
|
|
vty->index = area;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
2004-10-11 15:11:56 +02:00
|
|
|
isis_area_destroy (struct vty *vty, const char *area_tag)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2005-04-07 Paul Jakma <paul.jakma@sun.com>
* (global): Fix up list loops to match changes in lib/linklist,
and some basic auditing of usage.
* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES
* HACKING: Add notes about deprecating interfaces and commands.
* lib/linklist.h: Add usage comments.
Rename getdata macro to listgetdata.
Rename nextnode to listnextnode and fix its odd behaviour to be
less dangerous.
Make listgetdata macro assert node is not null, NULL list entries
should be bug condition.
ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use
with for loop, Suggested by Jim Carlson of Sun.
Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the
"safety" of previous macro.
LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to
distinguish from the similarly named functions, and reflect their
effect better.
Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section
with the old defines which were modified above,
for backwards compatibility - guarded to prevent Quagga using it..
* lib/linklist.c: fix up for linklist.h changes.
* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single
scan of the area list, rather than scanning all areas first for
INTER_ROUTER and then again for INTER_NETWORK. According to
16.2, the scan should be area specific anyway, and further
ospf6d does not seem to implement 16.3 anyway.
2005-04-07 09:30:20 +02:00
|
|
|
struct listnode *node, *nnode;
|
2003-12-23 09:09:43 +01:00
|
|
|
struct isis_circuit *circuit;
|
2012-03-24 16:35:20 +01:00
|
|
|
struct area_addr *addr;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
area = isis_area_lookup (area_tag);
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
if (area == NULL)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_NO_MATCH;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (area->circuit_list)
|
|
|
|
{
|
2005-04-07 Paul Jakma <paul.jakma@sun.com>
* (global): Fix up list loops to match changes in lib/linklist,
and some basic auditing of usage.
* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES
* HACKING: Add notes about deprecating interfaces and commands.
* lib/linklist.h: Add usage comments.
Rename getdata macro to listgetdata.
Rename nextnode to listnextnode and fix its odd behaviour to be
less dangerous.
Make listgetdata macro assert node is not null, NULL list entries
should be bug condition.
ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use
with for loop, Suggested by Jim Carlson of Sun.
Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the
"safety" of previous macro.
LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to
distinguish from the similarly named functions, and reflect their
effect better.
Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section
with the old defines which were modified above,
for backwards compatibility - guarded to prevent Quagga using it..
* lib/linklist.c: fix up for linklist.h changes.
* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single
scan of the area list, rather than scanning all areas first for
INTER_ROUTER and then again for INTER_NETWORK. According to
16.2, the scan should be area specific anyway, and further
ospf6d does not seem to implement 16.3 anyway.
2005-04-07 09:30:20 +02:00
|
|
|
for (ALL_LIST_ELEMENTS (area->circuit_list, node, nnode, circuit))
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
|
|
|
circuit->ip_router = 0;
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
circuit->ipv6_router = 0;
|
|
|
|
#endif
|
|
|
|
isis_csm_state_change (ISIS_DISABLE, circuit, area);
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
list_delete (area->circuit_list);
|
2012-03-24 16:35:20 +01:00
|
|
|
area->circuit_list = NULL;
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
|
|
|
|
if (area->lspdb[0] != NULL)
|
|
|
|
{
|
|
|
|
lsp_db_destroy (area->lspdb[0]);
|
|
|
|
area->lspdb[0] = NULL;
|
|
|
|
}
|
|
|
|
if (area->lspdb[1] != NULL)
|
|
|
|
{
|
|
|
|
lsp_db_destroy (area->lspdb[1]);
|
|
|
|
area->lspdb[1] = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
spftree_area_del (area);
|
|
|
|
|
|
|
|
/* invalidate and validate would delete all routes from zebra */
|
|
|
|
isis_route_invalidate (area);
|
|
|
|
isis_route_validate (area);
|
|
|
|
|
|
|
|
if (area->route_table[0])
|
|
|
|
{
|
|
|
|
route_table_finish (area->route_table[0]);
|
|
|
|
area->route_table[0] = NULL;
|
|
|
|
}
|
|
|
|
if (area->route_table[1])
|
|
|
|
{
|
|
|
|
route_table_finish (area->route_table[1]);
|
|
|
|
area->route_table[1] = NULL;
|
|
|
|
}
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
if (area->route_table6[0])
|
|
|
|
{
|
|
|
|
route_table_finish (area->route_table6[0]);
|
|
|
|
area->route_table6[0] = NULL;
|
|
|
|
}
|
|
|
|
if (area->route_table6[1])
|
|
|
|
{
|
|
|
|
route_table_finish (area->route_table6[1]);
|
|
|
|
area->route_table6[1] = NULL;
|
|
|
|
}
|
|
|
|
#endif /* HAVE_IPV6 */
|
|
|
|
|
2015-11-12 14:24:22 +01:00
|
|
|
isis_redist_area_finish(area);
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
for (ALL_LIST_ELEMENTS (area->area_addrs, node, nnode, addr))
|
|
|
|
{
|
|
|
|
list_delete_node (area->area_addrs, node);
|
|
|
|
XFREE (MTYPE_ISIS_AREA_ADDR, addr);
|
|
|
|
}
|
|
|
|
area->area_addrs = NULL;
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
THREAD_TIMER_OFF (area->t_tick);
|
|
|
|
THREAD_TIMER_OFF (area->t_lsp_refresh[0]);
|
|
|
|
THREAD_TIMER_OFF (area->t_lsp_refresh[1]);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
thread_cancel_event (master, area);
|
|
|
|
|
|
|
|
listnode_delete (isis->area_list, area);
|
|
|
|
|
|
|
|
free (area->area_tag);
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
XFREE (MTYPE_ISIS_AREA, area);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
if (listcount (isis->area_list) == 0)
|
|
|
|
{
|
|
|
|
memset (isis->sysid, 0, ISIS_SYS_ID_LEN);
|
|
|
|
isis->sysid_set = 0;
|
|
|
|
}
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
int
|
2012-03-24 16:35:20 +01:00
|
|
|
area_net_title (struct vty *vty, const char *net_title)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
struct area_addr *addr;
|
|
|
|
struct area_addr *addrp;
|
2005-09-28 20:45:54 +02:00
|
|
|
struct listnode *node;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
u_char buff[255];
|
|
|
|
area = vty->index;
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
if (!area)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_NO_MATCH;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
/* We check that we are not over the maximal number of addresses */
|
2004-09-10 22:48:21 +02:00
|
|
|
if (listcount (area->area_addrs) >= isis->max_area_addrs)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Maximum of area addresses (%d) already reached %s",
|
|
|
|
isis->max_area_addrs, VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_NOTHING_TODO;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
addr = XMALLOC (MTYPE_ISIS_AREA_ADDR, sizeof (struct area_addr));
|
|
|
|
addr->addr_len = dotformat2buff (buff, net_title);
|
|
|
|
memcpy (addr->area_addr, buff, addr->addr_len);
|
|
|
|
#ifdef EXTREME_DEBUG
|
2004-12-24 01:14:50 +01:00
|
|
|
zlog_debug ("added area address %s for area %s (address length %d)",
|
2003-12-23 09:09:43 +01:00
|
|
|
net_title, area->area_tag, addr->addr_len);
|
|
|
|
#endif /* EXTREME_DEBUG */
|
2004-09-10 22:48:21 +02:00
|
|
|
if (addr->addr_len < 8 || addr->addr_len > 20)
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, "area address must be at least 8..20 octets long (%d)%s",
|
|
|
|
addr->addr_len, VTY_NEWLINE);
|
|
|
|
XFREE (MTYPE_ISIS_AREA_ADDR, addr);
|
|
|
|
return CMD_ERR_AMBIGUOUS;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (addr->area_addr[addr->addr_len-1] != 0)
|
|
|
|
{
|
|
|
|
vty_out (vty, "nsel byte (last byte) in area address must be 0%s",
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
XFREE (MTYPE_ISIS_AREA_ADDR, addr);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_AMBIGUOUS;
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
if (isis->sysid_set == 0)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* First area address - get the SystemID for this router
|
|
|
|
*/
|
2012-03-24 16:35:20 +01:00
|
|
|
memcpy (isis->sysid, GETSYSID (addr), ISIS_SYS_ID_LEN);
|
2004-09-10 22:48:21 +02:00
|
|
|
isis->sysid_set = 1;
|
2005-09-04 23:36:36 +02:00
|
|
|
if (isis->debugs & DEBUG_EVENTS)
|
|
|
|
zlog_debug ("Router has SystemID %s", sysid_print (isis->sysid));
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
else
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Check that the SystemID portions match
|
|
|
|
*/
|
2012-03-24 16:35:20 +01:00
|
|
|
if (memcmp (isis->sysid, GETSYSID (addr), ISIS_SYS_ID_LEN))
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
vty_out (vty,
|
|
|
|
"System ID must not change when defining additional area"
|
|
|
|
" addresses%s", VTY_NEWLINE);
|
|
|
|
XFREE (MTYPE_ISIS_AREA_ADDR, addr);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_AMBIGUOUS;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
/* now we see that we don't already have this address */
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node, addrp))
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if ((addrp->addr_len + ISIS_SYS_ID_LEN + ISIS_NSEL_LEN) != (addr->addr_len))
|
2005-09-28 20:45:54 +02:00
|
|
|
continue;
|
|
|
|
if (!memcmp (addrp->area_addr, addr->area_addr, addr->addr_len))
|
|
|
|
{
|
|
|
|
XFREE (MTYPE_ISIS_AREA_ADDR, addr);
|
|
|
|
return CMD_SUCCESS; /* silent fail */
|
|
|
|
}
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* Forget the systemID part of the address
|
|
|
|
*/
|
2012-03-24 16:35:20 +01:00
|
|
|
addr->addr_len -= (ISIS_SYS_ID_LEN + ISIS_NSEL_LEN);
|
2003-12-23 09:09:43 +01:00
|
|
|
listnode_add (area->area_addrs, addr);
|
|
|
|
|
|
|
|
/* only now we can safely generate our LSPs for this area */
|
2004-09-10 22:48:21 +02:00
|
|
|
if (listcount (area->area_addrs) > 0)
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->is_type & IS_LEVEL_1)
|
|
|
|
lsp_generate (area, IS_LEVEL_1);
|
|
|
|
if (area->is_type & IS_LEVEL_2)
|
|
|
|
lsp_generate (area, IS_LEVEL_2);
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
2012-03-24 16:35:20 +01:00
|
|
|
area_clear_net_title (struct vty *vty, const char *net_title)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2004-09-10 22:48:21 +02:00
|
|
|
struct area_addr addr, *addrp = NULL;
|
2005-09-28 20:45:54 +02:00
|
|
|
struct listnode *node;
|
2003-12-23 09:09:43 +01:00
|
|
|
u_char buff[255];
|
|
|
|
|
|
|
|
area = vty->index;
|
2004-09-10 22:48:21 +02:00
|
|
|
if (!area)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_NO_MATCH;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
addr.addr_len = dotformat2buff (buff, net_title);
|
2004-09-10 22:48:21 +02:00
|
|
|
if (addr.addr_len < 8 || addr.addr_len > 20)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Unsupported area address length %d, should be 8...20 %s",
|
|
|
|
addr.addr_len, VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_AMBIGUOUS;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
memcpy (addr.area_addr, buff, (int) addr.addr_len);
|
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node, addrp))
|
2012-03-24 16:35:20 +01:00
|
|
|
if ((addrp->addr_len + ISIS_SYS_ID_LEN + 1) == addr.addr_len &&
|
2003-12-23 09:09:43 +01:00
|
|
|
!memcmp (addrp->area_addr, addr.area_addr, addr.addr_len))
|
2004-09-10 22:48:21 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
if (!addrp)
|
|
|
|
{
|
|
|
|
vty_out (vty, "No area address %s for area %s %s", net_title,
|
|
|
|
area->area_tag, VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_ERR_NO_MATCH;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
listnode_delete (area->area_addrs, addrp);
|
2012-03-24 16:35:20 +01:00
|
|
|
XFREE (MTYPE_ISIS_AREA_ADDR, addrp);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Last area address - reset the SystemID for this router
|
|
|
|
*/
|
|
|
|
if (listcount (area->area_addrs) == 0)
|
|
|
|
{
|
|
|
|
memset (isis->sysid, 0, ISIS_SYS_ID_LEN);
|
|
|
|
isis->sysid_set = 0;
|
|
|
|
if (isis->debugs & DEBUG_EVENTS)
|
|
|
|
zlog_debug ("Router has no SystemID");
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2012-03-24 16:35:20 +01:00
|
|
|
* 'show isis interface' command
|
2003-12-23 09:09:43 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
int
|
2012-03-24 16:35:20 +01:00
|
|
|
show_isis_interface_common (struct vty *vty, const char *ifname, char detail)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2005-09-28 20:45:54 +02:00
|
|
|
struct listnode *anode, *cnode;
|
2003-12-23 09:09:43 +01:00
|
|
|
struct isis_area *area;
|
|
|
|
struct isis_circuit *circuit;
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
if (!isis)
|
|
|
|
{
|
|
|
|
vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
vty_out (vty, "Area %s:%s", area->area_tag, VTY_NEWLINE);
|
|
|
|
|
|
|
|
if (detail == ISIS_UI_LEVEL_BRIEF)
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " Interface CircId State Type Level%s",
|
|
|
|
VTY_NEWLINE);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->circuit_list, cnode, circuit))
|
2012-03-24 16:35:20 +01:00
|
|
|
if (!ifname)
|
|
|
|
isis_circuit_print_vty (circuit, vty, detail);
|
|
|
|
else if (strcmp(circuit->interface->name, ifname) == 0)
|
|
|
|
isis_circuit_print_vty (circuit, vty, detail);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (show_isis_interface,
|
|
|
|
show_isis_interface_cmd,
|
|
|
|
"show isis interface",
|
2003-12-23 09:09:43 +01:00
|
|
|
SHOW_STR
|
2012-03-24 16:35:20 +01:00
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS interface\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
return show_isis_interface_common (vty, NULL, ISIS_UI_LEVEL_BRIEF);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (show_isis_interface_detail,
|
|
|
|
show_isis_interface_detail_cmd,
|
|
|
|
"show isis interface detail",
|
2003-12-23 09:09:43 +01:00
|
|
|
SHOW_STR
|
2012-03-24 16:35:20 +01:00
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS interface\n"
|
|
|
|
"show detailed information\n")
|
|
|
|
{
|
|
|
|
return show_isis_interface_common (vty, NULL, ISIS_UI_LEVEL_DETAIL);
|
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (show_isis_interface_arg,
|
|
|
|
show_isis_interface_arg_cmd,
|
|
|
|
"show isis interface WORD",
|
2003-12-23 09:09:43 +01:00
|
|
|
SHOW_STR
|
2012-03-24 16:35:20 +01:00
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS interface\n"
|
|
|
|
"ISIS interface name\n")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return show_isis_interface_common (vty, argv[3]->arg, ISIS_UI_LEVEL_DETAIL);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 'show isis neighbor' command
|
|
|
|
*/
|
|
|
|
|
|
|
|
int
|
|
|
|
show_isis_neighbor_common (struct vty *vty, const char *id, char detail)
|
|
|
|
{
|
|
|
|
struct listnode *anode, *cnode, *node;
|
|
|
|
struct isis_area *area;
|
|
|
|
struct isis_circuit *circuit;
|
|
|
|
struct list *adjdb;
|
|
|
|
struct isis_adjacency *adj;
|
|
|
|
struct isis_dynhn *dynhn;
|
|
|
|
u_char sysid[ISIS_SYS_ID_LEN];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (!isis)
|
|
|
|
{
|
|
|
|
vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
memset (sysid, 0, ISIS_SYS_ID_LEN);
|
|
|
|
if (id)
|
|
|
|
{
|
|
|
|
if (sysid2buff (sysid, id) == 0)
|
|
|
|
{
|
|
|
|
dynhn = dynhn_find_by_name (id);
|
|
|
|
if (dynhn == NULL)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Invalid system id %s%s", id, VTY_NEWLINE);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
memcpy (sysid, dynhn->id, ISIS_SYS_ID_LEN);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
|
|
|
|
{
|
|
|
|
vty_out (vty, "Area %s:%s", area->area_tag, VTY_NEWLINE);
|
|
|
|
|
|
|
|
if (detail == ISIS_UI_LEVEL_BRIEF)
|
|
|
|
vty_out (vty, " System Id Interface L State"
|
|
|
|
" Holdtime SNPA%s", VTY_NEWLINE);
|
|
|
|
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->circuit_list, cnode, circuit))
|
|
|
|
{
|
|
|
|
if (circuit->circ_type == CIRCUIT_T_BROADCAST)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 2; i++)
|
|
|
|
{
|
|
|
|
adjdb = circuit->u.bc.adjdb[i];
|
|
|
|
if (adjdb && adjdb->count)
|
|
|
|
{
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (adjdb, node, adj))
|
|
|
|
if (!id || !memcmp (adj->sysid, sysid,
|
|
|
|
ISIS_SYS_ID_LEN))
|
|
|
|
isis_adj_print_vty (adj, vty, detail);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (circuit->circ_type == CIRCUIT_T_P2P &&
|
|
|
|
circuit->u.p2p.neighbor)
|
|
|
|
{
|
|
|
|
adj = circuit->u.p2p.neighbor;
|
|
|
|
if (!id || !memcmp (adj->sysid, sysid, ISIS_SYS_ID_LEN))
|
|
|
|
isis_adj_print_vty (adj, vty, detail);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 'clear isis neighbor' command
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
clear_isis_neighbor_common (struct vty *vty, const char *id)
|
|
|
|
{
|
|
|
|
struct listnode *anode, *cnode, *cnextnode, *node, *nnode;
|
|
|
|
struct isis_area *area;
|
|
|
|
struct isis_circuit *circuit;
|
|
|
|
struct list *adjdb;
|
|
|
|
struct isis_adjacency *adj;
|
|
|
|
struct isis_dynhn *dynhn;
|
|
|
|
u_char sysid[ISIS_SYS_ID_LEN];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (!isis)
|
|
|
|
{
|
|
|
|
vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
memset (sysid, 0, ISIS_SYS_ID_LEN);
|
|
|
|
if (id)
|
|
|
|
{
|
|
|
|
if (sysid2buff (sysid, id) == 0)
|
|
|
|
{
|
|
|
|
dynhn = dynhn_find_by_name (id);
|
|
|
|
if (dynhn == NULL)
|
|
|
|
{
|
|
|
|
vty_out (vty, "Invalid system id %s%s", id, VTY_NEWLINE);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
memcpy (sysid, dynhn->id, ISIS_SYS_ID_LEN);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
|
|
|
|
{
|
|
|
|
for (ALL_LIST_ELEMENTS (area->circuit_list, cnode, cnextnode, circuit))
|
|
|
|
{
|
|
|
|
if (circuit->circ_type == CIRCUIT_T_BROADCAST)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 2; i++)
|
|
|
|
{
|
|
|
|
adjdb = circuit->u.bc.adjdb[i];
|
|
|
|
if (adjdb && adjdb->count)
|
|
|
|
{
|
|
|
|
for (ALL_LIST_ELEMENTS (adjdb, node, nnode, adj))
|
|
|
|
if (!id || !memcmp (adj->sysid, sysid, ISIS_SYS_ID_LEN))
|
|
|
|
isis_adj_state_change (adj, ISIS_ADJ_DOWN,
|
|
|
|
"clear user request");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (circuit->circ_type == CIRCUIT_T_P2P &&
|
|
|
|
circuit->u.p2p.neighbor)
|
|
|
|
{
|
|
|
|
adj = circuit->u.p2p.neighbor;
|
|
|
|
if (!id || !memcmp (adj->sysid, sysid, ISIS_SYS_ID_LEN))
|
|
|
|
isis_adj_state_change (adj, ISIS_ADJ_DOWN,
|
|
|
|
"clear user request");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_isis_neighbor,
|
|
|
|
show_isis_neighbor_cmd,
|
|
|
|
"show isis neighbor",
|
|
|
|
SHOW_STR
|
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS neighbor adjacencies\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
return show_isis_neighbor_common (vty, NULL, ISIS_UI_LEVEL_BRIEF);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (show_isis_neighbor_detail,
|
|
|
|
show_isis_neighbor_detail_cmd,
|
|
|
|
"show isis neighbor detail",
|
2003-12-23 09:09:43 +01:00
|
|
|
SHOW_STR
|
2012-03-24 16:35:20 +01:00
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS neighbor adjacencies\n"
|
2003-12-23 09:09:43 +01:00
|
|
|
"show detailed information\n")
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
|
|
|
return show_isis_neighbor_common (vty, NULL, ISIS_UI_LEVEL_DETAIL);
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_isis_neighbor_arg,
|
|
|
|
show_isis_neighbor_arg_cmd,
|
|
|
|
"show isis neighbor WORD",
|
|
|
|
SHOW_STR
|
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS neighbor adjacencies\n"
|
|
|
|
"System id\n")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return show_isis_neighbor_common (vty, argv[3]->arg, ISIS_UI_LEVEL_DETAIL);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (clear_isis_neighbor,
|
|
|
|
clear_isis_neighbor_cmd,
|
|
|
|
"clear isis neighbor",
|
|
|
|
CLEAR_STR
|
|
|
|
"Reset ISIS network information\n"
|
|
|
|
"Reset ISIS neighbor adjacencies\n")
|
|
|
|
{
|
|
|
|
return clear_isis_neighbor_common (vty, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (clear_isis_neighbor_arg,
|
|
|
|
clear_isis_neighbor_arg_cmd,
|
2012-03-28 08:48:05 +02:00
|
|
|
"clear isis neighbor WORD",
|
2012-03-24 16:35:20 +01:00
|
|
|
CLEAR_STR
|
|
|
|
"ISIS network information\n"
|
|
|
|
"ISIS neighbor adjacencies\n"
|
|
|
|
"System id\n")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return clear_isis_neighbor_common (vty, argv[3]->arg);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
/*
|
|
|
|
* 'isis debug', 'show debugging'
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
print_debug (struct vty *vty, int flags, int onoff)
|
|
|
|
{
|
|
|
|
char onoffs[4];
|
|
|
|
if (onoff)
|
2004-09-10 22:48:21 +02:00
|
|
|
strcpy (onoffs, "on");
|
2003-12-23 09:09:43 +01:00
|
|
|
else
|
2004-09-10 22:48:21 +02:00
|
|
|
strcpy (onoffs, "off");
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
if (flags & DEBUG_ADJ_PACKETS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS Adjacency related packets debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_CHECKSUM_ERRORS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS checksum errors debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_LOCAL_UPDATES)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS local updates debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_PROTOCOL_ERRORS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS protocol errors debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_SNP_PACKETS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS CSNP/PSNP packets debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_SPF_EVENTS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS SPF events debugging is %s%s", onoffs, VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_SPF_STATS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS SPF Timing and Statistics Data debugging is %s%s",
|
|
|
|
onoffs, VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_SPF_TRIGGERS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS SPF triggering events debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_UPDATE_PACKETS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS Update related packet debugging is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_RTE_EVENTS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS Route related debuggin is %s%s", onoffs,
|
|
|
|
VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
if (flags & DEBUG_EVENTS)
|
2004-09-10 22:48:21 +02:00
|
|
|
vty_out (vty, "IS-IS Event debugging is %s%s", onoffs, VTY_NEWLINE);
|
2012-03-24 16:35:20 +01:00
|
|
|
if (flags & DEBUG_PACKET_DUMP)
|
|
|
|
vty_out (vty, "IS-IS Packet dump debugging is %s%s", onoffs, VTY_NEWLINE);
|
2015-11-12 14:21:47 +01:00
|
|
|
if (flags & DEBUG_LSP_GEN)
|
|
|
|
vty_out (vty, "IS-IS LSP generation debugging is %s%s", onoffs, VTY_NEWLINE);
|
2015-11-10 18:43:34 +01:00
|
|
|
if (flags & DEBUG_LSP_SCHED)
|
|
|
|
vty_out (vty, "IS-IS LSP scheduling debugging is %s%s", onoffs, VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_debugging,
|
2016-04-19 19:03:05 +02:00
|
|
|
show_debugging_isis_cmd,
|
2015-05-20 02:58:12 +02:00
|
|
|
"show debugging isis",
|
2003-12-23 09:09:43 +01:00
|
|
|
SHOW_STR
|
2015-05-20 02:58:12 +02:00
|
|
|
"State of each debugging option\n"
|
|
|
|
ISIS_STR)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-04-19 19:03:05 +02:00
|
|
|
if (isis->debugs) {
|
|
|
|
vty_out (vty, "IS-IS:%s", VTY_NEWLINE);
|
|
|
|
print_debug (vty, isis->debugs, 1);
|
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-12-23 09:56:18 +01:00
|
|
|
/* Debug node. */
|
2004-09-10 22:48:21 +02:00
|
|
|
static struct cmd_node debug_node = {
|
2003-12-23 09:56:18 +01:00
|
|
|
DEBUG_NODE,
|
2004-09-10 22:48:21 +02:00
|
|
|
"",
|
|
|
|
1
|
2003-12-23 09:56:18 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
static int
|
|
|
|
config_write_debug (struct vty *vty)
|
|
|
|
{
|
|
|
|
int write = 0;
|
|
|
|
int flags = isis->debugs;
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
if (flags & DEBUG_ADJ_PACKETS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis adj-packets%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_CHECKSUM_ERRORS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis checksum-errors%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_LOCAL_UPDATES)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis local-updates%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_PROTOCOL_ERRORS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis protocol-errors%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_SNP_PACKETS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis snp-packets%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_SPF_EVENTS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis spf-events%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_SPF_STATS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis spf-statistics%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_SPF_TRIGGERS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis spf-triggers%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_UPDATE_PACKETS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis update-packets%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_RTE_EVENTS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis route-events%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (flags & DEBUG_EVENTS)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis events%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
if (flags & DEBUG_PACKET_DUMP)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis packet-dump%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2015-11-12 14:21:47 +01:00
|
|
|
if (flags & DEBUG_LSP_GEN)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis lsp-gen%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2015-11-10 18:43:34 +01:00
|
|
|
if (flags & DEBUG_LSP_SCHED)
|
|
|
|
{
|
|
|
|
vty_out (vty, "debug isis lsp-sched%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2003-12-23 09:56:18 +01:00
|
|
|
|
|
|
|
return write;
|
|
|
|
}
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
DEFUN (debug_isis_adj,
|
|
|
|
debug_isis_adj_cmd,
|
|
|
|
"debug isis adj-packets",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Adjacency related packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_ADJ_PACKETS;
|
2004-09-10 22:48:21 +02:00
|
|
|
print_debug (vty, DEBUG_ADJ_PACKETS, 1);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_adj,
|
|
|
|
no_debug_isis_adj_cmd,
|
|
|
|
"no debug isis adj-packets",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Adjacency related packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_ADJ_PACKETS;
|
|
|
|
print_debug (vty, DEBUG_ADJ_PACKETS, 0);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_csum,
|
|
|
|
debug_isis_csum_cmd,
|
|
|
|
"debug isis checksum-errors",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS LSP checksum errors\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_CHECKSUM_ERRORS;
|
|
|
|
print_debug (vty, DEBUG_CHECKSUM_ERRORS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_csum,
|
|
|
|
no_debug_isis_csum_cmd,
|
|
|
|
"no debug isis checksum-errors",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS LSP checksum errors\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_CHECKSUM_ERRORS;
|
|
|
|
print_debug (vty, DEBUG_CHECKSUM_ERRORS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_lupd,
|
|
|
|
debug_isis_lupd_cmd,
|
|
|
|
"debug isis local-updates",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS local update packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_LOCAL_UPDATES;
|
|
|
|
print_debug (vty, DEBUG_LOCAL_UPDATES, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_lupd,
|
|
|
|
no_debug_isis_lupd_cmd,
|
|
|
|
"no debug isis local-updates",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS local update packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_LOCAL_UPDATES;
|
2004-09-10 22:48:21 +02:00
|
|
|
print_debug (vty, DEBUG_LOCAL_UPDATES, 0);
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_err,
|
|
|
|
debug_isis_err_cmd,
|
2004-09-10 22:48:21 +02:00
|
|
|
"debug isis protocol-errors",
|
2003-12-23 09:09:43 +01:00
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS LSP protocol errors\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_PROTOCOL_ERRORS;
|
|
|
|
print_debug (vty, DEBUG_PROTOCOL_ERRORS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_err,
|
|
|
|
no_debug_isis_err_cmd,
|
|
|
|
"no debug isis protocol-errors",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS LSP protocol errors\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_PROTOCOL_ERRORS;
|
|
|
|
print_debug (vty, DEBUG_PROTOCOL_ERRORS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_snp,
|
|
|
|
debug_isis_snp_cmd,
|
|
|
|
"debug isis snp-packets",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS CSNP/PSNP packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_SNP_PACKETS;
|
|
|
|
print_debug (vty, DEBUG_SNP_PACKETS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_snp,
|
|
|
|
no_debug_isis_snp_cmd,
|
|
|
|
"no debug isis snp-packets",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS CSNP/PSNP packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2004-09-10 22:48:21 +02:00
|
|
|
isis->debugs &= ~DEBUG_SNP_PACKETS;
|
2003-12-23 09:09:43 +01:00
|
|
|
print_debug (vty, DEBUG_SNP_PACKETS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_upd,
|
|
|
|
debug_isis_upd_cmd,
|
|
|
|
"debug isis update-packets",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Update related packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_UPDATE_PACKETS;
|
|
|
|
print_debug (vty, DEBUG_UPDATE_PACKETS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_upd,
|
|
|
|
no_debug_isis_upd_cmd,
|
|
|
|
"no debug isis update-packets",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Update related packets\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_UPDATE_PACKETS;
|
|
|
|
print_debug (vty, DEBUG_UPDATE_PACKETS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_spfevents,
|
|
|
|
debug_isis_spfevents_cmd,
|
|
|
|
"debug isis spf-events",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Shortest Path First Events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_SPF_EVENTS;
|
2004-09-10 22:48:21 +02:00
|
|
|
print_debug (vty, DEBUG_SPF_EVENTS, 1);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_spfevents,
|
|
|
|
no_debug_isis_spfevents_cmd,
|
|
|
|
"no debug isis spf-events",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Shortest Path First Events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_SPF_EVENTS;
|
2004-09-10 22:48:21 +02:00
|
|
|
print_debug (vty, DEBUG_SPF_EVENTS, 0);
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_spfstats,
|
|
|
|
debug_isis_spfstats_cmd,
|
|
|
|
"debug isis spf-statistics ",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS SPF Timing and Statistic Data\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_SPF_STATS;
|
|
|
|
print_debug (vty, DEBUG_SPF_STATS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_spfstats,
|
|
|
|
no_debug_isis_spfstats_cmd,
|
|
|
|
"no debug isis spf-statistics",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS SPF Timing and Statistic Data\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_SPF_STATS;
|
|
|
|
print_debug (vty, DEBUG_SPF_STATS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_spftrigg,
|
|
|
|
debug_isis_spftrigg_cmd,
|
|
|
|
"debug isis spf-triggers",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS SPF triggering events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_SPF_TRIGGERS;
|
|
|
|
print_debug (vty, DEBUG_SPF_TRIGGERS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_spftrigg,
|
|
|
|
no_debug_isis_spftrigg_cmd,
|
|
|
|
"no debug isis spf-triggers",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS SPF triggering events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_SPF_TRIGGERS;
|
|
|
|
print_debug (vty, DEBUG_SPF_TRIGGERS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_rtevents,
|
|
|
|
debug_isis_rtevents_cmd,
|
|
|
|
"debug isis route-events",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Route related events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_RTE_EVENTS;
|
|
|
|
print_debug (vty, DEBUG_RTE_EVENTS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_rtevents,
|
|
|
|
no_debug_isis_rtevents_cmd,
|
|
|
|
"no debug isis route-events",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Route related events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_RTE_EVENTS;
|
|
|
|
print_debug (vty, DEBUG_RTE_EVENTS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (debug_isis_events,
|
|
|
|
debug_isis_events_cmd,
|
|
|
|
"debug isis events",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2005-09-19 06:23:34 +02:00
|
|
|
"IS-IS Events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_EVENTS;
|
|
|
|
print_debug (vty, DEBUG_EVENTS, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_events,
|
|
|
|
no_debug_isis_events_cmd,
|
|
|
|
"no debug isis events",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"IS-IS Events\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_EVENTS;
|
|
|
|
print_debug (vty, DEBUG_EVENTS, 0);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (debug_isis_packet_dump,
|
|
|
|
debug_isis_packet_dump_cmd,
|
|
|
|
"debug isis packet-dump",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS packet dump\n")
|
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_PACKET_DUMP;
|
|
|
|
print_debug (vty, DEBUG_PACKET_DUMP, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_packet_dump,
|
|
|
|
no_debug_isis_packet_dump_cmd,
|
|
|
|
"no debug isis packet-dump",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS packet dump\n")
|
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_PACKET_DUMP;
|
|
|
|
print_debug (vty, DEBUG_PACKET_DUMP, 0);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2015-11-12 14:21:47 +01:00
|
|
|
DEFUN (debug_isis_lsp_gen,
|
|
|
|
debug_isis_lsp_gen_cmd,
|
|
|
|
"debug isis lsp-gen",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS generation of own LSPs\n")
|
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_LSP_GEN;
|
|
|
|
print_debug (vty, DEBUG_LSP_GEN, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (no_debug_isis_lsp_gen,
|
|
|
|
no_debug_isis_lsp_gen_cmd,
|
|
|
|
"no debug isis lsp-gen",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS generation of own LSPs\n")
|
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_LSP_GEN;
|
|
|
|
print_debug (vty, DEBUG_LSP_GEN, 0);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2015-11-10 18:43:34 +01:00
|
|
|
DEFUN (debug_isis_lsp_sched,
|
|
|
|
debug_isis_lsp_sched_cmd,
|
|
|
|
"debug isis lsp-sched",
|
|
|
|
DEBUG_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS scheduling of LSP generation\n")
|
|
|
|
{
|
|
|
|
isis->debugs |= DEBUG_LSP_SCHED;
|
|
|
|
print_debug (vty, DEBUG_LSP_SCHED, 1);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2016-09-17 13:25:35 +02:00
|
|
|
DEFUN (no_debug_isis_lsp_sched,
|
|
|
|
no_debug_isis_lsp_sched_cmd,
|
|
|
|
"no debug isis lsp-sched",
|
|
|
|
UNDEBUG_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS scheduling of LSP generation\n")
|
|
|
|
{
|
|
|
|
isis->debugs &= ~DEBUG_LSP_SCHED;
|
|
|
|
print_debug (vty, DEBUG_LSP_SCHED, 0);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
DEFUN (show_hostname,
|
|
|
|
show_hostname_cmd,
|
|
|
|
"show isis hostname",
|
|
|
|
SHOW_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS Dynamic hostname mapping\n")
|
|
|
|
{
|
|
|
|
dynhn_print_all (vty);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
static void
|
|
|
|
vty_out_timestr(struct vty *vty, time_t uptime)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
struct tm *tm;
|
|
|
|
time_t difftime = time (NULL);
|
|
|
|
difftime -= uptime;
|
|
|
|
tm = gmtime (&difftime);
|
|
|
|
|
|
|
|
#define ONE_DAY_SECOND 60*60*24
|
|
|
|
#define ONE_WEEK_SECOND 60*60*24*7
|
|
|
|
if (difftime < ONE_DAY_SECOND)
|
|
|
|
vty_out (vty, "%02d:%02d:%02d",
|
|
|
|
tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
|
else if (difftime < ONE_WEEK_SECOND)
|
|
|
|
vty_out (vty, "%dd%02dh%02dm",
|
|
|
|
tm->tm_yday, tm->tm_hour, tm->tm_min);
|
|
|
|
else
|
|
|
|
vty_out (vty, "%02dw%dd%02dh",
|
|
|
|
tm->tm_yday/7,
|
|
|
|
tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
|
|
|
|
vty_out (vty, " ago");
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_isis_summary,
|
|
|
|
show_isis_summary_cmd,
|
|
|
|
"show isis summary",
|
|
|
|
SHOW_STR "IS-IS information\n" "IS-IS summary\n")
|
|
|
|
{
|
|
|
|
struct listnode *node, *node2;
|
2003-12-23 09:09:43 +01:00
|
|
|
struct isis_area *area;
|
2012-03-24 16:35:20 +01:00
|
|
|
struct isis_spftree *spftree;
|
|
|
|
int level;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
if (isis == NULL)
|
|
|
|
{
|
|
|
|
vty_out (vty, "ISIS is not running%s", VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
vty_out (vty, "Process Id : %ld%s", isis->process_id,
|
|
|
|
VTY_NEWLINE);
|
|
|
|
if (isis->sysid_set)
|
|
|
|
vty_out (vty, "System Id : %s%s", sysid_print (isis->sysid),
|
|
|
|
VTY_NEWLINE);
|
|
|
|
|
|
|
|
vty_out (vty, "Up time : ");
|
|
|
|
vty_out_timestr(vty, isis->uptime);
|
|
|
|
vty_out (vty, "%s", VTY_NEWLINE);
|
|
|
|
|
|
|
|
if (isis->area_list)
|
|
|
|
vty_out (vty, "Number of areas : %d%s", isis->area_list->count,
|
|
|
|
VTY_NEWLINE);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
|
|
|
vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
|
|
|
|
VTY_NEWLINE);
|
|
|
|
|
|
|
|
if (listcount (area->area_addrs) > 0)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
struct area_addr *area_addr;
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node2, area_addr))
|
|
|
|
{
|
|
|
|
vty_out (vty, " Net: %s%s",
|
|
|
|
isonet_print (area_addr->area_addr,
|
|
|
|
area_addr->addr_len + ISIS_SYS_ID_LEN +
|
|
|
|
1), VTY_NEWLINE);
|
|
|
|
}
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
for (level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++)
|
|
|
|
{
|
|
|
|
if ((area->is_type & level) == 0)
|
|
|
|
continue;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " Level-%d:%s", level, VTY_NEWLINE);
|
|
|
|
spftree = area->spftree[level - 1];
|
|
|
|
if (spftree->pending)
|
|
|
|
vty_out (vty, " IPv4 SPF: (pending)%s", VTY_NEWLINE);
|
|
|
|
else
|
|
|
|
vty_out (vty, " IPv4 SPF:%s", VTY_NEWLINE);
|
|
|
|
|
|
|
|
vty_out (vty, " minimum interval : %d%s",
|
|
|
|
area->min_spf_interval[level - 1], VTY_NEWLINE);
|
|
|
|
|
2012-03-28 08:48:05 +02:00
|
|
|
vty_out (vty, " last run elapsed : ");
|
|
|
|
vty_out_timestr(vty, spftree->last_run_timestamp);
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, "%s", VTY_NEWLINE);
|
|
|
|
|
2012-03-28 08:48:05 +02:00
|
|
|
vty_out (vty, " last run duration : %u usec%s",
|
|
|
|
(u_int32_t)spftree->last_run_duration, VTY_NEWLINE);
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " run count : %d%s",
|
|
|
|
spftree->runcount, VTY_NEWLINE);
|
|
|
|
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
spftree = area->spftree6[level - 1];
|
|
|
|
if (spftree->pending)
|
|
|
|
vty_out (vty, " IPv6 SPF: (pending)%s", VTY_NEWLINE);
|
|
|
|
else
|
|
|
|
vty_out (vty, " IPv6 SPF:%s", VTY_NEWLINE);
|
|
|
|
|
|
|
|
vty_out (vty, " minimum interval : %d%s",
|
|
|
|
area->min_spf_interval[level - 1], VTY_NEWLINE);
|
|
|
|
|
2012-03-28 08:48:05 +02:00
|
|
|
vty_out (vty, " last run elapsed : ");
|
|
|
|
vty_out_timestr(vty, spftree->last_run_timestamp);
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, "%s", VTY_NEWLINE);
|
|
|
|
|
2015-03-03 08:48:11 +01:00
|
|
|
vty_out (vty, " last run duration : %llu msec%s",
|
|
|
|
(unsigned long long)spftree->last_run_duration, VTY_NEWLINE);
|
2012-03-28 08:48:05 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " run count : %d%s",
|
|
|
|
spftree->runcount, VTY_NEWLINE);
|
|
|
|
#endif
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
vty_out (vty, "%s", VTY_NEWLINE);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
/*
|
|
|
|
* This function supports following display options:
|
|
|
|
* [ show isis database [detail] ]
|
|
|
|
* [ show isis database <sysid> [detail] ]
|
|
|
|
* [ show isis database <hostname> [detail] ]
|
|
|
|
* [ show isis database <sysid>.<pseudo-id> [detail] ]
|
|
|
|
* [ show isis database <hostname>.<pseudo-id> [detail] ]
|
|
|
|
* [ show isis database <sysid>.<pseudo-id>-<fragment-number> [detail] ]
|
|
|
|
* [ show isis database <hostname>.<pseudo-id>-<fragment-number> [detail] ]
|
|
|
|
* [ show isis database detail <sysid> ]
|
|
|
|
* [ show isis database detail <hostname> ]
|
|
|
|
* [ show isis database detail <sysid>.<pseudo-id> ]
|
|
|
|
* [ show isis database detail <hostname>.<pseudo-id> ]
|
|
|
|
* [ show isis database detail <sysid>.<pseudo-id>-<fragment-number> ]
|
|
|
|
* [ show isis database detail <hostname>.<pseudo-id>-<fragment-number> ]
|
|
|
|
*/
|
|
|
|
static int
|
|
|
|
show_isis_database (struct vty *vty, const char *argv, int ui_level)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2005-09-28 20:45:54 +02:00
|
|
|
struct listnode *node;
|
2003-12-23 09:09:43 +01:00
|
|
|
struct isis_area *area;
|
2012-03-24 16:35:20 +01:00
|
|
|
struct isis_lsp *lsp;
|
|
|
|
struct isis_dynhn *dynhn;
|
|
|
|
const char *pos = argv;
|
|
|
|
u_char lspid[ISIS_SYS_ID_LEN+2];
|
2012-03-28 08:48:05 +02:00
|
|
|
char sysid[255];
|
2012-03-24 16:35:20 +01:00
|
|
|
u_char number[3];
|
2003-12-23 09:09:43 +01:00
|
|
|
int level, lsp_count;
|
|
|
|
|
|
|
|
if (isis->area_list->count == 0)
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
memset (&lspid, 0, ISIS_SYS_ID_LEN);
|
2012-03-28 08:48:05 +02:00
|
|
|
memset (&sysid, 0, 255);
|
2012-03-24 16:35:20 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* extract fragment and pseudo id from the string argv
|
|
|
|
* in the forms:
|
|
|
|
* (a) <systemid/hostname>.<pseudo-id>-<framenent> or
|
|
|
|
* (b) <systemid/hostname>.<pseudo-id> or
|
|
|
|
* (c) <systemid/hostname> or
|
|
|
|
* Where systemid is in the form:
|
|
|
|
* xxxx.xxxx.xxxx
|
|
|
|
*/
|
2012-03-28 08:48:05 +02:00
|
|
|
if (argv)
|
|
|
|
strncpy (sysid, argv, 254);
|
2012-03-24 16:35:20 +01:00
|
|
|
if (argv && strlen (argv) > 3)
|
|
|
|
{
|
|
|
|
pos = argv + strlen (argv) - 3;
|
|
|
|
if (strncmp (pos, "-", 1) == 0)
|
|
|
|
{
|
|
|
|
memcpy (number, ++pos, 2);
|
|
|
|
lspid[ISIS_SYS_ID_LEN+1] = (u_char) strtol ((char *)number, NULL, 16);
|
|
|
|
pos -= 4;
|
|
|
|
if (strncmp (pos, ".", 1) != 0)
|
|
|
|
return CMD_ERR_AMBIGUOUS;
|
|
|
|
}
|
|
|
|
if (strncmp (pos, ".", 1) == 0)
|
|
|
|
{
|
|
|
|
memcpy (number, ++pos, 2);
|
|
|
|
lspid[ISIS_SYS_ID_LEN] = (u_char) strtol ((char *)number, NULL, 16);
|
|
|
|
sysid[pos - argv - 1] = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
|
2012-03-24 16:35:20 +01:00
|
|
|
VTY_NEWLINE);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
for (level = 0; level < ISIS_LEVELS; level++)
|
|
|
|
{
|
|
|
|
if (area->lspdb[level] && dict_count (area->lspdb[level]) > 0)
|
|
|
|
{
|
|
|
|
lsp = NULL;
|
|
|
|
if (argv != NULL)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Try to find the lsp-id if the argv string is in
|
|
|
|
* the form hostname.<pseudo-id>-<fragment>
|
|
|
|
*/
|
|
|
|
if (sysid2buff (lspid, sysid))
|
|
|
|
{
|
|
|
|
lsp = lsp_search (lspid, area->lspdb[level]);
|
|
|
|
}
|
|
|
|
else if ((dynhn = dynhn_find_by_name (sysid)))
|
|
|
|
{
|
|
|
|
memcpy (lspid, dynhn->id, ISIS_SYS_ID_LEN);
|
|
|
|
lsp = lsp_search (lspid, area->lspdb[level]);
|
|
|
|
}
|
|
|
|
else if (strncmp(unix_hostname (), sysid, 15) == 0)
|
|
|
|
{
|
|
|
|
memcpy (lspid, isis->sysid, ISIS_SYS_ID_LEN);
|
|
|
|
lsp = lsp_search (lspid, area->lspdb[level]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lsp != NULL || argv == NULL)
|
|
|
|
{
|
|
|
|
vty_out (vty, "IS-IS Level-%d link-state database:%s",
|
|
|
|
level + 1, VTY_NEWLINE);
|
|
|
|
|
|
|
|
/* print the title in all cases */
|
|
|
|
vty_out (vty, "LSP ID PduLen "
|
|
|
|
"SeqNumber Chksum Holdtime ATT/P/OL%s",
|
|
|
|
VTY_NEWLINE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lsp)
|
|
|
|
{
|
|
|
|
if (ui_level == ISIS_UI_LEVEL_DETAIL)
|
|
|
|
lsp_print_detail (lsp, vty, area->dynhostname);
|
|
|
|
else
|
|
|
|
lsp_print (lsp, vty, area->dynhostname);
|
|
|
|
}
|
|
|
|
else if (argv == NULL)
|
|
|
|
{
|
|
|
|
lsp_count = lsp_print_all (vty, area->lspdb[level],
|
|
|
|
ui_level,
|
|
|
|
area->dynhostname);
|
|
|
|
|
|
|
|
vty_out (vty, " %u LSPs%s%s",
|
|
|
|
lsp_count, VTY_NEWLINE, VTY_NEWLINE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (show_database_brief,
|
|
|
|
show_database_cmd,
|
|
|
|
"show isis database",
|
|
|
|
SHOW_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS link state database\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
return show_isis_database (vty, NULL, ISIS_UI_LEVEL_BRIEF);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (show_database_lsp_brief,
|
|
|
|
show_database_arg_cmd,
|
|
|
|
"show isis database WORD",
|
|
|
|
SHOW_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS link state database\n"
|
|
|
|
"LSP ID\n")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return show_isis_database (vty, argv[3]->arg, ISIS_UI_LEVEL_BRIEF);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_database_lsp_detail,
|
|
|
|
show_database_arg_detail_cmd,
|
|
|
|
"show isis database WORD detail",
|
|
|
|
SHOW_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS link state database\n"
|
|
|
|
"LSP ID\n"
|
|
|
|
"Detailed information\n")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return show_isis_database (vty, argv[3]->arg, ISIS_UI_LEVEL_DETAIL);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_database_detail,
|
|
|
|
show_database_detail_cmd,
|
|
|
|
"show isis database detail",
|
|
|
|
SHOW_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS link state database\n")
|
|
|
|
{
|
|
|
|
return show_isis_database (vty, NULL, ISIS_UI_LEVEL_DETAIL);
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_database_detail_lsp,
|
|
|
|
show_database_detail_arg_cmd,
|
|
|
|
"show isis database detail WORD",
|
|
|
|
SHOW_STR
|
|
|
|
"IS-IS information\n"
|
|
|
|
"IS-IS link state database\n"
|
|
|
|
"Detailed information\n"
|
|
|
|
"LSP ID\n")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return show_isis_database (vty, argv[4]->arg, ISIS_UI_LEVEL_DETAIL);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 'router isis' command
|
|
|
|
*/
|
|
|
|
DEFUN (router_isis,
|
|
|
|
router_isis_cmd,
|
|
|
|
"router isis WORD",
|
|
|
|
ROUTER_STR
|
|
|
|
"ISO IS-IS\n"
|
|
|
|
"ISO Routing area tag")
|
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return isis_area_get (vty, argv[2]->arg);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
*'no router isis' command
|
|
|
|
*/
|
|
|
|
DEFUN (no_router_isis,
|
|
|
|
no_router_isis_cmd,
|
|
|
|
"no router isis WORD",
|
2004-09-10 22:48:21 +02:00
|
|
|
"no\n" ROUTER_STR "ISO IS-IS\n" "ISO Routing area tag")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return isis_area_destroy (vty, argv[3]->arg);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 'net' command
|
|
|
|
*/
|
|
|
|
DEFUN (net,
|
|
|
|
net_cmd,
|
|
|
|
"net WORD",
|
|
|
|
"A Network Entity Title for this process (OSI only)\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return area_net_title (vty, argv[1]->arg);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 'no net' command
|
|
|
|
*/
|
|
|
|
DEFUN (no_net,
|
|
|
|
no_net_cmd,
|
|
|
|
"no net WORD",
|
|
|
|
NO_STR
|
|
|
|
"A Network Entity Title for this process (OSI only)\n"
|
2004-09-10 22:48:21 +02:00
|
|
|
"XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-09-23 03:07:05 +02:00
|
|
|
return area_clear_net_title (vty, argv[2]->arg);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
void isis_area_lsp_mtu_set(struct isis_area *area, unsigned int lsp_mtu)
|
2015-11-10 18:43:31 +01:00
|
|
|
{
|
|
|
|
area->lsp_mtu = lsp_mtu;
|
|
|
|
lsp_regenerate_schedule(area, IS_LEVEL_1_AND_2, 1);
|
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
static int
|
|
|
|
isis_area_passwd_set(struct isis_area *area, int level, u_char passwd_type,
|
|
|
|
const char *passwd, u_char snp_auth)
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
2016-07-28 17:23:31 +02:00
|
|
|
struct isis_passwd *dest;
|
|
|
|
struct isis_passwd modified;
|
2012-03-24 16:35:20 +01:00
|
|
|
int len;
|
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
assert((level == IS_LEVEL_1) || (level == IS_LEVEL_2));
|
|
|
|
dest = (level == IS_LEVEL_1) ? &area->area_passwd : &area->domain_passwd;
|
|
|
|
memset(&modified, 0, sizeof(modified));
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
if (passwd_type != ISIS_PASSWD_TYPE_UNUSED)
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
2016-07-28 17:23:31 +02:00
|
|
|
if (!passwd)
|
|
|
|
return -1;
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
len = strlen(passwd);
|
|
|
|
if (len > 254)
|
|
|
|
return -1;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
modified.len = len;
|
|
|
|
strncpy((char*)modified.passwd, passwd, 255);
|
|
|
|
modified.type = passwd_type;
|
|
|
|
modified.snp_auth = snp_auth;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
if (memcmp(&modified, dest, sizeof(modified)))
|
2005-01-01 11:29:51 +01:00
|
|
|
{
|
2016-07-28 17:23:31 +02:00
|
|
|
memcpy(dest, &modified, sizeof(modified));
|
|
|
|
lsp_regenerate_schedule(area, IS_LEVEL_1|IS_LEVEL_2, 1);
|
2005-01-01 11:29:51 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
return 0;
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
int
|
|
|
|
isis_area_passwd_unset (struct isis_area *area, int level)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:31 +02:00
|
|
|
return isis_area_passwd_set (area, level, ISIS_PASSWD_TYPE_UNUSED, NULL, 0);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
int
|
|
|
|
isis_area_passwd_cleartext_set (struct isis_area *area, int level,
|
|
|
|
const char *passwd, u_char snp_auth)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:31 +02:00
|
|
|
return isis_area_passwd_set (area, level, ISIS_PASSWD_TYPE_CLEARTXT,
|
|
|
|
passwd, snp_auth);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:31 +02:00
|
|
|
int
|
|
|
|
isis_area_passwd_hmac_md5_set (struct isis_area *area, int level,
|
|
|
|
const char *passwd, u_char snp_auth)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:31 +02:00
|
|
|
return isis_area_passwd_set (area, level, ISIS_PASSWD_TYPE_HMAC_MD5,
|
|
|
|
passwd, snp_auth);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
static void
|
|
|
|
area_resign_level (struct isis_area *area, int level)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:29 +02:00
|
|
|
if (area->lspdb[level - 1])
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2016-07-28 17:23:29 +02:00
|
|
|
lsp_db_destroy (area->lspdb[level - 1]);
|
|
|
|
area->lspdb[level - 1] = NULL;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2016-07-28 17:23:29 +02:00
|
|
|
if (area->spftree[level - 1])
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2016-07-28 17:23:29 +02:00
|
|
|
isis_spftree_del (area->spftree[level - 1]);
|
|
|
|
area->spftree[level - 1] = NULL;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2016-07-28 17:23:29 +02:00
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
if (area->spftree6[level - 1])
|
|
|
|
{
|
|
|
|
isis_spftree_del (area->spftree6[level - 1]);
|
|
|
|
area->spftree6[level - 1] = NULL;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
if (area->route_table[level - 1])
|
|
|
|
{
|
|
|
|
route_table_finish (area->route_table[level - 1]);
|
|
|
|
area->route_table[level - 1] = NULL;
|
|
|
|
}
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
if (area->route_table6[level - 1])
|
|
|
|
{
|
|
|
|
route_table_finish (area->route_table6[level - 1]);
|
|
|
|
area->route_table6[level - 1] = NULL;
|
|
|
|
}
|
|
|
|
#endif /* HAVE_IPV6 */
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
sched_debug("ISIS (%s): Resigned from L%d - canceling LSP regeneration timer.",
|
|
|
|
area->area_tag, level);
|
|
|
|
THREAD_TIMER_OFF (area->t_lsp_refresh[level - 1]);
|
|
|
|
area->lsp_regenerate_pending[level - 1] = 0;
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
void
|
|
|
|
isis_area_is_type_set(struct isis_area *area, int is_type)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:29 +02:00
|
|
|
struct listnode *node;
|
|
|
|
struct isis_circuit *circuit;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
if (isis->debugs & DEBUG_EVENTS)
|
|
|
|
zlog_debug ("ISIS-Evt (%s) system type change %s -> %s", area->area_tag,
|
|
|
|
circuit_t2string (area->is_type), circuit_t2string (is_type));
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
if (area->is_type == is_type)
|
|
|
|
return; /* No change */
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
switch (area->is_type)
|
|
|
|
{
|
|
|
|
case IS_LEVEL_1:
|
|
|
|
if (is_type == IS_LEVEL_2)
|
|
|
|
area_resign_level (area, IS_LEVEL_1);
|
|
|
|
|
|
|
|
if (area->lspdb[1] == NULL)
|
|
|
|
area->lspdb[1] = lsp_db_init ();
|
|
|
|
if (area->route_table[1] == NULL)
|
|
|
|
area->route_table[1] = route_table_init ();
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
if (area->route_table6[1] == NULL)
|
|
|
|
area->route_table6[1] = route_table_init ();
|
|
|
|
#endif /* HAVE_IPV6 */
|
|
|
|
break;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:29 +02:00
|
|
|
case IS_LEVEL_1_AND_2:
|
|
|
|
if (is_type == IS_LEVEL_1)
|
|
|
|
area_resign_level (area, IS_LEVEL_2);
|
|
|
|
else
|
|
|
|
area_resign_level (area, IS_LEVEL_1);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case IS_LEVEL_2:
|
|
|
|
if (is_type == IS_LEVEL_1)
|
|
|
|
area_resign_level (area, IS_LEVEL_2);
|
|
|
|
|
|
|
|
if (area->lspdb[0] == NULL)
|
|
|
|
area->lspdb[0] = lsp_db_init ();
|
|
|
|
if (area->route_table[0] == NULL)
|
|
|
|
area->route_table[0] = route_table_init ();
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
if (area->route_table6[0] == NULL)
|
|
|
|
area->route_table6[0] = route_table_init ();
|
|
|
|
#endif /* HAVE_IPV6 */
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
area->is_type = is_type;
|
|
|
|
|
|
|
|
/* override circuit's is_type */
|
|
|
|
if (area->is_type != IS_LEVEL_1_AND_2)
|
|
|
|
{
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->circuit_list, node, circuit))
|
2016-08-13 01:32:52 +02:00
|
|
|
isis_circuit_is_type_set (circuit, is_type);
|
2016-07-28 17:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
spftree_area_init (area);
|
|
|
|
|
|
|
|
if (is_type & IS_LEVEL_1)
|
|
|
|
lsp_generate (area, IS_LEVEL_1);
|
|
|
|
if (is_type & IS_LEVEL_2)
|
|
|
|
lsp_generate (area, IS_LEVEL_2);
|
|
|
|
lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
|
|
|
|
|
|
|
|
return;
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:26 +02:00
|
|
|
void isis_area_metricstyle_set(struct isis_area *area, bool old_metric,
|
|
|
|
bool new_metric)
|
2012-03-28 08:48:05 +02:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
if (area->oldmetric != old_metric
|
|
|
|
|| area->newmetric != new_metric)
|
2012-03-28 08:48:05 +02:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
area->oldmetric = old_metric;
|
|
|
|
area->newmetric = new_metric;
|
|
|
|
lsp_regenerate_schedule(area, IS_LEVEL_1 | IS_LEVEL_2, 1);
|
2012-03-28 08:48:05 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:26 +02:00
|
|
|
void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
char new_overload_bit = overload_bit ? LSPBIT_OL : 0;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:26 +02:00
|
|
|
if (new_overload_bit != area->overload_bit)
|
2005-09-26 18:49:07 +02:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
area->overload_bit = new_overload_bit;
|
|
|
|
lsp_regenerate_schedule(area, IS_LEVEL_1 | IS_LEVEL_2, 1);
|
2005-09-26 18:49:07 +02:00
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:26 +02:00
|
|
|
void isis_area_attached_bit_set(struct isis_area *area, bool attached_bit)
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
char new_attached_bit = attached_bit ? LSPBIT_ATT : 0;
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2016-07-28 17:23:26 +02:00
|
|
|
if (new_attached_bit != area->attached_bit)
|
|
|
|
{
|
|
|
|
area->attached_bit = new_attached_bit;
|
|
|
|
lsp_regenerate_schedule(area, IS_LEVEL_1 | IS_LEVEL_2, 1);
|
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:26 +02:00
|
|
|
void isis_area_dynhostname_set(struct isis_area *area, bool dynhostname)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
if (area->dynhostname != dynhostname)
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
2016-07-28 17:23:26 +02:00
|
|
|
area->dynhostname = dynhostname;
|
|
|
|
lsp_regenerate_schedule(area, IS_LEVEL_1 | IS_LEVEL_2, 0);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:30 +02:00
|
|
|
void
|
|
|
|
isis_area_max_lsp_lifetime_set(struct isis_area *area, int level,
|
|
|
|
uint16_t max_lsp_lifetime)
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
2016-07-28 17:23:30 +02:00
|
|
|
assert((level == IS_LEVEL_1) || (level == IS_LEVEL_2));
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:30 +02:00
|
|
|
if (area->max_lsp_lifetime[level-1] == max_lsp_lifetime)
|
|
|
|
return;
|
2012-03-24 16:35:20 +01:00
|
|
|
|
2016-07-28 17:23:30 +02:00
|
|
|
area->max_lsp_lifetime[level-1] = max_lsp_lifetime;
|
|
|
|
lsp_regenerate_schedule(area, level, 1);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
2016-07-28 17:23:30 +02:00
|
|
|
void
|
|
|
|
isis_area_lsp_refresh_set(struct isis_area *area, int level,
|
|
|
|
uint16_t lsp_refresh)
|
2012-03-24 16:35:20 +01:00
|
|
|
{
|
2016-07-28 17:23:30 +02:00
|
|
|
assert((level == IS_LEVEL_1) || (level == IS_LEVEL_2));
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:30 +02:00
|
|
|
if (area->lsp_refresh[level-1] == lsp_refresh)
|
|
|
|
return;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-07-28 17:23:30 +02:00
|
|
|
area->lsp_refresh[level-1] = lsp_refresh;
|
|
|
|
lsp_regenerate_schedule(area, level, 1);
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (log_adj_changes,
|
|
|
|
log_adj_changes_cmd,
|
|
|
|
"log-adjacency-changes",
|
|
|
|
"Log changes in adjacency state\n")
|
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
area = vty->index;
|
|
|
|
assert (area);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
area->log_adj_changes = 1;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (no_log_adj_changes,
|
|
|
|
no_log_adj_changes_cmd,
|
|
|
|
"no log-adjacency-changes",
|
|
|
|
"Stop logging changes in adjacency state\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
|
|
|
|
area = vty->index;
|
|
|
|
assert (area);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
area->log_adj_changes = 0;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
#ifdef TOPOLOGY_GENERATE
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (topology_generate_grid,
|
|
|
|
topology_generate_grid_cmd,
|
2016-09-23 15:47:20 +02:00
|
|
|
"topology generate grid (1-100) (1-100) (1-65000) [param] [param] [param]",
|
2012-03-24 16:35:20 +01:00
|
|
|
"Topology generation for IS-IS\n"
|
|
|
|
"Topology generation\n"
|
|
|
|
"Grid topology\n"
|
|
|
|
"X parameter of the grid\n"
|
|
|
|
"Y parameter of the grid\n"
|
|
|
|
"Random seed\n"
|
|
|
|
"Optional param 1\n"
|
|
|
|
"Optional param 2\n"
|
|
|
|
"Optional param 3\n"
|
|
|
|
"Topology\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
|
|
|
|
area = vty->index;
|
|
|
|
assert (area);
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
if (!spgrid_check_params (vty, argc, argv))
|
|
|
|
{
|
|
|
|
if (area->topology)
|
|
|
|
list_delete (area->topology);
|
|
|
|
area->topology = list_new ();
|
|
|
|
memcpy (area->top_params, vty->buf, 200);
|
|
|
|
gen_spgrid_topology (vty, area->topology);
|
|
|
|
remove_topology_lsps (area);
|
|
|
|
generate_topology_lsps (area);
|
|
|
|
/* Regenerate L1 LSP to get two way connection to the generated
|
|
|
|
* topology. */
|
|
|
|
lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
|
|
|
|
}
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (show_isis_generated_topology,
|
|
|
|
show_isis_generated_topology_cmd,
|
|
|
|
"show isis generated-topologies",
|
|
|
|
SHOW_STR
|
|
|
|
"ISIS network information\n"
|
|
|
|
"Show generated topologies\n")
|
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
struct listnode *node;
|
|
|
|
struct listnode *node2;
|
|
|
|
struct arc *arc;
|
|
|
|
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if (!area->topology)
|
|
|
|
continue;
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, "Topology for isis area: %s%s", area->area_tag,
|
|
|
|
VTY_NEWLINE);
|
|
|
|
vty_out (vty, "From node To node Distance%s", VTY_NEWLINE);
|
|
|
|
|
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->topology, node2, arc))
|
|
|
|
vty_out (vty, "%9ld %11ld %12ld%s", arc->from_node, arc->to_node,
|
|
|
|
arc->distance, VTY_NEWLINE);
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Base IS for topology generation. */
|
|
|
|
DEFUN (topology_baseis,
|
|
|
|
topology_baseis_cmd,
|
|
|
|
"topology base-is WORD",
|
|
|
|
"Topology generation for IS-IS\n"
|
|
|
|
"A Network IS Base for this topology\n"
|
|
|
|
"XXXX.XXXX.XXXX Network entity title (NET)\n")
|
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
u_char buff[ISIS_SYS_ID_LEN];
|
|
|
|
|
|
|
|
area = vty->index;
|
|
|
|
assert (area);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2016-09-23 03:07:05 +02:00
|
|
|
if (sysid2buff (buff, argv[2]->arg))
|
|
|
|
sysid2buff (area->topology_baseis, argv[2]->arg);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2016-09-23 05:55:26 +02:00
|
|
|
/*
|
|
|
|
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
|
|
|
|
* "no topology base-is",
|
|
|
|
* NO_STR
|
|
|
|
* "Topology generation for IS-IS\n"
|
|
|
|
* "A Network IS Base for this topology\n"
|
|
|
|
*
|
|
|
|
*/
|
2012-03-24 16:35:20 +01:00
|
|
|
DEFUN (no_topology_baseis,
|
|
|
|
no_topology_baseis_cmd,
|
|
|
|
"no topology base-is WORD",
|
2003-12-23 09:09:43 +01:00
|
|
|
NO_STR
|
2012-03-24 16:35:20 +01:00
|
|
|
"Topology generation for IS-IS\n"
|
|
|
|
"A Network IS Base for this topology\n"
|
|
|
|
"XXXX.XXXX.XXXX Network entity title (NET)\n")
|
2003-12-23 09:09:43 +01:00
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
|
|
|
|
area = vty->index;
|
|
|
|
assert (area);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
|
2003-12-23 09:09:43 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
|
|
|
|
DEFUN (topology_basedynh,
|
|
|
|
topology_basedynh_cmd,
|
|
|
|
"topology base-dynh WORD",
|
|
|
|
"Topology generation for IS-IS\n"
|
|
|
|
"Dynamic hostname base for this topology\n"
|
|
|
|
"Dynamic hostname base\n")
|
|
|
|
{
|
|
|
|
struct isis_area *area;
|
|
|
|
|
|
|
|
area = vty->index;
|
|
|
|
assert (area);
|
|
|
|
|
|
|
|
/* I hope that it's enough. */
|
2016-09-23 03:07:05 +02:00
|
|
|
area->topology_basedynh = strndup (argv[2]->arg, 16);
|
2012-03-24 16:35:20 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* TOPOLOGY_GENERATE */
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
/* IS-IS configuration write function */
|
|
|
|
int
|
|
|
|
isis_config_write (struct vty *vty)
|
|
|
|
{
|
|
|
|
int write = 0;
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
if (isis != NULL)
|
|
|
|
{
|
|
|
|
struct isis_area *area;
|
2005-09-28 20:45:54 +02:00
|
|
|
struct listnode *node, *node2;
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
/* ISIS - Area name */
|
|
|
|
vty_out (vty, "router isis %s%s", area->area_tag, VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
/* ISIS - Net */
|
|
|
|
if (listcount (area->area_addrs) > 0)
|
|
|
|
{
|
|
|
|
struct area_addr *area_addr;
|
2005-09-28 20:45:54 +02:00
|
|
|
for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node2, area_addr))
|
|
|
|
{
|
|
|
|
vty_out (vty, " net %s%s",
|
|
|
|
isonet_print (area_addr->area_addr,
|
|
|
|
area_addr->addr_len + ISIS_SYS_ID_LEN +
|
|
|
|
1), VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2005-09-28 20:45:54 +02:00
|
|
|
/* ISIS - Dynamic hostname - Defaults to true so only display if
|
|
|
|
* false. */
|
2004-09-10 22:48:21 +02:00
|
|
|
if (!area->dynhostname)
|
|
|
|
{
|
|
|
|
vty_out (vty, " no hostname dynamic%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2012-03-28 08:48:05 +02:00
|
|
|
/* ISIS - Metric-Style - when true displays wide */
|
|
|
|
if (area->newmetric)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-28 08:48:05 +02:00
|
|
|
if (!area->oldmetric)
|
|
|
|
vty_out (vty, " metric-style wide%s", VTY_NEWLINE);
|
2005-09-26 18:49:07 +02:00
|
|
|
else
|
|
|
|
vty_out (vty, " metric-style transition%s", VTY_NEWLINE);
|
2004-09-10 22:48:21 +02:00
|
|
|
write++;
|
|
|
|
}
|
2012-11-27 02:10:28 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
vty_out (vty, " metric-style narrow%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
/* ISIS - overload-bit */
|
|
|
|
if (area->overload_bit)
|
|
|
|
{
|
|
|
|
vty_out (vty, " set-overload-bit%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
/* ISIS - Area is-type (level-1-2 is default) */
|
|
|
|
if (area->is_type == IS_LEVEL_1)
|
|
|
|
{
|
|
|
|
vty_out (vty, " is-type level-1%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
else if (area->is_type == IS_LEVEL_2)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " is-type level-2-only%s", VTY_NEWLINE);
|
|
|
|
write++;
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2015-11-12 14:24:22 +01:00
|
|
|
write += isis_redist_config_write(vty, area, AF_INET);
|
|
|
|
write += isis_redist_config_write(vty, area, AF_INET6);
|
2004-09-10 22:48:21 +02:00
|
|
|
/* ISIS - Lsp generation interval */
|
|
|
|
if (area->lsp_gen_interval[0] == area->lsp_gen_interval[1])
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->lsp_gen_interval[0] != DEFAULT_MIN_LSP_GEN_INTERVAL)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
vty_out (vty, " lsp-gen-interval %d%s",
|
|
|
|
area->lsp_gen_interval[0], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->lsp_gen_interval[0] != DEFAULT_MIN_LSP_GEN_INTERVAL)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
vty_out (vty, " lsp-gen-interval level-1 %d%s",
|
|
|
|
area->lsp_gen_interval[0], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->lsp_gen_interval[1] != DEFAULT_MIN_LSP_GEN_INTERVAL)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
|
|
|
vty_out (vty, " lsp-gen-interval level-2 %d%s",
|
|
|
|
area->lsp_gen_interval[1], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* ISIS - LSP lifetime */
|
|
|
|
if (area->max_lsp_lifetime[0] == area->max_lsp_lifetime[1])
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->max_lsp_lifetime[0] != DEFAULT_LSP_LIFETIME)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " max-lsp-lifetime %u%s", area->max_lsp_lifetime[0],
|
2004-09-10 22:48:21 +02:00
|
|
|
VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->max_lsp_lifetime[0] != DEFAULT_LSP_LIFETIME)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " max-lsp-lifetime level-1 %u%s",
|
2004-09-10 22:48:21 +02:00
|
|
|
area->max_lsp_lifetime[0], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->max_lsp_lifetime[1] != DEFAULT_LSP_LIFETIME)
|
2004-09-10 22:48:21 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out (vty, " max-lsp-lifetime level-2 %u%s",
|
2004-09-10 22:48:21 +02:00
|
|
|
area->max_lsp_lifetime[1], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
2012-03-24 16:35:20 +01:00
|
|
|
/* ISIS - LSP refresh interval */
|
|
|
|
if (area->lsp_refresh[0] == area->lsp_refresh[1])
|
|
|
|
{
|
|
|
|
if (area->lsp_refresh[0] != DEFAULT_MAX_LSP_GEN_INTERVAL)
|
|
|
|
{
|
|
|
|
vty_out (vty, " lsp-refresh-interval %u%s", area->lsp_refresh[0],
|
|
|
|
VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (area->lsp_refresh[0] != DEFAULT_MAX_LSP_GEN_INTERVAL)
|
|
|
|
{
|
|
|
|
vty_out (vty, " lsp-refresh-interval level-1 %u%s",
|
|
|
|
area->lsp_refresh[0], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (area->lsp_refresh[1] != DEFAULT_MAX_LSP_GEN_INTERVAL)
|
|
|
|
{
|
|
|
|
vty_out (vty, " lsp-refresh-interval level-2 %u%s",
|
|
|
|
area->lsp_refresh[1], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
2015-11-10 18:43:31 +01:00
|
|
|
if (area->lsp_mtu != DEFAULT_LSP_MTU)
|
|
|
|
{
|
|
|
|
vty_out(vty, " lsp-mtu %u%s", area->lsp_mtu, VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
|
2005-10-01 08:03:04 +02:00
|
|
|
/* Minimum SPF interval. */
|
|
|
|
if (area->min_spf_interval[0] == area->min_spf_interval[1])
|
|
|
|
{
|
|
|
|
if (area->min_spf_interval[0] != MINIMUM_SPF_INTERVAL)
|
|
|
|
{
|
|
|
|
vty_out (vty, " spf-interval %d%s",
|
|
|
|
area->min_spf_interval[0], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (area->min_spf_interval[0] != MINIMUM_SPF_INTERVAL)
|
|
|
|
{
|
|
|
|
vty_out (vty, " spf-interval level-1 %d%s",
|
|
|
|
area->min_spf_interval[0], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (area->min_spf_interval[1] != MINIMUM_SPF_INTERVAL)
|
|
|
|
{
|
|
|
|
vty_out (vty, " spf-interval level-2 %d%s",
|
|
|
|
area->min_spf_interval[1], VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
}
|
2004-09-15 18:21:59 +02:00
|
|
|
/* Authentication passwords. */
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->area_passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5)
|
2004-09-15 18:21:59 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out(vty, " area-password md5 %s", area->area_passwd.passwd);
|
2005-01-01 11:29:51 +01:00
|
|
|
if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND))
|
|
|
|
{
|
|
|
|
vty_out(vty, " authenticate snp ");
|
|
|
|
if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV))
|
|
|
|
vty_out(vty, "validate");
|
|
|
|
else
|
|
|
|
vty_out(vty, "send-only");
|
|
|
|
}
|
|
|
|
vty_out(vty, "%s", VTY_NEWLINE);
|
2004-09-15 18:21:59 +02:00
|
|
|
write++;
|
2012-03-24 16:35:20 +01:00
|
|
|
}
|
|
|
|
else if (area->area_passwd.type == ISIS_PASSWD_TYPE_CLEARTXT)
|
|
|
|
{
|
|
|
|
vty_out(vty, " area-password clear %s", area->area_passwd.passwd);
|
|
|
|
if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND))
|
|
|
|
{
|
|
|
|
vty_out(vty, " authenticate snp ");
|
|
|
|
if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV))
|
|
|
|
vty_out(vty, "validate");
|
|
|
|
else
|
|
|
|
vty_out(vty, "send-only");
|
|
|
|
}
|
|
|
|
vty_out(vty, "%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
if (area->domain_passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5)
|
|
|
|
{
|
|
|
|
vty_out(vty, " domain-password md5 %s",
|
|
|
|
area->domain_passwd.passwd);
|
|
|
|
if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND))
|
|
|
|
{
|
|
|
|
vty_out(vty, " authenticate snp ");
|
|
|
|
if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV))
|
|
|
|
vty_out(vty, "validate");
|
|
|
|
else
|
|
|
|
vty_out(vty, "send-only");
|
|
|
|
}
|
|
|
|
vty_out(vty, "%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
else if (area->domain_passwd.type == ISIS_PASSWD_TYPE_CLEARTXT)
|
2004-09-15 18:21:59 +02:00
|
|
|
{
|
2012-03-24 16:35:20 +01:00
|
|
|
vty_out(vty, " domain-password clear %s",
|
|
|
|
area->domain_passwd.passwd);
|
2005-01-01 11:29:51 +01:00
|
|
|
if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND))
|
|
|
|
{
|
|
|
|
vty_out(vty, " authenticate snp ");
|
|
|
|
if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV))
|
|
|
|
vty_out(vty, "validate");
|
|
|
|
else
|
|
|
|
vty_out(vty, "send-only");
|
|
|
|
}
|
|
|
|
vty_out(vty, "%s", VTY_NEWLINE);
|
2004-09-15 18:21:59 +02:00
|
|
|
write++;
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
if (area->log_adj_changes)
|
|
|
|
{
|
|
|
|
vty_out (vty, " log-adjacency-changes%s", VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
|
2005-09-19 06:23:34 +02:00
|
|
|
#ifdef TOPOLOGY_GENERATE
|
2004-09-10 22:48:21 +02:00
|
|
|
if (memcmp (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS,
|
|
|
|
ISIS_SYS_ID_LEN))
|
|
|
|
{
|
2005-09-19 06:23:34 +02:00
|
|
|
vty_out (vty, " topology base-is %s%s",
|
2012-03-24 16:35:20 +01:00
|
|
|
sysid_print ((u_char *)area->topology_baseis), VTY_NEWLINE);
|
2004-09-10 22:48:21 +02:00
|
|
|
write++;
|
|
|
|
}
|
2005-09-19 06:23:34 +02:00
|
|
|
if (area->topology_basedynh)
|
|
|
|
{
|
|
|
|
vty_out (vty, " topology base-dynh %s%s",
|
|
|
|
area->topology_basedynh, VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
|
|
|
/* We save the whole command line here. */
|
|
|
|
if (strlen(area->top_params))
|
|
|
|
{
|
|
|
|
vty_out (vty, " %s%s", area->top_params, VTY_NEWLINE);
|
|
|
|
write++;
|
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
#endif /* TOPOLOGY_GENERATE */
|
2005-09-19 06:23:34 +02:00
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
}
|
2016-04-19 19:03:05 +02:00
|
|
|
isis_mpls_te_config_write_router(vty);
|
2003-12-23 09:09:43 +01:00
|
|
|
}
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
return write;
|
|
|
|
}
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
struct cmd_node isis_node = {
|
2003-12-23 09:09:43 +01:00
|
|
|
ISIS_NODE,
|
2003-12-23 12:51:08 +01:00
|
|
|
"%s(config-router)# ",
|
2003-12-23 09:09:43 +01:00
|
|
|
1
|
|
|
|
};
|
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
void
|
2003-12-23 09:09:43 +01:00
|
|
|
isis_init ()
|
|
|
|
{
|
|
|
|
/* Install IS-IS top node */
|
|
|
|
install_node (&isis_node, isis_config_write);
|
2004-09-10 22:48:21 +02:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (VIEW_NODE, &show_isis_summary_cmd);
|
|
|
|
|
|
|
|
install_element (VIEW_NODE, &show_isis_interface_cmd);
|
|
|
|
install_element (VIEW_NODE, &show_isis_interface_detail_cmd);
|
|
|
|
install_element (VIEW_NODE, &show_isis_interface_arg_cmd);
|
|
|
|
|
|
|
|
install_element (VIEW_NODE, &show_isis_neighbor_cmd);
|
|
|
|
install_element (VIEW_NODE, &show_isis_neighbor_detail_cmd);
|
|
|
|
install_element (VIEW_NODE, &show_isis_neighbor_arg_cmd);
|
|
|
|
install_element (VIEW_NODE, &clear_isis_neighbor_cmd);
|
|
|
|
install_element (VIEW_NODE, &clear_isis_neighbor_arg_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
install_element (VIEW_NODE, &show_hostname_cmd);
|
|
|
|
install_element (VIEW_NODE, &show_database_cmd);
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (VIEW_NODE, &show_database_arg_cmd);
|
|
|
|
install_element (VIEW_NODE, &show_database_arg_detail_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
install_element (VIEW_NODE, &show_database_detail_cmd);
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (VIEW_NODE, &show_database_detail_arg_cmd);
|
|
|
|
|
|
|
|
install_element (ENABLE_NODE, &show_isis_summary_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (ENABLE_NODE, &show_isis_interface_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_isis_interface_detail_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_isis_interface_arg_cmd);
|
|
|
|
|
|
|
|
install_element (ENABLE_NODE, &show_isis_neighbor_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_isis_neighbor_detail_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_isis_neighbor_arg_cmd);
|
|
|
|
install_element (ENABLE_NODE, &clear_isis_neighbor_cmd);
|
|
|
|
install_element (ENABLE_NODE, &clear_isis_neighbor_arg_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
|
|
|
install_element (ENABLE_NODE, &show_hostname_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_database_cmd);
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (ENABLE_NODE, &show_database_arg_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_database_arg_detail_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
install_element (ENABLE_NODE, &show_database_detail_cmd);
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (ENABLE_NODE, &show_database_detail_arg_cmd);
|
2016-04-19 19:03:05 +02:00
|
|
|
install_element (ENABLE_NODE, &show_debugging_isis_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2004-09-10 22:48:21 +02:00
|
|
|
install_node (&debug_node, config_write_debug);
|
2003-12-23 09:56:18 +01:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
install_element (ENABLE_NODE, &debug_isis_adj_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_adj_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_csum_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_csum_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_lupd_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_lupd_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_err_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_err_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_snp_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_snp_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_upd_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_upd_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_spfevents_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_spfevents_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_spfstats_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_spfstats_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_spftrigg_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_spftrigg_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_rtevents_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_rtevents_cmd);
|
|
|
|
install_element (ENABLE_NODE, &debug_isis_events_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_events_cmd);
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (ENABLE_NODE, &debug_isis_packet_dump_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_packet_dump_cmd);
|
2015-11-12 14:21:47 +01:00
|
|
|
install_element (ENABLE_NODE, &debug_isis_lsp_gen_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_lsp_gen_cmd);
|
2015-11-10 18:43:34 +01:00
|
|
|
install_element (ENABLE_NODE, &debug_isis_lsp_sched_cmd);
|
|
|
|
install_element (ENABLE_NODE, &no_debug_isis_lsp_sched_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
|
2003-12-23 09:56:18 +01:00
|
|
|
install_element (CONFIG_NODE, &debug_isis_adj_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_adj_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_csum_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_csum_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_lupd_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_lupd_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_err_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_err_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_snp_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_snp_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_upd_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_upd_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_spfevents_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_spfevents_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_spfstats_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_spfstats_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_spftrigg_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_spftrigg_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_rtevents_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_rtevents_cmd);
|
|
|
|
install_element (CONFIG_NODE, &debug_isis_events_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_events_cmd);
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (CONFIG_NODE, &debug_isis_packet_dump_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_packet_dump_cmd);
|
2015-11-12 14:21:47 +01:00
|
|
|
install_element (CONFIG_NODE, &debug_isis_lsp_gen_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_lsp_gen_cmd);
|
2015-11-10 18:43:34 +01:00
|
|
|
install_element (CONFIG_NODE, &debug_isis_lsp_sched_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_debug_isis_lsp_sched_cmd);
|
2003-12-23 09:56:18 +01:00
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
install_element (CONFIG_NODE, &router_isis_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_router_isis_cmd);
|
|
|
|
|
|
|
|
install_default (ISIS_NODE);
|
|
|
|
|
|
|
|
install_element (ISIS_NODE, &net_cmd);
|
|
|
|
install_element (ISIS_NODE, &no_net_cmd);
|
|
|
|
|
2012-03-24 16:35:20 +01:00
|
|
|
install_element (ISIS_NODE, &log_adj_changes_cmd);
|
|
|
|
install_element (ISIS_NODE, &no_log_adj_changes_cmd);
|
|
|
|
|
2003-12-23 09:09:43 +01:00
|
|
|
#ifdef TOPOLOGY_GENERATE
|
|
|
|
install_element (ISIS_NODE, &topology_generate_grid_cmd);
|
|
|
|
install_element (ISIS_NODE, &topology_baseis_cmd);
|
2005-09-19 06:23:34 +02:00
|
|
|
install_element (ISIS_NODE, &topology_basedynh_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
install_element (ISIS_NODE, &no_topology_baseis_cmd);
|
2005-04-02 21:03:39 +02:00
|
|
|
install_element (VIEW_NODE, &show_isis_generated_topology_cmd);
|
|
|
|
install_element (ENABLE_NODE, &show_isis_generated_topology_cmd);
|
2003-12-23 09:09:43 +01:00
|
|
|
#endif /* TOPOLOGY_GENERATE */
|
|
|
|
}
|