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