Annotation of embedaddon/quagga/isisd/isisd.c, revision 1.1.1.3
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"
1.1.1.2 misho 30: #include "time.h"
1.1 misho 31: #include "linklist.h"
32: #include "if.h"
33: #include "hash.h"
34: #include "stream.h"
35: #include "prefix.h"
36: #include "table.h"
37:
38: #include "isisd/dict.h"
39: #include "isisd/include-netbsd/iso.h"
40: #include "isisd/isis_constants.h"
41: #include "isisd/isis_common.h"
42: #include "isisd/isis_flags.h"
1.1.1.2 misho 43: #include "isisd/isis_circuit.h"
44: #include "isisd/isis_csm.h"
1.1 misho 45: #include "isisd/isisd.h"
46: #include "isisd/isis_dynhn.h"
47: #include "isisd/isis_adjacency.h"
48: #include "isisd/isis_pdu.h"
49: #include "isisd/isis_misc.h"
50: #include "isisd/isis_constants.h"
51: #include "isisd/isis_tlv.h"
52: #include "isisd/isis_lsp.h"
53: #include "isisd/isis_spf.h"
54: #include "isisd/isis_route.h"
55: #include "isisd/isis_zebra.h"
56: #include "isisd/isis_events.h"
57:
58: #ifdef TOPOLOGY_GENERATE
59: #include "spgrid.h"
60: u_char DEFAULT_TOPOLOGY_BASEIS[6] = { 0xFE, 0xED, 0xFE, 0xED, 0x00, 0x00 };
61: #endif /* TOPOLOGY_GENERATE */
62:
63: struct isis *isis = NULL;
64:
65: /*
66: * Prototypes.
67: */
68: int isis_area_get(struct vty *, const char *);
69: int isis_area_destroy(struct vty *, const char *);
1.1.1.2 misho 70: int area_net_title(struct vty *, const char *);
71: int area_clear_net_title(struct vty *, const char *);
72: int show_isis_interface_common(struct vty *, const char *ifname, char);
73: int show_isis_neighbor_common(struct vty *, const char *id, char);
74: int clear_isis_neighbor_common(struct vty *, const char *id);
1.1 misho 75: int isis_config_write(struct vty *);
76:
77:
78:
79: void
80: isis_new (unsigned long process_id)
81: {
82: isis = XCALLOC (MTYPE_ISIS, sizeof (struct isis));
83: /*
84: * Default values
85: */
86: isis->max_area_addrs = 3;
87: isis->process_id = process_id;
1.1.1.2 misho 88: isis->router_id = 0;
1.1 misho 89: isis->area_list = list_new ();
90: isis->init_circ_list = list_new ();
91: isis->uptime = time (NULL);
92: isis->nexthops = list_new ();
93: #ifdef HAVE_IPV6
94: isis->nexthops6 = list_new ();
95: #endif /* HAVE_IPV6 */
1.1.1.2 misho 96: dyn_cache_init ();
1.1 misho 97: /*
98: * uncomment the next line for full debugs
99: */
100: /* isis->debugs = 0xFFFF; */
101: }
102:
103: struct isis_area *
1.1.1.2 misho 104: isis_area_create (const char *area_tag)
1.1 misho 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;
1.1.1.2 misho 118:
1.1 misho 119: /*
120: * intialize the databases
121: */
1.1.1.2 misho 122: if (area->is_type & IS_LEVEL_1)
123: {
124: area->lspdb[0] = lsp_db_init ();
125: area->route_table[0] = route_table_init ();
126: #ifdef HAVE_IPV6
127: area->route_table6[0] = route_table_init ();
128: #endif /* HAVE_IPV6 */
129: }
130: if (area->is_type & IS_LEVEL_2)
131: {
132: area->lspdb[1] = lsp_db_init ();
133: area->route_table[1] = route_table_init ();
1.1 misho 134: #ifdef HAVE_IPV6
1.1.1.2 misho 135: area->route_table6[1] = route_table_init ();
1.1 misho 136: #endif /* HAVE_IPV6 */
1.1.1.2 misho 137: }
138:
139: spftree_area_init (area);
140:
1.1 misho 141: area->circuit_list = list_new ();
142: area->area_addrs = list_new ();
143: THREAD_TIMER_ON (master, area->t_tick, lsp_tick, area, 1);
144: flags_initialize (&area->flags);
1.1.1.2 misho 145:
1.1 misho 146: /*
147: * Default values
148: */
1.1.1.2 misho 149: area->max_lsp_lifetime[0] = DEFAULT_LSP_LIFETIME; /* 1200 */
150: area->max_lsp_lifetime[1] = DEFAULT_LSP_LIFETIME; /* 1200 */
151: area->lsp_refresh[0] = DEFAULT_MAX_LSP_GEN_INTERVAL; /* 900 */
152: area->lsp_refresh[1] = DEFAULT_MAX_LSP_GEN_INTERVAL; /* 900 */
153: area->lsp_gen_interval[0] = DEFAULT_MIN_LSP_GEN_INTERVAL;
154: area->lsp_gen_interval[1] = DEFAULT_MIN_LSP_GEN_INTERVAL;
1.1 misho 155: area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
156: area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
157: area->dynhostname = 1;
1.1.1.2 misho 158: area->oldmetric = 0;
159: area->newmetric = 1;
1.1 misho 160: area->lsp_frag_threshold = 90;
161: #ifdef TOPOLOGY_GENERATE
162: memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
163: #endif /* TOPOLOGY_GENERATE */
164:
165: /* FIXME: Think of a better way... */
166: area->min_bcast_mtu = 1497;
167:
1.1.1.2 misho 168: area->area_tag = strdup (area_tag);
169: listnode_add (isis->area_list, area);
170: area->isis = isis;
171:
1.1 misho 172: return area;
173: }
174:
175: struct isis_area *
176: isis_area_lookup (const char *area_tag)
177: {
178: struct isis_area *area;
179: struct listnode *node;
180:
181: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
182: if ((area->area_tag == NULL && area_tag == NULL) ||
183: (area->area_tag && area_tag
184: && strcmp (area->area_tag, area_tag) == 0))
185: return area;
186:
187: return NULL;
188: }
189:
190: int
191: isis_area_get (struct vty *vty, const char *area_tag)
192: {
193: struct isis_area *area;
194:
195: area = isis_area_lookup (area_tag);
196:
197: if (area)
198: {
199: vty->node = ISIS_NODE;
200: vty->index = area;
201: return CMD_SUCCESS;
202: }
203:
1.1.1.2 misho 204: area = isis_area_create (area_tag);
1.1 misho 205:
206: if (isis->debugs & DEBUG_EVENTS)
207: zlog_debug ("New IS-IS area instance %s", area->area_tag);
208:
209: vty->node = ISIS_NODE;
210: vty->index = area;
211:
212: return CMD_SUCCESS;
213: }
214:
215: int
216: isis_area_destroy (struct vty *vty, const char *area_tag)
217: {
218: struct isis_area *area;
219: struct listnode *node, *nnode;
220: struct isis_circuit *circuit;
1.1.1.2 misho 221: struct area_addr *addr;
1.1 misho 222:
223: area = isis_area_lookup (area_tag);
224:
225: if (area == NULL)
226: {
227: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
1.1.1.2 misho 228: return CMD_ERR_NO_MATCH;
1.1 misho 229: }
230:
231: if (area->circuit_list)
232: {
233: for (ALL_LIST_ELEMENTS (area->circuit_list, node, nnode, circuit))
1.1.1.2 misho 234: {
235: circuit->ip_router = 0;
236: #ifdef HAVE_IPV6
237: circuit->ipv6_router = 0;
238: #endif
239: isis_csm_state_change (ISIS_DISABLE, circuit, area);
240: }
1.1 misho 241: list_delete (area->circuit_list);
1.1.1.2 misho 242: area->circuit_list = NULL;
1.1 misho 243: }
1.1.1.2 misho 244:
245: if (area->lspdb[0] != NULL)
246: {
247: lsp_db_destroy (area->lspdb[0]);
248: area->lspdb[0] = NULL;
249: }
250: if (area->lspdb[1] != NULL)
251: {
252: lsp_db_destroy (area->lspdb[1]);
253: area->lspdb[1] = NULL;
254: }
255:
256: spftree_area_del (area);
257:
258: /* invalidate and validate would delete all routes from zebra */
259: isis_route_invalidate (area);
260: isis_route_validate (area);
261:
262: if (area->route_table[0])
263: {
264: route_table_finish (area->route_table[0]);
265: area->route_table[0] = NULL;
266: }
267: if (area->route_table[1])
268: {
269: route_table_finish (area->route_table[1]);
270: area->route_table[1] = NULL;
271: }
272: #ifdef HAVE_IPV6
273: if (area->route_table6[0])
274: {
275: route_table_finish (area->route_table6[0]);
276: area->route_table6[0] = NULL;
277: }
278: if (area->route_table6[1])
279: {
280: route_table_finish (area->route_table6[1]);
281: area->route_table6[1] = NULL;
282: }
283: #endif /* HAVE_IPV6 */
284:
285: for (ALL_LIST_ELEMENTS (area->area_addrs, node, nnode, addr))
286: {
287: list_delete_node (area->area_addrs, node);
288: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
289: }
290: area->area_addrs = NULL;
1.1 misho 291:
292: THREAD_TIMER_OFF (area->t_tick);
293: THREAD_TIMER_OFF (area->t_lsp_refresh[0]);
294: THREAD_TIMER_OFF (area->t_lsp_refresh[1]);
295:
1.1.1.2 misho 296: thread_cancel_event (master, area);
297:
298: listnode_delete (isis->area_list, area);
1.1 misho 299:
1.1.1.2 misho 300: free (area->area_tag);
1.1 misho 301:
302: XFREE (MTYPE_ISIS_AREA, area);
303:
1.1.1.2 misho 304: if (listcount (isis->area_list) == 0)
305: {
306: memset (isis->sysid, 0, ISIS_SYS_ID_LEN);
307: isis->sysid_set = 0;
308: }
1.1 misho 309:
310: return CMD_SUCCESS;
311: }
312:
313: int
1.1.1.2 misho 314: area_net_title (struct vty *vty, const char *net_title)
1.1 misho 315: {
316: struct isis_area *area;
317: struct area_addr *addr;
318: struct area_addr *addrp;
319: struct listnode *node;
320:
321: u_char buff[255];
322: area = vty->index;
323:
324: if (!area)
325: {
326: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
1.1.1.2 misho 327: return CMD_ERR_NO_MATCH;
1.1 misho 328: }
329:
330: /* We check that we are not over the maximal number of addresses */
331: if (listcount (area->area_addrs) >= isis->max_area_addrs)
332: {
333: vty_out (vty, "Maximum of area addresses (%d) already reached %s",
334: isis->max_area_addrs, VTY_NEWLINE);
1.1.1.2 misho 335: return CMD_ERR_NOTHING_TODO;
1.1 misho 336: }
337:
338: addr = XMALLOC (MTYPE_ISIS_AREA_ADDR, sizeof (struct area_addr));
339: addr->addr_len = dotformat2buff (buff, net_title);
340: memcpy (addr->area_addr, buff, addr->addr_len);
341: #ifdef EXTREME_DEBUG
342: zlog_debug ("added area address %s for area %s (address length %d)",
343: net_title, area->area_tag, addr->addr_len);
344: #endif /* EXTREME_DEBUG */
345: if (addr->addr_len < 8 || addr->addr_len > 20)
346: {
1.1.1.2 misho 347: vty_out (vty, "area address must be at least 8..20 octets long (%d)%s",
348: addr->addr_len, VTY_NEWLINE);
349: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
350: return CMD_ERR_AMBIGUOUS;
351: }
352:
353: if (addr->area_addr[addr->addr_len-1] != 0)
354: {
355: vty_out (vty, "nsel byte (last byte) in area address must be 0%s",
356: VTY_NEWLINE);
1.1 misho 357: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
1.1.1.2 misho 358: return CMD_ERR_AMBIGUOUS;
1.1 misho 359: }
360:
361: if (isis->sysid_set == 0)
362: {
363: /*
364: * First area address - get the SystemID for this router
365: */
1.1.1.2 misho 366: memcpy (isis->sysid, GETSYSID (addr), ISIS_SYS_ID_LEN);
1.1 misho 367: isis->sysid_set = 1;
368: if (isis->debugs & DEBUG_EVENTS)
369: zlog_debug ("Router has SystemID %s", sysid_print (isis->sysid));
370: }
371: else
372: {
373: /*
374: * Check that the SystemID portions match
375: */
1.1.1.2 misho 376: if (memcmp (isis->sysid, GETSYSID (addr), ISIS_SYS_ID_LEN))
1.1 misho 377: {
378: vty_out (vty,
379: "System ID must not change when defining additional area"
380: " addresses%s", VTY_NEWLINE);
381: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
1.1.1.2 misho 382: return CMD_ERR_AMBIGUOUS;
1.1 misho 383: }
384:
385: /* now we see that we don't already have this address */
386: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node, addrp))
387: {
1.1.1.2 misho 388: if ((addrp->addr_len + ISIS_SYS_ID_LEN + ISIS_NSEL_LEN) != (addr->addr_len))
1.1 misho 389: continue;
390: if (!memcmp (addrp->area_addr, addr->area_addr, addr->addr_len))
391: {
392: XFREE (MTYPE_ISIS_AREA_ADDR, addr);
393: return CMD_SUCCESS; /* silent fail */
394: }
395: }
396: }
1.1.1.2 misho 397:
1.1 misho 398: /*
399: * Forget the systemID part of the address
400: */
1.1.1.2 misho 401: addr->addr_len -= (ISIS_SYS_ID_LEN + ISIS_NSEL_LEN);
1.1 misho 402: listnode_add (area->area_addrs, addr);
403:
404: /* only now we can safely generate our LSPs for this area */
405: if (listcount (area->area_addrs) > 0)
406: {
1.1.1.2 misho 407: if (area->is_type & IS_LEVEL_1)
408: lsp_generate (area, IS_LEVEL_1);
409: if (area->is_type & IS_LEVEL_2)
410: lsp_generate (area, IS_LEVEL_2);
1.1 misho 411: }
412:
413: return CMD_SUCCESS;
414: }
415:
416: int
1.1.1.2 misho 417: area_clear_net_title (struct vty *vty, const char *net_title)
1.1 misho 418: {
419: struct isis_area *area;
420: struct area_addr addr, *addrp = NULL;
421: struct listnode *node;
422: u_char buff[255];
423:
424: area = vty->index;
425: if (!area)
426: {
427: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
1.1.1.2 misho 428: return CMD_ERR_NO_MATCH;
1.1 misho 429: }
430:
431: addr.addr_len = dotformat2buff (buff, net_title);
432: if (addr.addr_len < 8 || addr.addr_len > 20)
433: {
434: vty_out (vty, "Unsupported area address length %d, should be 8...20 %s",
435: addr.addr_len, VTY_NEWLINE);
1.1.1.2 misho 436: return CMD_ERR_AMBIGUOUS;
1.1 misho 437: }
438:
439: memcpy (addr.area_addr, buff, (int) addr.addr_len);
440:
441: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node, addrp))
1.1.1.2 misho 442: if ((addrp->addr_len + ISIS_SYS_ID_LEN + 1) == addr.addr_len &&
1.1 misho 443: !memcmp (addrp->area_addr, addr.area_addr, addr.addr_len))
444: break;
445:
446: if (!addrp)
447: {
448: vty_out (vty, "No area address %s for area %s %s", net_title,
449: area->area_tag, VTY_NEWLINE);
1.1.1.2 misho 450: return CMD_ERR_NO_MATCH;
1.1 misho 451: }
452:
453: listnode_delete (area->area_addrs, addrp);
1.1.1.2 misho 454: XFREE (MTYPE_ISIS_AREA_ADDR, addrp);
455:
456: /*
457: * Last area address - reset the SystemID for this router
458: */
459: if (listcount (area->area_addrs) == 0)
460: {
461: memset (isis->sysid, 0, ISIS_SYS_ID_LEN);
462: isis->sysid_set = 0;
463: if (isis->debugs & DEBUG_EVENTS)
464: zlog_debug ("Router has no SystemID");
465: }
1.1 misho 466:
467: return CMD_SUCCESS;
468: }
469:
470: /*
1.1.1.2 misho 471: * 'show isis interface' command
1.1 misho 472: */
473:
474: int
1.1.1.2 misho 475: show_isis_interface_common (struct vty *vty, const char *ifname, char detail)
1.1 misho 476: {
477: struct listnode *anode, *cnode;
478: struct isis_area *area;
479: struct isis_circuit *circuit;
480:
481: if (!isis)
482: {
483: vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
484: return CMD_SUCCESS;
485: }
486:
487: for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
488: {
489: vty_out (vty, "Area %s:%s", area->area_tag, VTY_NEWLINE);
490:
491: if (detail == ISIS_UI_LEVEL_BRIEF)
1.1.1.2 misho 492: vty_out (vty, " Interface CircId State Type Level%s",
493: VTY_NEWLINE);
1.1 misho 494:
495: for (ALL_LIST_ELEMENTS_RO (area->circuit_list, cnode, circuit))
1.1.1.2 misho 496: if (!ifname)
497: isis_circuit_print_vty (circuit, vty, detail);
498: else if (strcmp(circuit->interface->name, ifname) == 0)
499: isis_circuit_print_vty (circuit, vty, detail);
1.1 misho 500: }
501:
502: return CMD_SUCCESS;
503: }
504:
1.1.1.2 misho 505: DEFUN (show_isis_interface,
506: show_isis_interface_cmd,
507: "show isis interface",
1.1 misho 508: SHOW_STR
1.1.1.2 misho 509: "ISIS network information\n"
510: "ISIS interface\n")
1.1 misho 511: {
1.1.1.2 misho 512: return show_isis_interface_common (vty, NULL, ISIS_UI_LEVEL_BRIEF);
1.1 misho 513: }
514:
1.1.1.2 misho 515: DEFUN (show_isis_interface_detail,
516: show_isis_interface_detail_cmd,
517: "show isis interface detail",
1.1 misho 518: SHOW_STR
1.1.1.2 misho 519: "ISIS network information\n"
520: "ISIS interface\n"
521: "show detailed information\n")
522: {
523: return show_isis_interface_common (vty, NULL, ISIS_UI_LEVEL_DETAIL);
524: }
1.1 misho 525:
1.1.1.2 misho 526: DEFUN (show_isis_interface_arg,
527: show_isis_interface_arg_cmd,
528: "show isis interface WORD",
1.1 misho 529: SHOW_STR
1.1.1.2 misho 530: "ISIS network information\n"
531: "ISIS interface\n"
532: "ISIS interface name\n")
533: {
534: return show_isis_interface_common (vty, argv[0], ISIS_UI_LEVEL_DETAIL);
535: }
536:
537: /*
538: * 'show isis neighbor' command
539: */
540:
541: int
542: show_isis_neighbor_common (struct vty *vty, const char *id, char detail)
543: {
544: struct listnode *anode, *cnode, *node;
545: struct isis_area *area;
546: struct isis_circuit *circuit;
547: struct list *adjdb;
548: struct isis_adjacency *adj;
549: struct isis_dynhn *dynhn;
550: u_char sysid[ISIS_SYS_ID_LEN];
551: int i;
552:
553: if (!isis)
554: {
555: vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
556: return CMD_SUCCESS;
557: }
558:
559: memset (sysid, 0, ISIS_SYS_ID_LEN);
560: if (id)
561: {
562: if (sysid2buff (sysid, id) == 0)
563: {
564: dynhn = dynhn_find_by_name (id);
565: if (dynhn == NULL)
566: {
567: vty_out (vty, "Invalid system id %s%s", id, VTY_NEWLINE);
568: return CMD_SUCCESS;
569: }
570: memcpy (sysid, dynhn->id, ISIS_SYS_ID_LEN);
571: }
572: }
573:
574: for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
575: {
576: vty_out (vty, "Area %s:%s", area->area_tag, VTY_NEWLINE);
577:
578: if (detail == ISIS_UI_LEVEL_BRIEF)
579: vty_out (vty, " System Id Interface L State"
580: " Holdtime SNPA%s", VTY_NEWLINE);
581:
582: for (ALL_LIST_ELEMENTS_RO (area->circuit_list, cnode, circuit))
583: {
584: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
585: {
586: for (i = 0; i < 2; i++)
587: {
588: adjdb = circuit->u.bc.adjdb[i];
589: if (adjdb && adjdb->count)
590: {
591: for (ALL_LIST_ELEMENTS_RO (adjdb, node, adj))
592: if (!id || !memcmp (adj->sysid, sysid,
593: ISIS_SYS_ID_LEN))
594: isis_adj_print_vty (adj, vty, detail);
595: }
596: }
597: }
598: else if (circuit->circ_type == CIRCUIT_T_P2P &&
599: circuit->u.p2p.neighbor)
600: {
601: adj = circuit->u.p2p.neighbor;
602: if (!id || !memcmp (adj->sysid, sysid, ISIS_SYS_ID_LEN))
603: isis_adj_print_vty (adj, vty, detail);
604: }
605: }
606: }
607:
608: return CMD_SUCCESS;
609: }
610:
611: /*
612: * 'clear isis neighbor' command
613: */
614: int
615: clear_isis_neighbor_common (struct vty *vty, const char *id)
616: {
617: struct listnode *anode, *cnode, *cnextnode, *node, *nnode;
618: struct isis_area *area;
619: struct isis_circuit *circuit;
620: struct list *adjdb;
621: struct isis_adjacency *adj;
622: struct isis_dynhn *dynhn;
623: u_char sysid[ISIS_SYS_ID_LEN];
624: int i;
625:
626: if (!isis)
627: {
628: vty_out (vty, "IS-IS Routing Process not enabled%s", VTY_NEWLINE);
629: return CMD_SUCCESS;
630: }
631:
632: memset (sysid, 0, ISIS_SYS_ID_LEN);
633: if (id)
634: {
635: if (sysid2buff (sysid, id) == 0)
636: {
637: dynhn = dynhn_find_by_name (id);
638: if (dynhn == NULL)
639: {
640: vty_out (vty, "Invalid system id %s%s", id, VTY_NEWLINE);
641: return CMD_SUCCESS;
642: }
643: memcpy (sysid, dynhn->id, ISIS_SYS_ID_LEN);
644: }
645: }
646:
647: for (ALL_LIST_ELEMENTS_RO (isis->area_list, anode, area))
648: {
649: for (ALL_LIST_ELEMENTS (area->circuit_list, cnode, cnextnode, circuit))
650: {
651: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
652: {
653: for (i = 0; i < 2; i++)
654: {
655: adjdb = circuit->u.bc.adjdb[i];
656: if (adjdb && adjdb->count)
657: {
658: for (ALL_LIST_ELEMENTS (adjdb, node, nnode, adj))
659: if (!id || !memcmp (adj->sysid, sysid, ISIS_SYS_ID_LEN))
660: isis_adj_state_change (adj, ISIS_ADJ_DOWN,
661: "clear user request");
662: }
663: }
664: }
665: else if (circuit->circ_type == CIRCUIT_T_P2P &&
666: circuit->u.p2p.neighbor)
667: {
668: adj = circuit->u.p2p.neighbor;
669: if (!id || !memcmp (adj->sysid, sysid, ISIS_SYS_ID_LEN))
670: isis_adj_state_change (adj, ISIS_ADJ_DOWN,
671: "clear user request");
672: }
673: }
674: }
675:
676: return CMD_SUCCESS;
677: }
678:
679: DEFUN (show_isis_neighbor,
680: show_isis_neighbor_cmd,
681: "show isis neighbor",
682: SHOW_STR
683: "ISIS network information\n"
684: "ISIS neighbor adjacencies\n")
1.1 misho 685: {
1.1.1.2 misho 686: return show_isis_neighbor_common (vty, NULL, ISIS_UI_LEVEL_BRIEF);
1.1 misho 687: }
688:
1.1.1.2 misho 689: DEFUN (show_isis_neighbor_detail,
690: show_isis_neighbor_detail_cmd,
691: "show isis neighbor detail",
1.1 misho 692: SHOW_STR
1.1.1.2 misho 693: "ISIS network information\n"
694: "ISIS neighbor adjacencies\n"
1.1 misho 695: "show detailed information\n")
1.1.1.2 misho 696: {
697: return show_isis_neighbor_common (vty, NULL, ISIS_UI_LEVEL_DETAIL);
698: }
699:
700: DEFUN (show_isis_neighbor_arg,
701: show_isis_neighbor_arg_cmd,
702: "show isis neighbor WORD",
703: SHOW_STR
704: "ISIS network information\n"
705: "ISIS neighbor adjacencies\n"
706: "System id\n")
707: {
708: return show_isis_neighbor_common (vty, argv[0], ISIS_UI_LEVEL_DETAIL);
709: }
710:
711: DEFUN (clear_isis_neighbor,
712: clear_isis_neighbor_cmd,
713: "clear isis neighbor",
714: CLEAR_STR
715: "Reset ISIS network information\n"
716: "Reset ISIS neighbor adjacencies\n")
717: {
718: return clear_isis_neighbor_common (vty, NULL);
719: }
720:
721: DEFUN (clear_isis_neighbor_arg,
722: clear_isis_neighbor_arg_cmd,
723: "clear isis neighbor WORD",
724: CLEAR_STR
725: "ISIS network information\n"
726: "ISIS neighbor adjacencies\n"
727: "System id\n")
728: {
729: return clear_isis_neighbor_common (vty, argv[0]);
730: }
731:
1.1 misho 732: /*
733: * 'isis debug', 'show debugging'
734: */
735: void
736: print_debug (struct vty *vty, int flags, int onoff)
737: {
738: char onoffs[4];
739: if (onoff)
740: strcpy (onoffs, "on");
741: else
742: strcpy (onoffs, "off");
743:
744: if (flags & DEBUG_ADJ_PACKETS)
745: vty_out (vty, "IS-IS Adjacency related packets debugging is %s%s", onoffs,
746: VTY_NEWLINE);
747: if (flags & DEBUG_CHECKSUM_ERRORS)
748: vty_out (vty, "IS-IS checksum errors debugging is %s%s", onoffs,
749: VTY_NEWLINE);
750: if (flags & DEBUG_LOCAL_UPDATES)
751: vty_out (vty, "IS-IS local updates debugging is %s%s", onoffs,
752: VTY_NEWLINE);
753: if (flags & DEBUG_PROTOCOL_ERRORS)
754: vty_out (vty, "IS-IS protocol errors debugging is %s%s", onoffs,
755: VTY_NEWLINE);
756: if (flags & DEBUG_SNP_PACKETS)
757: vty_out (vty, "IS-IS CSNP/PSNP packets debugging is %s%s", onoffs,
758: VTY_NEWLINE);
759: if (flags & DEBUG_SPF_EVENTS)
760: vty_out (vty, "IS-IS SPF events debugging is %s%s", onoffs, VTY_NEWLINE);
761: if (flags & DEBUG_SPF_STATS)
762: vty_out (vty, "IS-IS SPF Timing and Statistics Data debugging is %s%s",
763: onoffs, VTY_NEWLINE);
764: if (flags & DEBUG_SPF_TRIGGERS)
765: vty_out (vty, "IS-IS SPF triggering events debugging is %s%s", onoffs,
766: VTY_NEWLINE);
767: if (flags & DEBUG_UPDATE_PACKETS)
768: vty_out (vty, "IS-IS Update related packet debugging is %s%s", onoffs,
769: VTY_NEWLINE);
770: if (flags & DEBUG_RTE_EVENTS)
771: vty_out (vty, "IS-IS Route related debuggin is %s%s", onoffs,
772: VTY_NEWLINE);
773: if (flags & DEBUG_EVENTS)
774: vty_out (vty, "IS-IS Event debugging is %s%s", onoffs, VTY_NEWLINE);
1.1.1.2 misho 775: if (flags & DEBUG_PACKET_DUMP)
776: vty_out (vty, "IS-IS Packet dump debugging is %s%s", onoffs, VTY_NEWLINE);
1.1 misho 777: }
778:
779: DEFUN (show_debugging,
780: show_debugging_cmd,
781: "show debugging",
782: SHOW_STR
783: "State of each debugging option\n")
784: {
785: vty_out (vty, "IS-IS:%s", VTY_NEWLINE);
786: print_debug (vty, isis->debugs, 1);
787: return CMD_SUCCESS;
788: }
789:
790: /* Debug node. */
791: static struct cmd_node debug_node = {
792: DEBUG_NODE,
793: "",
794: 1
795: };
796:
797: static int
798: config_write_debug (struct vty *vty)
799: {
800: int write = 0;
801: int flags = isis->debugs;
802:
803: if (flags & DEBUG_ADJ_PACKETS)
804: {
805: vty_out (vty, "debug isis adj-packets%s", VTY_NEWLINE);
806: write++;
807: }
808: if (flags & DEBUG_CHECKSUM_ERRORS)
809: {
810: vty_out (vty, "debug isis checksum-errors%s", VTY_NEWLINE);
811: write++;
812: }
813: if (flags & DEBUG_LOCAL_UPDATES)
814: {
815: vty_out (vty, "debug isis local-updates%s", VTY_NEWLINE);
816: write++;
817: }
818: if (flags & DEBUG_PROTOCOL_ERRORS)
819: {
820: vty_out (vty, "debug isis protocol-errors%s", VTY_NEWLINE);
821: write++;
822: }
823: if (flags & DEBUG_SNP_PACKETS)
824: {
825: vty_out (vty, "debug isis snp-packets%s", VTY_NEWLINE);
826: write++;
827: }
828: if (flags & DEBUG_SPF_EVENTS)
829: {
830: vty_out (vty, "debug isis spf-events%s", VTY_NEWLINE);
831: write++;
832: }
833: if (flags & DEBUG_SPF_STATS)
834: {
835: vty_out (vty, "debug isis spf-statistics%s", VTY_NEWLINE);
836: write++;
837: }
838: if (flags & DEBUG_SPF_TRIGGERS)
839: {
840: vty_out (vty, "debug isis spf-triggers%s", VTY_NEWLINE);
841: write++;
842: }
843: if (flags & DEBUG_UPDATE_PACKETS)
844: {
845: vty_out (vty, "debug isis update-packets%s", VTY_NEWLINE);
846: write++;
847: }
848: if (flags & DEBUG_RTE_EVENTS)
849: {
850: vty_out (vty, "debug isis route-events%s", VTY_NEWLINE);
851: write++;
852: }
853: if (flags & DEBUG_EVENTS)
854: {
855: vty_out (vty, "debug isis events%s", VTY_NEWLINE);
856: write++;
857: }
1.1.1.2 misho 858: if (flags & DEBUG_PACKET_DUMP)
859: {
860: vty_out (vty, "debug isis packet-dump%s", VTY_NEWLINE);
861: write++;
862: }
1.1 misho 863:
864: return write;
865: }
866:
867: DEFUN (debug_isis_adj,
868: debug_isis_adj_cmd,
869: "debug isis adj-packets",
870: DEBUG_STR
871: "IS-IS information\n"
872: "IS-IS Adjacency related packets\n")
873: {
874: isis->debugs |= DEBUG_ADJ_PACKETS;
875: print_debug (vty, DEBUG_ADJ_PACKETS, 1);
876:
877: return CMD_SUCCESS;
878: }
879:
880: DEFUN (no_debug_isis_adj,
881: no_debug_isis_adj_cmd,
882: "no debug isis adj-packets",
883: UNDEBUG_STR
884: "IS-IS information\n"
885: "IS-IS Adjacency related packets\n")
886: {
887: isis->debugs &= ~DEBUG_ADJ_PACKETS;
888: print_debug (vty, DEBUG_ADJ_PACKETS, 0);
889:
890: return CMD_SUCCESS;
891: }
892:
893: DEFUN (debug_isis_csum,
894: debug_isis_csum_cmd,
895: "debug isis checksum-errors",
896: DEBUG_STR
897: "IS-IS information\n"
898: "IS-IS LSP checksum errors\n")
899: {
900: isis->debugs |= DEBUG_CHECKSUM_ERRORS;
901: print_debug (vty, DEBUG_CHECKSUM_ERRORS, 1);
902:
903: return CMD_SUCCESS;
904: }
905:
906: DEFUN (no_debug_isis_csum,
907: no_debug_isis_csum_cmd,
908: "no debug isis checksum-errors",
909: UNDEBUG_STR
910: "IS-IS information\n"
911: "IS-IS LSP checksum errors\n")
912: {
913: isis->debugs &= ~DEBUG_CHECKSUM_ERRORS;
914: print_debug (vty, DEBUG_CHECKSUM_ERRORS, 0);
915:
916: return CMD_SUCCESS;
917: }
918:
919: DEFUN (debug_isis_lupd,
920: debug_isis_lupd_cmd,
921: "debug isis local-updates",
922: DEBUG_STR
923: "IS-IS information\n"
924: "IS-IS local update packets\n")
925: {
926: isis->debugs |= DEBUG_LOCAL_UPDATES;
927: print_debug (vty, DEBUG_LOCAL_UPDATES, 1);
928:
929: return CMD_SUCCESS;
930: }
931:
932: DEFUN (no_debug_isis_lupd,
933: no_debug_isis_lupd_cmd,
934: "no debug isis local-updates",
935: UNDEBUG_STR
936: "IS-IS information\n"
937: "IS-IS local update packets\n")
938: {
939: isis->debugs &= ~DEBUG_LOCAL_UPDATES;
940: print_debug (vty, DEBUG_LOCAL_UPDATES, 0);
941:
942: return CMD_SUCCESS;
943: }
944:
945: DEFUN (debug_isis_err,
946: debug_isis_err_cmd,
947: "debug isis protocol-errors",
948: DEBUG_STR
949: "IS-IS information\n"
950: "IS-IS LSP protocol errors\n")
951: {
952: isis->debugs |= DEBUG_PROTOCOL_ERRORS;
953: print_debug (vty, DEBUG_PROTOCOL_ERRORS, 1);
954:
955: return CMD_SUCCESS;
956: }
957:
958: DEFUN (no_debug_isis_err,
959: no_debug_isis_err_cmd,
960: "no debug isis protocol-errors",
961: UNDEBUG_STR
962: "IS-IS information\n"
963: "IS-IS LSP protocol errors\n")
964: {
965: isis->debugs &= ~DEBUG_PROTOCOL_ERRORS;
966: print_debug (vty, DEBUG_PROTOCOL_ERRORS, 0);
967:
968: return CMD_SUCCESS;
969: }
970:
971: DEFUN (debug_isis_snp,
972: debug_isis_snp_cmd,
973: "debug isis snp-packets",
974: DEBUG_STR
975: "IS-IS information\n"
976: "IS-IS CSNP/PSNP packets\n")
977: {
978: isis->debugs |= DEBUG_SNP_PACKETS;
979: print_debug (vty, DEBUG_SNP_PACKETS, 1);
980:
981: return CMD_SUCCESS;
982: }
983:
984: DEFUN (no_debug_isis_snp,
985: no_debug_isis_snp_cmd,
986: "no debug isis snp-packets",
987: UNDEBUG_STR
988: "IS-IS information\n"
989: "IS-IS CSNP/PSNP packets\n")
990: {
991: isis->debugs &= ~DEBUG_SNP_PACKETS;
992: print_debug (vty, DEBUG_SNP_PACKETS, 0);
993:
994: return CMD_SUCCESS;
995: }
996:
997: DEFUN (debug_isis_upd,
998: debug_isis_upd_cmd,
999: "debug isis update-packets",
1000: DEBUG_STR
1001: "IS-IS information\n"
1002: "IS-IS Update related packets\n")
1003: {
1004: isis->debugs |= DEBUG_UPDATE_PACKETS;
1005: print_debug (vty, DEBUG_UPDATE_PACKETS, 1);
1006:
1007: return CMD_SUCCESS;
1008: }
1009:
1010: DEFUN (no_debug_isis_upd,
1011: no_debug_isis_upd_cmd,
1012: "no debug isis update-packets",
1013: UNDEBUG_STR
1014: "IS-IS information\n"
1015: "IS-IS Update related packets\n")
1016: {
1017: isis->debugs &= ~DEBUG_UPDATE_PACKETS;
1018: print_debug (vty, DEBUG_UPDATE_PACKETS, 0);
1019:
1020: return CMD_SUCCESS;
1021: }
1022:
1023: DEFUN (debug_isis_spfevents,
1024: debug_isis_spfevents_cmd,
1025: "debug isis spf-events",
1026: DEBUG_STR
1027: "IS-IS information\n"
1028: "IS-IS Shortest Path First Events\n")
1029: {
1030: isis->debugs |= DEBUG_SPF_EVENTS;
1031: print_debug (vty, DEBUG_SPF_EVENTS, 1);
1032:
1033: return CMD_SUCCESS;
1034: }
1035:
1036: DEFUN (no_debug_isis_spfevents,
1037: no_debug_isis_spfevents_cmd,
1038: "no debug isis spf-events",
1039: UNDEBUG_STR
1040: "IS-IS information\n"
1041: "IS-IS Shortest Path First Events\n")
1042: {
1043: isis->debugs &= ~DEBUG_SPF_EVENTS;
1044: print_debug (vty, DEBUG_SPF_EVENTS, 0);
1045:
1046: return CMD_SUCCESS;
1047: }
1048:
1049: DEFUN (debug_isis_spfstats,
1050: debug_isis_spfstats_cmd,
1051: "debug isis spf-statistics ",
1052: DEBUG_STR
1053: "IS-IS information\n"
1054: "IS-IS SPF Timing and Statistic Data\n")
1055: {
1056: isis->debugs |= DEBUG_SPF_STATS;
1057: print_debug (vty, DEBUG_SPF_STATS, 1);
1058:
1059: return CMD_SUCCESS;
1060: }
1061:
1062: DEFUN (no_debug_isis_spfstats,
1063: no_debug_isis_spfstats_cmd,
1064: "no debug isis spf-statistics",
1065: UNDEBUG_STR
1066: "IS-IS information\n"
1067: "IS-IS SPF Timing and Statistic Data\n")
1068: {
1069: isis->debugs &= ~DEBUG_SPF_STATS;
1070: print_debug (vty, DEBUG_SPF_STATS, 0);
1071:
1072: return CMD_SUCCESS;
1073: }
1074:
1075: DEFUN (debug_isis_spftrigg,
1076: debug_isis_spftrigg_cmd,
1077: "debug isis spf-triggers",
1078: DEBUG_STR
1079: "IS-IS information\n"
1080: "IS-IS SPF triggering events\n")
1081: {
1082: isis->debugs |= DEBUG_SPF_TRIGGERS;
1083: print_debug (vty, DEBUG_SPF_TRIGGERS, 1);
1084:
1085: return CMD_SUCCESS;
1086: }
1087:
1088: DEFUN (no_debug_isis_spftrigg,
1089: no_debug_isis_spftrigg_cmd,
1090: "no debug isis spf-triggers",
1091: UNDEBUG_STR
1092: "IS-IS information\n"
1093: "IS-IS SPF triggering events\n")
1094: {
1095: isis->debugs &= ~DEBUG_SPF_TRIGGERS;
1096: print_debug (vty, DEBUG_SPF_TRIGGERS, 0);
1097:
1098: return CMD_SUCCESS;
1099: }
1100:
1101: DEFUN (debug_isis_rtevents,
1102: debug_isis_rtevents_cmd,
1103: "debug isis route-events",
1104: DEBUG_STR
1105: "IS-IS information\n"
1106: "IS-IS Route related events\n")
1107: {
1108: isis->debugs |= DEBUG_RTE_EVENTS;
1109: print_debug (vty, DEBUG_RTE_EVENTS, 1);
1110:
1111: return CMD_SUCCESS;
1112: }
1113:
1114: DEFUN (no_debug_isis_rtevents,
1115: no_debug_isis_rtevents_cmd,
1116: "no debug isis route-events",
1117: UNDEBUG_STR
1118: "IS-IS information\n"
1119: "IS-IS Route related events\n")
1120: {
1121: isis->debugs &= ~DEBUG_RTE_EVENTS;
1122: print_debug (vty, DEBUG_RTE_EVENTS, 0);
1123:
1124: return CMD_SUCCESS;
1125: }
1126:
1127: DEFUN (debug_isis_events,
1128: debug_isis_events_cmd,
1129: "debug isis events",
1130: DEBUG_STR
1131: "IS-IS information\n"
1132: "IS-IS Events\n")
1133: {
1134: isis->debugs |= DEBUG_EVENTS;
1135: print_debug (vty, DEBUG_EVENTS, 1);
1136:
1137: return CMD_SUCCESS;
1138: }
1139:
1140: DEFUN (no_debug_isis_events,
1141: no_debug_isis_events_cmd,
1142: "no debug isis events",
1143: UNDEBUG_STR
1144: "IS-IS information\n"
1145: "IS-IS Events\n")
1146: {
1147: isis->debugs &= ~DEBUG_EVENTS;
1148: print_debug (vty, DEBUG_EVENTS, 0);
1149:
1150: return CMD_SUCCESS;
1151: }
1152:
1.1.1.2 misho 1153: DEFUN (debug_isis_packet_dump,
1154: debug_isis_packet_dump_cmd,
1155: "debug isis packet-dump",
1156: DEBUG_STR
1157: "IS-IS information\n"
1158: "IS-IS packet dump\n")
1159: {
1160: isis->debugs |= DEBUG_PACKET_DUMP;
1161: print_debug (vty, DEBUG_PACKET_DUMP, 1);
1162:
1163: return CMD_SUCCESS;
1164: }
1165:
1166: DEFUN (no_debug_isis_packet_dump,
1167: no_debug_isis_packet_dump_cmd,
1168: "no debug isis packet-dump",
1169: UNDEBUG_STR
1170: "IS-IS information\n"
1171: "IS-IS packet dump\n")
1172: {
1173: isis->debugs &= ~DEBUG_PACKET_DUMP;
1174: print_debug (vty, DEBUG_PACKET_DUMP, 0);
1175:
1176: return CMD_SUCCESS;
1177: }
1178:
1.1 misho 1179: DEFUN (show_hostname,
1180: show_hostname_cmd,
1181: "show isis hostname",
1182: SHOW_STR
1183: "IS-IS information\n"
1184: "IS-IS Dynamic hostname mapping\n")
1185: {
1186: dynhn_print_all (vty);
1187:
1188: return CMD_SUCCESS;
1189: }
1190:
1.1.1.2 misho 1191: static void
1192: vty_out_timestr(struct vty *vty, time_t uptime)
1.1 misho 1193: {
1.1.1.2 misho 1194: struct tm *tm;
1195: time_t difftime = time (NULL);
1196: difftime -= uptime;
1197: tm = gmtime (&difftime);
1198:
1199: #define ONE_DAY_SECOND 60*60*24
1200: #define ONE_WEEK_SECOND 60*60*24*7
1201: if (difftime < ONE_DAY_SECOND)
1202: vty_out (vty, "%02d:%02d:%02d",
1203: tm->tm_hour, tm->tm_min, tm->tm_sec);
1204: else if (difftime < ONE_WEEK_SECOND)
1205: vty_out (vty, "%dd%02dh%02dm",
1206: tm->tm_yday, tm->tm_hour, tm->tm_min);
1207: else
1208: vty_out (vty, "%02dw%dd%02dh",
1209: tm->tm_yday/7,
1210: tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
1211: vty_out (vty, " ago");
1212: }
1213:
1214: DEFUN (show_isis_summary,
1215: show_isis_summary_cmd,
1216: "show isis summary",
1217: SHOW_STR "IS-IS information\n" "IS-IS summary\n")
1218: {
1219: struct listnode *node, *node2;
1.1 misho 1220: struct isis_area *area;
1.1.1.2 misho 1221: struct isis_spftree *spftree;
1222: int level;
1.1 misho 1223:
1.1.1.2 misho 1224: if (isis == NULL)
1225: {
1226: vty_out (vty, "ISIS is not running%s", VTY_NEWLINE);
1.1 misho 1227: return CMD_SUCCESS;
1.1.1.2 misho 1228: }
1229:
1230: vty_out (vty, "Process Id : %ld%s", isis->process_id,
1231: VTY_NEWLINE);
1232: if (isis->sysid_set)
1233: vty_out (vty, "System Id : %s%s", sysid_print (isis->sysid),
1234: VTY_NEWLINE);
1235:
1236: vty_out (vty, "Up time : ");
1237: vty_out_timestr(vty, isis->uptime);
1238: vty_out (vty, "%s", VTY_NEWLINE);
1239:
1240: if (isis->area_list)
1241: vty_out (vty, "Number of areas : %d%s", isis->area_list->count,
1242: VTY_NEWLINE);
1.1 misho 1243:
1244: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
1.1.1.2 misho 1245: {
1246: vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
1247: VTY_NEWLINE);
1248:
1249: if (listcount (area->area_addrs) > 0)
1.1 misho 1250: {
1.1.1.2 misho 1251: struct area_addr *area_addr;
1252: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node2, area_addr))
1253: {
1254: vty_out (vty, " Net: %s%s",
1255: isonet_print (area_addr->area_addr,
1256: area_addr->addr_len + ISIS_SYS_ID_LEN +
1257: 1), VTY_NEWLINE);
1258: }
1259: }
1260:
1261: for (level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++)
1262: {
1263: if ((area->is_type & level) == 0)
1264: continue;
1.1 misho 1265:
1.1.1.2 misho 1266: vty_out (vty, " Level-%d:%s", level, VTY_NEWLINE);
1267: spftree = area->spftree[level - 1];
1268: if (spftree->pending)
1269: vty_out (vty, " IPv4 SPF: (pending)%s", VTY_NEWLINE);
1270: else
1271: vty_out (vty, " IPv4 SPF:%s", VTY_NEWLINE);
1.1 misho 1272:
1.1.1.2 misho 1273: vty_out (vty, " minimum interval : %d%s",
1274: area->min_spf_interval[level - 1], VTY_NEWLINE);
1275:
1276: vty_out (vty, " last run elapsed : ");
1277: vty_out_timestr(vty, spftree->last_run_timestamp);
1278: vty_out (vty, "%s", VTY_NEWLINE);
1279:
1280: vty_out (vty, " last run duration : %u usec%s",
1281: (u_int32_t)spftree->last_run_duration, VTY_NEWLINE);
1282:
1283: vty_out (vty, " run count : %d%s",
1284: spftree->runcount, VTY_NEWLINE);
1285:
1286: #ifdef HAVE_IPV6
1287: spftree = area->spftree6[level - 1];
1288: if (spftree->pending)
1289: vty_out (vty, " IPv6 SPF: (pending)%s", VTY_NEWLINE);
1290: else
1291: vty_out (vty, " IPv6 SPF:%s", VTY_NEWLINE);
1292:
1293: vty_out (vty, " minimum interval : %d%s",
1294: area->min_spf_interval[level - 1], VTY_NEWLINE);
1295:
1296: vty_out (vty, " last run elapsed : ");
1297: vty_out_timestr(vty, spftree->last_run_timestamp);
1298: vty_out (vty, "%s", VTY_NEWLINE);
1299:
1300: vty_out (vty, " last run duration : %u msec%s",
1301: spftree->last_run_duration, VTY_NEWLINE);
1302:
1303: vty_out (vty, " run count : %d%s",
1304: spftree->runcount, VTY_NEWLINE);
1305: #endif
1.1 misho 1306: }
1.1.1.2 misho 1307: }
1308: vty_out (vty, "%s", VTY_NEWLINE);
1.1 misho 1309:
1310: return CMD_SUCCESS;
1311: }
1312:
1.1.1.2 misho 1313: /*
1314: * This function supports following display options:
1315: * [ show isis database [detail] ]
1316: * [ show isis database <sysid> [detail] ]
1317: * [ show isis database <hostname> [detail] ]
1318: * [ show isis database <sysid>.<pseudo-id> [detail] ]
1319: * [ show isis database <hostname>.<pseudo-id> [detail] ]
1320: * [ show isis database <sysid>.<pseudo-id>-<fragment-number> [detail] ]
1321: * [ show isis database <hostname>.<pseudo-id>-<fragment-number> [detail] ]
1322: * [ show isis database detail <sysid> ]
1323: * [ show isis database detail <hostname> ]
1324: * [ show isis database detail <sysid>.<pseudo-id> ]
1325: * [ show isis database detail <hostname>.<pseudo-id> ]
1326: * [ show isis database detail <sysid>.<pseudo-id>-<fragment-number> ]
1327: * [ show isis database detail <hostname>.<pseudo-id>-<fragment-number> ]
1328: */
1329: static int
1330: show_isis_database (struct vty *vty, const char *argv, int ui_level)
1.1 misho 1331: {
1332: struct listnode *node;
1333: struct isis_area *area;
1.1.1.2 misho 1334: struct isis_lsp *lsp;
1335: struct isis_dynhn *dynhn;
1336: const char *pos = argv;
1337: u_char lspid[ISIS_SYS_ID_LEN+2];
1338: char sysid[255];
1339: u_char number[3];
1.1 misho 1340: int level, lsp_count;
1341:
1342: if (isis->area_list->count == 0)
1343: return CMD_SUCCESS;
1344:
1.1.1.2 misho 1345: memset (&lspid, 0, ISIS_SYS_ID_LEN);
1346: memset (&sysid, 0, 255);
1347:
1348: /*
1349: * extract fragment and pseudo id from the string argv
1350: * in the forms:
1351: * (a) <systemid/hostname>.<pseudo-id>-<framenent> or
1352: * (b) <systemid/hostname>.<pseudo-id> or
1353: * (c) <systemid/hostname> or
1354: * Where systemid is in the form:
1355: * xxxx.xxxx.xxxx
1356: */
1357: if (argv)
1358: strncpy (sysid, argv, 254);
1359: if (argv && strlen (argv) > 3)
1360: {
1361: pos = argv + strlen (argv) - 3;
1362: if (strncmp (pos, "-", 1) == 0)
1363: {
1364: memcpy (number, ++pos, 2);
1365: lspid[ISIS_SYS_ID_LEN+1] = (u_char) strtol ((char *)number, NULL, 16);
1366: pos -= 4;
1367: if (strncmp (pos, ".", 1) != 0)
1368: return CMD_ERR_AMBIGUOUS;
1369: }
1370: if (strncmp (pos, ".", 1) == 0)
1371: {
1372: memcpy (number, ++pos, 2);
1373: lspid[ISIS_SYS_ID_LEN] = (u_char) strtol ((char *)number, NULL, 16);
1374: sysid[pos - argv - 1] = '\0';
1375: }
1376: }
1377:
1.1 misho 1378: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
1379: {
1380: vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null",
1.1.1.2 misho 1381: VTY_NEWLINE);
1.1 misho 1382:
1.1.1.2 misho 1383: for (level = 0; level < ISIS_LEVELS; level++)
1384: {
1385: if (area->lspdb[level] && dict_count (area->lspdb[level]) > 0)
1386: {
1387: lsp = NULL;
1388: if (argv != NULL)
1389: {
1390: /*
1391: * Try to find the lsp-id if the argv string is in
1392: * the form hostname.<pseudo-id>-<fragment>
1393: */
1394: if (sysid2buff (lspid, sysid))
1395: {
1396: lsp = lsp_search (lspid, area->lspdb[level]);
1397: }
1398: else if ((dynhn = dynhn_find_by_name (sysid)))
1399: {
1400: memcpy (lspid, dynhn->id, ISIS_SYS_ID_LEN);
1401: lsp = lsp_search (lspid, area->lspdb[level]);
1402: }
1403: else if (strncmp(unix_hostname (), sysid, 15) == 0)
1404: {
1405: memcpy (lspid, isis->sysid, ISIS_SYS_ID_LEN);
1406: lsp = lsp_search (lspid, area->lspdb[level]);
1407: }
1408: }
1409:
1410: if (lsp != NULL || argv == NULL)
1411: {
1412: vty_out (vty, "IS-IS Level-%d link-state database:%s",
1413: level + 1, VTY_NEWLINE);
1414:
1415: /* print the title in all cases */
1416: vty_out (vty, "LSP ID PduLen "
1417: "SeqNumber Chksum Holdtime ATT/P/OL%s",
1418: VTY_NEWLINE);
1419: }
1420:
1421: if (lsp)
1422: {
1423: if (ui_level == ISIS_UI_LEVEL_DETAIL)
1424: lsp_print_detail (lsp, vty, area->dynhostname);
1425: else
1426: lsp_print (lsp, vty, area->dynhostname);
1427: }
1428: else if (argv == NULL)
1429: {
1430: lsp_count = lsp_print_all (vty, area->lspdb[level],
1431: ui_level,
1432: area->dynhostname);
1433:
1434: vty_out (vty, " %u LSPs%s%s",
1435: lsp_count, VTY_NEWLINE, VTY_NEWLINE);
1436: }
1437: }
1438: }
1.1 misho 1439: }
1440:
1441: return CMD_SUCCESS;
1442: }
1443:
1.1.1.2 misho 1444: DEFUN (show_database_brief,
1445: show_database_cmd,
1446: "show isis database",
1447: SHOW_STR
1448: "IS-IS information\n"
1449: "IS-IS link state database\n")
1.1 misho 1450: {
1.1.1.2 misho 1451: return show_isis_database (vty, NULL, ISIS_UI_LEVEL_BRIEF);
1.1 misho 1452: }
1453:
1.1.1.2 misho 1454: DEFUN (show_database_lsp_brief,
1455: show_database_arg_cmd,
1456: "show isis database WORD",
1457: SHOW_STR
1458: "IS-IS information\n"
1459: "IS-IS link state database\n"
1460: "LSP ID\n")
1.1 misho 1461: {
1.1.1.2 misho 1462: return show_isis_database (vty, argv[0], ISIS_UI_LEVEL_BRIEF);
1.1 misho 1463: }
1464:
1.1.1.2 misho 1465: DEFUN (show_database_lsp_detail,
1466: show_database_arg_detail_cmd,
1467: "show isis database WORD detail",
1468: SHOW_STR
1469: "IS-IS information\n"
1470: "IS-IS link state database\n"
1471: "LSP ID\n"
1472: "Detailed information\n")
1473: {
1474: return show_isis_database (vty, argv[0], ISIS_UI_LEVEL_DETAIL);
1475: }
1476:
1477: DEFUN (show_database_detail,
1478: show_database_detail_cmd,
1479: "show isis database detail",
1480: SHOW_STR
1481: "IS-IS information\n"
1482: "IS-IS link state database\n")
1483: {
1484: return show_isis_database (vty, NULL, ISIS_UI_LEVEL_DETAIL);
1485: }
1486:
1487: DEFUN (show_database_detail_lsp,
1488: show_database_detail_arg_cmd,
1489: "show isis database detail WORD",
1490: SHOW_STR
1491: "IS-IS information\n"
1492: "IS-IS link state database\n"
1493: "Detailed information\n"
1494: "LSP ID\n")
1495: {
1496: return show_isis_database (vty, argv[0], ISIS_UI_LEVEL_DETAIL);
1497: }
1498:
1499: /*
1500: * 'router isis' command
1501: */
1502: DEFUN (router_isis,
1503: router_isis_cmd,
1504: "router isis WORD",
1505: ROUTER_STR
1506: "ISO IS-IS\n"
1507: "ISO Routing area tag")
1508: {
1509: return isis_area_get (vty, argv[0]);
1510: }
1511:
1512: /*
1513: *'no router isis' command
1514: */
1515: DEFUN (no_router_isis,
1516: no_router_isis_cmd,
1517: "no router isis WORD",
1518: "no\n" ROUTER_STR "ISO IS-IS\n" "ISO Routing area tag")
1519: {
1520: return isis_area_destroy (vty, argv[0]);
1521: }
1522:
1523: /*
1524: * 'net' command
1.1 misho 1525: */
1526: DEFUN (net,
1527: net_cmd,
1528: "net WORD",
1529: "A Network Entity Title for this process (OSI only)\n"
1530: "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
1531: {
1532: return area_net_title (vty, argv[0]);
1533: }
1534:
1535: /*
1536: * 'no net' command
1537: */
1538: DEFUN (no_net,
1539: no_net_cmd,
1540: "no net WORD",
1541: NO_STR
1542: "A Network Entity Title for this process (OSI only)\n"
1543: "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
1544: {
1545: return area_clear_net_title (vty, argv[0]);
1546: }
1547:
1.1.1.2 misho 1548: DEFUN (area_passwd_md5,
1549: area_passwd_md5_cmd,
1550: "area-password md5 WORD",
1551: "Configure the authentication password for an area\n"
1552: "Authentication type\n"
1553: "Area password\n")
1554: {
1555: struct isis_area *area;
1556: int len;
1557:
1558: area = vty->index;
1559:
1560: if (!area)
1561: {
1562: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1563: return CMD_ERR_NO_MATCH;
1564: }
1565:
1566: len = strlen (argv[0]);
1567: if (len > 254)
1568: {
1569: vty_out (vty, "Too long area password (>254)%s", VTY_NEWLINE);
1570: return CMD_ERR_AMBIGUOUS;
1571: }
1572:
1573: area->area_passwd.len = (u_char) len;
1574: area->area_passwd.type = ISIS_PASSWD_TYPE_HMAC_MD5;
1575: strncpy ((char *)area->area_passwd.passwd, argv[0], 255);
1576:
1577: if (argc > 1)
1578: {
1579: SET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND);
1580: if (strncmp(argv[1], "v", 1) == 0)
1581: SET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
1582: else
1583: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
1584: }
1585: else
1586: {
1587: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND);
1588: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
1589: }
1590: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
1591:
1592: return CMD_SUCCESS;
1593: }
1594:
1595: ALIAS (area_passwd_md5,
1596: area_passwd_md5_snpauth_cmd,
1597: "area-password md5 WORD authenticate snp (send-only|validate)",
1598: "Configure the authentication password for an area\n"
1599: "Authentication type\n"
1600: "Area password\n"
1601: "Authentication\n"
1602: "SNP PDUs\n"
1603: "Send but do not check PDUs on receiving\n"
1604: "Send and check PDUs on receiving\n");
1605:
1606: DEFUN (area_passwd_clear,
1607: area_passwd_clear_cmd,
1608: "area-password clear WORD",
1.1 misho 1609: "Configure the authentication password for an area\n"
1.1.1.2 misho 1610: "Authentication type\n"
1.1 misho 1611: "Area password\n")
1612: {
1613: struct isis_area *area;
1614: int len;
1615:
1616: area = vty->index;
1617:
1618: if (!area)
1619: {
1.1.1.2 misho 1620: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1621: return CMD_ERR_NO_MATCH;
1.1 misho 1622: }
1623:
1624: len = strlen (argv[0]);
1625: if (len > 254)
1626: {
1627: vty_out (vty, "Too long area password (>254)%s", VTY_NEWLINE);
1.1.1.2 misho 1628: return CMD_ERR_AMBIGUOUS;
1.1 misho 1629: }
1.1.1.2 misho 1630:
1.1 misho 1631: area->area_passwd.len = (u_char) len;
1632: area->area_passwd.type = ISIS_PASSWD_TYPE_CLEARTXT;
1633: strncpy ((char *)area->area_passwd.passwd, argv[0], 255);
1634:
1635: if (argc > 1)
1636: {
1637: SET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND);
1638: if (strncmp(argv[1], "v", 1) == 0)
1639: SET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
1640: else
1641: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
1642: }
1643: else
1644: {
1645: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND);
1646: UNSET_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV);
1647: }
1.1.1.2 misho 1648: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
1.1 misho 1649:
1650: return CMD_SUCCESS;
1651: }
1652:
1.1.1.2 misho 1653: ALIAS (area_passwd_clear,
1654: area_passwd_clear_snpauth_cmd,
1655: "area-password clear WORD authenticate snp (send-only|validate)",
1.1 misho 1656: "Configure the authentication password for an area\n"
1.1.1.2 misho 1657: "Authentication type\n"
1.1 misho 1658: "Area password\n"
1659: "Authentication\n"
1660: "SNP PDUs\n"
1661: "Send but do not check PDUs on receiving\n"
1662: "Send and check PDUs on receiving\n");
1663:
1664: DEFUN (no_area_passwd,
1665: no_area_passwd_cmd,
1666: "no area-password",
1667: NO_STR
1668: "Configure the authentication password for an area\n")
1669: {
1670: struct isis_area *area;
1671:
1672: area = vty->index;
1673:
1674: if (!area)
1675: {
1.1.1.2 misho 1676: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1677: return CMD_ERR_NO_MATCH;
1.1 misho 1678: }
1679:
1680: memset (&area->area_passwd, 0, sizeof (struct isis_passwd));
1.1.1.2 misho 1681: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
1682:
1683: return CMD_SUCCESS;
1684: }
1685:
1686: DEFUN (domain_passwd_md5,
1687: domain_passwd_md5_cmd,
1688: "domain-password md5 WORD",
1689: "Set the authentication password for a routing domain\n"
1690: "Authentication type\n"
1691: "Routing domain password\n")
1692: {
1693: struct isis_area *area;
1694: int len;
1695:
1696: area = vty->index;
1697:
1698: if (!area)
1699: {
1700: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1701: return CMD_ERR_NO_MATCH;
1702: }
1703:
1704: len = strlen (argv[0]);
1705: if (len > 254)
1706: {
1707: vty_out (vty, "Too long area password (>254)%s", VTY_NEWLINE);
1708: return CMD_ERR_AMBIGUOUS;
1709: }
1710:
1711: area->domain_passwd.len = (u_char) len;
1712: area->domain_passwd.type = ISIS_PASSWD_TYPE_HMAC_MD5;
1713: strncpy ((char *)area->domain_passwd.passwd, argv[0], 255);
1714:
1715: if (argc > 1)
1716: {
1717: SET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND);
1718: if (strncmp(argv[1], "v", 1) == 0)
1719: SET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
1720: else
1721: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
1722: }
1723: else
1724: {
1725: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND);
1726: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
1727: }
1728: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
1.1 misho 1729:
1730: return CMD_SUCCESS;
1731: }
1732:
1.1.1.2 misho 1733: ALIAS (domain_passwd_md5,
1734: domain_passwd_md5_snpauth_cmd,
1735: "domain-password md5 WORD authenticate snp (send-only|validate)",
1736: "Set the authentication password for a routing domain\n"
1737: "Authentication type\n"
1738: "Routing domain password\n"
1739: "Authentication\n"
1740: "SNP PDUs\n"
1741: "Send but do not check PDUs on receiving\n"
1742: "Send and check PDUs on receiving\n");
1743:
1744: DEFUN (domain_passwd_clear,
1745: domain_passwd_clear_cmd,
1746: "domain-password clear WORD",
1.1 misho 1747: "Set the authentication password for a routing domain\n"
1.1.1.2 misho 1748: "Authentication type\n"
1.1 misho 1749: "Routing domain password\n")
1750: {
1751: struct isis_area *area;
1752: int len;
1753:
1754: area = vty->index;
1755:
1756: if (!area)
1757: {
1.1.1.2 misho 1758: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1759: return CMD_ERR_NO_MATCH;
1.1 misho 1760: }
1761:
1762: len = strlen (argv[0]);
1763: if (len > 254)
1764: {
1765: vty_out (vty, "Too long area password (>254)%s", VTY_NEWLINE);
1.1.1.2 misho 1766: return CMD_ERR_AMBIGUOUS;
1.1 misho 1767: }
1.1.1.2 misho 1768:
1.1 misho 1769: area->domain_passwd.len = (u_char) len;
1770: area->domain_passwd.type = ISIS_PASSWD_TYPE_CLEARTXT;
1771: strncpy ((char *)area->domain_passwd.passwd, argv[0], 255);
1772:
1773: if (argc > 1)
1774: {
1775: SET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND);
1776: if (strncmp(argv[1], "v", 1) == 0)
1777: SET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
1778: else
1779: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
1780: }
1781: else
1782: {
1783: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND);
1784: UNSET_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV);
1785: }
1.1.1.2 misho 1786: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
1.1 misho 1787:
1788: return CMD_SUCCESS;
1789: }
1790:
1.1.1.2 misho 1791: ALIAS (domain_passwd_clear,
1792: domain_passwd_clear_snpauth_cmd,
1793: "domain-password clear WORD authenticate snp (send-only|validate)",
1.1 misho 1794: "Set the authentication password for a routing domain\n"
1.1.1.2 misho 1795: "Authentication type\n"
1.1 misho 1796: "Routing domain password\n"
1797: "Authentication\n"
1798: "SNP PDUs\n"
1799: "Send but do not check PDUs on receiving\n"
1800: "Send and check PDUs on receiving\n");
1801:
1802: DEFUN (no_domain_passwd,
1803: no_domain_passwd_cmd,
1.1.1.2 misho 1804: "no domain-password",
1.1 misho 1805: NO_STR
1806: "Set the authentication password for a routing domain\n")
1807: {
1808: struct isis_area *area;
1809:
1810: area = vty->index;
1811:
1812: if (!area)
1813: {
1.1.1.2 misho 1814: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1815: return CMD_ERR_NO_MATCH;
1.1 misho 1816: }
1817:
1818: memset (&area->domain_passwd, 0, sizeof (struct isis_passwd));
1.1.1.2 misho 1819: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
1.1 misho 1820:
1821: return CMD_SUCCESS;
1822: }
1823:
1824: DEFUN (is_type,
1825: is_type_cmd,
1826: "is-type (level-1|level-1-2|level-2-only)",
1827: "IS Level for this routing process (OSI only)\n"
1828: "Act as a station router only\n"
1829: "Act as both a station router and an area router\n"
1830: "Act as an area router only\n")
1831: {
1832: struct isis_area *area;
1833: int type;
1834:
1835: area = vty->index;
1836:
1837: if (!area)
1838: {
1.1.1.2 misho 1839: vty_out (vty, "Can't find IS-IS instance%s", VTY_NEWLINE);
1840: return CMD_ERR_NO_MATCH;
1.1 misho 1841: }
1842:
1843: type = string2circuit_t (argv[0]);
1844: if (!type)
1845: {
1846: vty_out (vty, "Unknown IS level %s", VTY_NEWLINE);
1847: return CMD_SUCCESS;
1848: }
1849:
1850: isis_event_system_type_change (area, type);
1851:
1852: return CMD_SUCCESS;
1853: }
1854:
1855: DEFUN (no_is_type,
1856: no_is_type_cmd,
1857: "no is-type (level-1|level-1-2|level-2-only)",
1858: NO_STR
1859: "IS Level for this routing process (OSI only)\n"
1860: "Act as a station router only\n"
1861: "Act as both a station router and an area router\n"
1862: "Act as an area router only\n")
1863: {
1864: struct isis_area *area;
1865: int type;
1866:
1867: area = vty->index;
1868: assert (area);
1869:
1870: /*
1.1.1.2 misho 1871: * Put the is-type back to defaults:
1872: * - level-1-2 on first area
1873: * - level-1 for the rest
1.1 misho 1874: */
1875: if (listgetdata (listhead (isis->area_list)) == area)
1876: type = IS_LEVEL_1_AND_2;
1877: else
1878: type = IS_LEVEL_1;
1879:
1880: isis_event_system_type_change (area, type);
1881:
1882: return CMD_SUCCESS;
1883: }
1884:
1.1.1.2 misho 1885: static int
1886: set_lsp_gen_interval (struct vty *vty, struct isis_area *area,
1887: uint16_t interval, int level)
1888: {
1889: int lvl;
1890:
1891: for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
1892: {
1893: if (!(lvl & level))
1894: continue;
1895:
1896: if (interval >= area->lsp_refresh[lvl-1])
1897: {
1898: vty_out (vty, "LSP gen interval %us must be less than "
1899: "the LSP refresh interval %us%s",
1900: interval, area->lsp_refresh[lvl-1], VTY_NEWLINE);
1901: return CMD_ERR_AMBIGUOUS;
1902: }
1903: }
1904:
1905: for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
1906: {
1907: if (!(lvl & level))
1908: continue;
1909: area->lsp_gen_interval[lvl-1] = interval;
1910: }
1911:
1912: return CMD_SUCCESS;
1913: }
1914:
1.1 misho 1915: DEFUN (lsp_gen_interval,
1916: lsp_gen_interval_cmd,
1917: "lsp-gen-interval <1-120>",
1918: "Minimum interval between regenerating same LSP\n"
1919: "Minimum interval in seconds\n")
1920: {
1921: struct isis_area *area;
1922: uint16_t interval;
1.1.1.2 misho 1923: int level;
1.1 misho 1924:
1925: area = vty->index;
1926: interval = atoi (argv[0]);
1.1.1.2 misho 1927: level = IS_LEVEL_1 | IS_LEVEL_2;
1928: return set_lsp_gen_interval (vty, area, interval, level);
1.1 misho 1929: }
1930:
1931: DEFUN (no_lsp_gen_interval,
1932: no_lsp_gen_interval_cmd,
1933: "no lsp-gen-interval",
1934: NO_STR
1935: "Minimum interval between regenerating same LSP\n")
1936: {
1937: struct isis_area *area;
1.1.1.2 misho 1938: uint16_t interval;
1939: int level;
1.1 misho 1940:
1941: area = vty->index;
1.1.1.2 misho 1942: interval = DEFAULT_MIN_LSP_GEN_INTERVAL;
1943: level = IS_LEVEL_1 | IS_LEVEL_2;
1944: return set_lsp_gen_interval (vty, area, interval, level);
1.1 misho 1945: }
1946:
1947: ALIAS (no_lsp_gen_interval,
1948: no_lsp_gen_interval_arg_cmd,
1949: "no lsp-gen-interval <1-120>",
1950: NO_STR
1951: "Minimum interval between regenerating same LSP\n"
1952: "Minimum interval in seconds\n")
1953:
1954: DEFUN (lsp_gen_interval_l1,
1955: lsp_gen_interval_l1_cmd,
1956: "lsp-gen-interval level-1 <1-120>",
1957: "Minimum interval between regenerating same LSP\n"
1958: "Set interval for level 1 only\n"
1959: "Minimum interval in seconds\n")
1960: {
1961: struct isis_area *area;
1962: uint16_t interval;
1.1.1.2 misho 1963: int level;
1.1 misho 1964:
1965: area = vty->index;
1966: interval = atoi (argv[0]);
1.1.1.2 misho 1967: level = IS_LEVEL_1;
1968: return set_lsp_gen_interval (vty, area, interval, level);
1.1 misho 1969: }
1970:
1971: DEFUN (no_lsp_gen_interval_l1,
1972: no_lsp_gen_interval_l1_cmd,
1973: "no lsp-gen-interval level-1",
1974: NO_STR
1975: "Minimum interval between regenerating same LSP\n"
1976: "Set interval for level 1 only\n")
1977: {
1978: struct isis_area *area;
1.1.1.2 misho 1979: uint16_t interval;
1980: int level;
1.1 misho 1981:
1982: area = vty->index;
1.1.1.2 misho 1983: interval = DEFAULT_MIN_LSP_GEN_INTERVAL;
1984: level = IS_LEVEL_1;
1985: return set_lsp_gen_interval (vty, area, interval, level);
1.1 misho 1986: }
1987:
1988: ALIAS (no_lsp_gen_interval_l1,
1989: no_lsp_gen_interval_l1_arg_cmd,
1990: "no lsp-gen-interval level-1 <1-120>",
1991: NO_STR
1992: "Minimum interval between regenerating same LSP\n"
1993: "Set interval for level 1 only\n"
1994: "Minimum interval in seconds\n")
1995:
1996: DEFUN (lsp_gen_interval_l2,
1997: lsp_gen_interval_l2_cmd,
1998: "lsp-gen-interval level-2 <1-120>",
1999: "Minimum interval between regenerating same LSP\n"
2000: "Set interval for level 2 only\n"
2001: "Minimum interval in seconds\n")
2002: {
2003: struct isis_area *area;
1.1.1.2 misho 2004: uint16_t interval;
2005: int level;
1.1 misho 2006:
2007: area = vty->index;
2008: interval = atoi (argv[0]);
1.1.1.2 misho 2009: level = IS_LEVEL_2;
2010: return set_lsp_gen_interval (vty, area, interval, level);
1.1 misho 2011: }
2012:
2013: DEFUN (no_lsp_gen_interval_l2,
2014: no_lsp_gen_interval_l2_cmd,
2015: "no lsp-gen-interval level-2",
2016: NO_STR
2017: "Minimum interval between regenerating same LSP\n"
2018: "Set interval for level 2 only\n")
2019: {
2020: struct isis_area *area;
1.1.1.2 misho 2021: uint16_t interval;
2022: int level;
1.1 misho 2023:
2024: area = vty->index;
1.1.1.2 misho 2025: interval = DEFAULT_MIN_LSP_GEN_INTERVAL;
2026: level = IS_LEVEL_2;
2027: return set_lsp_gen_interval (vty, area, interval, level);
1.1 misho 2028: }
2029:
2030: ALIAS (no_lsp_gen_interval_l2,
2031: no_lsp_gen_interval_l2_arg_cmd,
2032: "no lsp-gen-interval level-2 <1-120>",
2033: NO_STR
2034: "Minimum interval between regenerating same LSP\n"
2035: "Set interval for level 2 only\n"
2036: "Minimum interval in seconds\n")
2037:
1.1.1.2 misho 2038: static int
2039: validate_metric_style_narrow (struct vty *vty, struct isis_area *area)
2040: {
2041: struct isis_circuit *circuit;
2042: struct listnode *node;
2043:
2044: if (! vty)
2045: return CMD_ERR_AMBIGUOUS;
2046:
2047: if (! area)
2048: {
2049: vty_out (vty, "ISIS area is invalid%s", VTY_NEWLINE);
2050: return CMD_ERR_AMBIGUOUS;
2051: }
2052:
2053: for (ALL_LIST_ELEMENTS_RO (area->circuit_list, node, circuit))
2054: {
2055: if ((area->is_type & IS_LEVEL_1) &&
2056: (circuit->is_type & IS_LEVEL_1) &&
1.1.1.3 ! misho 2057: (circuit->te_metric[0] > MAX_NARROW_LINK_METRIC))
1.1.1.2 misho 2058: {
2059: vty_out (vty, "ISIS circuit %s metric is invalid%s",
2060: circuit->interface->name, VTY_NEWLINE);
2061: return CMD_ERR_AMBIGUOUS;
2062: }
2063: if ((area->is_type & IS_LEVEL_2) &&
2064: (circuit->is_type & IS_LEVEL_2) &&
1.1.1.3 ! misho 2065: (circuit->te_metric[1] > MAX_NARROW_LINK_METRIC))
1.1.1.2 misho 2066: {
2067: vty_out (vty, "ISIS circuit %s metric is invalid%s",
2068: circuit->interface->name, VTY_NEWLINE);
2069: return CMD_ERR_AMBIGUOUS;
2070: }
2071: }
2072:
2073: return CMD_SUCCESS;
2074: }
2075:
1.1 misho 2076: DEFUN (metric_style,
2077: metric_style_cmd,
2078: "metric-style (narrow|transition|wide)",
2079: "Use old-style (ISO 10589) or new-style packet formats\n"
2080: "Use old style of TLVs with narrow metric\n"
2081: "Send and accept both styles of TLVs during transition\n"
2082: "Use new style of TLVs to carry wider metric\n")
2083: {
2084: struct isis_area *area;
1.1.1.2 misho 2085: int ret;
1.1 misho 2086:
2087: area = vty->index;
2088: assert (area);
2089:
2090: if (strncmp (argv[0], "w", 1) == 0)
2091: {
2092: area->newmetric = 1;
2093: area->oldmetric = 0;
2094: }
1.1.1.3 ! misho 2095: else
1.1 misho 2096: {
1.1.1.2 misho 2097: ret = validate_metric_style_narrow (vty, area);
2098: if (ret != CMD_SUCCESS)
2099: return ret;
2100:
1.1.1.3 ! misho 2101: if (strncmp (argv[0], "t", 1) == 0)
! 2102: {
! 2103: area->newmetric = 1;
! 2104: area->oldmetric = 1;
! 2105: }
! 2106: else if (strncmp (argv[0], "n", 1) == 0)
! 2107: {
! 2108: area->newmetric = 0;
! 2109: area->oldmetric = 1;
! 2110: }
1.1 misho 2111: }
2112:
2113: return CMD_SUCCESS;
2114: }
2115:
2116: DEFUN (no_metric_style,
2117: no_metric_style_cmd,
2118: "no metric-style",
2119: NO_STR
2120: "Use old-style (ISO 10589) or new-style packet formats\n")
2121: {
2122: struct isis_area *area;
1.1.1.2 misho 2123: int ret;
1.1 misho 2124:
2125: area = vty->index;
2126: assert (area);
2127:
1.1.1.2 misho 2128: ret = validate_metric_style_narrow (vty, area);
2129: if (ret != CMD_SUCCESS)
2130: return ret;
2131:
1.1 misho 2132: /* Default is narrow metric. */
2133: area->newmetric = 0;
2134: area->oldmetric = 1;
2135:
2136: return CMD_SUCCESS;
2137: }
2138:
1.1.1.2 misho 2139: DEFUN (set_overload_bit,
2140: set_overload_bit_cmd,
2141: "set-overload-bit",
2142: "Set overload bit to avoid any transit traffic\n"
2143: "Set overload bit\n")
2144: {
2145: struct isis_area *area;
2146:
2147: area = vty->index;
2148: assert (area);
2149:
2150: area->overload_bit = LSPBIT_OL;
2151: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
2152:
2153: return CMD_SUCCESS;
2154: }
2155:
2156: DEFUN (no_set_overload_bit,
2157: no_set_overload_bit_cmd,
2158: "no set-overload-bit",
2159: "Reset overload bit to accept transit traffic\n"
2160: "Reset overload bit\n")
2161: {
2162: struct isis_area *area;
2163:
2164: area = vty->index;
2165: assert (area);
2166:
2167: area->overload_bit = 0;
2168: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
2169:
2170: return CMD_SUCCESS;
2171: }
2172:
1.1 misho 2173: DEFUN (dynamic_hostname,
2174: dynamic_hostname_cmd,
2175: "hostname dynamic",
2176: "Dynamic hostname for IS-IS\n"
2177: "Dynamic hostname\n")
2178: {
2179: struct isis_area *area;
2180:
2181: area = vty->index;
2182: assert (area);
2183:
1.1.1.2 misho 2184: if (!area->dynhostname)
2185: {
2186: area->dynhostname = 1;
2187: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 0);
2188: }
1.1 misho 2189:
2190: return CMD_SUCCESS;
2191: }
2192:
2193: DEFUN (no_dynamic_hostname,
2194: no_dynamic_hostname_cmd,
2195: "no hostname dynamic",
2196: NO_STR
2197: "Dynamic hostname for IS-IS\n"
2198: "Dynamic hostname\n")
2199: {
2200: struct isis_area *area;
2201:
2202: area = vty->index;
2203: assert (area);
2204:
1.1.1.2 misho 2205: if (area->dynhostname)
2206: {
2207: area->dynhostname = 0;
2208: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 0);
2209: }
1.1 misho 2210:
2211: return CMD_SUCCESS;
2212: }
2213:
2214: DEFUN (spf_interval,
2215: spf_interval_cmd,
2216: "spf-interval <1-120>",
2217: "Minimum interval between SPF calculations\n"
2218: "Minimum interval between consecutive SPFs in seconds\n")
2219: {
2220: struct isis_area *area;
2221: u_int16_t interval;
2222:
2223: area = vty->index;
2224: interval = atoi (argv[0]);
2225: area->min_spf_interval[0] = interval;
2226: area->min_spf_interval[1] = interval;
2227:
2228: return CMD_SUCCESS;
2229: }
2230:
2231: DEFUN (no_spf_interval,
2232: no_spf_interval_cmd,
2233: "no spf-interval",
2234: NO_STR
2235: "Minimum interval between SPF calculations\n")
2236: {
2237: struct isis_area *area;
2238:
2239: area = vty->index;
2240:
2241: area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
2242: area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
2243:
2244: return CMD_SUCCESS;
2245: }
2246:
2247: ALIAS (no_spf_interval,
2248: no_spf_interval_arg_cmd,
2249: "no spf-interval <1-120>",
2250: NO_STR
2251: "Minimum interval between SPF calculations\n"
2252: "Minimum interval between consecutive SPFs in seconds\n")
2253:
2254: DEFUN (spf_interval_l1,
2255: spf_interval_l1_cmd,
2256: "spf-interval level-1 <1-120>",
2257: "Minimum interval between SPF calculations\n"
2258: "Set interval for level 1 only\n"
2259: "Minimum interval between consecutive SPFs in seconds\n")
2260: {
2261: struct isis_area *area;
2262: u_int16_t interval;
2263:
2264: area = vty->index;
2265: interval = atoi (argv[0]);
2266: area->min_spf_interval[0] = interval;
2267:
2268: return CMD_SUCCESS;
2269: }
2270:
2271: DEFUN (no_spf_interval_l1,
2272: no_spf_interval_l1_cmd,
2273: "no spf-interval level-1",
2274: NO_STR
2275: "Minimum interval between SPF calculations\n"
2276: "Set interval for level 1 only\n")
2277: {
2278: struct isis_area *area;
2279:
2280: area = vty->index;
2281:
2282: area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
2283:
2284: return CMD_SUCCESS;
2285: }
2286:
2287: ALIAS (no_spf_interval,
2288: no_spf_interval_l1_arg_cmd,
2289: "no spf-interval level-1 <1-120>",
2290: NO_STR
2291: "Minimum interval between SPF calculations\n"
2292: "Set interval for level 1 only\n"
2293: "Minimum interval between consecutive SPFs in seconds\n")
2294:
2295: DEFUN (spf_interval_l2,
2296: spf_interval_l2_cmd,
2297: "spf-interval level-2 <1-120>",
2298: "Minimum interval between SPF calculations\n"
2299: "Set interval for level 2 only\n"
2300: "Minimum interval between consecutive SPFs in seconds\n")
2301: {
2302: struct isis_area *area;
2303: u_int16_t interval;
2304:
2305: area = vty->index;
2306: interval = atoi (argv[0]);
2307: area->min_spf_interval[1] = interval;
2308:
2309: return CMD_SUCCESS;
2310: }
2311:
2312: DEFUN (no_spf_interval_l2,
2313: no_spf_interval_l2_cmd,
2314: "no spf-interval level-2",
2315: NO_STR
2316: "Minimum interval between SPF calculations\n"
2317: "Set interval for level 2 only\n")
2318: {
2319: struct isis_area *area;
2320:
2321: area = vty->index;
2322:
2323: area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
2324:
2325: return CMD_SUCCESS;
2326: }
2327:
2328: ALIAS (no_spf_interval,
2329: no_spf_interval_l2_arg_cmd,
2330: "no spf-interval level-2 <1-120>",
2331: NO_STR
2332: "Minimum interval between SPF calculations\n"
2333: "Set interval for level 2 only\n"
2334: "Minimum interval between consecutive SPFs in seconds\n")
2335:
1.1.1.2 misho 2336: static int
2337: set_lsp_max_lifetime (struct vty *vty, struct isis_area *area,
2338: uint16_t interval, int level)
1.1 misho 2339: {
1.1.1.2 misho 2340: int lvl;
2341: int set_refresh_interval[ISIS_LEVELS] = {0, 0};
2342: uint16_t refresh_interval;
1.1 misho 2343:
1.1.1.2 misho 2344: refresh_interval = interval - 300;
1.1 misho 2345:
1.1.1.2 misho 2346: for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++)
1.1 misho 2347: {
1.1.1.2 misho 2348: if (!(lvl & level))
2349: continue;
2350: if (refresh_interval < area->lsp_refresh[lvl-1])
2351: {
2352: vty_out (vty, "Level %d Max LSP lifetime %us must be 300s greater than "
2353: "the configured LSP refresh interval %us%s",
2354: lvl, interval, area->lsp_refresh[lvl-1], VTY_NEWLINE);
2355: vty_out (vty, "Automatically reducing level %d LSP refresh interval "
2356: "to %us%s", lvl, refresh_interval, VTY_NEWLINE);
2357: set_refresh_interval[lvl-1] = 1;
2358:
2359: if (refresh_interval <= area->lsp_gen_interval[lvl-1])
2360: {
2361: vty_out (vty, "LSP refresh interval %us must be greater than "
2362: "the configured LSP gen interval %us%s",
2363: refresh_interval, area->lsp_gen_interval[lvl-1],
2364: VTY_NEWLINE);
2365: return CMD_ERR_AMBIGUOUS;
2366: }
2367: }
2368: }
2369:
2370: for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++)
2371: {
2372: if (!(lvl & level))
2373: continue;
2374: area->max_lsp_lifetime[lvl-1] = interval;
2375: /* Automatically reducing lsp_refresh_interval to interval - 300 */
2376: if (set_refresh_interval[lvl-1])
2377: area->lsp_refresh[lvl-1] = refresh_interval;
1.1 misho 2378: }
2379:
1.1.1.2 misho 2380: lsp_regenerate_schedule (area, level, 1);
2381:
1.1 misho 2382: return CMD_SUCCESS;
2383: }
2384:
1.1.1.2 misho 2385: DEFUN (max_lsp_lifetime,
2386: max_lsp_lifetime_cmd,
2387: "max-lsp-lifetime <350-65535>",
2388: "Maximum LSP lifetime\n"
2389: "LSP lifetime in seconds\n")
1.1 misho 2390: {
2391: struct isis_area *area;
1.1.1.2 misho 2392: uint16_t interval;
2393: int level;
1.1 misho 2394:
1.1.1.2 misho 2395: area = vty->index;
2396: interval = atoi (argv[0]);
2397: level = IS_LEVEL_1 | IS_LEVEL_2;
2398: return set_lsp_max_lifetime (vty, area, interval, level);
1.1 misho 2399: }
2400:
1.1.1.2 misho 2401: DEFUN (no_max_lsp_lifetime,
2402: no_max_lsp_lifetime_cmd,
2403: "no max-lsp-lifetime",
2404: NO_STR
2405: "LSP lifetime in seconds\n")
1.1 misho 2406: {
2407: struct isis_area *area;
1.1.1.2 misho 2408: uint16_t interval;
2409: int level;
1.1 misho 2410:
2411: area = vty->index;
1.1.1.2 misho 2412: interval = DEFAULT_LSP_LIFETIME;
2413: level = IS_LEVEL_1 | IS_LEVEL_2;
2414: return set_lsp_max_lifetime (vty, area, interval, level);
1.1 misho 2415: }
2416:
1.1.1.2 misho 2417: ALIAS (no_max_lsp_lifetime,
2418: no_max_lsp_lifetime_arg_cmd,
2419: "no max-lsp-lifetime <350-65535>",
1.1 misho 2420: NO_STR
1.1.1.2 misho 2421: "Maximum LSP lifetime\n"
2422: "LSP lifetime in seconds\n")
2423:
2424: DEFUN (max_lsp_lifetime_l1,
2425: max_lsp_lifetime_l1_cmd,
2426: "max-lsp-lifetime level-1 <350-65535>",
2427: "Maximum LSP lifetime for Level 1 only\n"
2428: "LSP lifetime for Level 1 only in seconds\n")
1.1 misho 2429: {
2430: struct isis_area *area;
1.1.1.2 misho 2431: uint16_t interval;
2432: int level;
1.1 misho 2433:
2434: area = vty->index;
1.1.1.2 misho 2435: interval = atoi (argv[0]);
2436: level = IS_LEVEL_1;
2437: return set_lsp_max_lifetime (vty, area, interval, level);
1.1 misho 2438: }
2439:
1.1.1.2 misho 2440: DEFUN (no_max_lsp_lifetime_l1,
2441: no_max_lsp_lifetime_l1_cmd,
2442: "no max-lsp-lifetime level-1",
1.1 misho 2443: NO_STR
1.1.1.2 misho 2444: "LSP lifetime for Level 1 only in seconds\n")
1.1 misho 2445: {
2446: struct isis_area *area;
1.1.1.2 misho 2447: uint16_t interval;
2448: int level;
1.1 misho 2449:
2450: area = vty->index;
1.1.1.2 misho 2451: interval = DEFAULT_LSP_LIFETIME;
2452: level = IS_LEVEL_1;
2453: return set_lsp_max_lifetime (vty, area, interval, level);
1.1 misho 2454: }
2455:
1.1.1.2 misho 2456: ALIAS (no_max_lsp_lifetime_l1,
2457: no_max_lsp_lifetime_l1_arg_cmd,
2458: "no max-lsp-lifetime level-1 <350-65535>",
2459: NO_STR
2460: "Maximum LSP lifetime for Level 1 only\n"
2461: "LSP lifetime for Level 1 only in seconds\n")
2462:
2463: DEFUN (max_lsp_lifetime_l2,
2464: max_lsp_lifetime_l2_cmd,
2465: "max-lsp-lifetime level-2 <350-65535>",
2466: "Maximum LSP lifetime for Level 2 only\n"
2467: "LSP lifetime for Level 2 only in seconds\n")
1.1 misho 2468: {
2469: struct isis_area *area;
2470: uint16_t interval;
1.1.1.2 misho 2471: int level;
1.1 misho 2472:
2473: area = vty->index;
2474: interval = atoi (argv[0]);
1.1.1.2 misho 2475: level = IS_LEVEL_2;
2476: return set_lsp_max_lifetime (vty, area, interval, level);
2477: }
1.1 misho 2478:
1.1.1.2 misho 2479: DEFUN (no_max_lsp_lifetime_l2,
2480: no_max_lsp_lifetime_l2_cmd,
2481: "no max-lsp-lifetime level-2",
2482: NO_STR
2483: "LSP lifetime for Level 2 only in seconds\n")
2484: {
2485: struct isis_area *area;
2486: uint16_t interval;
2487: int level;
1.1 misho 2488:
1.1.1.2 misho 2489: area = vty->index;
2490: interval = DEFAULT_LSP_LIFETIME;
2491: level = IS_LEVEL_2;
2492: return set_lsp_max_lifetime (vty, area, interval, level);
2493: }
1.1 misho 2494:
1.1.1.2 misho 2495: ALIAS (no_max_lsp_lifetime_l2,
2496: no_max_lsp_lifetime_l2_arg_cmd,
2497: "no max-lsp-lifetime level-2 <350-65535>",
2498: NO_STR
2499: "Maximum LSP lifetime for Level 2 only\n"
2500: "LSP lifetime for Level 2 only in seconds\n")
1.1 misho 2501:
1.1.1.2 misho 2502: static int
2503: set_lsp_refresh_interval (struct vty *vty, struct isis_area *area,
2504: uint16_t interval, int level)
2505: {
2506: int lvl;
1.1 misho 2507:
1.1.1.2 misho 2508: for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
1.1 misho 2509: {
1.1.1.2 misho 2510: if (!(lvl & level))
2511: continue;
2512: if (interval <= area->lsp_gen_interval[lvl-1])
2513: {
2514: vty_out (vty, "LSP refresh interval %us must be greater than "
2515: "the configured LSP gen interval %us%s",
2516: interval, area->lsp_gen_interval[lvl-1],
2517: VTY_NEWLINE);
2518: return CMD_ERR_AMBIGUOUS;
2519: }
2520: if (interval > (area->max_lsp_lifetime[lvl-1] - 300))
2521: {
2522: vty_out (vty, "LSP refresh interval %us must be less than "
2523: "the configured LSP lifetime %us less 300%s",
2524: interval, area->max_lsp_lifetime[lvl-1],
2525: VTY_NEWLINE);
2526: return CMD_ERR_AMBIGUOUS;
2527: }
1.1 misho 2528: }
2529:
1.1.1.2 misho 2530: for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl)
1.1 misho 2531: {
1.1.1.2 misho 2532: if (!(lvl & level))
2533: continue;
2534: area->lsp_refresh[lvl-1] = interval;
1.1 misho 2535: }
1.1.1.2 misho 2536: lsp_regenerate_schedule (area, level, 1);
1.1 misho 2537:
2538: return CMD_SUCCESS;
2539: }
2540:
1.1.1.2 misho 2541: DEFUN (lsp_refresh_interval,
2542: lsp_refresh_interval_cmd,
2543: "lsp-refresh-interval <1-65235>",
2544: "LSP refresh interval\n"
2545: "LSP refresh interval in seconds\n")
1.1 misho 2546: {
2547: struct isis_area *area;
1.1.1.2 misho 2548: uint16_t interval;
2549: int level;
1.1 misho 2550:
2551: area = vty->index;
1.1.1.2 misho 2552: interval = atoi (argv[0]);
2553: level = IS_LEVEL_1 | IS_LEVEL_2;
2554: return set_lsp_refresh_interval (vty, area, interval, level);
2555: }
1.1 misho 2556:
1.1.1.2 misho 2557: DEFUN (no_lsp_refresh_interval,
2558: no_lsp_refresh_interval_cmd,
2559: "no lsp-refresh-interval",
2560: NO_STR
2561: "LSP refresh interval in seconds\n")
2562: {
2563: struct isis_area *area;
2564: uint16_t interval;
2565: int level;
1.1 misho 2566:
1.1.1.2 misho 2567: area = vty->index;
2568: interval = DEFAULT_MAX_LSP_GEN_INTERVAL;
2569: level = IS_LEVEL_1 | IS_LEVEL_2;
2570: return set_lsp_refresh_interval (vty, area, interval, level);
1.1 misho 2571: }
2572:
1.1.1.2 misho 2573: ALIAS (no_lsp_refresh_interval,
2574: no_lsp_refresh_interval_arg_cmd,
2575: "no lsp-refresh-interval <1-65235>",
1.1 misho 2576: NO_STR
1.1.1.2 misho 2577: "LSP refresh interval\n"
2578: "LSP refresh interval in seconds\n")
1.1 misho 2579:
1.1.1.2 misho 2580: DEFUN (lsp_refresh_interval_l1,
2581: lsp_refresh_interval_l1_cmd,
2582: "lsp-refresh-interval level-1 <1-65235>",
2583: "LSP refresh interval for Level 1 only\n"
2584: "LSP refresh interval for Level 1 only in seconds\n")
1.1 misho 2585: {
2586: struct isis_area *area;
2587: uint16_t interval;
1.1.1.2 misho 2588: int level;
1.1 misho 2589:
2590: area = vty->index;
1.1.1.2 misho 2591: interval = atoi (argv[0]);
2592: level = IS_LEVEL_1;
2593: return set_lsp_refresh_interval (vty, area, interval, level);
2594: }
1.1 misho 2595:
1.1.1.2 misho 2596: DEFUN (no_lsp_refresh_interval_l1,
2597: no_lsp_refresh_interval_l1_cmd,
2598: "no lsp-refresh-interval level-1",
2599: NO_STR
2600: "LSP refresh interval for Level 1 only in seconds\n")
2601: {
2602: struct isis_area *area;
2603: uint16_t interval;
2604: int level;
2605:
2606: area = vty->index;
2607: interval = DEFAULT_MAX_LSP_GEN_INTERVAL;
2608: level = IS_LEVEL_1;
2609: return set_lsp_refresh_interval (vty, area, interval, level);
2610: }
2611:
2612: ALIAS (no_lsp_refresh_interval_l1,
2613: no_lsp_refresh_interval_l1_arg_cmd,
2614: "no lsp-refresh-interval level-1 <1-65235>",
2615: NO_STR
2616: "LSP refresh interval for Level 1 only\n"
2617: "LSP refresh interval for Level 1 only in seconds\n")
2618:
2619: DEFUN (lsp_refresh_interval_l2,
2620: lsp_refresh_interval_l2_cmd,
2621: "lsp-refresh-interval level-2 <1-65235>",
2622: "LSP refresh interval for Level 2 only\n"
2623: "LSP refresh interval for Level 2 only in seconds\n")
2624: {
2625: struct isis_area *area;
2626: uint16_t interval;
2627: int level;
2628:
2629: area = vty->index;
1.1 misho 2630: interval = atoi (argv[0]);
1.1.1.2 misho 2631: level = IS_LEVEL_2;
2632: return set_lsp_refresh_interval (vty, area, interval, level);
2633: }
1.1 misho 2634:
1.1.1.2 misho 2635: DEFUN (no_lsp_refresh_interval_l2,
2636: no_lsp_refresh_interval_l2_cmd,
2637: "no lsp-refresh-interval level-2",
2638: NO_STR
2639: "LSP refresh interval for Level 2 only in seconds\n")
2640: {
2641: struct isis_area *area;
2642: uint16_t interval;
2643: int level;
1.1 misho 2644:
1.1.1.2 misho 2645: area = vty->index;
2646: interval = DEFAULT_MAX_LSP_GEN_INTERVAL;
2647: level = IS_LEVEL_2;
2648: return set_lsp_refresh_interval (vty, area, interval, level);
2649: }
2650:
2651: ALIAS (no_lsp_refresh_interval_l2,
2652: no_lsp_refresh_interval_l2_arg_cmd,
2653: "no lsp-refresh-interval level-2 <1-65235>",
2654: NO_STR
2655: "LSP refresh interval for Level 2 only\n"
2656: "LSP refresh interval for Level 2 only in seconds\n")
2657:
2658: DEFUN (log_adj_changes,
2659: log_adj_changes_cmd,
2660: "log-adjacency-changes",
2661: "Log changes in adjacency state\n")
2662: {
2663: struct isis_area *area;
1.1 misho 2664:
1.1.1.2 misho 2665: area = vty->index;
2666: assert (area);
1.1 misho 2667:
1.1.1.2 misho 2668: area->log_adj_changes = 1;
1.1 misho 2669:
2670: return CMD_SUCCESS;
2671: }
2672:
1.1.1.2 misho 2673: DEFUN (no_log_adj_changes,
2674: no_log_adj_changes_cmd,
2675: "no log-adjacency-changes",
2676: "Stop logging changes in adjacency state\n")
1.1 misho 2677: {
2678: struct isis_area *area;
2679:
2680: area = vty->index;
2681: assert (area);
2682:
1.1.1.2 misho 2683: area->log_adj_changes = 0;
1.1 misho 2684:
2685: return CMD_SUCCESS;
2686: }
2687:
1.1.1.2 misho 2688: #ifdef TOPOLOGY_GENERATE
1.1 misho 2689:
1.1.1.2 misho 2690: DEFUN (topology_generate_grid,
2691: topology_generate_grid_cmd,
2692: "topology generate grid <1-100> <1-100> <1-65000> [param] [param] "
2693: "[param]",
2694: "Topology generation for IS-IS\n"
2695: "Topology generation\n"
2696: "Grid topology\n"
2697: "X parameter of the grid\n"
2698: "Y parameter of the grid\n"
2699: "Random seed\n"
2700: "Optional param 1\n"
2701: "Optional param 2\n"
2702: "Optional param 3\n"
2703: "Topology\n")
1.1 misho 2704: {
2705: struct isis_area *area;
2706:
2707: area = vty->index;
2708: assert (area);
2709:
1.1.1.2 misho 2710: if (!spgrid_check_params (vty, argc, argv))
2711: {
2712: if (area->topology)
2713: list_delete (area->topology);
2714: area->topology = list_new ();
2715: memcpy (area->top_params, vty->buf, 200);
2716: gen_spgrid_topology (vty, area->topology);
2717: remove_topology_lsps (area);
2718: generate_topology_lsps (area);
2719: /* Regenerate L1 LSP to get two way connection to the generated
2720: * topology. */
2721: lsp_regenerate_schedule (area, IS_LEVEL_1 | IS_LEVEL_2, 1);
2722: }
2723:
2724: return CMD_SUCCESS;
2725: }
2726:
2727: DEFUN (show_isis_generated_topology,
2728: show_isis_generated_topology_cmd,
2729: "show isis generated-topologies",
2730: SHOW_STR
2731: "ISIS network information\n"
2732: "Show generated topologies\n")
2733: {
2734: struct isis_area *area;
2735: struct listnode *node;
2736: struct listnode *node2;
2737: struct arc *arc;
1.1 misho 2738:
1.1.1.2 misho 2739: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
1.1 misho 2740: {
1.1.1.2 misho 2741: if (!area->topology)
2742: continue;
2743:
2744: vty_out (vty, "Topology for isis area: %s%s", area->area_tag,
2745: VTY_NEWLINE);
2746: vty_out (vty, "From node To node Distance%s", VTY_NEWLINE);
1.1 misho 2747:
1.1.1.2 misho 2748: for (ALL_LIST_ELEMENTS_RO (area->topology, node2, arc))
2749: vty_out (vty, "%9ld %11ld %12ld%s", arc->from_node, arc->to_node,
2750: arc->distance, VTY_NEWLINE);
1.1 misho 2751: }
1.1.1.2 misho 2752: return CMD_SUCCESS;
2753: }
2754:
2755: /* Base IS for topology generation. */
2756: DEFUN (topology_baseis,
2757: topology_baseis_cmd,
2758: "topology base-is WORD",
2759: "Topology generation for IS-IS\n"
2760: "A Network IS Base for this topology\n"
2761: "XXXX.XXXX.XXXX Network entity title (NET)\n")
2762: {
2763: struct isis_area *area;
2764: u_char buff[ISIS_SYS_ID_LEN];
2765:
2766: area = vty->index;
2767: assert (area);
1.1 misho 2768:
1.1.1.2 misho 2769: if (sysid2buff (buff, argv[0]))
2770: sysid2buff (area->topology_baseis, argv[0]);
1.1 misho 2771:
2772: return CMD_SUCCESS;
2773: }
2774:
1.1.1.2 misho 2775: DEFUN (no_topology_baseis,
2776: no_topology_baseis_cmd,
2777: "no topology base-is WORD",
1.1 misho 2778: NO_STR
1.1.1.2 misho 2779: "Topology generation for IS-IS\n"
2780: "A Network IS Base for this topology\n"
2781: "XXXX.XXXX.XXXX Network entity title (NET)\n")
1.1 misho 2782: {
2783: struct isis_area *area;
2784:
2785: area = vty->index;
2786: assert (area);
2787:
1.1.1.2 misho 2788: memcpy (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS, ISIS_SYS_ID_LEN);
1.1 misho 2789: return CMD_SUCCESS;
2790: }
2791:
1.1.1.2 misho 2792: ALIAS (no_topology_baseis,
2793: no_topology_baseis_noid_cmd,
2794: "no topology base-is",
1.1 misho 2795: NO_STR
1.1.1.2 misho 2796: "Topology generation for IS-IS\n"
2797: "A Network IS Base for this topology\n")
2798:
2799: DEFUN (topology_basedynh,
2800: topology_basedynh_cmd,
2801: "topology base-dynh WORD",
2802: "Topology generation for IS-IS\n"
2803: "Dynamic hostname base for this topology\n"
2804: "Dynamic hostname base\n")
2805: {
2806: struct isis_area *area;
2807:
2808: area = vty->index;
2809: assert (area);
2810:
2811: /* I hope that it's enough. */
2812: area->topology_basedynh = strndup (argv[0], 16);
2813: return CMD_SUCCESS;
2814: }
2815:
2816: #endif /* TOPOLOGY_GENERATE */
1.1 misho 2817:
2818: /* IS-IS configuration write function */
2819: int
2820: isis_config_write (struct vty *vty)
2821: {
2822: int write = 0;
2823:
2824: if (isis != NULL)
2825: {
2826: struct isis_area *area;
2827: struct listnode *node, *node2;
2828:
2829: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
2830: {
2831: /* ISIS - Area name */
2832: vty_out (vty, "router isis %s%s", area->area_tag, VTY_NEWLINE);
2833: write++;
2834: /* ISIS - Net */
2835: if (listcount (area->area_addrs) > 0)
2836: {
2837: struct area_addr *area_addr;
2838: for (ALL_LIST_ELEMENTS_RO (area->area_addrs, node2, area_addr))
2839: {
2840: vty_out (vty, " net %s%s",
2841: isonet_print (area_addr->area_addr,
2842: area_addr->addr_len + ISIS_SYS_ID_LEN +
2843: 1), VTY_NEWLINE);
2844: write++;
2845: }
2846: }
2847: /* ISIS - Dynamic hostname - Defaults to true so only display if
2848: * false. */
2849: if (!area->dynhostname)
2850: {
2851: vty_out (vty, " no hostname dynamic%s", VTY_NEWLINE);
2852: write++;
2853: }
2854: /* ISIS - Metric-Style - when true displays wide */
2855: if (area->newmetric)
2856: {
2857: if (!area->oldmetric)
2858: vty_out (vty, " metric-style wide%s", VTY_NEWLINE);
2859: else
2860: vty_out (vty, " metric-style transition%s", VTY_NEWLINE);
2861: write++;
2862: }
1.1.1.3 ! misho 2863: else
! 2864: {
! 2865: vty_out (vty, " metric-style narrow%s", VTY_NEWLINE);
! 2866: write++;
! 2867: }
1.1.1.2 misho 2868: /* ISIS - overload-bit */
2869: if (area->overload_bit)
2870: {
2871: vty_out (vty, " set-overload-bit%s", VTY_NEWLINE);
2872: write++;
2873: }
1.1 misho 2874: /* ISIS - Area is-type (level-1-2 is default) */
2875: if (area->is_type == IS_LEVEL_1)
2876: {
2877: vty_out (vty, " is-type level-1%s", VTY_NEWLINE);
2878: write++;
2879: }
1.1.1.2 misho 2880: else if (area->is_type == IS_LEVEL_2)
1.1 misho 2881: {
1.1.1.2 misho 2882: vty_out (vty, " is-type level-2-only%s", VTY_NEWLINE);
2883: write++;
1.1 misho 2884: }
2885: /* ISIS - Lsp generation interval */
2886: if (area->lsp_gen_interval[0] == area->lsp_gen_interval[1])
2887: {
1.1.1.2 misho 2888: if (area->lsp_gen_interval[0] != DEFAULT_MIN_LSP_GEN_INTERVAL)
1.1 misho 2889: {
2890: vty_out (vty, " lsp-gen-interval %d%s",
2891: area->lsp_gen_interval[0], VTY_NEWLINE);
2892: write++;
2893: }
2894: }
2895: else
2896: {
1.1.1.2 misho 2897: if (area->lsp_gen_interval[0] != DEFAULT_MIN_LSP_GEN_INTERVAL)
1.1 misho 2898: {
2899: vty_out (vty, " lsp-gen-interval level-1 %d%s",
2900: area->lsp_gen_interval[0], VTY_NEWLINE);
2901: write++;
2902: }
1.1.1.2 misho 2903: if (area->lsp_gen_interval[1] != DEFAULT_MIN_LSP_GEN_INTERVAL)
1.1 misho 2904: {
2905: vty_out (vty, " lsp-gen-interval level-2 %d%s",
2906: area->lsp_gen_interval[1], VTY_NEWLINE);
2907: write++;
2908: }
2909: }
2910: /* ISIS - LSP lifetime */
2911: if (area->max_lsp_lifetime[0] == area->max_lsp_lifetime[1])
2912: {
1.1.1.2 misho 2913: if (area->max_lsp_lifetime[0] != DEFAULT_LSP_LIFETIME)
1.1 misho 2914: {
1.1.1.2 misho 2915: vty_out (vty, " max-lsp-lifetime %u%s", area->max_lsp_lifetime[0],
1.1 misho 2916: VTY_NEWLINE);
2917: write++;
2918: }
2919: }
2920: else
2921: {
1.1.1.2 misho 2922: if (area->max_lsp_lifetime[0] != DEFAULT_LSP_LIFETIME)
1.1 misho 2923: {
1.1.1.2 misho 2924: vty_out (vty, " max-lsp-lifetime level-1 %u%s",
1.1 misho 2925: area->max_lsp_lifetime[0], VTY_NEWLINE);
2926: write++;
2927: }
1.1.1.2 misho 2928: if (area->max_lsp_lifetime[1] != DEFAULT_LSP_LIFETIME)
1.1 misho 2929: {
1.1.1.2 misho 2930: vty_out (vty, " max-lsp-lifetime level-2 %u%s",
1.1 misho 2931: area->max_lsp_lifetime[1], VTY_NEWLINE);
2932: write++;
2933: }
2934: }
1.1.1.2 misho 2935: /* ISIS - LSP refresh interval */
2936: if (area->lsp_refresh[0] == area->lsp_refresh[1])
2937: {
2938: if (area->lsp_refresh[0] != DEFAULT_MAX_LSP_GEN_INTERVAL)
2939: {
2940: vty_out (vty, " lsp-refresh-interval %u%s", area->lsp_refresh[0],
2941: VTY_NEWLINE);
2942: write++;
2943: }
2944: }
2945: else
2946: {
2947: if (area->lsp_refresh[0] != DEFAULT_MAX_LSP_GEN_INTERVAL)
2948: {
2949: vty_out (vty, " lsp-refresh-interval level-1 %u%s",
2950: area->lsp_refresh[0], VTY_NEWLINE);
2951: write++;
2952: }
2953: if (area->lsp_refresh[1] != DEFAULT_MAX_LSP_GEN_INTERVAL)
2954: {
2955: vty_out (vty, " lsp-refresh-interval level-2 %u%s",
2956: area->lsp_refresh[1], VTY_NEWLINE);
2957: write++;
2958: }
2959: }
1.1 misho 2960: /* Minimum SPF interval. */
2961: if (area->min_spf_interval[0] == area->min_spf_interval[1])
2962: {
2963: if (area->min_spf_interval[0] != MINIMUM_SPF_INTERVAL)
2964: {
2965: vty_out (vty, " spf-interval %d%s",
2966: area->min_spf_interval[0], VTY_NEWLINE);
2967: write++;
2968: }
2969: }
2970: else
2971: {
2972: if (area->min_spf_interval[0] != MINIMUM_SPF_INTERVAL)
2973: {
2974: vty_out (vty, " spf-interval level-1 %d%s",
2975: area->min_spf_interval[0], VTY_NEWLINE);
2976: write++;
2977: }
2978: if (area->min_spf_interval[1] != MINIMUM_SPF_INTERVAL)
2979: {
2980: vty_out (vty, " spf-interval level-2 %d%s",
2981: area->min_spf_interval[1], VTY_NEWLINE);
2982: write++;
2983: }
2984: }
2985: /* Authentication passwords. */
1.1.1.2 misho 2986: if (area->area_passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5)
1.1 misho 2987: {
1.1.1.2 misho 2988: vty_out(vty, " area-password md5 %s", area->area_passwd.passwd);
2989: if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND))
2990: {
2991: vty_out(vty, " authenticate snp ");
2992: if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV))
2993: vty_out(vty, "validate");
2994: else
2995: vty_out(vty, "send-only");
2996: }
2997: vty_out(vty, "%s", VTY_NEWLINE);
2998: write++;
2999: }
3000: else if (area->area_passwd.type == ISIS_PASSWD_TYPE_CLEARTXT)
3001: {
3002: vty_out(vty, " area-password clear %s", area->area_passwd.passwd);
1.1 misho 3003: if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_SEND))
3004: {
3005: vty_out(vty, " authenticate snp ");
3006: if (CHECK_FLAG(area->area_passwd.snp_auth, SNP_AUTH_RECV))
3007: vty_out(vty, "validate");
3008: else
3009: vty_out(vty, "send-only");
3010: }
3011: vty_out(vty, "%s", VTY_NEWLINE);
3012: write++;
1.1.1.2 misho 3013: }
3014: if (area->domain_passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5)
1.1 misho 3015: {
1.1.1.2 misho 3016: vty_out(vty, " domain-password md5 %s",
3017: area->domain_passwd.passwd);
3018: if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND))
3019: {
3020: vty_out(vty, " authenticate snp ");
3021: if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV))
3022: vty_out(vty, "validate");
3023: else
3024: vty_out(vty, "send-only");
3025: }
3026: vty_out(vty, "%s", VTY_NEWLINE);
3027: write++;
3028: }
3029: else if (area->domain_passwd.type == ISIS_PASSWD_TYPE_CLEARTXT)
3030: {
3031: vty_out(vty, " domain-password clear %s",
3032: area->domain_passwd.passwd);
1.1 misho 3033: if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_SEND))
3034: {
3035: vty_out(vty, " authenticate snp ");
3036: if (CHECK_FLAG(area->domain_passwd.snp_auth, SNP_AUTH_RECV))
3037: vty_out(vty, "validate");
3038: else
3039: vty_out(vty, "send-only");
3040: }
3041: vty_out(vty, "%s", VTY_NEWLINE);
3042: write++;
3043: }
3044:
1.1.1.2 misho 3045: if (area->log_adj_changes)
3046: {
3047: vty_out (vty, " log-adjacency-changes%s", VTY_NEWLINE);
3048: write++;
3049: }
3050:
1.1 misho 3051: #ifdef TOPOLOGY_GENERATE
3052: if (memcmp (area->topology_baseis, DEFAULT_TOPOLOGY_BASEIS,
3053: ISIS_SYS_ID_LEN))
3054: {
3055: vty_out (vty, " topology base-is %s%s",
1.1.1.2 misho 3056: sysid_print ((u_char *)area->topology_baseis), VTY_NEWLINE);
1.1 misho 3057: write++;
3058: }
3059: if (area->topology_basedynh)
3060: {
3061: vty_out (vty, " topology base-dynh %s%s",
3062: area->topology_basedynh, VTY_NEWLINE);
3063: write++;
3064: }
3065: /* We save the whole command line here. */
3066: if (strlen(area->top_params))
3067: {
3068: vty_out (vty, " %s%s", area->top_params, VTY_NEWLINE);
3069: write++;
3070: }
3071: #endif /* TOPOLOGY_GENERATE */
3072:
3073: }
3074: }
3075:
3076: return write;
3077: }
3078:
1.1.1.2 misho 3079: struct cmd_node isis_node = {
1.1 misho 3080: ISIS_NODE,
3081: "%s(config-router)# ",
3082: 1
3083: };
3084:
3085: void
3086: isis_init ()
3087: {
3088: /* Install IS-IS top node */
3089: install_node (&isis_node, isis_config_write);
3090:
1.1.1.2 misho 3091: install_element (VIEW_NODE, &show_isis_summary_cmd);
3092:
3093: install_element (VIEW_NODE, &show_isis_interface_cmd);
3094: install_element (VIEW_NODE, &show_isis_interface_detail_cmd);
3095: install_element (VIEW_NODE, &show_isis_interface_arg_cmd);
3096:
3097: install_element (VIEW_NODE, &show_isis_neighbor_cmd);
3098: install_element (VIEW_NODE, &show_isis_neighbor_detail_cmd);
3099: install_element (VIEW_NODE, &show_isis_neighbor_arg_cmd);
3100: install_element (VIEW_NODE, &clear_isis_neighbor_cmd);
3101: install_element (VIEW_NODE, &clear_isis_neighbor_arg_cmd);
1.1 misho 3102:
3103: install_element (VIEW_NODE, &show_hostname_cmd);
3104: install_element (VIEW_NODE, &show_database_cmd);
1.1.1.2 misho 3105: install_element (VIEW_NODE, &show_database_arg_cmd);
3106: install_element (VIEW_NODE, &show_database_arg_detail_cmd);
1.1 misho 3107: install_element (VIEW_NODE, &show_database_detail_cmd);
1.1.1.2 misho 3108: install_element (VIEW_NODE, &show_database_detail_arg_cmd);
3109:
3110: install_element (ENABLE_NODE, &show_isis_summary_cmd);
1.1 misho 3111:
1.1.1.2 misho 3112: install_element (ENABLE_NODE, &show_isis_interface_cmd);
3113: install_element (ENABLE_NODE, &show_isis_interface_detail_cmd);
3114: install_element (ENABLE_NODE, &show_isis_interface_arg_cmd);
3115:
3116: install_element (ENABLE_NODE, &show_isis_neighbor_cmd);
3117: install_element (ENABLE_NODE, &show_isis_neighbor_detail_cmd);
3118: install_element (ENABLE_NODE, &show_isis_neighbor_arg_cmd);
3119: install_element (ENABLE_NODE, &clear_isis_neighbor_cmd);
3120: install_element (ENABLE_NODE, &clear_isis_neighbor_arg_cmd);
1.1 misho 3121:
3122: install_element (ENABLE_NODE, &show_hostname_cmd);
3123: install_element (ENABLE_NODE, &show_database_cmd);
1.1.1.2 misho 3124: install_element (ENABLE_NODE, &show_database_arg_cmd);
3125: install_element (ENABLE_NODE, &show_database_arg_detail_cmd);
1.1 misho 3126: install_element (ENABLE_NODE, &show_database_detail_cmd);
1.1.1.2 misho 3127: install_element (ENABLE_NODE, &show_database_detail_arg_cmd);
1.1 misho 3128: install_element (ENABLE_NODE, &show_debugging_cmd);
3129:
3130: install_node (&debug_node, config_write_debug);
3131:
3132: install_element (ENABLE_NODE, &debug_isis_adj_cmd);
3133: install_element (ENABLE_NODE, &no_debug_isis_adj_cmd);
3134: install_element (ENABLE_NODE, &debug_isis_csum_cmd);
3135: install_element (ENABLE_NODE, &no_debug_isis_csum_cmd);
3136: install_element (ENABLE_NODE, &debug_isis_lupd_cmd);
3137: install_element (ENABLE_NODE, &no_debug_isis_lupd_cmd);
3138: install_element (ENABLE_NODE, &debug_isis_err_cmd);
3139: install_element (ENABLE_NODE, &no_debug_isis_err_cmd);
3140: install_element (ENABLE_NODE, &debug_isis_snp_cmd);
3141: install_element (ENABLE_NODE, &no_debug_isis_snp_cmd);
3142: install_element (ENABLE_NODE, &debug_isis_upd_cmd);
3143: install_element (ENABLE_NODE, &no_debug_isis_upd_cmd);
3144: install_element (ENABLE_NODE, &debug_isis_spfevents_cmd);
3145: install_element (ENABLE_NODE, &no_debug_isis_spfevents_cmd);
3146: install_element (ENABLE_NODE, &debug_isis_spfstats_cmd);
3147: install_element (ENABLE_NODE, &no_debug_isis_spfstats_cmd);
3148: install_element (ENABLE_NODE, &debug_isis_spftrigg_cmd);
3149: install_element (ENABLE_NODE, &no_debug_isis_spftrigg_cmd);
3150: install_element (ENABLE_NODE, &debug_isis_rtevents_cmd);
3151: install_element (ENABLE_NODE, &no_debug_isis_rtevents_cmd);
3152: install_element (ENABLE_NODE, &debug_isis_events_cmd);
3153: install_element (ENABLE_NODE, &no_debug_isis_events_cmd);
1.1.1.2 misho 3154: install_element (ENABLE_NODE, &debug_isis_packet_dump_cmd);
3155: install_element (ENABLE_NODE, &no_debug_isis_packet_dump_cmd);
1.1 misho 3156:
3157: install_element (CONFIG_NODE, &debug_isis_adj_cmd);
3158: install_element (CONFIG_NODE, &no_debug_isis_adj_cmd);
3159: install_element (CONFIG_NODE, &debug_isis_csum_cmd);
3160: install_element (CONFIG_NODE, &no_debug_isis_csum_cmd);
3161: install_element (CONFIG_NODE, &debug_isis_lupd_cmd);
3162: install_element (CONFIG_NODE, &no_debug_isis_lupd_cmd);
3163: install_element (CONFIG_NODE, &debug_isis_err_cmd);
3164: install_element (CONFIG_NODE, &no_debug_isis_err_cmd);
3165: install_element (CONFIG_NODE, &debug_isis_snp_cmd);
3166: install_element (CONFIG_NODE, &no_debug_isis_snp_cmd);
3167: install_element (CONFIG_NODE, &debug_isis_upd_cmd);
3168: install_element (CONFIG_NODE, &no_debug_isis_upd_cmd);
3169: install_element (CONFIG_NODE, &debug_isis_spfevents_cmd);
3170: install_element (CONFIG_NODE, &no_debug_isis_spfevents_cmd);
3171: install_element (CONFIG_NODE, &debug_isis_spfstats_cmd);
3172: install_element (CONFIG_NODE, &no_debug_isis_spfstats_cmd);
3173: install_element (CONFIG_NODE, &debug_isis_spftrigg_cmd);
3174: install_element (CONFIG_NODE, &no_debug_isis_spftrigg_cmd);
3175: install_element (CONFIG_NODE, &debug_isis_rtevents_cmd);
3176: install_element (CONFIG_NODE, &no_debug_isis_rtevents_cmd);
3177: install_element (CONFIG_NODE, &debug_isis_events_cmd);
3178: install_element (CONFIG_NODE, &no_debug_isis_events_cmd);
1.1.1.2 misho 3179: install_element (CONFIG_NODE, &debug_isis_packet_dump_cmd);
3180: install_element (CONFIG_NODE, &no_debug_isis_packet_dump_cmd);
1.1 misho 3181:
3182: install_element (CONFIG_NODE, &router_isis_cmd);
3183: install_element (CONFIG_NODE, &no_router_isis_cmd);
3184:
3185: install_default (ISIS_NODE);
3186:
3187: install_element (ISIS_NODE, &net_cmd);
3188: install_element (ISIS_NODE, &no_net_cmd);
3189:
3190: install_element (ISIS_NODE, &is_type_cmd);
3191: install_element (ISIS_NODE, &no_is_type_cmd);
3192:
1.1.1.2 misho 3193: install_element (ISIS_NODE, &area_passwd_md5_cmd);
3194: install_element (ISIS_NODE, &area_passwd_md5_snpauth_cmd);
3195: install_element (ISIS_NODE, &area_passwd_clear_cmd);
3196: install_element (ISIS_NODE, &area_passwd_clear_snpauth_cmd);
1.1 misho 3197: install_element (ISIS_NODE, &no_area_passwd_cmd);
3198:
1.1.1.2 misho 3199: install_element (ISIS_NODE, &domain_passwd_md5_cmd);
3200: install_element (ISIS_NODE, &domain_passwd_md5_snpauth_cmd);
3201: install_element (ISIS_NODE, &domain_passwd_clear_cmd);
3202: install_element (ISIS_NODE, &domain_passwd_clear_snpauth_cmd);
1.1 misho 3203: install_element (ISIS_NODE, &no_domain_passwd_cmd);
3204:
3205: install_element (ISIS_NODE, &lsp_gen_interval_cmd);
3206: install_element (ISIS_NODE, &no_lsp_gen_interval_cmd);
3207: install_element (ISIS_NODE, &no_lsp_gen_interval_arg_cmd);
3208: install_element (ISIS_NODE, &lsp_gen_interval_l1_cmd);
3209: install_element (ISIS_NODE, &no_lsp_gen_interval_l1_cmd);
3210: install_element (ISIS_NODE, &no_lsp_gen_interval_l1_arg_cmd);
3211: install_element (ISIS_NODE, &lsp_gen_interval_l2_cmd);
3212: install_element (ISIS_NODE, &no_lsp_gen_interval_l2_cmd);
3213: install_element (ISIS_NODE, &no_lsp_gen_interval_l2_arg_cmd);
3214:
3215: install_element (ISIS_NODE, &spf_interval_cmd);
3216: install_element (ISIS_NODE, &no_spf_interval_cmd);
3217: install_element (ISIS_NODE, &no_spf_interval_arg_cmd);
3218: install_element (ISIS_NODE, &spf_interval_l1_cmd);
3219: install_element (ISIS_NODE, &no_spf_interval_l1_cmd);
3220: install_element (ISIS_NODE, &no_spf_interval_l1_arg_cmd);
3221: install_element (ISIS_NODE, &spf_interval_l2_cmd);
3222: install_element (ISIS_NODE, &no_spf_interval_l2_cmd);
3223: install_element (ISIS_NODE, &no_spf_interval_l2_arg_cmd);
3224:
1.1.1.2 misho 3225: install_element (ISIS_NODE, &max_lsp_lifetime_cmd);
3226: install_element (ISIS_NODE, &no_max_lsp_lifetime_cmd);
3227: install_element (ISIS_NODE, &no_max_lsp_lifetime_arg_cmd);
3228: install_element (ISIS_NODE, &max_lsp_lifetime_l1_cmd);
3229: install_element (ISIS_NODE, &no_max_lsp_lifetime_l1_cmd);
3230: install_element (ISIS_NODE, &no_max_lsp_lifetime_l1_arg_cmd);
3231: install_element (ISIS_NODE, &max_lsp_lifetime_l2_cmd);
3232: install_element (ISIS_NODE, &no_max_lsp_lifetime_l2_cmd);
3233: install_element (ISIS_NODE, &no_max_lsp_lifetime_l2_arg_cmd);
3234:
3235: install_element (ISIS_NODE, &lsp_refresh_interval_cmd);
3236: install_element (ISIS_NODE, &no_lsp_refresh_interval_cmd);
3237: install_element (ISIS_NODE, &no_lsp_refresh_interval_arg_cmd);
3238: install_element (ISIS_NODE, &lsp_refresh_interval_l1_cmd);
3239: install_element (ISIS_NODE, &no_lsp_refresh_interval_l1_cmd);
3240: install_element (ISIS_NODE, &no_lsp_refresh_interval_l1_arg_cmd);
3241: install_element (ISIS_NODE, &lsp_refresh_interval_l2_cmd);
3242: install_element (ISIS_NODE, &no_lsp_refresh_interval_l2_cmd);
3243: install_element (ISIS_NODE, &no_lsp_refresh_interval_l2_arg_cmd);
3244:
3245: install_element (ISIS_NODE, &set_overload_bit_cmd);
3246: install_element (ISIS_NODE, &no_set_overload_bit_cmd);
1.1 misho 3247:
3248: install_element (ISIS_NODE, &dynamic_hostname_cmd);
3249: install_element (ISIS_NODE, &no_dynamic_hostname_cmd);
3250:
3251: install_element (ISIS_NODE, &metric_style_cmd);
3252: install_element (ISIS_NODE, &no_metric_style_cmd);
1.1.1.2 misho 3253:
3254: install_element (ISIS_NODE, &log_adj_changes_cmd);
3255: install_element (ISIS_NODE, &no_log_adj_changes_cmd);
3256:
1.1 misho 3257: #ifdef TOPOLOGY_GENERATE
3258: install_element (ISIS_NODE, &topology_generate_grid_cmd);
3259: install_element (ISIS_NODE, &topology_baseis_cmd);
3260: install_element (ISIS_NODE, &topology_basedynh_cmd);
3261: install_element (ISIS_NODE, &no_topology_baseis_cmd);
3262: install_element (ISIS_NODE, &no_topology_baseis_noid_cmd);
3263: install_element (VIEW_NODE, &show_isis_generated_topology_cmd);
3264: install_element (ENABLE_NODE, &show_isis_generated_topology_cmd);
3265: #endif /* TOPOLOGY_GENERATE */
3266: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>