Annotation of embedaddon/quagga/isisd/isisd.c, revision 1.1
1.1 ! misho 1: /*
! 2: * IS-IS Rout(e)ing protocol - isisd.c
! 3: *
! 4: * Copyright (C) 2001,2002 Sampo Saaristo
! 5: * Tampere University of Technology
! 6: * Institute of Communications Engineering
! 7: *
! 8: * This program is free software; you can redistribute it and/or modify it
! 9: * under the terms of the GNU General Public Licenseas published by the Free
! 10: * Software Foundation; either version 2 of the License, or (at your option)
! 11: * any later version.
! 12: *
! 13: * This program is distributed in the hope that it will be useful,but WITHOUT
! 14: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
! 15: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
! 16: * more details.
! 17:
! 18: * You should have received a copy of the GNU General Public License along
! 19: * with this program; if not, write to the Free Software Foundation, Inc.,
! 20: * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
! 21: */
! 22:
! 23: #include <zebra.h>
! 24:
! 25: #include "thread.h"
! 26: #include "vty.h"
! 27: #include "command.h"
! 28: #include "log.h"
! 29: #include "memory.h"
! 30: #include "linklist.h"
! 31: #include "if.h"
! 32: #include "hash.h"
! 33: #include "stream.h"
! 34: #include "prefix.h"
! 35: #include "table.h"
! 36:
! 37: #include "isisd/dict.h"
! 38: #include "isisd/include-netbsd/iso.h"
! 39: #include "isisd/isis_constants.h"
! 40: #include "isisd/isis_common.h"
! 41: #include "isisd/isis_circuit.h"
! 42: #include "isisd/isis_flags.h"
! 43: #include "isisd/isisd.h"
! 44: #include "isisd/isis_dynhn.h"
! 45: #include "isisd/isis_adjacency.h"
! 46: #include "isisd/isis_pdu.h"
! 47: #include "isisd/isis_misc.h"
! 48: #include "isisd/isis_constants.h"
! 49: #include "isisd/isis_tlv.h"
! 50: #include "isisd/isis_lsp.h"
! 51: #include "isisd/isis_spf.h"
! 52: #include "isisd/isis_route.h"
! 53: #include "isisd/isis_zebra.h"
! 54: #include "isisd/isis_events.h"
! 55: #include "isisd/isis_csm.h"
! 56:
! 57: #ifdef TOPOLOGY_GENERATE
! 58: #include "spgrid.h"
! 59: u_char DEFAULT_TOPOLOGY_BASEIS[6] = { 0xFE, 0xED, 0xFE, 0xED, 0x00, 0x00 };
! 60: #endif /* TOPOLOGY_GENERATE */
! 61:
! 62: struct isis *isis = NULL;
! 63: extern struct thread_master *master;
! 64:
! 65: /*
! 66: * Prototypes.
! 67: */
! 68: void isis_new(unsigned long);
! 69: struct isis_area *isis_area_create(void);
! 70: int isis_area_get(struct vty *, const char *);
! 71: int isis_area_destroy(struct vty *, const char *);
! 72: int area_net_title(struct vty *, const u_char *);
! 73: int area_clear_net_title(struct vty *, const u_char *);
! 74: int show_clns_neigh(struct vty *, char);
! 75: void print_debug(struct vty *, int, int);
! 76: int isis_config_write(struct vty *);
! 77:
! 78:
! 79:
! 80: void
! 81: isis_new (unsigned long process_id)
! 82: {
! 83: isis = XCALLOC (MTYPE_ISIS, sizeof (struct isis));
! 84: /*
! 85: * Default values
! 86: */
! 87: isis->max_area_addrs = 3;
! 88:
! 89: isis->process_id = process_id;
! 90: isis->area_list = list_new ();
! 91: isis->init_circ_list = list_new ();
! 92: isis->uptime = time (NULL);
! 93: isis->nexthops = list_new ();
! 94: #ifdef HAVE_IPV6
! 95: isis->nexthops6 = list_new ();
! 96: #endif /* HAVE_IPV6 */
! 97: /*
! 98: * uncomment the next line for full debugs
! 99: */
! 100: /* isis->debugs = 0xFFFF; */
! 101: }
! 102:
! 103: struct isis_area *
! 104: isis_area_create ()
! 105: {
! 106: struct isis_area *area;
! 107:
! 108: area = XCALLOC (MTYPE_ISIS_AREA, sizeof (struct isis_area));
! 109:
! 110: /*
! 111: * The first instance is level-1-2 rest are level-1, unless otherwise
! 112: * configured
! 113: */
! 114: if (listcount (isis->area_list) > 0)
! 115: area->is_type = IS_LEVEL_1;
! 116: else
! 117: area->is_type = IS_LEVEL_1_AND_2;
! 118: /*
! 119: * intialize the databases
! 120: */
! 121: area->lspdb[0] = lsp_db_init ();
! 122: area->lspdb[1] = lsp_db_init ();
! 123:
! 124: spftree_area_init (area);
! 125: area->route_table[0] = route_table_init ();
! 126: area->route_table[1] = route_table_init ();
! 127: #ifdef HAVE_IPV6
! 128: area->route_table6[0] = route_table_init ();
! 129: area->route_table6[1] = route_table_init ();
! 130: #endif /* HAVE_IPV6 */
! 131: area->circuit_list = list_new ();
! 132: area->area_addrs = list_new ();
! 133: THREAD_TIMER_ON (master, area->t_tick, lsp_tick, area, 1);
! 134: flags_initialize (&area->flags);
! 135: /*
! 136: * Default values
! 137: */
! 138: area->max_lsp_lifetime[0] = MAX_AGE; /* 1200 */
! 139: area->max_lsp_lifetime[1] = MAX_AGE; /* 1200 */
! 140: area->lsp_gen_interval[0] = LSP_GEN_INTERVAL_DEFAULT;
! 141: area->lsp_gen_interval[1] = LSP_GEN_INTERVAL_DEFAULT;
! 142: area->lsp_refresh[0] = MAX_LSP_GEN_INTERVAL; /* 900 */
! 143: area->lsp_refresh[1] = MAX_LSP_GEN_INTERVAL; /* 900 */
! 144: area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
! 145: area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
! 146: area->dynhostname = 1;
! 147: area->oldmetric = 1;
! 148: area->lsp_frag_threshold = 90;
! 149: #ifdef TOPOLOGY_GENERATE
! 150: memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
! 151: #endif /* TOPOLOGY_GENERATE */
! 152:
! 153: /* FIXME: Think of a better way... */
! 154: area->min_bcast_mtu = 1497;
! 155:
! 156: return area;
! 157: }
! 158:
! 159: struct isis_area *
! 160: isis_area_lookup (const char *area_tag)
! 161: {
! 162: struct isis_area *area;
! 163: struct listnode *node;
! 164:
! 165: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
! 166: if ((area->area_tag == NULL && area_tag == NULL) ||
! 167: (area->area_tag && area_tag
! 168: && strcmp (area->area_tag, area_tag) == 0))
! 169: return area;
! 170:
! 171: return NULL;
! 172: }
! 173:
! 174: int
! 175: isis_area_get (struct vty *vty, const char *area_tag)
! 176: {
! 177: struct isis_area *area;
! 178:
! 179: area = isis_area_lookup (area_tag);
! 180:
! 181: if (area)
! 182: {
! 183: vty->node = ISIS_NODE;
! 184: vty->index = area;
! 185: return CMD_SUCCESS;
! 186: }
! 187:
! 188: area = isis_area_create ();
! 189: area->area_tag = strdup (area_tag);
! 190: listnode_add (isis->area_list, area);
! 191:
! 192: if (isis->debugs & DEBUG_EVENTS)
! 193: zlog_debug ("New IS-IS area instance %s", area->area_tag);
! 194:
! 195: vty->node = ISIS_NODE;
! 196: vty->index = area;
! 197:
! 198: return CMD_SUCCESS;
! 199: }
! 200:
! 201: int
! 202: isis_area_destroy (struct vty *vty, const char *area_tag)
! 203: {
! 204: struct isis_area *area;
! 205: struct listnode *node, *nnode;
! 206: struct isis_circuit *circuit;
! 207:
! 208: area = isis_area_lookup (area_tag);
! 209:
! 210: if (area == NULL)
! 211: {
! 212: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
! 213: return CMD_WARNING;
! 214: }
! 215:
! 216: if (area->circuit_list)
! 217: {
! 218: for (ALL_LIST_ELEMENTS (area->circuit_list, node, nnode, circuit))
! 219: {
! 220: /* The fact that it's in circuit_list means that it was configured */
! 221: isis_csm_state_change (ISIS_DISABLE, circuit, area);
! 222: isis_circuit_down (circuit);
! 223: isis_circuit_deconfigure (circuit, area);
! 224: }
! 225:
! 226: list_delete (area->circuit_list);
! 227: }
! 228: listnode_delete (isis->area_list, area);
! 229:
! 230: THREAD_TIMER_OFF (area->t_tick);
! 231: if (area->t_remove_aged)
! 232: thread_cancel (area->t_remove_aged);
! 233: THREAD_TIMER_OFF (area->t_lsp_refresh[0]);
! 234: THREAD_TIMER_OFF (area->t_lsp_refresh[1]);
! 235:
! 236: THREAD_TIMER_OFF (area->spftree[0]->t_spf);
! 237: THREAD_TIMER_OFF (area->spftree[1]->t_spf);
! 238:
! 239: THREAD_TIMER_OFF (area->t_lsp_l1_regenerate);
! 240: THREAD_TIMER_OFF (area->t_lsp_l2_regenerate);
! 241:
! 242: XFREE (MTYPE_ISIS_AREA, area);
! 243:
! 244: isis->sysid_set=0;
! 245:
! 246: return CMD_SUCCESS;
! 247: }
! 248:
! 249: int
! 250: area_net_title (struct vty *vty, const u_char *net_title)
! 251: {
! 252: struct isis_area *area;
! 253: struct area_addr *addr;
! 254: struct area_addr *addrp;
! 255: struct listnode *node;
! 256:
! 257: u_char buff[255];
! 258: area = vty->index;
! 259:
! 260: if (!area)
! 261: {
! 262: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
! 263: return CMD_WARNING;
! 264: }
! 265:
! 266: /* We check that we are not over the maximal number of addresses */
! 267: if (listcount (area->area_addrs) >= isis->max_area_addrs)
! 268: {
! 269: vty_out (vty, "Maximum of area addresses (%d) already reached %s",
! 270: isis->max_area_addrs, VTY_NEWLINE);
! 271: return CMD_WARNING;
! 272: }
! 273:
! 274: addr = XMALLOC (MTYPE_ISIS_AREA_ADDR, sizeof (struct area_addr));
! 275: addr->addr_len = dotformat2buff (buff, net_title);
! 276: memcpy (addr->area_addr, buff, addr->addr_len);
! 277: #ifdef EXTREME_DEBUG
! 278: zlog_debug ("added area address %s for area %s (address length %d)",
! 279: net_title, area->area_tag, addr->addr_len);
! 280: #endif /* EXTREME_DEBUG */
! 281: if (addr->addr_len < 8 || addr->addr_len > 20)
! 282: {
! 283: zlog_warn ("area address must be at least 8..20 octets long (%d)",
! 284: addr->addr_len);
! 285: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
! 286: return CMD_WARNING;
! 287: }
! 288:
! 289: if (isis->sysid_set == 0)
! 290: {
! 291: /*
! 292: * First area address - get the SystemID for this router
! 293: */
! 294: memcpy (isis->sysid, GETSYSID (addr, ISIS_SYS_ID_LEN), ISIS_SYS_ID_LEN);
! 295: isis->sysid_set = 1;
! 296: if (isis->debugs & DEBUG_EVENTS)
! 297: zlog_debug ("Router has SystemID %s", sysid_print (isis->sysid));
! 298: }
! 299: else
! 300: {
! 301: /*
! 302: * Check that the SystemID portions match
! 303: */
! 304: if (memcmp (isis->sysid, GETSYSID (addr, ISIS_SYS_ID_LEN),
! 305: ISIS_SYS_ID_LEN))
! 306: {
! 307: vty_out (vty,
! 308: "System ID must not change when defining additional area"
! 309: " addresses%s", VTY_NEWLINE);
! 310: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
! 311: return CMD_WARNING;
! 312: }
! 313:
! 314: /* now we see that we don't already have this address */
! 315: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node, addrp))
! 316: {
! 317: if ((addrp->addr_len + ISIS_SYS_ID_LEN + 1) != (addr->addr_len))
! 318: continue;
! 319: if (!memcmp (addrp->area_addr, addr->area_addr, addr->addr_len))
! 320: {
! 321: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
! 322: return CMD_SUCCESS; /* silent fail */
! 323: }
! 324: }
! 325:
! 326: }
! 327: /*
! 328: * Forget the systemID part of the address
! 329: */
! 330: addr->addr_len -= (ISIS_SYS_ID_LEN + 1);
! 331: listnode_add (area->area_addrs, addr);
! 332:
! 333: /* only now we can safely generate our LSPs for this area */
! 334: if (listcount (area->area_addrs) > 0)
! 335: {
! 336: lsp_l1_generate (area);
! 337: lsp_l2_generate (area);
! 338: }
! 339:
! 340: return CMD_SUCCESS;
! 341: }
! 342:
! 343: int
! 344: area_clear_net_title (struct vty *vty, const u_char *net_title)
! 345: {
! 346: struct isis_area *area;
! 347: struct area_addr addr, *addrp = NULL;
! 348: struct listnode *node;
! 349: u_char buff[255];
! 350:
! 351: area = vty->index;
! 352: if (!area)
! 353: {
! 354: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
! 355: return CMD_WARNING;
! 356: }
! 357:
! 358: addr.addr_len = dotformat2buff (buff, net_title);
! 359: if (addr.addr_len < 8 || addr.addr_len > 20)
! 360: {
! 361: vty_out (vty, "Unsupported area address length %d, should be 8...20 %s",
! 362: addr.addr_len, VTY_NEWLINE);
! 363: return CMD_WARNING;
! 364: }
! 365:
! 366: memcpy (addr.area_addr, buff, (int) addr.addr_len);
! 367:
! 368: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node, addrp))
! 369: if (addrp->addr_len == addr.addr_len &&
! 370: !memcmp (addrp->area_addr, addr.area_addr, addr.addr_len))
! 371: break;
! 372:
! 373: if (!addrp)
! 374: {
! 375: vty_out (vty, "No area address %s for area %s %s", net_title,
! 376: area->area_tag, VTY_NEWLINE);
! 377: return CMD_WARNING;
! 378: }
! 379:
! 380: listnode_delete (area->area_addrs, addrp);
! 381:
! 382: return CMD_SUCCESS;
! 383: }
! 384:
! 385: /*
! 386: * 'show clns neighbors' command
! 387: */
! 388:
! 389: int
! 390: show_clns_neigh (struct vty *vty, char detail)
! 391: {
! 392: struct listnode *anode, *cnode;
! 393: struct isis_area *area;
! 394: struct isis_circuit *circuit;
! 395: struct list *db;
! 396: int i;
! 397:
! 398: if (!isis)
! 399: {
! 400: vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
! 401: return CMD_SUCCESS;
! 402: }
! 403:
! 404: for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
! 405: {
! 406: vty_out (vty, "Area %s:%s", area->area_tag, VTY_NEWLINE);
! 407:
! 408: if (detail == ISIS_UI_LEVEL_BRIEF)
! 409: vty_out (vty, " System Id Interface L State "
! 410: "Holdtime SNPA%s", VTY_NEWLINE);
! 411:
! 412: for (ALL_LIST_ELEMENTS_RO (area->circuit_list, cnode, circuit))
! 413: {
! 414: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
! 415: {
! 416: for (i = 0; i < 2; i++)
! 417: {
! 418: db = circuit->u.bc.adjdb[i];
! 419: if (db && db->count)
! 420: {
! 421: if (detail == ISIS_UI_LEVEL_BRIEF)
! 422: isis_adjdb_iterate (db,
! 423: (void (*)
! 424: (struct isis_adjacency *,
! 425: void *)) isis_adj_print_vty,
! 426: vty);
! 427: if (detail == ISIS_UI_LEVEL_DETAIL)
! 428: isis_adjdb_iterate (db,
! 429: (void (*)
! 430: (struct isis_adjacency *,
! 431: void *))
! 432: isis_adj_print_vty_detail, vty);
! 433: if (detail == ISIS_UI_LEVEL_EXTENSIVE)
! 434: isis_adjdb_iterate (db,
! 435: (void (*)
! 436: (struct isis_adjacency *,
! 437: void *))
! 438: isis_adj_print_vty_extensive,
! 439: vty);
! 440: }
! 441: }
! 442: }
! 443: else if (circuit->circ_type == CIRCUIT_T_P2P &&
! 444: circuit->u.p2p.neighbor)
! 445: {
! 446: if (detail == ISIS_UI_LEVEL_BRIEF)
! 447: isis_adj_p2p_print_vty (circuit->u.p2p.neighbor, vty);
! 448: if (detail == ISIS_UI_LEVEL_DETAIL)
! 449: isis_adj_p2p_print_vty_detail (circuit->u.p2p.neighbor, vty);
! 450: if (detail == ISIS_UI_LEVEL_EXTENSIVE)
! 451: isis_adj_p2p_print_vty_extensive (circuit->u.p2p.neighbor,
! 452: vty);
! 453: }
! 454: }
! 455: }
! 456:
! 457: return CMD_SUCCESS;
! 458: }
! 459:
! 460: DEFUN (show_clns_neighbors,
! 461: show_clns_neighbors_cmd,
! 462: "show clns neighbors",
! 463: SHOW_STR
! 464: "clns network information\n"
! 465: "CLNS neighbor adjacencies\n")
! 466: {
! 467: return show_clns_neigh (vty, ISIS_UI_LEVEL_BRIEF);
! 468: }
! 469:
! 470: ALIAS (show_clns_neighbors,
! 471: show_isis_neighbors_cmd,
! 472: "show isis neighbors",
! 473: SHOW_STR
! 474: "IS-IS network information\n"
! 475: "IS-IS neighbor adjacencies\n")
! 476:
! 477: DEFUN (show_clns_neighbors_detail,
! 478: show_clns_neighbors_detail_cmd,
! 479: "show clns neighbors detail",
! 480: SHOW_STR
! 481: "clns network information\n"
! 482: "CLNS neighbor adjacencies\n"
! 483: "show detailed information\n")
! 484: {
! 485: return show_clns_neigh (vty, ISIS_UI_LEVEL_DETAIL);
! 486: }
! 487:
! 488: ALIAS (show_clns_neighbors_detail,
! 489: show_isis_neighbors_detail_cmd,
! 490: "show isis neighbors detail",
! 491: SHOW_STR
! 492: "IS-IS network information\n"
! 493: "IS-IS neighbor adjacencies\n"
! 494: "show detailed information\n")
! 495: /*
! 496: * 'isis debug', 'show debugging'
! 497: */
! 498: void
! 499: print_debug (struct vty *vty, int flags, int onoff)
! 500: {
! 501: char onoffs[4];
! 502: if (onoff)
! 503: strcpy (onoffs, "on");
! 504: else
! 505: strcpy (onoffs, "off");
! 506:
! 507: if (flags & DEBUG_ADJ_PACKETS)
! 508: vty_out (vty, "IS-IS Adjacency related packets debugging is %s%s", onoffs,
! 509: VTY_NEWLINE);
! 510: if (flags & DEBUG_CHECKSUM_ERRORS)
! 511: vty_out (vty, "IS-IS checksum errors debugging is %s%s", onoffs,
! 512: VTY_NEWLINE);
! 513: if (flags & DEBUG_LOCAL_UPDATES)
! 514: vty_out (vty, "IS-IS local updates debugging is %s%s", onoffs,
! 515: VTY_NEWLINE);
! 516: if (flags & DEBUG_PROTOCOL_ERRORS)
! 517: vty_out (vty, "IS-IS protocol errors debugging is %s%s", onoffs,
! 518: VTY_NEWLINE);
! 519: if (flags & DEBUG_SNP_PACKETS)
! 520: vty_out (vty, "IS-IS CSNP/PSNP packets debugging is %s%s", onoffs,
! 521: VTY_NEWLINE);
! 522: if (flags & DEBUG_SPF_EVENTS)
! 523: vty_out (vty, "IS-IS SPF events debugging is %s%s", onoffs, VTY_NEWLINE);
! 524: if (flags & DEBUG_SPF_STATS)
! 525: vty_out (vty, "IS-IS SPF Timing and Statistics Data debugging is %s%s",
! 526: onoffs, VTY_NEWLINE);
! 527: if (flags & DEBUG_SPF_TRIGGERS)
! 528: vty_out (vty, "IS-IS SPF triggering events debugging is %s%s", onoffs,
! 529: VTY_NEWLINE);
! 530: if (flags & DEBUG_UPDATE_PACKETS)
! 531: vty_out (vty, "IS-IS Update related packet debugging is %s%s", onoffs,
! 532: VTY_NEWLINE);
! 533: if (flags & DEBUG_RTE_EVENTS)
! 534: vty_out (vty, "IS-IS Route related debuggin is %s%s", onoffs,
! 535: VTY_NEWLINE);
! 536: if (flags & DEBUG_EVENTS)
! 537: vty_out (vty, "IS-IS Event debugging is %s%s", onoffs, VTY_NEWLINE);
! 538:
! 539: }
! 540:
! 541: DEFUN (show_debugging,
! 542: show_debugging_cmd,
! 543: "show debugging",
! 544: SHOW_STR
! 545: "State of each debugging option\n")
! 546: {
! 547: vty_out (vty, "IS-IS:%s", VTY_NEWLINE);
! 548: print_debug (vty, isis->debugs, 1);
! 549: return CMD_SUCCESS;
! 550: }
! 551:
! 552: /* Debug node. */
! 553: static struct cmd_node debug_node = {
! 554: DEBUG_NODE,
! 555: "",
! 556: 1
! 557: };
! 558:
! 559: static int
! 560: config_write_debug (struct vty *vty)
! 561: {
! 562: int write = 0;
! 563: int flags = isis->debugs;
! 564:
! 565: if (flags & DEBUG_ADJ_PACKETS)
! 566: {
! 567: vty_out (vty, "debug isis adj-packets%s", VTY_NEWLINE);
! 568: write++;
! 569: }
! 570: if (flags & DEBUG_CHECKSUM_ERRORS)
! 571: {
! 572: vty_out (vty, "debug isis checksum-errors%s", VTY_NEWLINE);
! 573: write++;
! 574: }
! 575: if (flags & DEBUG_LOCAL_UPDATES)
! 576: {
! 577: vty_out (vty, "debug isis local-updates%s", VTY_NEWLINE);
! 578: write++;
! 579: }
! 580: if (flags & DEBUG_PROTOCOL_ERRORS)
! 581: {
! 582: vty_out (vty, "debug isis protocol-errors%s", VTY_NEWLINE);
! 583: write++;
! 584: }
! 585: if (flags & DEBUG_SNP_PACKETS)
! 586: {
! 587: vty_out (vty, "debug isis snp-packets%s", VTY_NEWLINE);
! 588: write++;
! 589: }
! 590: if (flags & DEBUG_SPF_EVENTS)
! 591: {
! 592: vty_out (vty, "debug isis spf-events%s", VTY_NEWLINE);
! 593: write++;
! 594: }
! 595: if (flags & DEBUG_SPF_STATS)
! 596: {
! 597: vty_out (vty, "debug isis spf-statistics%s", VTY_NEWLINE);
! 598: write++;
! 599: }
! 600: if (flags & DEBUG_SPF_TRIGGERS)
! 601: {
! 602: vty_out (vty, "debug isis spf-triggers%s", VTY_NEWLINE);
! 603: write++;
! 604: }
! 605: if (flags & DEBUG_UPDATE_PACKETS)
! 606: {
! 607: vty_out (vty, "debug isis update-packets%s", VTY_NEWLINE);
! 608: write++;
! 609: }
! 610: if (flags & DEBUG_RTE_EVENTS)
! 611: {
! 612: vty_out (vty, "debug isis route-events%s", VTY_NEWLINE);
! 613: write++;
! 614: }
! 615: if (flags & DEBUG_EVENTS)
! 616: {
! 617: vty_out (vty, "debug isis events%s", VTY_NEWLINE);
! 618: write++;
! 619: }
! 620:
! 621: return write;
! 622: }
! 623:
! 624: DEFUN (debug_isis_adj,
! 625: debug_isis_adj_cmd,
! 626: "debug isis adj-packets",
! 627: DEBUG_STR
! 628: "IS-IS information\n"
! 629: "IS-IS Adjacency related packets\n")
! 630: {
! 631: isis->debugs |= DEBUG_ADJ_PACKETS;
! 632: print_debug (vty, DEBUG_ADJ_PACKETS, 1);
! 633:
! 634: return CMD_SUCCESS;
! 635: }
! 636:
! 637: DEFUN (no_debug_isis_adj,
! 638: no_debug_isis_adj_cmd,
! 639: "no debug isis adj-packets",
! 640: UNDEBUG_STR
! 641: "IS-IS information\n"
! 642: "IS-IS Adjacency related packets\n")
! 643: {
! 644: isis->debugs &= ~DEBUG_ADJ_PACKETS;
! 645: print_debug (vty, DEBUG_ADJ_PACKETS, 0);
! 646:
! 647: return CMD_SUCCESS;
! 648: }
! 649:
! 650: DEFUN (debug_isis_csum,
! 651: debug_isis_csum_cmd,
! 652: "debug isis checksum-errors",
! 653: DEBUG_STR
! 654: "IS-IS information\n"
! 655: "IS-IS LSP checksum errors\n")
! 656: {
! 657: isis->debugs |= DEBUG_CHECKSUM_ERRORS;
! 658: print_debug (vty, DEBUG_CHECKSUM_ERRORS, 1);
! 659:
! 660: return CMD_SUCCESS;
! 661: }
! 662:
! 663: DEFUN (no_debug_isis_csum,
! 664: no_debug_isis_csum_cmd,
! 665: "no debug isis checksum-errors",
! 666: UNDEBUG_STR
! 667: "IS-IS information\n"
! 668: "IS-IS LSP checksum errors\n")
! 669: {
! 670: isis->debugs &= ~DEBUG_CHECKSUM_ERRORS;
! 671: print_debug (vty, DEBUG_CHECKSUM_ERRORS, 0);
! 672:
! 673: return CMD_SUCCESS;
! 674: }
! 675:
! 676: DEFUN (debug_isis_lupd,
! 677: debug_isis_lupd_cmd,
! 678: "debug isis local-updates",
! 679: DEBUG_STR
! 680: "IS-IS information\n"
! 681: "IS-IS local update packets\n")
! 682: {
! 683: isis->debugs |= DEBUG_LOCAL_UPDATES;
! 684: print_debug (vty, DEBUG_LOCAL_UPDATES, 1);
! 685:
! 686: return CMD_SUCCESS;
! 687: }
! 688:
! 689: DEFUN (no_debug_isis_lupd,
! 690: no_debug_isis_lupd_cmd,
! 691: "no debug isis local-updates",
! 692: UNDEBUG_STR
! 693: "IS-IS information\n"
! 694: "IS-IS local update packets\n")
! 695: {
! 696: isis->debugs &= ~DEBUG_LOCAL_UPDATES;
! 697: print_debug (vty, DEBUG_LOCAL_UPDATES, 0);
! 698:
! 699: return CMD_SUCCESS;
! 700: }
! 701:
! 702: DEFUN (debug_isis_err,
! 703: debug_isis_err_cmd,
! 704: "debug isis protocol-errors",
! 705: DEBUG_STR
! 706: "IS-IS information\n"
! 707: "IS-IS LSP protocol errors\n")
! 708: {
! 709: isis->debugs |= DEBUG_PROTOCOL_ERRORS;
! 710: print_debug (vty, DEBUG_PROTOCOL_ERRORS, 1);
! 711:
! 712: return CMD_SUCCESS;
! 713: }
! 714:
! 715: DEFUN (no_debug_isis_err,
! 716: no_debug_isis_err_cmd,
! 717: "no debug isis protocol-errors",
! 718: UNDEBUG_STR
! 719: "IS-IS information\n"
! 720: "IS-IS LSP protocol errors\n")
! 721: {
! 722: isis->debugs &= ~DEBUG_PROTOCOL_ERRORS;
! 723: print_debug (vty, DEBUG_PROTOCOL_ERRORS, 0);
! 724:
! 725: return CMD_SUCCESS;
! 726: }
! 727:
! 728: DEFUN (debug_isis_snp,
! 729: debug_isis_snp_cmd,
! 730: "debug isis snp-packets",
! 731: DEBUG_STR
! 732: "IS-IS information\n"
! 733: "IS-IS CSNP/PSNP packets\n")
! 734: {
! 735: isis->debugs |= DEBUG_SNP_PACKETS;
! 736: print_debug (vty, DEBUG_SNP_PACKETS, 1);
! 737:
! 738: return CMD_SUCCESS;
! 739: }
! 740:
! 741: DEFUN (no_debug_isis_snp,
! 742: no_debug_isis_snp_cmd,
! 743: "no debug isis snp-packets",
! 744: UNDEBUG_STR
! 745: "IS-IS information\n"
! 746: "IS-IS CSNP/PSNP packets\n")
! 747: {
! 748: isis->debugs &= ~DEBUG_SNP_PACKETS;
! 749: print_debug (vty, DEBUG_SNP_PACKETS, 0);
! 750:
! 751: return CMD_SUCCESS;
! 752: }
! 753:
! 754: DEFUN (debug_isis_upd,
! 755: debug_isis_upd_cmd,
! 756: "debug isis update-packets",
! 757: DEBUG_STR
! 758: "IS-IS information\n"
! 759: "IS-IS Update related packets\n")
! 760: {
! 761: isis->debugs |= DEBUG_UPDATE_PACKETS;
! 762: print_debug (vty, DEBUG_UPDATE_PACKETS, 1);
! 763:
! 764: return CMD_SUCCESS;
! 765: }
! 766:
! 767: DEFUN (no_debug_isis_upd,
! 768: no_debug_isis_upd_cmd,
! 769: "no debug isis update-packets",
! 770: UNDEBUG_STR
! 771: "IS-IS information\n"
! 772: "IS-IS Update related packets\n")
! 773: {
! 774: isis->debugs &= ~DEBUG_UPDATE_PACKETS;
! 775: print_debug (vty, DEBUG_UPDATE_PACKETS, 0);
! 776:
! 777: return CMD_SUCCESS;
! 778: }
! 779:
! 780: DEFUN (debug_isis_spfevents,
! 781: debug_isis_spfevents_cmd,
! 782: "debug isis spf-events",
! 783: DEBUG_STR
! 784: "IS-IS information\n"
! 785: "IS-IS Shortest Path First Events\n")
! 786: {
! 787: isis->debugs |= DEBUG_SPF_EVENTS;
! 788: print_debug (vty, DEBUG_SPF_EVENTS, 1);
! 789:
! 790: return CMD_SUCCESS;
! 791: }
! 792:
! 793: DEFUN (no_debug_isis_spfevents,
! 794: no_debug_isis_spfevents_cmd,
! 795: "no debug isis spf-events",
! 796: UNDEBUG_STR
! 797: "IS-IS information\n"
! 798: "IS-IS Shortest Path First Events\n")
! 799: {
! 800: isis->debugs &= ~DEBUG_SPF_EVENTS;
! 801: print_debug (vty, DEBUG_SPF_EVENTS, 0);
! 802:
! 803: return CMD_SUCCESS;
! 804: }
! 805:
! 806:
! 807: DEFUN (debug_isis_spfstats,
! 808: debug_isis_spfstats_cmd,
! 809: "debug isis spf-statistics ",
! 810: DEBUG_STR
! 811: "IS-IS information\n"
! 812: "IS-IS SPF Timing and Statistic Data\n")
! 813: {
! 814: isis->debugs |= DEBUG_SPF_STATS;
! 815: print_debug (vty, DEBUG_SPF_STATS, 1);
! 816:
! 817: return CMD_SUCCESS;
! 818: }
! 819:
! 820: DEFUN (no_debug_isis_spfstats,
! 821: no_debug_isis_spfstats_cmd,
! 822: "no debug isis spf-statistics",
! 823: UNDEBUG_STR
! 824: "IS-IS information\n"
! 825: "IS-IS SPF Timing and Statistic Data\n")
! 826: {
! 827: isis->debugs &= ~DEBUG_SPF_STATS;
! 828: print_debug (vty, DEBUG_SPF_STATS, 0);
! 829:
! 830: return CMD_SUCCESS;
! 831: }
! 832:
! 833: DEFUN (debug_isis_spftrigg,
! 834: debug_isis_spftrigg_cmd,
! 835: "debug isis spf-triggers",
! 836: DEBUG_STR
! 837: "IS-IS information\n"
! 838: "IS-IS SPF triggering events\n")
! 839: {
! 840: isis->debugs |= DEBUG_SPF_TRIGGERS;
! 841: print_debug (vty, DEBUG_SPF_TRIGGERS, 1);
! 842:
! 843: return CMD_SUCCESS;
! 844: }
! 845:
! 846: DEFUN (no_debug_isis_spftrigg,
! 847: no_debug_isis_spftrigg_cmd,
! 848: "no debug isis spf-triggers",
! 849: UNDEBUG_STR
! 850: "IS-IS information\n"
! 851: "IS-IS SPF triggering events\n")
! 852: {
! 853: isis->debugs &= ~DEBUG_SPF_TRIGGERS;
! 854: print_debug (vty, DEBUG_SPF_TRIGGERS, 0);
! 855:
! 856: return CMD_SUCCESS;
! 857: }
! 858:
! 859: DEFUN (debug_isis_rtevents,
! 860: debug_isis_rtevents_cmd,
! 861: "debug isis route-events",
! 862: DEBUG_STR
! 863: "IS-IS information\n"
! 864: "IS-IS Route related events\n")
! 865: {
! 866: isis->debugs |= DEBUG_RTE_EVENTS;
! 867: print_debug (vty, DEBUG_RTE_EVENTS, 1);
! 868:
! 869: return CMD_SUCCESS;
! 870: }
! 871:
! 872: DEFUN (no_debug_isis_rtevents,
! 873: no_debug_isis_rtevents_cmd,
! 874: "no debug isis route-events",
! 875: UNDEBUG_STR
! 876: "IS-IS information\n"
! 877: "IS-IS Route related events\n")
! 878: {
! 879: isis->debugs &= ~DEBUG_RTE_EVENTS;
! 880: print_debug (vty, DEBUG_RTE_EVENTS, 0);
! 881:
! 882: return CMD_SUCCESS;
! 883: }
! 884:
! 885: DEFUN (debug_isis_events,
! 886: debug_isis_events_cmd,
! 887: "debug isis events",
! 888: DEBUG_STR
! 889: "IS-IS information\n"
! 890: "IS-IS Events\n")
! 891: {
! 892: isis->debugs |= DEBUG_EVENTS;
! 893: print_debug (vty, DEBUG_EVENTS, 1);
! 894:
! 895: return CMD_SUCCESS;
! 896: }
! 897:
! 898: DEFUN (no_debug_isis_events,
! 899: no_debug_isis_events_cmd,
! 900: "no debug isis events",
! 901: UNDEBUG_STR
! 902: "IS-IS information\n"
! 903: "IS-IS Events\n")
! 904: {
! 905: isis->debugs &= ~DEBUG_EVENTS;
! 906: print_debug (vty, DEBUG_EVENTS, 0);
! 907:
! 908: return CMD_SUCCESS;
! 909: }
! 910:
! 911: DEFUN (show_hostname,
! 912: show_hostname_cmd,
! 913: "show isis hostname",
! 914: SHOW_STR
! 915: "IS-IS information\n"
! 916: "IS-IS Dynamic hostname mapping\n")
! 917: {
! 918: dynhn_print_all (vty);
! 919:
! 920: return CMD_SUCCESS;
! 921: }
! 922:
! 923: DEFUN (show_database,
! 924: show_database_cmd,
! 925: "show isis database",
! 926: SHOW_STR "IS-IS information\n" "IS-IS link state database\n")
! 927: {
! 928: struct listnode *node;
! 929: struct isis_area *area;
! 930: int level, lsp_count;
! 931:
! 932: if (isis->area_list->count == 0)
! 933: return CMD_SUCCESS;
! 934:
! 935: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
! 936: {
! 937: vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
! 938: VTY_NEWLINE);
! 939: for (level = 0; level < ISIS_LEVELS; level++)
! 940: {
! 941: if (area->lspdb[level] && dict_count (area->lspdb[level]) > 0)
! 942: {
! 943: vty_out (vty, "IS-IS Level-%d link-state database:%s",
! 944: level + 1, VTY_NEWLINE);
! 945:
! 946: lsp_count = lsp_print_all (vty, area->lspdb[level],
! 947: ISIS_UI_LEVEL_BRIEF,
! 948: area->dynhostname);
! 949:
! 950: vty_out (vty, "%s %u LSPs%s%s",
! 951: VTY_NEWLINE, lsp_count, VTY_NEWLINE, VTY_NEWLINE);
! 952: }
! 953: }
! 954: }
! 955:
! 956: return CMD_SUCCESS;
! 957: }
! 958:
! 959: DEFUN (show_database_detail,
! 960: show_database_detail_cmd,
! 961: "show isis database detail",
! 962: SHOW_STR
! 963: "IS-IS information\n"
! 964: "IS-IS link state database\n")
! 965: {
! 966: struct listnode *node;
! 967: struct isis_area *area;
! 968: int level, lsp_count;
! 969:
! 970: if (isis->area_list->count == 0)
! 971: return CMD_SUCCESS;
! 972:
! 973: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
! 974: {
! 975: vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
! 976: VTY_NEWLINE);
! 977: for (level = 0; level < ISIS_LEVELS; level++)
! 978: {
! 979: if (area->lspdb[level] && dict_count (area->lspdb[level]) > 0)
! 980: {
! 981: vty_out (vty, "IS-IS Level-%d Link State Database:%s",
! 982: level + 1, VTY_NEWLINE);
! 983:
! 984: lsp_count = lsp_print_all (vty, area->lspdb[level],
! 985: ISIS_UI_LEVEL_DETAIL,
! 986: area->dynhostname);
! 987:
! 988: vty_out (vty, "%s %u LSPs%s%s",
! 989: VTY_NEWLINE, lsp_count, VTY_NEWLINE, VTY_NEWLINE);
! 990: }
! 991: }
! 992: }
! 993:
! 994: return CMD_SUCCESS;
! 995: }
! 996:
! 997: /*
! 998: * 'router isis' command
! 999: */
! 1000: DEFUN (router_isis,
! 1001: router_isis_cmd,
! 1002: "router isis WORD",
! 1003: ROUTER_STR
! 1004: "ISO IS-IS\n"
! 1005: "ISO Routing area tag")
! 1006: {
! 1007: return isis_area_get (vty, argv[0]);
! 1008: }
! 1009:
! 1010: /*
! 1011: *'no router isis' command
! 1012: */
! 1013: DEFUN (no_router_isis,
! 1014: no_router_isis_cmd,
! 1015: "no router isis WORD",
! 1016: "no\n" ROUTER_STR "ISO IS-IS\n" "ISO Routing area tag")
! 1017: {
! 1018: return isis_area_destroy (vty, argv[0]);
! 1019: }
! 1020:
! 1021: /*
! 1022: * 'net' command
! 1023: */
! 1024: DEFUN (net,
! 1025: net_cmd,
! 1026: "net WORD",
! 1027: "A Network Entity Title for this process (OSI only)\n"
! 1028: "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
! 1029: {
! 1030: return area_net_title (vty, argv[0]);
! 1031: }
! 1032:
! 1033: /*
! 1034: * 'no net' command
! 1035: */
! 1036: DEFUN (no_net,
! 1037: no_net_cmd,
! 1038: "no net WORD",
! 1039: NO_STR
! 1040: "A Network Entity Title for this process (OSI only)\n"
! 1041: "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
! 1042: {
! 1043: return area_clear_net_title (vty, argv[0]);
! 1044: }
! 1045:
! 1046: DEFUN (area_passwd,
! 1047: area_passwd_cmd,
! 1048: "area-password WORD",
! 1049: "Configure the authentication password for an area\n"
! 1050: "Area password\n")
! 1051: {
! 1052: struct isis_area *area;
! 1053: int len;
! 1054:
! 1055: area = vty->index;
! 1056:
! 1057: if (!area)
! 1058: {
! 1059: vty_out (vty, "Cant find IS-IS instance%s", VTY_NEWLINE);
! 1060: return CMD_WARNING;
! 1061: }
! 1062:
! 1063: len = strlen (argv[0]);
! 1064: if (len > 254)
! 1065: {
! 1066: vty_out (vty, "Too long area password (>254)%s", VTY_NEWLINE);
! 1067: return CMD_WARNING;
! 1068: }
! 1069: area->area_passwd.len = (u_char) len;
! 1070: area->area_passwd.type = ISIS_PASSWD_TYPE_CLEARTXT;
! 1071: strncpy ((char *)area->area_passwd.passwd, argv[0], 255);
! 1072:
! 1073: if (argc > 1)
! 1074: {
! 1075: SET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND);
! 1076: if (strncmp(argv[1], "v", 1) == 0)
! 1077: SET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
! 1078: else
! 1079: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
! 1080: }
! 1081: else
! 1082: {
! 1083: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND);
! 1084: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
! 1085: }
! 1086:
! 1087: return CMD_SUCCESS;
! 1088: }
! 1089:
! 1090: ALIAS (area_passwd,
! 1091: area_passwd_snpauth_cmd,
! 1092: "area-password WORD authenticate snp (send-only|validate)",
! 1093: "Configure the authentication password for an area\n"
! 1094: "Area password\n"
! 1095: "Authentication\n"
! 1096: "SNP PDUs\n"
! 1097: "Send but do not check PDUs on receiving\n"
! 1098: "Send and check PDUs on receiving\n");
! 1099:
! 1100: DEFUN (no_area_passwd,
! 1101: no_area_passwd_cmd,
! 1102: "no area-password",
! 1103: NO_STR
! 1104: "Configure the authentication password for an area\n")
! 1105: {
! 1106: struct isis_area *area;
! 1107:
! 1108: area = vty->index;
! 1109:
! 1110: if (!area)
! 1111: {
! 1112: vty_out (vty, "Cant find IS-IS instance%s", VTY_NEWLINE);
! 1113: return CMD_WARNING;
! 1114: }
! 1115:
! 1116: memset (&area->area_passwd, 0, sizeof (struct isis_passwd));
! 1117:
! 1118: return CMD_SUCCESS;
! 1119: }
! 1120:
! 1121: DEFUN (domain_passwd,
! 1122: domain_passwd_cmd,
! 1123: "domain-password WORD",
! 1124: "Set the authentication password for a routing domain\n"
! 1125: "Routing domain password\n")
! 1126: {
! 1127: struct isis_area *area;
! 1128: int len;
! 1129:
! 1130: area = vty->index;
! 1131:
! 1132: if (!area)
! 1133: {
! 1134: vty_out (vty, "Cant find IS-IS instance%s", VTY_NEWLINE);
! 1135: return CMD_WARNING;
! 1136: }
! 1137:
! 1138: len = strlen (argv[0]);
! 1139: if (len > 254)
! 1140: {
! 1141: vty_out (vty, "Too long area password (>254)%s", VTY_NEWLINE);
! 1142: return CMD_WARNING;
! 1143: }
! 1144: area->domain_passwd.len = (u_char) len;
! 1145: area->domain_passwd.type = ISIS_PASSWD_TYPE_CLEARTXT;
! 1146: strncpy ((char *)area->domain_passwd.passwd, argv[0], 255);
! 1147:
! 1148: if (argc > 1)
! 1149: {
! 1150: SET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND);
! 1151: if (strncmp(argv[1], "v", 1) == 0)
! 1152: SET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
! 1153: else
! 1154: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
! 1155: }
! 1156: else
! 1157: {
! 1158: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND);
! 1159: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
! 1160: }
! 1161:
! 1162: return CMD_SUCCESS;
! 1163: }
! 1164:
! 1165: ALIAS (domain_passwd,
! 1166: domain_passwd_snpauth_cmd,
! 1167: "domain-password WORD authenticate snp (send-only|validate)",
! 1168: "Set the authentication password for a routing domain\n"
! 1169: "Routing domain password\n"
! 1170: "Authentication\n"
! 1171: "SNP PDUs\n"
! 1172: "Send but do not check PDUs on receiving\n"
! 1173: "Send and check PDUs on receiving\n");
! 1174:
! 1175: DEFUN (no_domain_passwd,
! 1176: no_domain_passwd_cmd,
! 1177: "no domain-password WORD",
! 1178: NO_STR
! 1179: "Set the authentication password for a routing domain\n")
! 1180: {
! 1181: struct isis_area *area;
! 1182:
! 1183: area = vty->index;
! 1184:
! 1185: if (!area)
! 1186: {
! 1187: vty_out (vty, "Cant find IS-IS instance%s", VTY_NEWLINE);
! 1188: return CMD_WARNING;
! 1189: }
! 1190:
! 1191: memset (&area->domain_passwd, 0, sizeof (struct isis_passwd));
! 1192:
! 1193: return CMD_SUCCESS;
! 1194: }
! 1195:
! 1196: DEFUN (is_type,
! 1197: is_type_cmd,
! 1198: "is-type (level-1|level-1-2|level-2-only)",
! 1199: "IS Level for this routing process (OSI only)\n"
! 1200: "Act as a station router only\n"
! 1201: "Act as both a station router and an area router\n"
! 1202: "Act as an area router only\n")
! 1203: {
! 1204: struct isis_area *area;
! 1205: int type;
! 1206:
! 1207: area = vty->index;
! 1208:
! 1209: if (!area)
! 1210: {
! 1211: vty_out (vty, "Cant find IS-IS instance%s", VTY_NEWLINE);
! 1212: return CMD_WARNING;
! 1213: }
! 1214:
! 1215: type = string2circuit_t (argv[0]);
! 1216: if (!type)
! 1217: {
! 1218: vty_out (vty, "Unknown IS level %s", VTY_NEWLINE);
! 1219: return CMD_SUCCESS;
! 1220: }
! 1221:
! 1222: isis_event_system_type_change (area, type);
! 1223:
! 1224: return CMD_SUCCESS;
! 1225: }
! 1226:
! 1227: DEFUN (no_is_type,
! 1228: no_is_type_cmd,
! 1229: "no is-type (level-1|level-1-2|level-2-only)",
! 1230: NO_STR
! 1231: "IS Level for this routing process (OSI only)\n"
! 1232: "Act as a station router only\n"
! 1233: "Act as both a station router and an area router\n"
! 1234: "Act as an area router only\n")
! 1235: {
! 1236: struct isis_area *area;
! 1237: int type;
! 1238:
! 1239: area = vty->index;
! 1240: assert (area);
! 1241:
! 1242: /*
! 1243: * Put the is-type back to default. Which is level-1-2 on first
! 1244: * circuit for the area level-1 for the rest
! 1245: */
! 1246: if (listgetdata (listhead (isis->area_list)) == area)
! 1247: type = IS_LEVEL_1_AND_2;
! 1248: else
! 1249: type = IS_LEVEL_1;
! 1250:
! 1251: isis_event_system_type_change (area, type);
! 1252:
! 1253: return CMD_SUCCESS;
! 1254: }
! 1255:
! 1256: DEFUN (lsp_gen_interval,
! 1257: lsp_gen_interval_cmd,
! 1258: "lsp-gen-interval <1-120>",
! 1259: "Minimum interval between regenerating same LSP\n"
! 1260: "Minimum interval in seconds\n")
! 1261: {
! 1262: struct isis_area *area;
! 1263: uint16_t interval;
! 1264:
! 1265: area = vty->index;
! 1266: assert (area);
! 1267:
! 1268: interval = atoi (argv[0]);
! 1269: area->lsp_gen_interval[0] = interval;
! 1270: area->lsp_gen_interval[1] = interval;
! 1271:
! 1272: return CMD_SUCCESS;
! 1273: }
! 1274:
! 1275: DEFUN (no_lsp_gen_interval,
! 1276: no_lsp_gen_interval_cmd,
! 1277: "no lsp-gen-interval",
! 1278: NO_STR
! 1279: "Minimum interval between regenerating same LSP\n")
! 1280: {
! 1281: struct isis_area *area;
! 1282:
! 1283: area = vty->index;
! 1284: assert (area);
! 1285:
! 1286: area->lsp_gen_interval[0] = LSP_GEN_INTERVAL_DEFAULT;
! 1287: area->lsp_gen_interval[1] = LSP_GEN_INTERVAL_DEFAULT;
! 1288:
! 1289: return CMD_SUCCESS;
! 1290: }
! 1291:
! 1292: ALIAS (no_lsp_gen_interval,
! 1293: no_lsp_gen_interval_arg_cmd,
! 1294: "no lsp-gen-interval <1-120>",
! 1295: NO_STR
! 1296: "Minimum interval between regenerating same LSP\n"
! 1297: "Minimum interval in seconds\n")
! 1298:
! 1299: DEFUN (lsp_gen_interval_l1,
! 1300: lsp_gen_interval_l1_cmd,
! 1301: "lsp-gen-interval level-1 <1-120>",
! 1302: "Minimum interval between regenerating same LSP\n"
! 1303: "Set interval for level 1 only\n"
! 1304: "Minimum interval in seconds\n")
! 1305: {
! 1306: struct isis_area *area;
! 1307: uint16_t interval;
! 1308:
! 1309: area = vty->index;
! 1310: assert (area);
! 1311:
! 1312: interval = atoi (argv[0]);
! 1313: area->lsp_gen_interval[0] = interval;
! 1314:
! 1315: return CMD_SUCCESS;
! 1316: }
! 1317:
! 1318: DEFUN (no_lsp_gen_interval_l1,
! 1319: no_lsp_gen_interval_l1_cmd,
! 1320: "no lsp-gen-interval level-1",
! 1321: NO_STR
! 1322: "Minimum interval between regenerating same LSP\n"
! 1323: "Set interval for level 1 only\n")
! 1324: {
! 1325: struct isis_area *area;
! 1326:
! 1327: area = vty->index;
! 1328: assert (area);
! 1329:
! 1330: area->lsp_gen_interval[0] = LSP_GEN_INTERVAL_DEFAULT;
! 1331:
! 1332: return CMD_SUCCESS;
! 1333: }
! 1334:
! 1335: ALIAS (no_lsp_gen_interval_l1,
! 1336: no_lsp_gen_interval_l1_arg_cmd,
! 1337: "no lsp-gen-interval level-1 <1-120>",
! 1338: NO_STR
! 1339: "Minimum interval between regenerating same LSP\n"
! 1340: "Set interval for level 1 only\n"
! 1341: "Minimum interval in seconds\n")
! 1342:
! 1343: DEFUN (lsp_gen_interval_l2,
! 1344: lsp_gen_interval_l2_cmd,
! 1345: "lsp-gen-interval level-2 <1-120>",
! 1346: "Minimum interval between regenerating same LSP\n"
! 1347: "Set interval for level 2 only\n"
! 1348: "Minimum interval in seconds\n")
! 1349: {
! 1350: struct isis_area *area;
! 1351: int interval;
! 1352:
! 1353: area = vty->index;
! 1354: assert (area);
! 1355:
! 1356: interval = atoi (argv[0]);
! 1357: area->lsp_gen_interval[1] = interval;
! 1358:
! 1359: return CMD_SUCCESS;
! 1360: }
! 1361:
! 1362: DEFUN (no_lsp_gen_interval_l2,
! 1363: no_lsp_gen_interval_l2_cmd,
! 1364: "no lsp-gen-interval level-2",
! 1365: NO_STR
! 1366: "Minimum interval between regenerating same LSP\n"
! 1367: "Set interval for level 2 only\n")
! 1368: {
! 1369: struct isis_area *area;
! 1370: int interval;
! 1371:
! 1372: area = vty->index;
! 1373: assert (area);
! 1374:
! 1375: interval = atoi (argv[0]);
! 1376: area->lsp_gen_interval[1] = LSP_GEN_INTERVAL_DEFAULT;
! 1377:
! 1378: return CMD_SUCCESS;
! 1379: }
! 1380:
! 1381: ALIAS (no_lsp_gen_interval_l2,
! 1382: no_lsp_gen_interval_l2_arg_cmd,
! 1383: "no lsp-gen-interval level-2 <1-120>",
! 1384: NO_STR
! 1385: "Minimum interval between regenerating same LSP\n"
! 1386: "Set interval for level 2 only\n"
! 1387: "Minimum interval in seconds\n")
! 1388:
! 1389: DEFUN (metric_style,
! 1390: metric_style_cmd,
! 1391: "metric-style (narrow|transition|wide)",
! 1392: "Use old-style (ISO 10589) or new-style packet formats\n"
! 1393: "Use old style of TLVs with narrow metric\n"
! 1394: "Send and accept both styles of TLVs during transition\n"
! 1395: "Use new style of TLVs to carry wider metric\n")
! 1396: {
! 1397: struct isis_area *area;
! 1398:
! 1399: area = vty->index;
! 1400: assert (area);
! 1401:
! 1402: if (strncmp (argv[0], "w", 1) == 0)
! 1403: {
! 1404: area->newmetric = 1;
! 1405: area->oldmetric = 0;
! 1406: }
! 1407: else if (strncmp (argv[0], "t", 1) == 0)
! 1408: {
! 1409: area->newmetric = 1;
! 1410: area->oldmetric = 1;
! 1411: }
! 1412: else if (strncmp (argv[0], "n", 1) == 0)
! 1413: {
! 1414: area->newmetric = 0;
! 1415: area->oldmetric = 1;
! 1416: }
! 1417:
! 1418: return CMD_SUCCESS;
! 1419: }
! 1420:
! 1421: DEFUN (no_metric_style,
! 1422: no_metric_style_cmd,
! 1423: "no metric-style",
! 1424: NO_STR
! 1425: "Use old-style (ISO 10589) or new-style packet formats\n")
! 1426: {
! 1427: struct isis_area *area;
! 1428:
! 1429: area = vty->index;
! 1430: assert (area);
! 1431:
! 1432: /* Default is narrow metric. */
! 1433: area->newmetric = 0;
! 1434: area->oldmetric = 1;
! 1435:
! 1436: return CMD_SUCCESS;
! 1437: }
! 1438:
! 1439: DEFUN (dynamic_hostname,
! 1440: dynamic_hostname_cmd,
! 1441: "hostname dynamic",
! 1442: "Dynamic hostname for IS-IS\n"
! 1443: "Dynamic hostname\n")
! 1444: {
! 1445: struct isis_area *area;
! 1446:
! 1447: area = vty->index;
! 1448: assert (area);
! 1449:
! 1450: area->dynhostname = 1;
! 1451:
! 1452: return CMD_SUCCESS;
! 1453: }
! 1454:
! 1455: DEFUN (no_dynamic_hostname,
! 1456: no_dynamic_hostname_cmd,
! 1457: "no hostname dynamic",
! 1458: NO_STR
! 1459: "Dynamic hostname for IS-IS\n"
! 1460: "Dynamic hostname\n")
! 1461: {
! 1462: struct isis_area *area;
! 1463:
! 1464: area = vty->index;
! 1465: assert (area);
! 1466:
! 1467: area->dynhostname = 0;
! 1468:
! 1469: return CMD_SUCCESS;
! 1470: }
! 1471:
! 1472: DEFUN (spf_interval,
! 1473: spf_interval_cmd,
! 1474: "spf-interval <1-120>",
! 1475: "Minimum interval between SPF calculations\n"
! 1476: "Minimum interval between consecutive SPFs in seconds\n")
! 1477: {
! 1478: struct isis_area *area;
! 1479: u_int16_t interval;
! 1480:
! 1481: area = vty->index;
! 1482: interval = atoi (argv[0]);
! 1483: area->min_spf_interval[0] = interval;
! 1484: area->min_spf_interval[1] = interval;
! 1485:
! 1486: return CMD_SUCCESS;
! 1487: }
! 1488:
! 1489: DEFUN (no_spf_interval,
! 1490: no_spf_interval_cmd,
! 1491: "no spf-interval",
! 1492: NO_STR
! 1493: "Minimum interval between SPF calculations\n")
! 1494: {
! 1495: struct isis_area *area;
! 1496:
! 1497: area = vty->index;
! 1498:
! 1499: area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
! 1500: area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
! 1501:
! 1502: return CMD_SUCCESS;
! 1503: }
! 1504:
! 1505: ALIAS (no_spf_interval,
! 1506: no_spf_interval_arg_cmd,
! 1507: "no spf-interval <1-120>",
! 1508: NO_STR
! 1509: "Minimum interval between SPF calculations\n"
! 1510: "Minimum interval between consecutive SPFs in seconds\n")
! 1511:
! 1512: DEFUN (spf_interval_l1,
! 1513: spf_interval_l1_cmd,
! 1514: "spf-interval level-1 <1-120>",
! 1515: "Minimum interval between SPF calculations\n"
! 1516: "Set interval for level 1 only\n"
! 1517: "Minimum interval between consecutive SPFs in seconds\n")
! 1518: {
! 1519: struct isis_area *area;
! 1520: u_int16_t interval;
! 1521:
! 1522: area = vty->index;
! 1523: interval = atoi (argv[0]);
! 1524: area->min_spf_interval[0] = interval;
! 1525:
! 1526: return CMD_SUCCESS;
! 1527: }
! 1528:
! 1529: DEFUN (no_spf_interval_l1,
! 1530: no_spf_interval_l1_cmd,
! 1531: "no spf-interval level-1",
! 1532: NO_STR
! 1533: "Minimum interval between SPF calculations\n"
! 1534: "Set interval for level 1 only\n")
! 1535: {
! 1536: struct isis_area *area;
! 1537:
! 1538: area = vty->index;
! 1539:
! 1540: area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
! 1541:
! 1542: return CMD_SUCCESS;
! 1543: }
! 1544:
! 1545: ALIAS (no_spf_interval,
! 1546: no_spf_interval_l1_arg_cmd,
! 1547: "no spf-interval level-1 <1-120>",
! 1548: NO_STR
! 1549: "Minimum interval between SPF calculations\n"
! 1550: "Set interval for level 1 only\n"
! 1551: "Minimum interval between consecutive SPFs in seconds\n")
! 1552:
! 1553: DEFUN (spf_interval_l2,
! 1554: spf_interval_l2_cmd,
! 1555: "spf-interval level-2 <1-120>",
! 1556: "Minimum interval between SPF calculations\n"
! 1557: "Set interval for level 2 only\n"
! 1558: "Minimum interval between consecutive SPFs in seconds\n")
! 1559: {
! 1560: struct isis_area *area;
! 1561: u_int16_t interval;
! 1562:
! 1563: area = vty->index;
! 1564: interval = atoi (argv[0]);
! 1565: area->min_spf_interval[1] = interval;
! 1566:
! 1567: return CMD_SUCCESS;
! 1568: }
! 1569:
! 1570: DEFUN (no_spf_interval_l2,
! 1571: no_spf_interval_l2_cmd,
! 1572: "no spf-interval level-2",
! 1573: NO_STR
! 1574: "Minimum interval between SPF calculations\n"
! 1575: "Set interval for level 2 only\n")
! 1576: {
! 1577: struct isis_area *area;
! 1578:
! 1579: area = vty->index;
! 1580:
! 1581: area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
! 1582:
! 1583: return CMD_SUCCESS;
! 1584: }
! 1585:
! 1586: ALIAS (no_spf_interval,
! 1587: no_spf_interval_l2_arg_cmd,
! 1588: "no spf-interval level-2 <1-120>",
! 1589: NO_STR
! 1590: "Minimum interval between SPF calculations\n"
! 1591: "Set interval for level 2 only\n"
! 1592: "Minimum interval between consecutive SPFs in seconds\n")
! 1593:
! 1594: #ifdef TOPOLOGY_GENERATE
! 1595: DEFUN (topology_generate_grid,
! 1596: topology_generate_grid_cmd,
! 1597: "topology generate grid <1-100> <1-100> <1-65000> [param] [param] "
! 1598: "[param]",
! 1599: "Topology generation for IS-IS\n"
! 1600: "Topology generation\n"
! 1601: "Grid topology\n"
! 1602: "X parameter of the grid\n"
! 1603: "Y parameter of the grid\n"
! 1604: "Random seed\n"
! 1605: "Optional param 1\n"
! 1606: "Optional param 2\n"
! 1607: "Optional param 3\n"
! 1608: "Topology\n")
! 1609: {
! 1610: struct isis_area *area;
! 1611:
! 1612: area = vty->index;
! 1613: assert (area);
! 1614:
! 1615: if (!spgrid_check_params (vty, argc, argv))
! 1616: {
! 1617: if (area->topology)
! 1618: list_delete (area->topology);
! 1619: area->topology = list_new ();
! 1620: memcpy (area->top_params, vty->buf, 200);
! 1621: gen_spgrid_topology (vty, area->topology);
! 1622: remove_topology_lsps (area);
! 1623: generate_topology_lsps (area);
! 1624: /* Regenerate L1 LSP to get two way connection to the generated
! 1625: * topology. */
! 1626: lsp_regenerate_schedule (area);
! 1627: }
! 1628:
! 1629: return CMD_SUCCESS;
! 1630: }
! 1631:
! 1632: DEFUN (show_isis_generated_topology,
! 1633: show_isis_generated_topology_cmd,
! 1634: "show isis generated-topologies",
! 1635: SHOW_STR
! 1636: "CLNS network information\n"
! 1637: "Show generated topologies\n")
! 1638: {
! 1639: struct isis_area *area;
! 1640: struct listnode *node;
! 1641: struct listnode *node2;
! 1642: struct arc *arc;
! 1643:
! 1644: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
! 1645: {
! 1646: if (!area->topology)
! 1647: continue;
! 1648:
! 1649: vty_out (vty, "Topology for isis area: %s%s", area->area_tag,
! 1650: VTY_NEWLINE);
! 1651: vty_out (vty, "From node To node Distance%s", VTY_NEWLINE);
! 1652:
! 1653: for (ALL_LIST_ELEMENTS_RO (area->topology, node2, arc))
! 1654: vty_out (vty, "%9ld %11ld %12ld%s", arc->from_node, arc->to_node,
! 1655: arc->distance, VTY_NEWLINE);
! 1656: }
! 1657: return CMD_SUCCESS;
! 1658: }
! 1659:
! 1660: /* Base IS for topology generation. */
! 1661: DEFUN (topology_baseis,
! 1662: topology_baseis_cmd,
! 1663: "topology base-is WORD",
! 1664: "Topology generation for IS-IS\n"
! 1665: "A Network IS Base for this topology\n"
! 1666: "XXXX.XXXX.XXXX Network entity title (NET)\n")
! 1667: {
! 1668: struct isis_area *area;
! 1669: u_char buff[ISIS_SYS_ID_LEN];
! 1670:
! 1671: area = vty->index;
! 1672: assert (area);
! 1673:
! 1674: if (sysid2buff (buff, argv[0]))
! 1675: sysid2buff (area->topology_baseis, argv[0]);
! 1676:
! 1677: return CMD_SUCCESS;
! 1678: }
! 1679:
! 1680: DEFUN (no_topology_baseis,
! 1681: no_topology_baseis_cmd,
! 1682: "no topology base-is WORD",
! 1683: NO_STR
! 1684: "Topology generation for IS-IS\n"
! 1685: "A Network IS Base for this topology\n"
! 1686: "XXXX.XXXX.XXXX Network entity title (NET)\n")
! 1687: {
! 1688: struct isis_area *area;
! 1689:
! 1690: area = vty->index;
! 1691: assert (area);
! 1692:
! 1693: memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
! 1694: return CMD_SUCCESS;
! 1695: }
! 1696:
! 1697: ALIAS (no_topology_baseis,
! 1698: no_topology_baseis_noid_cmd,
! 1699: "no topology base-is",
! 1700: NO_STR
! 1701: "Topology generation for IS-IS\n"
! 1702: "A Network IS Base for this topology\n")
! 1703:
! 1704: DEFUN (topology_basedynh,
! 1705: topology_basedynh_cmd,
! 1706: "topology base-dynh WORD",
! 1707: "Topology generation for IS-IS\n"
! 1708: "Dynamic hostname base for this topology\n"
! 1709: "Dynamic hostname base\n")
! 1710: {
! 1711: struct isis_area *area;
! 1712:
! 1713: area = vty->index;
! 1714: assert (area);
! 1715:
! 1716: /* I hope that it's enough. */
! 1717: area->topology_basedynh = strndup (argv[0], 16);
! 1718: return CMD_SUCCESS;
! 1719: }
! 1720: #endif /* TOPOLOGY_GENERATE */
! 1721:
! 1722: DEFUN (lsp_lifetime,
! 1723: lsp_lifetime_cmd,
! 1724: "lsp-lifetime <380-65535>",
! 1725: "Maximum LSP lifetime\n"
! 1726: "LSP lifetime in seconds\n")
! 1727: {
! 1728: struct isis_area *area;
! 1729: uint16_t interval;
! 1730:
! 1731: area = vty->index;
! 1732: assert (area);
! 1733:
! 1734: interval = atoi (argv[0]);
! 1735:
! 1736: if (interval < ISIS_MIN_LSP_LIFETIME)
! 1737: {
! 1738: vty_out (vty, "LSP lifetime (%us) below %us%s",
! 1739: interval, ISIS_MIN_LSP_LIFETIME, VTY_NEWLINE);
! 1740:
! 1741: return CMD_WARNING;
! 1742: }
! 1743:
! 1744:
! 1745: area->max_lsp_lifetime[0] = interval;
! 1746: area->max_lsp_lifetime[1] = interval;
! 1747: area->lsp_refresh[0] = interval - 300;
! 1748: area->lsp_refresh[1] = interval - 300;
! 1749:
! 1750: if (area->t_lsp_refresh[0])
! 1751: {
! 1752: thread_cancel (area->t_lsp_refresh[0]);
! 1753: thread_execute (master, lsp_refresh_l1, area, 0);
! 1754: }
! 1755:
! 1756: if (area->t_lsp_refresh[1])
! 1757: {
! 1758: thread_cancel (area->t_lsp_refresh[1]);
! 1759: thread_execute (master, lsp_refresh_l2, area, 0);
! 1760: }
! 1761:
! 1762:
! 1763: return CMD_SUCCESS;
! 1764: }
! 1765:
! 1766: DEFUN (no_lsp_lifetime,
! 1767: no_lsp_lifetime_cmd,
! 1768: "no lsp-lifetime",
! 1769: NO_STR
! 1770: "LSP lifetime in seconds\n")
! 1771: {
! 1772: struct isis_area *area;
! 1773:
! 1774: area = vty->index;
! 1775: assert (area);
! 1776:
! 1777: area->max_lsp_lifetime[0] = MAX_AGE; /* 1200s */
! 1778: area->max_lsp_lifetime[1] = MAX_AGE; /* 1200s */
! 1779: area->lsp_refresh[0] = MAX_LSP_GEN_INTERVAL; /* 900s */
! 1780: area->lsp_refresh[1] = MAX_LSP_GEN_INTERVAL; /* 900s */
! 1781:
! 1782: return CMD_SUCCESS;
! 1783: }
! 1784:
! 1785: ALIAS (no_lsp_lifetime,
! 1786: no_lsp_lifetime_arg_cmd,
! 1787: "no lsp-lifetime <380-65535>",
! 1788: NO_STR
! 1789: "Maximum LSP lifetime\n"
! 1790: "LSP lifetime in seconds\n")
! 1791:
! 1792: DEFUN (lsp_lifetime_l1,
! 1793: lsp_lifetime_l1_cmd,
! 1794: "lsp-lifetime level-1 <380-65535>",
! 1795: "Maximum LSP lifetime for Level 1 only\n"
! 1796: "LSP lifetime for Level 1 only in seconds\n")
! 1797: {
! 1798: struct isis_area *area;
! 1799: uint16_t interval;
! 1800:
! 1801: area = vty->index;
! 1802: assert (area);
! 1803:
! 1804: interval = atoi (argv[0]);
! 1805:
! 1806: if (interval < ISIS_MIN_LSP_LIFETIME)
! 1807: {
! 1808: vty_out (vty, "Level-1 LSP lifetime (%us) below %us%s",
! 1809: interval, ISIS_MIN_LSP_LIFETIME, VTY_NEWLINE);
! 1810:
! 1811: return CMD_WARNING;
! 1812: }
! 1813:
! 1814:
! 1815: area->max_lsp_lifetime[0] = interval;
! 1816: area->lsp_refresh[0] = interval - 300;
! 1817:
! 1818: return CMD_SUCCESS;
! 1819: }
! 1820:
! 1821: DEFUN (no_lsp_lifetime_l1,
! 1822: no_lsp_lifetime_l1_cmd,
! 1823: "no lsp-lifetime level-1",
! 1824: NO_STR
! 1825: "LSP lifetime for Level 1 only in seconds\n")
! 1826: {
! 1827: struct isis_area *area;
! 1828:
! 1829: area = vty->index;
! 1830: assert (area);
! 1831:
! 1832: area->max_lsp_lifetime[0] = MAX_AGE; /* 1200s */
! 1833: area->lsp_refresh[0] = MAX_LSP_GEN_INTERVAL; /* 900s */
! 1834:
! 1835: return CMD_SUCCESS;
! 1836: }
! 1837:
! 1838: ALIAS (no_lsp_lifetime_l1,
! 1839: no_lsp_lifetime_l1_arg_cmd,
! 1840: "no lsp-lifetime level-1 <380-65535>",
! 1841: NO_STR
! 1842: "Maximum LSP lifetime for Level 1 only\n"
! 1843: "LSP lifetime for Level 1 only in seconds\n")
! 1844:
! 1845: DEFUN (lsp_lifetime_l2,
! 1846: lsp_lifetime_l2_cmd,
! 1847: "lsp-lifetime level-2 <380-65535>",
! 1848: "Maximum LSP lifetime for Level 2 only\n"
! 1849: "LSP lifetime for Level 2 only in seconds\n")
! 1850: {
! 1851: struct isis_area *area;
! 1852: uint16_t interval;
! 1853:
! 1854: area = vty->index;
! 1855: assert (area);
! 1856:
! 1857: interval = atoi (argv[0]);
! 1858:
! 1859: if (interval < ISIS_MIN_LSP_LIFETIME)
! 1860: {
! 1861: vty_out (vty, "Level-2 LSP lifetime (%us) below %us%s",
! 1862: interval, ISIS_MIN_LSP_LIFETIME, VTY_NEWLINE);
! 1863:
! 1864: return CMD_WARNING;
! 1865: }
! 1866:
! 1867: area->max_lsp_lifetime[1] = interval;
! 1868: area->lsp_refresh[1] = interval - 300;
! 1869:
! 1870: return CMD_SUCCESS;
! 1871: }
! 1872:
! 1873: DEFUN (no_lsp_lifetime_l2,
! 1874: no_lsp_lifetime_l2_cmd,
! 1875: "no lsp-lifetime level-2",
! 1876: NO_STR
! 1877: "LSP lifetime for Level 2 only in seconds\n")
! 1878: {
! 1879: struct isis_area *area;
! 1880:
! 1881: area = vty->index;
! 1882: assert (area);
! 1883:
! 1884: area->max_lsp_lifetime[1] = MAX_AGE; /* 1200s */
! 1885: area->lsp_refresh[1] = MAX_LSP_GEN_INTERVAL; /* 900s */
! 1886:
! 1887: return CMD_SUCCESS;
! 1888: }
! 1889:
! 1890: ALIAS (no_lsp_lifetime_l2,
! 1891: no_lsp_lifetime_l2_arg_cmd,
! 1892: "no lsp-lifetime level-2 <380-65535>",
! 1893: NO_STR
! 1894: "Maximum LSP lifetime for Level 2 only\n"
! 1895: "LSP lifetime for Level 2 only in seconds\n")
! 1896:
! 1897: /* IS-IS configuration write function */
! 1898: int
! 1899: isis_config_write (struct vty *vty)
! 1900: {
! 1901: int write = 0;
! 1902:
! 1903: if (isis != NULL)
! 1904: {
! 1905: struct isis_area *area;
! 1906: struct listnode *node, *node2;
! 1907:
! 1908: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
! 1909: {
! 1910: /* ISIS - Area name */
! 1911: vty_out (vty, "router isis %s%s", area->area_tag, VTY_NEWLINE);
! 1912: write++;
! 1913: /* ISIS - Net */
! 1914: if (listcount (area->area_addrs) > 0)
! 1915: {
! 1916: struct area_addr *area_addr;
! 1917: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node2, area_addr))
! 1918: {
! 1919: vty_out (vty, " net %s%s",
! 1920: isonet_print (area_addr->area_addr,
! 1921: area_addr->addr_len + ISIS_SYS_ID_LEN +
! 1922: 1), VTY_NEWLINE);
! 1923: write++;
! 1924: }
! 1925: }
! 1926: /* ISIS - Dynamic hostname - Defaults to true so only display if
! 1927: * false. */
! 1928: if (!area->dynhostname)
! 1929: {
! 1930: vty_out (vty, " no hostname dynamic%s", VTY_NEWLINE);
! 1931: write++;
! 1932: }
! 1933: /* ISIS - Metric-Style - when true displays wide */
! 1934: if (area->newmetric)
! 1935: {
! 1936: if (!area->oldmetric)
! 1937: vty_out (vty, " metric-style wide%s", VTY_NEWLINE);
! 1938: else
! 1939: vty_out (vty, " metric-style transition%s", VTY_NEWLINE);
! 1940: write++;
! 1941: }
! 1942:
! 1943: /* ISIS - Area is-type (level-1-2 is default) */
! 1944: if (area->is_type == IS_LEVEL_1)
! 1945: {
! 1946: vty_out (vty, " is-type level-1%s", VTY_NEWLINE);
! 1947: write++;
! 1948: }
! 1949: else
! 1950: {
! 1951: if (area->is_type == IS_LEVEL_2)
! 1952: {
! 1953: vty_out (vty, " is-type level-2-only%s", VTY_NEWLINE);
! 1954: write++;
! 1955: }
! 1956: }
! 1957: /* ISIS - Lsp generation interval */
! 1958: if (area->lsp_gen_interval[0] == area->lsp_gen_interval[1])
! 1959: {
! 1960: if (area->lsp_gen_interval[0] != LSP_GEN_INTERVAL_DEFAULT)
! 1961: {
! 1962: vty_out (vty, " lsp-gen-interval %d%s",
! 1963: area->lsp_gen_interval[0], VTY_NEWLINE);
! 1964: write++;
! 1965: }
! 1966: }
! 1967: else
! 1968: {
! 1969: if (area->lsp_gen_interval[0] != LSP_GEN_INTERVAL_DEFAULT)
! 1970: {
! 1971: vty_out (vty, " lsp-gen-interval level-1 %d%s",
! 1972: area->lsp_gen_interval[0], VTY_NEWLINE);
! 1973: write++;
! 1974: }
! 1975: if (area->lsp_gen_interval[1] != LSP_GEN_INTERVAL_DEFAULT)
! 1976: {
! 1977: vty_out (vty, " lsp-gen-interval level-2 %d%s",
! 1978: area->lsp_gen_interval[1], VTY_NEWLINE);
! 1979: write++;
! 1980: }
! 1981: }
! 1982: /* ISIS - LSP lifetime */
! 1983: if (area->max_lsp_lifetime[0] == area->max_lsp_lifetime[1])
! 1984: {
! 1985: if (area->max_lsp_lifetime[0] != MAX_AGE)
! 1986: {
! 1987: vty_out (vty, " lsp-lifetime %u%s", area->max_lsp_lifetime[0],
! 1988: VTY_NEWLINE);
! 1989: write++;
! 1990: }
! 1991: }
! 1992: else
! 1993: {
! 1994: if (area->max_lsp_lifetime[0] != MAX_AGE)
! 1995: {
! 1996: vty_out (vty, " lsp-lifetime level-1 %u%s",
! 1997: area->max_lsp_lifetime[0], VTY_NEWLINE);
! 1998: write++;
! 1999: }
! 2000: if (area->max_lsp_lifetime[1] != MAX_AGE)
! 2001: {
! 2002: vty_out (vty, " lsp-lifetime level-2 %u%s",
! 2003: area->max_lsp_lifetime[1], VTY_NEWLINE);
! 2004: write++;
! 2005: }
! 2006: }
! 2007: /* Minimum SPF interval. */
! 2008: if (area->min_spf_interval[0] == area->min_spf_interval[1])
! 2009: {
! 2010: if (area->min_spf_interval[0] != MINIMUM_SPF_INTERVAL)
! 2011: {
! 2012: vty_out (vty, " spf-interval %d%s",
! 2013: area->min_spf_interval[0], VTY_NEWLINE);
! 2014: write++;
! 2015: }
! 2016: }
! 2017: else
! 2018: {
! 2019: if (area->min_spf_interval[0] != MINIMUM_SPF_INTERVAL)
! 2020: {
! 2021: vty_out (vty, " spf-interval level-1 %d%s",
! 2022: area->min_spf_interval[0], VTY_NEWLINE);
! 2023: write++;
! 2024: }
! 2025: if (area->min_spf_interval[1] != MINIMUM_SPF_INTERVAL)
! 2026: {
! 2027: vty_out (vty, " spf-interval level-2 %d%s",
! 2028: area->min_spf_interval[1], VTY_NEWLINE);
! 2029: write++;
! 2030: }
! 2031: }
! 2032: /* Authentication passwords. */
! 2033: if (area->area_passwd.len > 0)
! 2034: {
! 2035: vty_out(vty, " area-password %s", area->area_passwd.passwd);
! 2036: if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND))
! 2037: {
! 2038: vty_out(vty, " authenticate snp ");
! 2039: if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV))
! 2040: vty_out(vty, "validate");
! 2041: else
! 2042: vty_out(vty, "send-only");
! 2043: }
! 2044: vty_out(vty, "%s", VTY_NEWLINE);
! 2045: write++;
! 2046: }
! 2047: if (area->domain_passwd.len > 0)
! 2048: {
! 2049: vty_out(vty, " domain-password %s", area->domain_passwd.passwd);
! 2050: if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND))
! 2051: {
! 2052: vty_out(vty, " authenticate snp ");
! 2053: if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV))
! 2054: vty_out(vty, "validate");
! 2055: else
! 2056: vty_out(vty, "send-only");
! 2057: }
! 2058: vty_out(vty, "%s", VTY_NEWLINE);
! 2059: write++;
! 2060: }
! 2061:
! 2062: #ifdef TOPOLOGY_GENERATE
! 2063: if (memcmp (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS,
! 2064: ISIS_SYS_ID_LEN))
! 2065: {
! 2066: vty_out (vty, " topology base-is %s%s",
! 2067: sysid_print (area->topology_baseis), VTY_NEWLINE);
! 2068: write++;
! 2069: }
! 2070: if (area->topology_basedynh)
! 2071: {
! 2072: vty_out (vty, " topology base-dynh %s%s",
! 2073: area->topology_basedynh, VTY_NEWLINE);
! 2074: write++;
! 2075: }
! 2076: /* We save the whole command line here. */
! 2077: if (strlen(area->top_params))
! 2078: {
! 2079: vty_out (vty, " %s%s", area->top_params, VTY_NEWLINE);
! 2080: write++;
! 2081: }
! 2082: #endif /* TOPOLOGY_GENERATE */
! 2083:
! 2084: }
! 2085: }
! 2086:
! 2087: return write;
! 2088: }
! 2089:
! 2090: static struct cmd_node isis_node = {
! 2091: ISIS_NODE,
! 2092: "%s(config-router)# ",
! 2093: 1
! 2094: };
! 2095:
! 2096: void
! 2097: isis_init ()
! 2098: {
! 2099: /* Install IS-IS top node */
! 2100: install_node (&isis_node, isis_config_write);
! 2101:
! 2102: install_element (VIEW_NODE, &show_clns_neighbors_cmd);
! 2103: install_element (VIEW_NODE, &show_isis_neighbors_cmd);
! 2104: install_element (VIEW_NODE, &show_clns_neighbors_detail_cmd);
! 2105: install_element (VIEW_NODE, &show_isis_neighbors_detail_cmd);
! 2106:
! 2107: install_element (VIEW_NODE, &show_hostname_cmd);
! 2108: install_element (VIEW_NODE, &show_database_cmd);
! 2109: install_element (VIEW_NODE, &show_database_detail_cmd);
! 2110:
! 2111: install_element (ENABLE_NODE, &show_clns_neighbors_cmd);
! 2112: install_element (ENABLE_NODE, &show_isis_neighbors_cmd);
! 2113: install_element (ENABLE_NODE, &show_clns_neighbors_detail_cmd);
! 2114: install_element (ENABLE_NODE, &show_isis_neighbors_detail_cmd);
! 2115:
! 2116: install_element (ENABLE_NODE, &show_hostname_cmd);
! 2117: install_element (ENABLE_NODE, &show_database_cmd);
! 2118: install_element (ENABLE_NODE, &show_database_detail_cmd);
! 2119: install_element (ENABLE_NODE, &show_debugging_cmd);
! 2120:
! 2121: install_node (&debug_node, config_write_debug);
! 2122:
! 2123: install_element (ENABLE_NODE, &debug_isis_adj_cmd);
! 2124: install_element (ENABLE_NODE, &no_debug_isis_adj_cmd);
! 2125: install_element (ENABLE_NODE, &debug_isis_csum_cmd);
! 2126: install_element (ENABLE_NODE, &no_debug_isis_csum_cmd);
! 2127: install_element (ENABLE_NODE, &debug_isis_lupd_cmd);
! 2128: install_element (ENABLE_NODE, &no_debug_isis_lupd_cmd);
! 2129: install_element (ENABLE_NODE, &debug_isis_err_cmd);
! 2130: install_element (ENABLE_NODE, &no_debug_isis_err_cmd);
! 2131: install_element (ENABLE_NODE, &debug_isis_snp_cmd);
! 2132: install_element (ENABLE_NODE, &no_debug_isis_snp_cmd);
! 2133: install_element (ENABLE_NODE, &debug_isis_upd_cmd);
! 2134: install_element (ENABLE_NODE, &no_debug_isis_upd_cmd);
! 2135: install_element (ENABLE_NODE, &debug_isis_spfevents_cmd);
! 2136: install_element (ENABLE_NODE, &no_debug_isis_spfevents_cmd);
! 2137: install_element (ENABLE_NODE, &debug_isis_spfstats_cmd);
! 2138: install_element (ENABLE_NODE, &no_debug_isis_spfstats_cmd);
! 2139: install_element (ENABLE_NODE, &debug_isis_spftrigg_cmd);
! 2140: install_element (ENABLE_NODE, &no_debug_isis_spftrigg_cmd);
! 2141: install_element (ENABLE_NODE, &debug_isis_rtevents_cmd);
! 2142: install_element (ENABLE_NODE, &no_debug_isis_rtevents_cmd);
! 2143: install_element (ENABLE_NODE, &debug_isis_events_cmd);
! 2144: install_element (ENABLE_NODE, &no_debug_isis_events_cmd);
! 2145:
! 2146: install_element (CONFIG_NODE, &debug_isis_adj_cmd);
! 2147: install_element (CONFIG_NODE, &no_debug_isis_adj_cmd);
! 2148: install_element (CONFIG_NODE, &debug_isis_csum_cmd);
! 2149: install_element (CONFIG_NODE, &no_debug_isis_csum_cmd);
! 2150: install_element (CONFIG_NODE, &debug_isis_lupd_cmd);
! 2151: install_element (CONFIG_NODE, &no_debug_isis_lupd_cmd);
! 2152: install_element (CONFIG_NODE, &debug_isis_err_cmd);
! 2153: install_element (CONFIG_NODE, &no_debug_isis_err_cmd);
! 2154: install_element (CONFIG_NODE, &debug_isis_snp_cmd);
! 2155: install_element (CONFIG_NODE, &no_debug_isis_snp_cmd);
! 2156: install_element (CONFIG_NODE, &debug_isis_upd_cmd);
! 2157: install_element (CONFIG_NODE, &no_debug_isis_upd_cmd);
! 2158: install_element (CONFIG_NODE, &debug_isis_spfevents_cmd);
! 2159: install_element (CONFIG_NODE, &no_debug_isis_spfevents_cmd);
! 2160: install_element (CONFIG_NODE, &debug_isis_spfstats_cmd);
! 2161: install_element (CONFIG_NODE, &no_debug_isis_spfstats_cmd);
! 2162: install_element (CONFIG_NODE, &debug_isis_spftrigg_cmd);
! 2163: install_element (CONFIG_NODE, &no_debug_isis_spftrigg_cmd);
! 2164: install_element (CONFIG_NODE, &debug_isis_rtevents_cmd);
! 2165: install_element (CONFIG_NODE, &no_debug_isis_rtevents_cmd);
! 2166: install_element (CONFIG_NODE, &debug_isis_events_cmd);
! 2167: install_element (CONFIG_NODE, &no_debug_isis_events_cmd);
! 2168:
! 2169: install_element (CONFIG_NODE, &router_isis_cmd);
! 2170: install_element (CONFIG_NODE, &no_router_isis_cmd);
! 2171:
! 2172: install_default (ISIS_NODE);
! 2173:
! 2174: install_element (ISIS_NODE, &net_cmd);
! 2175: install_element (ISIS_NODE, &no_net_cmd);
! 2176:
! 2177: install_element (ISIS_NODE, &is_type_cmd);
! 2178: install_element (ISIS_NODE, &no_is_type_cmd);
! 2179:
! 2180: install_element (ISIS_NODE, &area_passwd_cmd);
! 2181: install_element (ISIS_NODE, &area_passwd_snpauth_cmd);
! 2182: install_element (ISIS_NODE, &no_area_passwd_cmd);
! 2183:
! 2184: install_element (ISIS_NODE, &domain_passwd_cmd);
! 2185: install_element (ISIS_NODE, &domain_passwd_snpauth_cmd);
! 2186: install_element (ISIS_NODE, &no_domain_passwd_cmd);
! 2187:
! 2188: install_element (ISIS_NODE, &lsp_gen_interval_cmd);
! 2189: install_element (ISIS_NODE, &no_lsp_gen_interval_cmd);
! 2190: install_element (ISIS_NODE, &no_lsp_gen_interval_arg_cmd);
! 2191: install_element (ISIS_NODE, &lsp_gen_interval_l1_cmd);
! 2192: install_element (ISIS_NODE, &no_lsp_gen_interval_l1_cmd);
! 2193: install_element (ISIS_NODE, &no_lsp_gen_interval_l1_arg_cmd);
! 2194: install_element (ISIS_NODE, &lsp_gen_interval_l2_cmd);
! 2195: install_element (ISIS_NODE, &no_lsp_gen_interval_l2_cmd);
! 2196: install_element (ISIS_NODE, &no_lsp_gen_interval_l2_arg_cmd);
! 2197:
! 2198: install_element (ISIS_NODE, &spf_interval_cmd);
! 2199: install_element (ISIS_NODE, &no_spf_interval_cmd);
! 2200: install_element (ISIS_NODE, &no_spf_interval_arg_cmd);
! 2201: install_element (ISIS_NODE, &spf_interval_l1_cmd);
! 2202: install_element (ISIS_NODE, &no_spf_interval_l1_cmd);
! 2203: install_element (ISIS_NODE, &no_spf_interval_l1_arg_cmd);
! 2204: install_element (ISIS_NODE, &spf_interval_l2_cmd);
! 2205: install_element (ISIS_NODE, &no_spf_interval_l2_cmd);
! 2206: install_element (ISIS_NODE, &no_spf_interval_l2_arg_cmd);
! 2207:
! 2208: install_element (ISIS_NODE, &lsp_lifetime_cmd);
! 2209: install_element (ISIS_NODE, &no_lsp_lifetime_cmd);
! 2210: install_element (ISIS_NODE, &no_lsp_lifetime_arg_cmd);
! 2211: install_element (ISIS_NODE, &lsp_lifetime_l1_cmd);
! 2212: install_element (ISIS_NODE, &no_lsp_lifetime_l1_cmd);
! 2213: install_element (ISIS_NODE, &no_lsp_lifetime_l1_arg_cmd);
! 2214: install_element (ISIS_NODE, &lsp_lifetime_l2_cmd);
! 2215: install_element (ISIS_NODE, &no_lsp_lifetime_l2_cmd);
! 2216: install_element (ISIS_NODE, &no_lsp_lifetime_l2_arg_cmd);
! 2217:
! 2218: install_element (ISIS_NODE, &dynamic_hostname_cmd);
! 2219: install_element (ISIS_NODE, &no_dynamic_hostname_cmd);
! 2220:
! 2221: install_element (ISIS_NODE, &metric_style_cmd);
! 2222: install_element (ISIS_NODE, &no_metric_style_cmd);
! 2223: #ifdef TOPOLOGY_GENERATE
! 2224: install_element (ISIS_NODE, &topology_generate_grid_cmd);
! 2225: install_element (ISIS_NODE, &topology_baseis_cmd);
! 2226: install_element (ISIS_NODE, &topology_basedynh_cmd);
! 2227: install_element (ISIS_NODE, &no_topology_baseis_cmd);
! 2228: install_element (ISIS_NODE, &no_topology_baseis_noid_cmd);
! 2229: install_element (VIEW_NODE, &show_isis_generated_topology_cmd);
! 2230: install_element (ENABLE_NODE, &show_isis_generated_topology_cmd);
! 2231: #endif /* TOPOLOGY_GENERATE */
! 2232:
! 2233: isis_new (0);
! 2234: isis_circuit_init ();
! 2235: isis_zebra_init ();
! 2236: isis_spf_cmds_init ();
! 2237: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>