Annotation of embedaddon/quagga/isisd/isis_circuit.c, revision 1.1.1.2
1.1 misho 1: /*
2: * IS-IS Rout(e)ing protocol - isis_circuit.h
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: #include <zebra.h>
23: #ifdef GNU_LINUX
24: #include <net/ethernet.h>
25: #else
26: #include <netinet/if_ether.h>
27: #endif
28:
29: #ifndef ETHER_ADDR_LEN
30: #define ETHER_ADDR_LEN ETHERADDRL
31: #endif
32:
33: #include "log.h"
34: #include "memory.h"
35: #include "if.h"
36: #include "linklist.h"
37: #include "command.h"
38: #include "thread.h"
39: #include "hash.h"
40: #include "prefix.h"
41: #include "stream.h"
42:
43: #include "isisd/dict.h"
44: #include "isisd/include-netbsd/iso.h"
45: #include "isisd/isis_constants.h"
46: #include "isisd/isis_common.h"
1.1.1.2 ! misho 47: #include "isisd/isis_flags.h"
1.1 misho 48: #include "isisd/isis_circuit.h"
49: #include "isisd/isis_tlv.h"
50: #include "isisd/isis_lsp.h"
51: #include "isisd/isis_pdu.h"
52: #include "isisd/isis_network.h"
53: #include "isisd/isis_misc.h"
54: #include "isisd/isis_constants.h"
55: #include "isisd/isis_adjacency.h"
56: #include "isisd/isis_dr.h"
57: #include "isisd/isisd.h"
58: #include "isisd/isis_csm.h"
59: #include "isisd/isis_events.h"
60:
61: /*
62: * Prototypes.
63: */
64: int isis_interface_config_write(struct vty *);
65: int isis_if_new_hook(struct interface *);
66: int isis_if_delete_hook(struct interface *);
67:
68: struct isis_circuit *
69: isis_circuit_new ()
70: {
71: struct isis_circuit *circuit;
72: int i;
73:
74: circuit = XCALLOC (MTYPE_ISIS_CIRCUIT, sizeof (struct isis_circuit));
1.1.1.2 ! misho 75: if (circuit == NULL)
1.1 misho 76: {
77: zlog_err ("Can't malloc isis circuit");
78: return NULL;
79: }
80:
1.1.1.2 ! misho 81: /*
! 82: * Default values
! 83: */
! 84: circuit->is_type = IS_LEVEL_1_AND_2;
! 85: circuit->flags = 0;
! 86: circuit->pad_hellos = 1;
! 87: for (i = 0; i < 2; i++)
! 88: {
! 89: circuit->hello_interval[i] = DEFAULT_HELLO_INTERVAL;
! 90: circuit->hello_multiplier[i] = DEFAULT_HELLO_MULTIPLIER;
! 91: circuit->csnp_interval[i] = DEFAULT_CSNP_INTERVAL;
! 92: circuit->psnp_interval[i] = DEFAULT_PSNP_INTERVAL;
! 93: circuit->priority[i] = DEFAULT_PRIORITY;
! 94: circuit->metrics[i].metric_default = DEFAULT_CIRCUIT_METRIC;
! 95: circuit->metrics[i].metric_expense = METRICS_UNSUPPORTED;
! 96: circuit->metrics[i].metric_error = METRICS_UNSUPPORTED;
! 97: circuit->metrics[i].metric_delay = METRICS_UNSUPPORTED;
! 98: circuit->te_metric[i] = DEFAULT_CIRCUIT_METRIC;
! 99: }
! 100:
1.1 misho 101: return circuit;
102: }
103:
104: void
1.1.1.2 ! misho 105: isis_circuit_del (struct isis_circuit *circuit)
! 106: {
! 107: if (!circuit)
! 108: return;
! 109:
! 110: isis_circuit_if_unbind (circuit, circuit->interface);
! 111:
! 112: /* and lastly the circuit itself */
! 113: XFREE (MTYPE_ISIS_CIRCUIT, circuit);
! 114:
! 115: return;
! 116: }
! 117:
! 118: void
1.1 misho 119: isis_circuit_configure (struct isis_circuit *circuit, struct isis_area *area)
120: {
1.1.1.2 ! misho 121: assert (area);
1.1 misho 122: circuit->area = area;
1.1.1.2 ! misho 123:
1.1 misho 124: /*
125: * The level for the circuit is same as for the area, unless configured
126: * otherwise.
127: */
1.1.1.2 ! misho 128: if (area->is_type != IS_LEVEL_1_AND_2 && area->is_type != circuit->is_type)
! 129: zlog_warn ("circut %s is_type %d mismatch with area %s is_type %d",
! 130: circuit->interface->name, circuit->is_type,
! 131: circuit->area->area_tag, area->is_type);
1.1 misho 132:
133: /*
134: * Add the circuit into area
135: */
136: listnode_add (area->circuit_list, circuit);
137:
138: circuit->idx = flags_get_index (&area->flags);
139:
140: return;
141: }
142:
143: void
1.1.1.2 ! misho 144: isis_circuit_deconfigure (struct isis_circuit *circuit, struct isis_area *area)
1.1 misho 145: {
146: /* Free the index of SRM and SSN flags */
147: flags_free_index (&area->flags, circuit->idx);
1.1.1.2 ! misho 148: circuit->idx = 0;
! 149: /* Remove circuit from area */
! 150: assert (circuit->area == area);
! 151: listnode_delete (area->circuit_list, circuit);
! 152: circuit->area = NULL;
1.1 misho 153:
154: return;
155: }
156:
157: struct isis_circuit *
158: circuit_lookup_by_ifp (struct interface *ifp, struct list *list)
159: {
160: struct isis_circuit *circuit = NULL;
161: struct listnode *node;
162:
163: if (!list)
164: return NULL;
165:
166: for (ALL_LIST_ELEMENTS_RO (list, node, circuit))
167: if (circuit->interface == ifp)
1.1.1.2 ! misho 168: {
! 169: assert (ifp->info == circuit);
! 170: return circuit;
! 171: }
! 172:
1.1 misho 173: return NULL;
174: }
175:
176: struct isis_circuit *
177: circuit_scan_by_ifp (struct interface *ifp)
178: {
179: struct isis_area *area;
180: struct listnode *node;
181: struct isis_circuit *circuit;
182:
1.1.1.2 ! misho 183: if (ifp->info)
! 184: return (struct isis_circuit *)ifp->info;
1.1 misho 185:
1.1.1.2 ! misho 186: if (isis->area_list)
1.1 misho 187: {
1.1.1.2 ! misho 188: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
! 189: {
! 190: circuit = circuit_lookup_by_ifp (ifp, area->circuit_list);
! 191: if (circuit)
! 192: return circuit;
! 193: }
1.1 misho 194: }
195: return circuit_lookup_by_ifp (ifp, isis->init_circ_list);
196: }
197:
1.1.1.2 ! misho 198: static struct isis_circuit *
! 199: isis_circuit_lookup (struct vty *vty)
1.1 misho 200: {
1.1.1.2 ! misho 201: struct interface *ifp;
! 202: struct isis_circuit *circuit;
1.1 misho 203:
1.1.1.2 ! misho 204: ifp = (struct interface *) vty->index;
! 205: if (!ifp)
1.1 misho 206: {
1.1.1.2 ! misho 207: vty_out (vty, "Invalid interface %s", VTY_NEWLINE);
! 208: return NULL;
1.1 misho 209: }
210:
1.1.1.2 ! misho 211: circuit = circuit_scan_by_ifp (ifp);
! 212: if (!circuit)
! 213: {
! 214: vty_out (vty, "ISIS is not enabled on circuit %s%s",
! 215: ifp->name, VTY_NEWLINE);
! 216: return NULL;
! 217: }
1.1 misho 218:
1.1.1.2 ! misho 219: return circuit;
1.1 misho 220: }
221:
222: void
223: isis_circuit_add_addr (struct isis_circuit *circuit,
224: struct connected *connected)
225: {
1.1.1.2 ! misho 226: struct listnode *node;
1.1 misho 227: struct prefix_ipv4 *ipv4;
228: u_char buf[BUFSIZ];
229: #ifdef HAVE_IPV6
230: struct prefix_ipv6 *ipv6;
231: #endif /* HAVE_IPV6 */
232:
233: memset (&buf, 0, BUFSIZ);
234: if (connected->address->family == AF_INET)
235: {
1.1.1.2 ! misho 236: u_int32_t addr = connected->address->u.prefix4.s_addr;
! 237: addr = ntohl (addr);
! 238: if (IPV4_NET0(addr) ||
! 239: IPV4_NET127(addr) ||
! 240: IN_CLASSD(addr) ||
! 241: IPV4_LINKLOCAL(addr))
! 242: return;
! 243:
! 244: for (ALL_LIST_ELEMENTS_RO (circuit->ip_addrs, node, ipv4))
! 245: if (prefix_same ((struct prefix *) ipv4, connected->address))
! 246: return;
! 247:
1.1 misho 248: ipv4 = prefix_ipv4_new ();
249: ipv4->prefixlen = connected->address->prefixlen;
250: ipv4->prefix = connected->address->u.prefix4;
251: listnode_add (circuit->ip_addrs, ipv4);
252: if (circuit->area)
1.1.1.2 ! misho 253: lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
1.1 misho 254:
255: #ifdef EXTREME_DEBUG
256: prefix2str (connected->address, buf, BUFSIZ);
257: zlog_debug ("Added IP address %s to circuit %d", buf,
258: circuit->circuit_id);
259: #endif /* EXTREME_DEBUG */
260: }
261: #ifdef HAVE_IPV6
262: if (connected->address->family == AF_INET6)
263: {
1.1.1.2 ! misho 264: if (IN6_IS_ADDR_LOOPBACK(&connected->address->u.prefix6))
! 265: return;
! 266:
! 267: for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_link, node, ipv6))
! 268: if (prefix_same ((struct prefix *) ipv6, connected->address))
! 269: return;
! 270: for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_non_link, node, ipv6))
! 271: if (prefix_same ((struct prefix *) ipv6, connected->address))
! 272: return;
! 273:
1.1 misho 274: ipv6 = prefix_ipv6_new ();
275: ipv6->prefixlen = connected->address->prefixlen;
276: ipv6->prefix = connected->address->u.prefix6;
277:
278: if (IN6_IS_ADDR_LINKLOCAL (&ipv6->prefix))
279: listnode_add (circuit->ipv6_link, ipv6);
280: else
281: listnode_add (circuit->ipv6_non_link, ipv6);
282: if (circuit->area)
1.1.1.2 ! misho 283: lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
1.1 misho 284:
285: #ifdef EXTREME_DEBUG
286: prefix2str (connected->address, buf, BUFSIZ);
287: zlog_debug ("Added IPv6 address %s to circuit %d", buf,
288: circuit->circuit_id);
289: #endif /* EXTREME_DEBUG */
290: }
291: #endif /* HAVE_IPV6 */
292: return;
293: }
294:
295: void
296: isis_circuit_del_addr (struct isis_circuit *circuit,
297: struct connected *connected)
298: {
299: struct prefix_ipv4 *ipv4, *ip = NULL;
300: struct listnode *node;
301: u_char buf[BUFSIZ];
302: #ifdef HAVE_IPV6
303: struct prefix_ipv6 *ipv6, *ip6 = NULL;
304: int found = 0;
305: #endif /* HAVE_IPV6 */
306:
307: memset (&buf, 0, BUFSIZ);
308: if (connected->address->family == AF_INET)
309: {
310: ipv4 = prefix_ipv4_new ();
311: ipv4->prefixlen = connected->address->prefixlen;
312: ipv4->prefix = connected->address->u.prefix4;
313:
314: for (ALL_LIST_ELEMENTS_RO (circuit->ip_addrs, node, ip))
1.1.1.2 ! misho 315: if (prefix_same ((struct prefix *) ip, (struct prefix *) ipv4))
1.1 misho 316: break;
317:
318: if (ip)
319: {
320: listnode_delete (circuit->ip_addrs, ip);
1.1.1.2 ! misho 321: if (circuit->area)
! 322: lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
1.1 misho 323: }
324: else
325: {
326: prefix2str (connected->address, (char *)buf, BUFSIZ);
1.1.1.2 ! misho 327: zlog_warn ("Nonexitant ip address %s removal attempt from \
! 328: circuit %d", buf, circuit->circuit_id);
1.1 misho 329: }
330: }
331: #ifdef HAVE_IPV6
332: if (connected->address->family == AF_INET6)
333: {
334: ipv6 = prefix_ipv6_new ();
335: ipv6->prefixlen = connected->address->prefixlen;
336: ipv6->prefix = connected->address->u.prefix6;
337:
338: if (IN6_IS_ADDR_LINKLOCAL (&ipv6->prefix))
339: {
340: for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_link, node, ip6))
341: {
342: if (prefix_same ((struct prefix *) ip6, (struct prefix *) ipv6))
343: break;
344: }
345: if (ip6)
346: {
347: listnode_delete (circuit->ipv6_link, ip6);
348: found = 1;
349: }
350: }
351: else
352: {
353: for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_non_link, node, ip6))
354: {
355: if (prefix_same ((struct prefix *) ip6, (struct prefix *) ipv6))
356: break;
357: }
358: if (ip6)
359: {
360: listnode_delete (circuit->ipv6_non_link, ip6);
361: found = 1;
362: }
363: }
364:
365: if (!found)
366: {
367: prefix2str (connected->address, (char *)buf, BUFSIZ);
1.1.1.2 ! misho 368: zlog_warn ("Nonexitant ip address %s removal attempt from \
! 369: circuit %d", buf, circuit->circuit_id);
1.1 misho 370: }
1.1.1.2 ! misho 371: else if (circuit->area)
! 372: lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
1.1 misho 373: }
374: #endif /* HAVE_IPV6 */
375: return;
376: }
377:
1.1.1.2 ! misho 378: static u_char
! 379: isis_circuit_id_gen (struct interface *ifp)
! 380: {
! 381: u_char id = 0;
! 382: char ifname[16];
! 383: unsigned int i;
! 384: int start = -1, end = -1;
! 385:
! 386: /*
! 387: * Get a stable circuit id from ifname. This makes
! 388: * the ifindex from flapping when netdevs are created
! 389: * and deleted on the fly. Note that this circuit id
! 390: * is used in pseudo lsps so it is better to be stable.
! 391: * The following code works on any reasonanle ifname
! 392: * like: eth1 or trk-1.1 etc.
! 393: */
! 394: for (i = 0; i < strlen (ifp->name); i++)
! 395: {
! 396: if (isdigit(ifp->name[i]))
! 397: {
! 398: if (start < 0)
! 399: {
! 400: start = i;
! 401: end = i + 1;
! 402: }
! 403: else
! 404: {
! 405: end = i + 1;
! 406: }
! 407: }
! 408: else if (start >= 0)
! 409: break;
! 410: }
! 411:
! 412: if ((start >= 0) && (end >= start) && (end - start) < 16)
! 413: {
! 414: memset (ifname, 0, 16);
! 415: strncpy (ifname, &ifp->name[start], end - start);
! 416: id = (u_char)atoi(ifname);
! 417: }
! 418:
! 419: /* Try to be unique. */
! 420: if (!id)
! 421: id = (u_char)((ifp->ifindex & 0xff) | 0x80);
! 422:
! 423: return id;
! 424: }
! 425:
1.1 misho 426: void
427: isis_circuit_if_add (struct isis_circuit *circuit, struct interface *ifp)
428: {
429: struct listnode *node, *nnode;
430: struct connected *conn;
431:
1.1.1.2 ! misho 432: circuit->circuit_id = isis_circuit_id_gen (ifp);
1.1 misho 433:
1.1.1.2 ! misho 434: isis_circuit_if_bind (circuit, ifp);
1.1 misho 435: /* isis_circuit_update_addrs (circuit, ifp); */
436:
437: if (if_is_broadcast (ifp))
438: {
1.1.1.2 ! misho 439: if (circuit->circ_type_config == CIRCUIT_T_P2P)
! 440: circuit->circ_type = CIRCUIT_T_P2P;
1.1 misho 441: else
1.1.1.2 ! misho 442: circuit->circ_type = CIRCUIT_T_BROADCAST;
1.1 misho 443: }
444: else if (if_is_pointopoint (ifp))
445: {
446: circuit->circ_type = CIRCUIT_T_P2P;
447: }
1.1.1.2 ! misho 448: else if (if_is_loopback (ifp))
! 449: {
! 450: circuit->circ_type = CIRCUIT_T_LOOPBACK;
! 451: circuit->is_passive = 1;
! 452: }
1.1 misho 453: else
454: {
455: /* It's normal in case of loopback etc. */
456: if (isis->debugs & DEBUG_EVENTS)
1.1.1.2 ! misho 457: zlog_debug ("isis_circuit_if_add: unsupported media");
! 458: circuit->circ_type = CIRCUIT_T_UNKNOWN;
1.1 misho 459: }
460:
1.1.1.2 ! misho 461: circuit->ip_addrs = list_new ();
! 462: #ifdef HAVE_IPV6
! 463: circuit->ipv6_link = list_new ();
! 464: circuit->ipv6_non_link = list_new ();
! 465: #endif /* HAVE_IPV6 */
! 466:
1.1 misho 467: for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, conn))
468: isis_circuit_add_addr (circuit, conn);
469:
470: return;
471: }
472:
473: void
1.1.1.2 ! misho 474: isis_circuit_if_del (struct isis_circuit *circuit, struct interface *ifp)
1.1 misho 475: {
1.1.1.2 ! misho 476: struct listnode *node, *nnode;
! 477: struct connected *conn;
1.1 misho 478:
1.1.1.2 ! misho 479: assert (circuit->interface == ifp);
1.1 misho 480:
1.1.1.2 ! misho 481: /* destroy addresses */
! 482: for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, conn))
! 483: isis_circuit_del_addr (circuit, conn);
! 484:
! 485: if (circuit->ip_addrs)
1.1 misho 486: {
1.1.1.2 ! misho 487: assert (listcount(circuit->ip_addrs) == 0);
! 488: list_delete (circuit->ip_addrs);
! 489: circuit->ip_addrs = NULL;
1.1 misho 490: }
1.1.1.2 ! misho 491:
! 492: #ifdef HAVE_IPV6
! 493: if (circuit->ipv6_link)
1.1 misho 494: {
1.1.1.2 ! misho 495: assert (listcount(circuit->ipv6_link) == 0);
! 496: list_delete (circuit->ipv6_link);
! 497: circuit->ipv6_link = NULL;
1.1 misho 498: }
1.1.1.2 ! misho 499:
! 500: if (circuit->ipv6_non_link)
1.1 misho 501: {
1.1.1.2 ! misho 502: assert (listcount(circuit->ipv6_non_link) == 0);
! 503: list_delete (circuit->ipv6_non_link);
! 504: circuit->ipv6_non_link = NULL;
1.1 misho 505: }
1.1.1.2 ! misho 506: #endif /* HAVE_IPV6 */
! 507:
! 508: circuit->circ_type = CIRCUIT_T_UNKNOWN;
! 509: circuit->circuit_id = 0;
1.1 misho 510:
511: return;
512: }
513:
514: void
1.1.1.2 ! misho 515: isis_circuit_if_bind (struct isis_circuit *circuit, struct interface *ifp)
1.1 misho 516: {
1.1.1.2 ! misho 517: assert (circuit != NULL);
! 518: assert (ifp != NULL);
! 519: if (circuit->interface)
! 520: assert (circuit->interface == ifp);
! 521: else
! 522: circuit->interface = ifp;
! 523: if (ifp->info)
! 524: assert (ifp->info == circuit);
! 525: else
! 526: ifp->info = circuit;
! 527: }
! 528:
! 529: void
! 530: isis_circuit_if_unbind (struct isis_circuit *circuit, struct interface *ifp)
! 531: {
! 532: assert (circuit != NULL);
! 533: assert (ifp != NULL);
! 534: assert (circuit->interface == ifp);
! 535: assert (ifp->info == circuit);
1.1 misho 536: circuit->interface = NULL;
1.1.1.2 ! misho 537: ifp->info = NULL;
! 538: }
1.1 misho 539:
1.1.1.2 ! misho 540: static void
! 541: isis_circuit_update_all_srmflags (struct isis_circuit *circuit, int is_set)
! 542: {
! 543: struct isis_area *area;
! 544: struct isis_lsp *lsp;
! 545: dnode_t *dnode, *dnode_next;
! 546: int level;
! 547:
! 548: assert (circuit);
! 549: area = circuit->area;
! 550: assert (area);
! 551: for (level = ISIS_LEVEL1; level <= ISIS_LEVEL2; level++)
! 552: {
! 553: if (level & circuit->is_type)
! 554: {
! 555: if (area->lspdb[level - 1] &&
! 556: dict_count (area->lspdb[level - 1]) > 0)
! 557: {
! 558: for (dnode = dict_first (area->lspdb[level - 1]);
! 559: dnode != NULL; dnode = dnode_next)
! 560: {
! 561: dnode_next = dict_next (area->lspdb[level - 1], dnode);
! 562: lsp = dnode_get (dnode);
! 563: if (is_set)
! 564: {
! 565: ISIS_SET_FLAG (lsp->SRMflags, circuit);
! 566: }
! 567: else
! 568: {
! 569: ISIS_CLEAR_FLAG (lsp->SRMflags, circuit);
! 570: }
! 571: }
! 572: }
! 573: }
! 574: }
1.1 misho 575: }
576:
1.1.1.2 ! misho 577: int
1.1 misho 578: isis_circuit_up (struct isis_circuit *circuit)
579: {
1.1.1.2 ! misho 580: int retv;
! 581:
! 582: /* Set the flags for all the lsps of the circuit. */
! 583: isis_circuit_update_all_srmflags (circuit, 1);
! 584:
! 585: if (circuit->state == C_STATE_UP)
! 586: return ISIS_OK;
! 587:
! 588: if (circuit->is_passive)
! 589: return ISIS_OK;
1.1 misho 590:
591: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
592: {
1.1.1.2 ! misho 593: /*
! 594: * Get the Hardware Address
! 595: */
! 596: #ifdef HAVE_STRUCT_SOCKADDR_DL
! 597: #ifndef SUNOS_5
! 598: if (circuit->interface->sdl.sdl_alen != ETHER_ADDR_LEN)
! 599: zlog_warn ("unsupported link layer");
! 600: else
! 601: memcpy (circuit->u.bc.snpa, LLADDR (&circuit->interface->sdl),
! 602: ETH_ALEN);
! 603: #endif
! 604: #else
! 605: if (circuit->interface->hw_addr_len != ETH_ALEN)
! 606: {
! 607: zlog_warn ("unsupported link layer");
! 608: }
! 609: else
! 610: {
! 611: memcpy (circuit->u.bc.snpa, circuit->interface->hw_addr, ETH_ALEN);
! 612: }
! 613: #ifdef EXTREME_DEGUG
! 614: zlog_debug ("isis_circuit_if_add: if_id %d, isomtu %d snpa %s",
! 615: circuit->interface->ifindex, ISO_MTU (circuit),
! 616: snpa_print (circuit->u.bc.snpa));
! 617: #endif /* EXTREME_DEBUG */
! 618: #endif /* HAVE_STRUCT_SOCKADDR_DL */
! 619:
! 620: circuit->u.bc.adjdb[0] = list_new ();
! 621: circuit->u.bc.adjdb[1] = list_new ();
! 622:
1.1 misho 623: if (circuit->area->min_bcast_mtu == 0 ||
1.1.1.2 ! misho 624: ISO_MTU (circuit) < circuit->area->min_bcast_mtu)
! 625: circuit->area->min_bcast_mtu = ISO_MTU (circuit);
1.1 misho 626: /*
627: * ISO 10589 - 8.4.1 Enabling of broadcast circuits
628: */
629:
630: /* initilizing the hello sending threads
631: * for a broadcast IF
632: */
633:
634: /* 8.4.1 a) commence sending of IIH PDUs */
635:
1.1.1.2 ! misho 636: if (circuit->is_type & IS_LEVEL_1)
! 637: {
! 638: thread_add_event (master, send_lan_l1_hello, circuit, 0);
! 639: circuit->u.bc.lan_neighs[0] = list_new ();
! 640: }
! 641:
! 642: if (circuit->is_type & IS_LEVEL_2)
! 643: {
! 644: thread_add_event (master, send_lan_l2_hello, circuit, 0);
! 645: circuit->u.bc.lan_neighs[1] = list_new ();
! 646: }
1.1 misho 647:
648: /* 8.4.1 b) FIXME: solicit ES - 8.4.6 */
649: /* 8.4.1 c) FIXME: listen for ESH PDUs */
650:
651: /* 8.4.1 d) */
652: /* dr election will commence in... */
1.1.1.2 ! misho 653: if (circuit->is_type & IS_LEVEL_1)
! 654: THREAD_TIMER_ON (master, circuit->u.bc.t_run_dr[0], isis_run_dr_l1,
! 655: circuit, 2 * circuit->hello_interval[0]);
! 656: if (circuit->is_type & IS_LEVEL_2)
! 657: THREAD_TIMER_ON (master, circuit->u.bc.t_run_dr[1], isis_run_dr_l2,
! 658: circuit, 2 * circuit->hello_interval[1]);
1.1 misho 659: }
660: else
661: {
662: /* initializing the hello send threads
663: * for a ptp IF
664: */
1.1.1.2 ! misho 665: circuit->u.p2p.neighbor = NULL;
1.1 misho 666: thread_add_event (master, send_p2p_hello, circuit, 0);
667: }
668:
669: /* initializing PSNP timers */
1.1.1.2 ! misho 670: if (circuit->is_type & IS_LEVEL_1)
! 671: THREAD_TIMER_ON (master, circuit->t_send_psnp[0], send_l1_psnp, circuit,
! 672: isis_jitter (circuit->psnp_interval[0], PSNP_JITTER));
1.1 misho 673:
1.1.1.2 ! misho 674: if (circuit->is_type & IS_LEVEL_2)
! 675: THREAD_TIMER_ON (master, circuit->t_send_psnp[1], send_l2_psnp, circuit,
! 676: isis_jitter (circuit->psnp_interval[1], PSNP_JITTER));
! 677:
! 678: /* unified init for circuits; ignore warnings below this level */
! 679: retv = isis_sock_init (circuit);
! 680: if (retv != ISIS_OK)
1.1 misho 681: {
1.1.1.2 ! misho 682: isis_circuit_down (circuit);
! 683: return retv;
1.1 misho 684: }
685:
1.1.1.2 ! misho 686: /* initialize the circuit streams after opening connection */
1.1 misho 687: if (circuit->rcv_stream == NULL)
688: circuit->rcv_stream = stream_new (ISO_MTU (circuit));
689:
690: if (circuit->snd_stream == NULL)
691: circuit->snd_stream = stream_new (ISO_MTU (circuit));
692:
693: #ifdef GNU_LINUX
694: THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit,
1.1.1.2 ! misho 695: circuit->fd);
1.1 misho 696: #else
697: THREAD_TIMER_ON (master, circuit->t_read, isis_receive, circuit,
1.1.1.2 ! misho 698: circuit->fd);
1.1 misho 699: #endif
1.1.1.2 ! misho 700:
! 701: circuit->lsp_queue = list_new ();
! 702: circuit->lsp_queue_last_cleared = time (NULL);
! 703:
! 704: return ISIS_OK;
1.1 misho 705: }
706:
707: void
708: isis_circuit_down (struct isis_circuit *circuit)
709: {
1.1.1.2 ! misho 710: if (circuit->state != C_STATE_UP)
! 711: return;
! 712:
! 713: /* Clear the flags for all the lsps of the circuit. */
! 714: isis_circuit_update_all_srmflags (circuit, 0);
! 715:
1.1 misho 716: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
717: {
1.1.1.2 ! misho 718: /* destroy neighbour lists */
! 719: if (circuit->u.bc.lan_neighs[0])
! 720: {
! 721: list_delete (circuit->u.bc.lan_neighs[0]);
! 722: circuit->u.bc.lan_neighs[0] = NULL;
! 723: }
! 724: if (circuit->u.bc.lan_neighs[1])
! 725: {
! 726: list_delete (circuit->u.bc.lan_neighs[1]);
! 727: circuit->u.bc.lan_neighs[1] = NULL;
! 728: }
! 729: /* destroy adjacency databases */
! 730: if (circuit->u.bc.adjdb[0])
! 731: {
! 732: circuit->u.bc.adjdb[0]->del = isis_delete_adj;
! 733: list_delete (circuit->u.bc.adjdb[0]);
! 734: circuit->u.bc.adjdb[0] = NULL;
! 735: }
! 736: if (circuit->u.bc.adjdb[1])
! 737: {
! 738: circuit->u.bc.adjdb[1]->del = isis_delete_adj;
! 739: list_delete (circuit->u.bc.adjdb[1]);
! 740: circuit->u.bc.adjdb[1] = NULL;
! 741: }
! 742: if (circuit->u.bc.is_dr[0])
! 743: {
! 744: isis_dr_resign (circuit, 1);
! 745: circuit->u.bc.is_dr[0] = 0;
! 746: }
! 747: memset (circuit->u.bc.l1_desig_is, 0, ISIS_SYS_ID_LEN + 1);
! 748: if (circuit->u.bc.is_dr[1])
! 749: {
! 750: isis_dr_resign (circuit, 2);
! 751: circuit->u.bc.is_dr[1] = 0;
! 752: }
! 753: memset (circuit->u.bc.l2_desig_is, 0, ISIS_SYS_ID_LEN + 1);
! 754: memset (circuit->u.bc.snpa, 0, ETH_ALEN);
! 755:
1.1 misho 756: THREAD_TIMER_OFF (circuit->u.bc.t_send_lan_hello[0]);
757: THREAD_TIMER_OFF (circuit->u.bc.t_send_lan_hello[1]);
758: THREAD_TIMER_OFF (circuit->u.bc.t_run_dr[0]);
759: THREAD_TIMER_OFF (circuit->u.bc.t_run_dr[1]);
1.1.1.2 ! misho 760: THREAD_TIMER_OFF (circuit->u.bc.t_refresh_pseudo_lsp[0]);
! 761: THREAD_TIMER_OFF (circuit->u.bc.t_refresh_pseudo_lsp[1]);
1.1 misho 762: }
763: else if (circuit->circ_type == CIRCUIT_T_P2P)
764: {
1.1.1.2 ! misho 765: isis_delete_adj (circuit->u.p2p.neighbor);
! 766: circuit->u.p2p.neighbor = NULL;
1.1 misho 767: THREAD_TIMER_OFF (circuit->u.p2p.t_send_p2p_hello);
768: }
769:
1.1.1.2 ! misho 770: /* Cancel all active threads */
! 771: THREAD_TIMER_OFF (circuit->t_send_csnp[0]);
! 772: THREAD_TIMER_OFF (circuit->t_send_csnp[1]);
! 773: THREAD_TIMER_OFF (circuit->t_send_psnp[0]);
! 774: THREAD_TIMER_OFF (circuit->t_send_psnp[1]);
! 775: THREAD_OFF (circuit->t_read);
! 776:
! 777: if (circuit->lsp_queue)
! 778: {
! 779: circuit->lsp_queue->del = NULL;
! 780: list_delete (circuit->lsp_queue);
! 781: circuit->lsp_queue = NULL;
! 782: }
! 783:
! 784: /* send one gratuitous hello to spead up convergence */
! 785: if (circuit->is_type & IS_LEVEL_1)
! 786: send_hello (circuit, IS_LEVEL_1);
! 787: if (circuit->is_type & IS_LEVEL_2)
! 788: send_hello (circuit, IS_LEVEL_2);
! 789:
! 790: circuit->upadjcount[0] = 0;
! 791: circuit->upadjcount[1] = 0;
! 792:
1.1 misho 793: /* close the socket */
1.1.1.2 ! misho 794: if (circuit->fd)
! 795: {
! 796: close (circuit->fd);
! 797: circuit->fd = 0;
! 798: }
! 799:
! 800: if (circuit->rcv_stream != NULL)
! 801: {
! 802: stream_free (circuit->rcv_stream);
! 803: circuit->rcv_stream = NULL;
! 804: }
! 805:
! 806: if (circuit->snd_stream != NULL)
! 807: {
! 808: stream_free (circuit->snd_stream);
! 809: circuit->snd_stream = NULL;
! 810: }
! 811:
! 812: thread_cancel_event (master, circuit);
1.1 misho 813:
814: return;
815: }
816:
817: void
818: circuit_update_nlpids (struct isis_circuit *circuit)
819: {
820: circuit->nlpids.count = 0;
821:
822: if (circuit->ip_router)
823: {
824: circuit->nlpids.nlpids[0] = NLPID_IP;
825: circuit->nlpids.count++;
826: }
827: #ifdef HAVE_IPV6
828: if (circuit->ipv6_router)
829: {
830: circuit->nlpids.nlpids[circuit->nlpids.count] = NLPID_IPV6;
831: circuit->nlpids.count++;
832: }
833: #endif /* HAVE_IPV6 */
834: return;
835: }
836:
1.1.1.2 ! misho 837: void
! 838: isis_circuit_print_vty (struct isis_circuit *circuit, struct vty *vty,
! 839: char detail)
! 840: {
! 841: if (detail == ISIS_UI_LEVEL_BRIEF)
! 842: {
! 843: vty_out (vty, " %-12s", circuit->interface->name);
! 844: vty_out (vty, "0x%-7x", circuit->circuit_id);
! 845: vty_out (vty, "%-9s", circuit_state2string (circuit->state));
! 846: vty_out (vty, "%-9s", circuit_type2string (circuit->circ_type));
! 847: vty_out (vty, "%-9s", circuit_t2string (circuit->is_type));
! 848: vty_out (vty, "%s", VTY_NEWLINE);
! 849: }
! 850:
! 851: if (detail == ISIS_UI_LEVEL_DETAIL)
! 852: {
! 853: vty_out (vty, " Interface: %s", circuit->interface->name);
! 854: vty_out (vty, ", State: %s", circuit_state2string (circuit->state));
! 855: if (circuit->is_passive)
! 856: vty_out (vty, ", Passive");
! 857: else
! 858: vty_out (vty, ", Active");
! 859: vty_out (vty, ", Circuit Id: 0x%x", circuit->circuit_id);
! 860: vty_out (vty, "%s", VTY_NEWLINE);
! 861: vty_out (vty, " Type: %s", circuit_type2string (circuit->circ_type));
! 862: vty_out (vty, ", Level: %s", circuit_t2string (circuit->is_type));
! 863: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
! 864: vty_out (vty, ", SNPA: %-10s", snpa_print (circuit->u.bc.snpa));
! 865: vty_out (vty, "%s", VTY_NEWLINE);
! 866: if (circuit->is_type & IS_LEVEL_1)
! 867: {
! 868: vty_out (vty, " Level-1 Information:%s", VTY_NEWLINE);
! 869: if (circuit->area->newmetric)
! 870: vty_out (vty, " Metric: %d", circuit->te_metric[0]);
! 871: else
! 872: vty_out (vty, " Metric: %d",
! 873: circuit->metrics[0].metric_default);
! 874: if (!circuit->is_passive)
! 875: {
! 876: vty_out (vty, ", Active neighbors: %u%s",
! 877: circuit->upadjcount[0], VTY_NEWLINE);
! 878: vty_out (vty, " Hello interval: %u, "
! 879: "Holddown count: %u %s%s",
! 880: circuit->hello_interval[0],
! 881: circuit->hello_multiplier[0],
! 882: (circuit->pad_hellos ? "(pad)" : "(no-pad)"),
! 883: VTY_NEWLINE);
! 884: vty_out (vty, " CNSP interval: %u, "
! 885: "PSNP interval: %u%s",
! 886: circuit->csnp_interval[0],
! 887: circuit->psnp_interval[0], VTY_NEWLINE);
! 888: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
! 889: vty_out (vty, " LAN Priority: %u, %s%s",
! 890: circuit->priority[0],
! 891: (circuit->u.bc.is_dr[0] ? \
! 892: "is DIS" : "is not DIS"), VTY_NEWLINE);
! 893: }
! 894: else
! 895: {
! 896: vty_out (vty, "%s", VTY_NEWLINE);
! 897: }
! 898: }
! 899: if (circuit->is_type & IS_LEVEL_2)
! 900: {
! 901: vty_out (vty, " Level-2 Information:%s", VTY_NEWLINE);
! 902: if (circuit->area->newmetric)
! 903: vty_out (vty, " Metric: %d", circuit->te_metric[1]);
! 904: else
! 905: vty_out (vty, " Metric: %d",
! 906: circuit->metrics[1].metric_default);
! 907: if (!circuit->is_passive)
! 908: {
! 909: vty_out (vty, ", Active neighbors: %u%s",
! 910: circuit->upadjcount[1], VTY_NEWLINE);
! 911: vty_out (vty, " Hello interval: %u, "
! 912: "Holddown count: %u %s%s",
! 913: circuit->hello_interval[1],
! 914: circuit->hello_multiplier[1],
! 915: (circuit->pad_hellos ? "(pad)" : "(no-pad)"),
! 916: VTY_NEWLINE);
! 917: vty_out (vty, " CNSP interval: %u, "
! 918: "PSNP interval: %u%s",
! 919: circuit->csnp_interval[1],
! 920: circuit->psnp_interval[1], VTY_NEWLINE);
! 921: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
! 922: vty_out (vty, " LAN Priority: %u, %s%s",
! 923: circuit->priority[1],
! 924: (circuit->u.bc.is_dr[1] ? \
! 925: "is DIS" : "is not DIS"), VTY_NEWLINE);
! 926: }
! 927: else
! 928: {
! 929: vty_out (vty, "%s", VTY_NEWLINE);
! 930: }
! 931: }
! 932: if (circuit->ip_addrs && listcount (circuit->ip_addrs) > 0)
! 933: {
! 934: struct listnode *node;
! 935: struct prefix *ip_addr;
! 936: u_char buf[BUFSIZ];
! 937: vty_out (vty, " IP Prefix(es):%s", VTY_NEWLINE);
! 938: for (ALL_LIST_ELEMENTS_RO (circuit->ip_addrs, node, ip_addr))
! 939: {
! 940: prefix2str (ip_addr, (char*)buf, BUFSIZ),
! 941: vty_out (vty, " %s%s", buf, VTY_NEWLINE);
! 942: }
! 943: }
! 944: vty_out (vty, "%s", VTY_NEWLINE);
! 945: }
! 946: return;
! 947: }
! 948:
1.1 misho 949: int
950: isis_interface_config_write (struct vty *vty)
951: {
952: int write = 0;
953: struct listnode *node, *node2;
954: struct interface *ifp;
955: struct isis_area *area;
1.1.1.2 ! misho 956: struct isis_circuit *circuit;
1.1 misho 957: int i;
958:
959: for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
960: {
1.1.1.2 ! misho 961: /* IF name */
! 962: vty_out (vty, "interface %s%s", ifp->name, VTY_NEWLINE);
! 963: write++;
! 964: /* IF desc */
! 965: if (ifp->desc)
! 966: {
! 967: vty_out (vty, " description %s%s", ifp->desc, VTY_NEWLINE);
! 968: write++;
! 969: }
! 970: /* ISIS Circuit */
! 971: for (ALL_LIST_ELEMENTS_RO (isis->area_list, node2, area))
! 972: {
! 973: circuit = circuit_lookup_by_ifp (ifp, area->circuit_list);
! 974: if (circuit == NULL)
! 975: continue;
! 976: if (circuit->ip_router)
! 977: {
! 978: vty_out (vty, " ip router isis %s%s", area->area_tag,
! 979: VTY_NEWLINE);
! 980: write++;
! 981: }
! 982: if (circuit->is_passive)
! 983: {
! 984: vty_out (vty, " isis passive%s", VTY_NEWLINE);
! 985: write++;
! 986: }
! 987: if (circuit->circ_type_config == CIRCUIT_T_P2P)
! 988: {
! 989: vty_out (vty, " isis network point-to-point%s", VTY_NEWLINE);
! 990: write++;
! 991: }
1.1 misho 992: #ifdef HAVE_IPV6
1.1.1.2 ! misho 993: if (circuit->ipv6_router)
! 994: {
! 995: vty_out (vty, " ipv6 router isis %s%s", area->area_tag,
! 996: VTY_NEWLINE);
! 997: write++;
! 998: }
1.1 misho 999: #endif /* HAVE_IPV6 */
1000:
1.1.1.2 ! misho 1001: /* ISIS - circuit type */
! 1002: if (circuit->is_type == IS_LEVEL_1)
! 1003: {
! 1004: vty_out (vty, " isis circuit-type level-1%s", VTY_NEWLINE);
! 1005: write++;
! 1006: }
! 1007: else
! 1008: {
! 1009: if (circuit->is_type == IS_LEVEL_2)
! 1010: {
! 1011: vty_out (vty, " isis circuit-type level-2-only%s",
! 1012: VTY_NEWLINE);
! 1013: write++;
! 1014: }
! 1015: }
! 1016:
! 1017: /* ISIS - CSNP interval */
! 1018: if (circuit->csnp_interval[0] == circuit->csnp_interval[1])
! 1019: {
! 1020: if (circuit->csnp_interval[0] != DEFAULT_CSNP_INTERVAL)
! 1021: {
! 1022: vty_out (vty, " isis csnp-interval %d%s",
! 1023: circuit->csnp_interval[0], VTY_NEWLINE);
! 1024: write++;
! 1025: }
! 1026: }
! 1027: else
! 1028: {
! 1029: for (i = 0; i < 2; i++)
! 1030: {
! 1031: if (circuit->csnp_interval[i] != DEFAULT_CSNP_INTERVAL)
! 1032: {
! 1033: vty_out (vty, " isis csnp-interval %d level-%d%s",
! 1034: circuit->csnp_interval[i], i + 1, VTY_NEWLINE);
! 1035: write++;
! 1036: }
! 1037: }
! 1038: }
! 1039:
! 1040: /* ISIS - PSNP interval */
! 1041: if (circuit->psnp_interval[0] == circuit->psnp_interval[1])
! 1042: {
! 1043: if (circuit->psnp_interval[0] != DEFAULT_PSNP_INTERVAL)
! 1044: {
! 1045: vty_out (vty, " isis psnp-interval %d%s",
! 1046: circuit->psnp_interval[0], VTY_NEWLINE);
! 1047: write++;
! 1048: }
! 1049: }
! 1050: else
! 1051: {
! 1052: for (i = 0; i < 2; i++)
! 1053: {
! 1054: if (circuit->psnp_interval[i] != DEFAULT_PSNP_INTERVAL)
! 1055: {
! 1056: vty_out (vty, " isis psnp-interval %d level-%d%s",
! 1057: circuit->psnp_interval[i], i + 1, VTY_NEWLINE);
! 1058: write++;
! 1059: }
! 1060: }
! 1061: }
! 1062:
! 1063: /* ISIS - Hello padding - Defaults to true so only display if false */
! 1064: if (circuit->pad_hellos == 0)
! 1065: {
! 1066: vty_out (vty, " no isis hello padding%s", VTY_NEWLINE);
! 1067: write++;
! 1068: }
! 1069:
! 1070: /* ISIS - Hello interval */
! 1071: if (circuit->hello_interval[0] == circuit->hello_interval[1])
! 1072: {
! 1073: if (circuit->hello_interval[0] != DEFAULT_HELLO_INTERVAL)
! 1074: {
! 1075: vty_out (vty, " isis hello-interval %d%s",
! 1076: circuit->hello_interval[0], VTY_NEWLINE);
! 1077: write++;
! 1078: }
! 1079: }
! 1080: else
! 1081: {
! 1082: for (i = 0; i < 2; i++)
! 1083: {
! 1084: if (circuit->hello_interval[i] != DEFAULT_HELLO_INTERVAL)
! 1085: {
! 1086: vty_out (vty, " isis hello-interval %d level-%d%s",
! 1087: circuit->hello_interval[i], i + 1, VTY_NEWLINE);
! 1088: write++;
! 1089: }
! 1090: }
! 1091: }
! 1092:
! 1093: /* ISIS - Hello Multiplier */
! 1094: if (circuit->hello_multiplier[0] == circuit->hello_multiplier[1])
! 1095: {
! 1096: if (circuit->hello_multiplier[0] != DEFAULT_HELLO_MULTIPLIER)
! 1097: {
! 1098: vty_out (vty, " isis hello-multiplier %d%s",
! 1099: circuit->hello_multiplier[0], VTY_NEWLINE);
! 1100: write++;
! 1101: }
! 1102: }
! 1103: else
! 1104: {
! 1105: for (i = 0; i < 2; i++)
! 1106: {
! 1107: if (circuit->hello_multiplier[i] != DEFAULT_HELLO_MULTIPLIER)
! 1108: {
! 1109: vty_out (vty, " isis hello-multiplier %d level-%d%s",
! 1110: circuit->hello_multiplier[i], i + 1,
! 1111: VTY_NEWLINE);
! 1112: write++;
! 1113: }
! 1114: }
! 1115: }
! 1116:
! 1117: /* ISIS - Priority */
! 1118: if (circuit->priority[0] == circuit->priority[1])
! 1119: {
! 1120: if (circuit->priority[0] != DEFAULT_PRIORITY)
! 1121: {
! 1122: vty_out (vty, " isis priority %d%s",
! 1123: circuit->priority[0], VTY_NEWLINE);
! 1124: write++;
! 1125: }
! 1126: }
! 1127: else
! 1128: {
! 1129: for (i = 0; i < 2; i++)
! 1130: {
! 1131: if (circuit->priority[i] != DEFAULT_PRIORITY)
! 1132: {
! 1133: vty_out (vty, " isis priority %d level-%d%s",
! 1134: circuit->priority[i], i + 1, VTY_NEWLINE);
! 1135: write++;
! 1136: }
! 1137: }
! 1138: }
! 1139:
! 1140: /* ISIS - Metric */
! 1141: if (circuit->te_metric[0] == circuit->te_metric[1])
! 1142: {
! 1143: if (circuit->te_metric[0] != DEFAULT_CIRCUIT_METRIC)
! 1144: {
! 1145: vty_out (vty, " isis metric %d%s", circuit->te_metric[0],
! 1146: VTY_NEWLINE);
! 1147: write++;
! 1148: }
! 1149: }
! 1150: else
! 1151: {
! 1152: for (i = 0; i < 2; i++)
! 1153: {
! 1154: if (circuit->te_metric[i] != DEFAULT_CIRCUIT_METRIC)
! 1155: {
! 1156: vty_out (vty, " isis metric %d level-%d%s",
! 1157: circuit->te_metric[i], i + 1, VTY_NEWLINE);
! 1158: write++;
! 1159: }
! 1160: }
! 1161: }
! 1162: if (circuit->passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5)
! 1163: {
! 1164: vty_out (vty, " isis password md5 %s%s", circuit->passwd.passwd,
! 1165: VTY_NEWLINE);
! 1166: write++;
! 1167: }
! 1168: else if (circuit->passwd.type == ISIS_PASSWD_TYPE_CLEARTXT)
! 1169: {
! 1170: vty_out (vty, " isis password clear %s%s", circuit->passwd.passwd,
! 1171: VTY_NEWLINE);
! 1172: write++;
! 1173: }
! 1174: }
! 1175: vty_out (vty, "!%s", VTY_NEWLINE);
1.1 misho 1176: }
1177:
1178: return write;
1179: }
1180:
1181: DEFUN (ip_router_isis,
1182: ip_router_isis_cmd,
1183: "ip router isis WORD",
1184: "Interface Internet Protocol config commands\n"
1185: "IP router interface commands\n"
1186: "IS-IS Routing for IP\n"
1187: "Routing process tag\n")
1188: {
1.1.1.2 ! misho 1189: struct isis_circuit *circuit;
1.1 misho 1190: struct interface *ifp;
1191: struct isis_area *area;
1192:
1193: ifp = (struct interface *) vty->index;
1194: assert (ifp);
1195:
1.1.1.2 ! misho 1196: /* Prevent more than one area per circuit */
! 1197: circuit = circuit_scan_by_ifp (ifp);
! 1198: if (circuit)
1.1 misho 1199: {
1.1.1.2 ! misho 1200: if (circuit->ip_router == 1)
! 1201: {
! 1202: if (strcmp (circuit->area->area_tag, argv[0]))
! 1203: {
! 1204: vty_out (vty, "ISIS circuit is already defined on %s%s",
! 1205: circuit->area->area_tag, VTY_NEWLINE);
! 1206: return CMD_ERR_NOTHING_TODO;
! 1207: }
! 1208: return CMD_SUCCESS;
! 1209: }
1.1 misho 1210: }
1211:
1.1.1.2 ! misho 1212: if (isis_area_get (vty, argv[0]) != CMD_SUCCESS)
1.1 misho 1213: {
1.1.1.2 ! misho 1214: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
! 1215: return CMD_ERR_NO_MATCH;
1.1 misho 1216: }
1.1.1.2 ! misho 1217: area = vty->index;
1.1 misho 1218:
1.1.1.2 ! misho 1219: circuit = isis_csm_state_change (ISIS_ENABLE, circuit, area);
! 1220: isis_circuit_if_bind (circuit, ifp);
1.1 misho 1221:
1.1.1.2 ! misho 1222: circuit->ip_router = 1;
1.1 misho 1223: area->ip_circuits++;
1.1.1.2 ! misho 1224: circuit_update_nlpids (circuit);
1.1 misho 1225:
1226: vty->node = INTERFACE_NODE;
1.1.1.2 ! misho 1227: vty->index = ifp;
1.1 misho 1228:
1229: return CMD_SUCCESS;
1230: }
1231:
1232: DEFUN (no_ip_router_isis,
1233: no_ip_router_isis_cmd,
1234: "no ip router isis WORD",
1235: NO_STR
1236: "Interface Internet Protocol config commands\n"
1237: "IP router interface commands\n"
1238: "IS-IS Routing for IP\n"
1239: "Routing process tag\n")
1240: {
1241: struct interface *ifp;
1242: struct isis_area *area;
1.1.1.2 ! misho 1243: struct isis_circuit *circuit;
1.1 misho 1244:
1245: ifp = (struct interface *) vty->index;
1.1.1.2 ! misho 1246: if (!ifp)
! 1247: {
! 1248: vty_out (vty, "Invalid interface %s", VTY_NEWLINE);
! 1249: return CMD_ERR_NO_MATCH;
! 1250: }
1.1 misho 1251:
1252: area = isis_area_lookup (argv[0]);
1253: if (!area)
1254: {
1.1.1.2 ! misho 1255: vty_out (vty, "Can't find ISIS instance %s%s",
! 1256: argv[0], VTY_NEWLINE);
! 1257: return CMD_ERR_NO_MATCH;
1.1 misho 1258: }
1.1.1.2 ! misho 1259:
! 1260: circuit = circuit_lookup_by_ifp (ifp, area->circuit_list);
1.1 misho 1261: if (!circuit)
1262: {
1.1.1.2 ! misho 1263: vty_out (vty, "ISIS is not enabled on circuit %s%s",
! 1264: ifp->name, VTY_NEWLINE);
! 1265: return CMD_ERR_NO_MATCH;
1.1 misho 1266: }
1.1.1.2 ! misho 1267:
1.1 misho 1268: circuit->ip_router = 0;
1269: area->ip_circuits--;
1270: #ifdef HAVE_IPV6
1271: if (circuit->ipv6_router == 0)
1272: #endif
1273: isis_csm_state_change (ISIS_DISABLE, circuit, area);
1274:
1275: return CMD_SUCCESS;
1276: }
1277:
1.1.1.2 ! misho 1278: #ifdef HAVE_IPV6
! 1279: DEFUN (ipv6_router_isis,
! 1280: ipv6_router_isis_cmd,
! 1281: "ipv6 router isis WORD",
! 1282: "IPv6 interface subcommands\n"
! 1283: "IPv6 Router interface commands\n"
! 1284: "IS-IS Routing for IPv6\n"
! 1285: "Routing process tag\n")
1.1 misho 1286: {
1287: struct isis_circuit *circuit;
1288: struct interface *ifp;
1.1.1.2 ! misho 1289: struct isis_area *area;
1.1 misho 1290:
1.1.1.2 ! misho 1291: ifp = (struct interface *) vty->index;
! 1292: assert (ifp);
! 1293:
! 1294: /* Prevent more than one area per circuit */
! 1295: circuit = circuit_scan_by_ifp (ifp);
! 1296: if (circuit)
1.1 misho 1297: {
1.1.1.2 ! misho 1298: if (circuit->ipv6_router == 1)
! 1299: {
! 1300: if (strcmp (circuit->area->area_tag, argv[0]))
! 1301: {
! 1302: vty_out (vty, "ISIS circuit is already defined for IPv6 on %s%s",
! 1303: circuit->area->area_tag, VTY_NEWLINE);
! 1304: return CMD_ERR_NOTHING_TODO;
! 1305: }
! 1306: return CMD_SUCCESS;
! 1307: }
1.1 misho 1308: }
1309:
1.1.1.2 ! misho 1310: if (isis_area_get (vty, argv[0]) != CMD_SUCCESS)
! 1311: {
! 1312: vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
! 1313: return CMD_ERR_NO_MATCH;
! 1314: }
! 1315: area = vty->index;
1.1 misho 1316:
1.1.1.2 ! misho 1317: circuit = isis_csm_state_change (ISIS_ENABLE, circuit, area);
! 1318: isis_circuit_if_bind (circuit, ifp);
! 1319:
! 1320: circuit->ipv6_router = 1;
! 1321: area->ipv6_circuits++;
! 1322: circuit_update_nlpids (circuit);
! 1323:
! 1324: vty->node = INTERFACE_NODE;
! 1325: vty->index = ifp;
! 1326:
! 1327: return CMD_SUCCESS;
! 1328: }
! 1329:
! 1330: DEFUN (no_ipv6_router_isis,
! 1331: no_ipv6_router_isis_cmd,
! 1332: "no ipv6 router isis WORD",
! 1333: NO_STR
! 1334: "IPv6 interface subcommands\n"
! 1335: "IPv6 Router interface commands\n"
! 1336: "IS-IS Routing for IPv6\n"
! 1337: "Routing process tag\n")
! 1338: {
! 1339: struct interface *ifp;
! 1340: struct isis_area *area;
! 1341: struct listnode *node;
! 1342: struct isis_circuit *circuit;
1.1 misho 1343:
1.1.1.2 ! misho 1344: ifp = (struct interface *) vty->index;
! 1345: if (!ifp)
! 1346: {
! 1347: vty_out (vty, "Invalid interface %s", VTY_NEWLINE);
! 1348: return CMD_ERR_NO_MATCH;
! 1349: }
1.1 misho 1350:
1.1.1.2 ! misho 1351: area = isis_area_lookup (argv[0]);
! 1352: if (!area)
1.1 misho 1353: {
1.1.1.2 ! misho 1354: vty_out (vty, "Can't find ISIS instance %s%s",
! 1355: argv[0], VTY_NEWLINE);
! 1356: return CMD_ERR_NO_MATCH;
1.1 misho 1357: }
1358:
1.1.1.2 ! misho 1359: circuit = circuit_lookup_by_ifp (ifp, area->circuit_list);
! 1360: if (!circuit)
! 1361: {
! 1362: vty_out (vty, "ISIS is not enabled on circuit %s%s",
! 1363: ifp->name, VTY_NEWLINE);
! 1364: return CMD_ERR_NO_MATCH;
! 1365: }
! 1366:
! 1367: circuit->ipv6_router = 0;
! 1368: area->ipv6_circuits--;
! 1369: if (circuit->ip_router == 0)
! 1370: isis_csm_state_change (ISIS_DISABLE, circuit, area);
! 1371:
! 1372: return CMD_SUCCESS;
! 1373: }
! 1374: #endif /* HAVE_IPV6 */
! 1375:
! 1376: DEFUN (isis_passive,
! 1377: isis_passive_cmd,
! 1378: "isis passive",
! 1379: "IS-IS commands\n"
! 1380: "Configure the passive mode for interface\n")
! 1381: {
! 1382: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1383: if (!circuit)
! 1384: return CMD_ERR_NO_MATCH;
! 1385:
! 1386: if (circuit->is_passive == 1)
! 1387: return CMD_SUCCESS;
! 1388:
! 1389: if (circuit->state != C_STATE_UP)
! 1390: {
! 1391: circuit->is_passive = 1;
! 1392: }
1.1 misho 1393: else
1394: {
1.1.1.2 ! misho 1395: struct isis_area *area = circuit->area;
! 1396: isis_csm_state_change (ISIS_DISABLE, circuit, area);
! 1397: circuit->is_passive = 1;
! 1398: isis_csm_state_change (ISIS_ENABLE, circuit, area);
1.1 misho 1399: }
1400:
1401: return CMD_SUCCESS;
1402: }
1403:
1.1.1.2 ! misho 1404: DEFUN (no_isis_passive,
! 1405: no_isis_passive_cmd,
! 1406: "no isis passive",
1.1 misho 1407: NO_STR
1408: "IS-IS commands\n"
1.1.1.2 ! misho 1409: "Configure the passive mode for interface\n")
! 1410: {
! 1411: struct interface *ifp;
! 1412: struct isis_circuit *circuit;
! 1413:
! 1414: ifp = (struct interface *) vty->index;
! 1415: if (!ifp)
! 1416: {
! 1417: vty_out (vty, "Invalid interface %s", VTY_NEWLINE);
! 1418: return CMD_ERR_NO_MATCH;
! 1419: }
! 1420:
! 1421: /* FIXME: what is wrong with circuit = ifp->info ? */
! 1422: circuit = circuit_scan_by_ifp (ifp);
! 1423: if (!circuit)
! 1424: {
! 1425: vty_out (vty, "ISIS is not enabled on circuit %s%s",
! 1426: ifp->name, VTY_NEWLINE);
! 1427: return CMD_ERR_NO_MATCH;
! 1428: }
! 1429:
! 1430: if (if_is_loopback(ifp))
! 1431: {
! 1432: vty_out (vty, "Can't set no passive for loopback interface%s",
! 1433: VTY_NEWLINE);
! 1434: return CMD_ERR_AMBIGUOUS;
! 1435: }
! 1436:
! 1437: if (circuit->is_passive == 0)
! 1438: return CMD_SUCCESS;
! 1439:
! 1440: if (circuit->state != C_STATE_UP)
! 1441: {
! 1442: circuit->is_passive = 0;
! 1443: }
! 1444: else
! 1445: {
! 1446: struct isis_area *area = circuit->area;
! 1447: isis_csm_state_change (ISIS_DISABLE, circuit, area);
! 1448: circuit->is_passive = 0;
! 1449: isis_csm_state_change (ISIS_ENABLE, circuit, area);
! 1450: }
! 1451:
! 1452: return CMD_SUCCESS;
! 1453: }
! 1454:
! 1455: DEFUN (isis_circuit_type,
! 1456: isis_circuit_type_cmd,
! 1457: "isis circuit-type (level-1|level-1-2|level-2-only)",
! 1458: "IS-IS commands\n"
1.1 misho 1459: "Configure circuit type for interface\n"
1460: "Level-1 only adjacencies are formed\n"
1461: "Level-1-2 adjacencies are formed\n"
1462: "Level-2 only adjacencies are formed\n")
1463: {
1.1.1.2 ! misho 1464: int circuit_type;
! 1465: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1466: if (!circuit)
! 1467: return CMD_ERR_NO_MATCH;
1.1 misho 1468:
1.1.1.2 ! misho 1469: circuit_type = string2circuit_t (argv[0]);
! 1470: if (!circuit_type)
1.1 misho 1471: {
1.1.1.2 ! misho 1472: vty_out (vty, "Unknown circuit-type %s", VTY_NEWLINE);
! 1473: return CMD_ERR_AMBIGUOUS;
1.1 misho 1474: }
1475:
1.1.1.2 ! misho 1476: if (circuit->state == C_STATE_UP &&
! 1477: circuit->area->is_type != IS_LEVEL_1_AND_2 &&
! 1478: circuit->area->is_type != circuit_type)
! 1479: {
! 1480: vty_out (vty, "Invalid circuit level for area %s.%s",
! 1481: circuit->area->area_tag, VTY_NEWLINE);
! 1482: return CMD_ERR_AMBIGUOUS;
! 1483: }
! 1484: isis_event_circuit_type_change (circuit, circuit_type);
! 1485:
! 1486: return CMD_SUCCESS;
! 1487: }
! 1488:
! 1489: DEFUN (no_isis_circuit_type,
! 1490: no_isis_circuit_type_cmd,
! 1491: "no isis circuit-type (level-1|level-1-2|level-2-only)",
! 1492: NO_STR
! 1493: "IS-IS commands\n"
! 1494: "Configure circuit type for interface\n"
! 1495: "Level-1 only adjacencies are formed\n"
! 1496: "Level-1-2 adjacencies are formed\n"
! 1497: "Level-2 only adjacencies are formed\n")
! 1498: {
! 1499: int circuit_type;
! 1500: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1501: if (!circuit)
! 1502: return CMD_ERR_NO_MATCH;
1.1 misho 1503:
1504: /*
1.1.1.2 ! misho 1505: * Set the circuits level to its default value
1.1 misho 1506: */
1.1.1.2 ! misho 1507: if (circuit->state == C_STATE_UP)
! 1508: circuit_type = circuit->area->is_type;
! 1509: else
! 1510: circuit_type = IS_LEVEL_1_AND_2;
! 1511: isis_event_circuit_type_change (circuit, circuit_type);
1.1 misho 1512:
1513: return CMD_SUCCESS;
1514: }
1515:
1.1.1.2 ! misho 1516: DEFUN (isis_passwd_md5,
! 1517: isis_passwd_md5_cmd,
! 1518: "isis password md5 WORD",
1.1 misho 1519: "IS-IS commands\n"
1.1.1.2 ! misho 1520: "Configure the authentication password for a circuit\n"
! 1521: "Authentication type\n"
! 1522: "Circuit password\n")
1.1 misho 1523: {
1524: int len;
1.1.1.2 ! misho 1525: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1526: if (!circuit)
! 1527: return CMD_ERR_NO_MATCH;
1.1 misho 1528:
1.1.1.2 ! misho 1529: len = strlen (argv[0]);
! 1530: if (len > 254)
1.1 misho 1531: {
1.1.1.2 ! misho 1532: vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE);
! 1533: return CMD_ERR_AMBIGUOUS;
1.1 misho 1534: }
1.1.1.2 ! misho 1535: circuit->passwd.len = len;
! 1536: circuit->passwd.type = ISIS_PASSWD_TYPE_HMAC_MD5;
! 1537: strncpy ((char *)circuit->passwd.passwd, argv[0], 255);
! 1538:
! 1539: return CMD_SUCCESS;
! 1540: }
! 1541:
! 1542: DEFUN (isis_passwd_clear,
! 1543: isis_passwd_clear_cmd,
! 1544: "isis password clear WORD",
! 1545: "IS-IS commands\n"
! 1546: "Configure the authentication password for a circuit\n"
! 1547: "Authentication type\n"
! 1548: "Circuit password\n")
! 1549: {
! 1550: int len;
! 1551: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1552: if (!circuit)
! 1553: return CMD_ERR_NO_MATCH;
1.1 misho 1554:
1555: len = strlen (argv[0]);
1556: if (len > 254)
1557: {
1558: vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE);
1.1.1.2 ! misho 1559: return CMD_ERR_AMBIGUOUS;
1.1 misho 1560: }
1561: circuit->passwd.len = len;
1562: circuit->passwd.type = ISIS_PASSWD_TYPE_CLEARTXT;
1563: strncpy ((char *)circuit->passwd.passwd, argv[0], 255);
1564:
1565: return CMD_SUCCESS;
1566: }
1567:
1568: DEFUN (no_isis_passwd,
1569: no_isis_passwd_cmd,
1570: "no isis password",
1571: NO_STR
1572: "IS-IS commands\n"
1.1.1.2 ! misho 1573: "Configure the authentication password for a circuit\n")
1.1 misho 1574: {
1.1.1.2 ! misho 1575: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1576: if (!circuit)
! 1577: return CMD_ERR_NO_MATCH;
1.1 misho 1578:
1579: memset (&circuit->passwd, 0, sizeof (struct isis_passwd));
1580:
1581: return CMD_SUCCESS;
1582: }
1583:
1584: DEFUN (isis_priority,
1585: isis_priority_cmd,
1586: "isis priority <0-127>",
1587: "IS-IS commands\n"
1588: "Set priority for Designated Router election\n"
1589: "Priority value\n")
1590: {
1591: int prio;
1.1.1.2 ! misho 1592: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1593: if (!circuit)
! 1594: return CMD_ERR_NO_MATCH;
1.1 misho 1595:
1.1.1.2 ! misho 1596: prio = atoi (argv[0]);
! 1597: if (prio < MIN_PRIORITY || prio > MAX_PRIORITY)
1.1 misho 1598: {
1.1.1.2 ! misho 1599: vty_out (vty, "Invalid priority %d - should be <0-127>%s",
! 1600: prio, VTY_NEWLINE);
! 1601: return CMD_ERR_AMBIGUOUS;
1.1 misho 1602: }
1603:
1.1.1.2 ! misho 1604: circuit->priority[0] = prio;
! 1605: circuit->priority[1] = prio;
1.1 misho 1606:
1607: return CMD_SUCCESS;
1608: }
1609:
1610: DEFUN (no_isis_priority,
1611: no_isis_priority_cmd,
1612: "no isis priority",
1613: NO_STR
1614: "IS-IS commands\n"
1615: "Set priority for Designated Router election\n")
1616: {
1.1.1.2 ! misho 1617: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1618: if (!circuit)
! 1619: return CMD_ERR_NO_MATCH;
1.1 misho 1620:
1.1.1.2 ! misho 1621: circuit->priority[0] = DEFAULT_PRIORITY;
! 1622: circuit->priority[1] = DEFAULT_PRIORITY;
1.1 misho 1623:
1624: return CMD_SUCCESS;
1625: }
1626:
1627: ALIAS (no_isis_priority,
1628: no_isis_priority_arg_cmd,
1629: "no isis priority <0-127>",
1630: NO_STR
1631: "IS-IS commands\n"
1632: "Set priority for Designated Router election\n"
1633: "Priority value\n")
1634:
1635: DEFUN (isis_priority_l1,
1636: isis_priority_l1_cmd,
1637: "isis priority <0-127> level-1",
1638: "IS-IS commands\n"
1639: "Set priority for Designated Router election\n"
1640: "Priority value\n"
1641: "Specify priority for level-1 routing\n")
1642: {
1643: int prio;
1.1.1.2 ! misho 1644: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1645: if (!circuit)
! 1646: return CMD_ERR_NO_MATCH;
1.1 misho 1647:
1.1.1.2 ! misho 1648: prio = atoi (argv[0]);
! 1649: if (prio < MIN_PRIORITY || prio > MAX_PRIORITY)
1.1 misho 1650: {
1.1.1.2 ! misho 1651: vty_out (vty, "Invalid priority %d - should be <0-127>%s",
! 1652: prio, VTY_NEWLINE);
! 1653: return CMD_ERR_AMBIGUOUS;
1.1 misho 1654: }
1655:
1.1.1.2 ! misho 1656: circuit->priority[0] = prio;
1.1 misho 1657:
1658: return CMD_SUCCESS;
1659: }
1660:
1661: DEFUN (no_isis_priority_l1,
1662: no_isis_priority_l1_cmd,
1663: "no isis priority level-1",
1664: NO_STR
1665: "IS-IS commands\n"
1666: "Set priority for Designated Router election\n"
1667: "Specify priority for level-1 routing\n")
1668: {
1.1.1.2 ! misho 1669: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1670: if (!circuit)
! 1671: return CMD_ERR_NO_MATCH;
1.1 misho 1672:
1.1.1.2 ! misho 1673: circuit->priority[0] = DEFAULT_PRIORITY;
1.1 misho 1674:
1675: return CMD_SUCCESS;
1676: }
1677:
1678: ALIAS (no_isis_priority_l1,
1679: no_isis_priority_l1_arg_cmd,
1680: "no isis priority <0-127> level-1",
1681: NO_STR
1682: "IS-IS commands\n"
1683: "Set priority for Designated Router election\n"
1684: "Priority value\n"
1685: "Specify priority for level-1 routing\n")
1686:
1687: DEFUN (isis_priority_l2,
1688: isis_priority_l2_cmd,
1689: "isis priority <0-127> level-2",
1690: "IS-IS commands\n"
1691: "Set priority for Designated Router election\n"
1692: "Priority value\n"
1693: "Specify priority for level-2 routing\n")
1694: {
1695: int prio;
1.1.1.2 ! misho 1696: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1697: if (!circuit)
! 1698: return CMD_ERR_NO_MATCH;
1.1 misho 1699:
1.1.1.2 ! misho 1700: prio = atoi (argv[0]);
! 1701: if (prio < MIN_PRIORITY || prio > MAX_PRIORITY)
1.1 misho 1702: {
1.1.1.2 ! misho 1703: vty_out (vty, "Invalid priority %d - should be <0-127>%s",
! 1704: prio, VTY_NEWLINE);
! 1705: return CMD_ERR_AMBIGUOUS;
1.1 misho 1706: }
1707:
1.1.1.2 ! misho 1708: circuit->priority[1] = prio;
1.1 misho 1709:
1710: return CMD_SUCCESS;
1711: }
1712:
1713: DEFUN (no_isis_priority_l2,
1714: no_isis_priority_l2_cmd,
1715: "no isis priority level-2",
1716: NO_STR
1717: "IS-IS commands\n"
1718: "Set priority for Designated Router election\n"
1719: "Specify priority for level-2 routing\n")
1720: {
1.1.1.2 ! misho 1721: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1722: if (!circuit)
! 1723: return CMD_ERR_NO_MATCH;
1.1 misho 1724:
1.1.1.2 ! misho 1725: circuit->priority[1] = DEFAULT_PRIORITY;
1.1 misho 1726:
1727: return CMD_SUCCESS;
1728: }
1729:
1730: ALIAS (no_isis_priority_l2,
1731: no_isis_priority_l2_arg_cmd,
1732: "no isis priority <0-127> level-2",
1733: NO_STR
1734: "IS-IS commands\n"
1735: "Set priority for Designated Router election\n"
1736: "Priority value\n"
1737: "Specify priority for level-2 routing\n")
1738:
1739: /* Metric command */
1.1.1.2 ! misho 1740: DEFUN (isis_metric,
1.1 misho 1741: isis_metric_cmd,
1742: "isis metric <0-16777215>",
1743: "IS-IS commands\n"
1744: "Set default metric for circuit\n"
1745: "Default metric value\n")
1746: {
1747: int met;
1.1.1.2 ! misho 1748: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1749: if (!circuit)
! 1750: return CMD_ERR_NO_MATCH;
1.1 misho 1751:
1752: met = atoi (argv[0]);
1753:
1.1.1.2 ! misho 1754: /* RFC3787 section 5.1 */
! 1755: if (circuit->area && circuit->area->oldmetric == 1 &&
! 1756: met > MAX_NARROW_LINK_METRIC)
! 1757: {
! 1758: vty_out (vty, "Invalid metric %d - should be <0-63> "
! 1759: "when narrow metric type enabled%s",
! 1760: met, VTY_NEWLINE);
! 1761: return CMD_ERR_AMBIGUOUS;
! 1762: }
! 1763:
! 1764: /* RFC4444 */
! 1765: if (circuit->area && circuit->area->newmetric == 1 &&
! 1766: met > MAX_WIDE_LINK_METRIC)
! 1767: {
! 1768: vty_out (vty, "Invalid metric %d - should be <0-16777215> "
! 1769: "when wide metric type enabled%s",
! 1770: met, VTY_NEWLINE);
! 1771: return CMD_ERR_AMBIGUOUS;
! 1772: }
! 1773:
1.1 misho 1774: circuit->te_metric[0] = met;
1775: circuit->te_metric[1] = met;
1776:
1777: circuit->metrics[0].metric_default = met;
1778: circuit->metrics[1].metric_default = met;
1779:
1.1.1.2 ! misho 1780: if (circuit->area)
! 1781: lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
! 1782:
1.1 misho 1783: return CMD_SUCCESS;
1784: }
1785:
1786: DEFUN (no_isis_metric,
1787: no_isis_metric_cmd,
1788: "no isis metric",
1789: NO_STR
1790: "IS-IS commands\n"
1791: "Set default metric for circuit\n")
1792: {
1.1.1.2 ! misho 1793: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1794: if (!circuit)
! 1795: return CMD_ERR_NO_MATCH;
1.1 misho 1796:
1.1.1.2 ! misho 1797: circuit->te_metric[0] = DEFAULT_CIRCUIT_METRIC;
! 1798: circuit->te_metric[1] = DEFAULT_CIRCUIT_METRIC;
! 1799: circuit->metrics[0].metric_default = DEFAULT_CIRCUIT_METRIC;
! 1800: circuit->metrics[1].metric_default = DEFAULT_CIRCUIT_METRIC;
1.1 misho 1801:
1.1.1.2 ! misho 1802: if (circuit->area)
! 1803: lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
1.1 misho 1804:
1805: return CMD_SUCCESS;
1806: }
1807:
1808: ALIAS (no_isis_metric,
1809: no_isis_metric_arg_cmd,
1810: "no isis metric <0-16777215>",
1811: NO_STR
1812: "IS-IS commands\n"
1813: "Set default metric for circuit\n"
1814: "Default metric value\n")
1815:
1.1.1.2 ! misho 1816: DEFUN (isis_metric_l1,
! 1817: isis_metric_l1_cmd,
! 1818: "isis metric <0-16777215> level-1",
! 1819: "IS-IS commands\n"
! 1820: "Set default metric for circuit\n"
! 1821: "Default metric value\n"
! 1822: "Specify metric for level-1 routing\n")
! 1823: {
! 1824: int met;
! 1825: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1826: if (!circuit)
! 1827: return CMD_ERR_NO_MATCH;
! 1828:
! 1829: met = atoi (argv[0]);
! 1830:
! 1831: /* RFC3787 section 5.1 */
! 1832: if (circuit->area && circuit->area->oldmetric == 1 &&
! 1833: met > MAX_NARROW_LINK_METRIC)
! 1834: {
! 1835: vty_out (vty, "Invalid metric %d - should be <0-63> "
! 1836: "when narrow metric type enabled%s",
! 1837: met, VTY_NEWLINE);
! 1838: return CMD_ERR_AMBIGUOUS;
! 1839: }
! 1840:
! 1841: /* RFC4444 */
! 1842: if (circuit->area && circuit->area->newmetric == 1 &&
! 1843: met > MAX_WIDE_LINK_METRIC)
! 1844: {
! 1845: vty_out (vty, "Invalid metric %d - should be <0-16777215> "
! 1846: "when wide metric type enabled%s",
! 1847: met, VTY_NEWLINE);
! 1848: return CMD_ERR_AMBIGUOUS;
! 1849: }
! 1850:
! 1851: circuit->te_metric[0] = met;
! 1852: circuit->metrics[0].metric_default = met;
! 1853:
! 1854: if (circuit->area)
! 1855: lsp_regenerate_schedule (circuit->area, IS_LEVEL_1, 0);
! 1856:
! 1857: return CMD_SUCCESS;
! 1858: }
! 1859:
! 1860: DEFUN (no_isis_metric_l1,
! 1861: no_isis_metric_l1_cmd,
! 1862: "no isis metric level-1",
! 1863: NO_STR
! 1864: "IS-IS commands\n"
! 1865: "Set default metric for circuit\n"
! 1866: "Specify metric for level-1 routing\n")
! 1867: {
! 1868: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1869: if (!circuit)
! 1870: return CMD_ERR_NO_MATCH;
! 1871:
! 1872: circuit->te_metric[0] = DEFAULT_CIRCUIT_METRIC;
! 1873: circuit->metrics[0].metric_default = DEFAULT_CIRCUIT_METRIC;
! 1874:
! 1875: if (circuit->area)
! 1876: lsp_regenerate_schedule (circuit->area, IS_LEVEL_1, 0);
! 1877:
! 1878: return CMD_SUCCESS;
! 1879: }
! 1880:
! 1881: ALIAS (no_isis_metric_l1,
! 1882: no_isis_metric_l1_arg_cmd,
! 1883: "no isis metric <0-16777215> level-1",
! 1884: NO_STR
! 1885: "IS-IS commands\n"
! 1886: "Set default metric for circuit\n"
! 1887: "Default metric value\n"
! 1888: "Specify metric for level-1 routing\n")
! 1889:
! 1890: DEFUN (isis_metric_l2,
! 1891: isis_metric_l2_cmd,
! 1892: "isis metric <0-16777215> level-2",
! 1893: "IS-IS commands\n"
! 1894: "Set default metric for circuit\n"
! 1895: "Default metric value\n"
! 1896: "Specify metric for level-2 routing\n")
! 1897: {
! 1898: int met;
! 1899: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1900: if (!circuit)
! 1901: return CMD_ERR_NO_MATCH;
! 1902:
! 1903: met = atoi (argv[0]);
! 1904:
! 1905: /* RFC3787 section 5.1 */
! 1906: if (circuit->area && circuit->area->oldmetric == 1 &&
! 1907: met > MAX_NARROW_LINK_METRIC)
! 1908: {
! 1909: vty_out (vty, "Invalid metric %d - should be <0-63> "
! 1910: "when narrow metric type enabled%s",
! 1911: met, VTY_NEWLINE);
! 1912: return CMD_ERR_AMBIGUOUS;
! 1913: }
! 1914:
! 1915: /* RFC4444 */
! 1916: if (circuit->area && circuit->area->newmetric == 1 &&
! 1917: met > MAX_WIDE_LINK_METRIC)
! 1918: {
! 1919: vty_out (vty, "Invalid metric %d - should be <0-16777215> "
! 1920: "when wide metric type enabled%s",
! 1921: met, VTY_NEWLINE);
! 1922: return CMD_ERR_AMBIGUOUS;
! 1923: }
! 1924:
! 1925: circuit->te_metric[1] = met;
! 1926: circuit->metrics[1].metric_default = met;
! 1927:
! 1928: if (circuit->area)
! 1929: lsp_regenerate_schedule (circuit->area, IS_LEVEL_2, 0);
! 1930:
! 1931: return CMD_SUCCESS;
! 1932: }
! 1933:
! 1934: DEFUN (no_isis_metric_l2,
! 1935: no_isis_metric_l2_cmd,
! 1936: "no isis metric level-2",
! 1937: NO_STR
! 1938: "IS-IS commands\n"
! 1939: "Set default metric for circuit\n"
! 1940: "Specify metric for level-2 routing\n")
! 1941: {
! 1942: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1943: if (!circuit)
! 1944: return CMD_ERR_NO_MATCH;
! 1945:
! 1946: circuit->te_metric[1] = DEFAULT_CIRCUIT_METRIC;
! 1947: circuit->metrics[1].metric_default = DEFAULT_CIRCUIT_METRIC;
! 1948:
! 1949: if (circuit->area)
! 1950: lsp_regenerate_schedule (circuit->area, IS_LEVEL_2, 0);
! 1951:
! 1952: return CMD_SUCCESS;
! 1953: }
! 1954:
! 1955: ALIAS (no_isis_metric_l2,
! 1956: no_isis_metric_l2_arg_cmd,
! 1957: "no isis metric <0-16777215> level-2",
! 1958: NO_STR
! 1959: "IS-IS commands\n"
! 1960: "Set default metric for circuit\n"
! 1961: "Default metric value\n"
! 1962: "Specify metric for level-2 routing\n")
1.1 misho 1963: /* end of metrics */
1.1.1.2 ! misho 1964:
1.1 misho 1965: DEFUN (isis_hello_interval,
1966: isis_hello_interval_cmd,
1.1.1.2 ! misho 1967: "isis hello-interval <1-600>",
1.1 misho 1968: "IS-IS commands\n"
1969: "Set Hello interval\n"
1970: "Hello interval value\n"
1971: "Holdtime 1 seconds, interval depends on multiplier\n")
1972: {
1973: int interval;
1.1.1.2 ! misho 1974: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 1975: if (!circuit)
! 1976: return CMD_ERR_NO_MATCH;
1.1 misho 1977:
1.1.1.2 ! misho 1978: interval = atoi (argv[0]);
! 1979: if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
1.1 misho 1980: {
1.1.1.2 ! misho 1981: vty_out (vty, "Invalid hello-interval %d - should be <1-600>%s",
! 1982: interval, VTY_NEWLINE);
! 1983: return CMD_ERR_AMBIGUOUS;
1.1 misho 1984: }
1985:
1986: circuit->hello_interval[0] = (u_int16_t) interval;
1987: circuit->hello_interval[1] = (u_int16_t) interval;
1988:
1989: return CMD_SUCCESS;
1990: }
1991:
1992: DEFUN (no_isis_hello_interval,
1993: no_isis_hello_interval_cmd,
1994: "no isis hello-interval",
1995: NO_STR
1996: "IS-IS commands\n"
1997: "Set Hello interval\n")
1998: {
1.1.1.2 ! misho 1999: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2000: if (!circuit)
! 2001: return CMD_ERR_NO_MATCH;
1.1 misho 2002:
1.1.1.2 ! misho 2003: circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
! 2004: circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
1.1 misho 2005:
2006: return CMD_SUCCESS;
2007: }
2008:
2009: ALIAS (no_isis_hello_interval,
2010: no_isis_hello_interval_arg_cmd,
1.1.1.2 ! misho 2011: "no isis hello-interval <1-600>",
1.1 misho 2012: NO_STR
2013: "IS-IS commands\n"
2014: "Set Hello interval\n"
2015: "Hello interval value\n"
2016: "Holdtime 1 second, interval depends on multiplier\n")
2017:
2018: DEFUN (isis_hello_interval_l1,
2019: isis_hello_interval_l1_cmd,
1.1.1.2 ! misho 2020: "isis hello-interval <1-600> level-1",
1.1 misho 2021: "IS-IS commands\n"
2022: "Set Hello interval\n"
2023: "Hello interval value\n"
2024: "Holdtime 1 second, interval depends on multiplier\n"
2025: "Specify hello-interval for level-1 IIHs\n")
2026: {
2027: long interval;
1.1.1.2 ! misho 2028: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2029: if (!circuit)
! 2030: return CMD_ERR_NO_MATCH;
1.1 misho 2031:
1.1.1.2 ! misho 2032: interval = atoi (argv[0]);
! 2033: if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
1.1 misho 2034: {
1.1.1.2 ! misho 2035: vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
! 2036: interval, VTY_NEWLINE);
! 2037: return CMD_ERR_AMBIGUOUS;
1.1 misho 2038: }
2039:
2040: circuit->hello_interval[0] = (u_int16_t) interval;
2041:
2042: return CMD_SUCCESS;
2043: }
2044:
2045: DEFUN (no_isis_hello_interval_l1,
2046: no_isis_hello_interval_l1_cmd,
2047: "no isis hello-interval level-1",
2048: NO_STR
2049: "IS-IS commands\n"
2050: "Set Hello interval\n"
2051: "Specify hello-interval for level-1 IIHs\n")
2052: {
1.1.1.2 ! misho 2053: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2054: if (!circuit)
! 2055: return CMD_ERR_NO_MATCH;
1.1 misho 2056:
1.1.1.2 ! misho 2057: circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
1.1 misho 2058:
2059: return CMD_SUCCESS;
2060: }
2061:
2062: ALIAS (no_isis_hello_interval_l1,
2063: no_isis_hello_interval_l1_arg_cmd,
1.1.1.2 ! misho 2064: "no isis hello-interval <1-600> level-1",
1.1 misho 2065: NO_STR
2066: "IS-IS commands\n"
2067: "Set Hello interval\n"
2068: "Hello interval value\n"
2069: "Holdtime 1 second, interval depends on multiplier\n"
2070: "Specify hello-interval for level-1 IIHs\n")
2071:
2072: DEFUN (isis_hello_interval_l2,
2073: isis_hello_interval_l2_cmd,
1.1.1.2 ! misho 2074: "isis hello-interval <1-600> level-2",
1.1 misho 2075: "IS-IS commands\n"
2076: "Set Hello interval\n"
2077: "Hello interval value\n"
2078: "Holdtime 1 second, interval depends on multiplier\n"
2079: "Specify hello-interval for level-2 IIHs\n")
2080: {
2081: long interval;
1.1.1.2 ! misho 2082: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2083: if (!circuit)
! 2084: return CMD_ERR_NO_MATCH;
1.1 misho 2085:
1.1.1.2 ! misho 2086: interval = atoi (argv[0]);
! 2087: if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
1.1 misho 2088: {
1.1.1.2 ! misho 2089: vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
! 2090: interval, VTY_NEWLINE);
! 2091: return CMD_ERR_AMBIGUOUS;
1.1 misho 2092: }
2093:
2094: circuit->hello_interval[1] = (u_int16_t) interval;
2095:
2096: return CMD_SUCCESS;
2097: }
2098:
2099: DEFUN (no_isis_hello_interval_l2,
2100: no_isis_hello_interval_l2_cmd,
1.1.1.2 ! misho 2101: "no isis hello-interval level-2",
! 2102: NO_STR
! 2103: "IS-IS commands\n"
! 2104: "Set Hello interval\n"
! 2105: "Specify hello-interval for level-2 IIHs\n")
! 2106: {
! 2107: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2108: if (!circuit)
! 2109: return CMD_ERR_NO_MATCH;
1.1 misho 2110:
1.1.1.2 ! misho 2111: circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
1.1 misho 2112:
2113: return CMD_SUCCESS;
2114: }
2115:
2116: ALIAS (no_isis_hello_interval_l2,
2117: no_isis_hello_interval_l2_arg_cmd,
1.1.1.2 ! misho 2118: "no isis hello-interval <1-600> level-2",
1.1 misho 2119: NO_STR
2120: "IS-IS commands\n"
2121: "Set Hello interval\n"
2122: "Hello interval value\n"
2123: "Holdtime 1 second, interval depends on multiplier\n"
2124: "Specify hello-interval for level-2 IIHs\n")
2125:
2126: DEFUN (isis_hello_multiplier,
2127: isis_hello_multiplier_cmd,
1.1.1.2 ! misho 2128: "isis hello-multiplier <2-100>",
1.1 misho 2129: "IS-IS commands\n"
2130: "Set multiplier for Hello holding time\n"
2131: "Hello multiplier value\n")
2132: {
2133: int mult;
1.1.1.2 ! misho 2134: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2135: if (!circuit)
! 2136: return CMD_ERR_NO_MATCH;
1.1 misho 2137:
1.1.1.2 ! misho 2138: mult = atoi (argv[0]);
! 2139: if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
1.1 misho 2140: {
1.1.1.2 ! misho 2141: vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
! 2142: mult, VTY_NEWLINE);
! 2143: return CMD_ERR_AMBIGUOUS;
1.1 misho 2144: }
2145:
2146: circuit->hello_multiplier[0] = (u_int16_t) mult;
2147: circuit->hello_multiplier[1] = (u_int16_t) mult;
2148:
2149: return CMD_SUCCESS;
2150: }
2151:
2152: DEFUN (no_isis_hello_multiplier,
2153: no_isis_hello_multiplier_cmd,
2154: "no isis hello-multiplier",
2155: NO_STR
2156: "IS-IS commands\n"
2157: "Set multiplier for Hello holding time\n")
2158: {
1.1.1.2 ! misho 2159: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2160: if (!circuit)
! 2161: return CMD_ERR_NO_MATCH;
1.1 misho 2162:
1.1.1.2 ! misho 2163: circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
! 2164: circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
1.1 misho 2165:
2166: return CMD_SUCCESS;
2167: }
2168:
2169: ALIAS (no_isis_hello_multiplier,
2170: no_isis_hello_multiplier_arg_cmd,
1.1.1.2 ! misho 2171: "no isis hello-multiplier <2-100>",
1.1 misho 2172: NO_STR
2173: "IS-IS commands\n"
2174: "Set multiplier for Hello holding time\n"
2175: "Hello multiplier value\n")
2176:
2177: DEFUN (isis_hello_multiplier_l1,
2178: isis_hello_multiplier_l1_cmd,
1.1.1.2 ! misho 2179: "isis hello-multiplier <2-100> level-1",
1.1 misho 2180: "IS-IS commands\n"
2181: "Set multiplier for Hello holding time\n"
2182: "Hello multiplier value\n"
2183: "Specify hello multiplier for level-1 IIHs\n")
2184: {
2185: int mult;
1.1.1.2 ! misho 2186: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2187: if (!circuit)
! 2188: return CMD_ERR_NO_MATCH;
1.1 misho 2189:
1.1.1.2 ! misho 2190: mult = atoi (argv[0]);
! 2191: if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
1.1 misho 2192: {
1.1.1.2 ! misho 2193: vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
! 2194: mult, VTY_NEWLINE);
! 2195: return CMD_ERR_AMBIGUOUS;
1.1 misho 2196: }
2197:
2198: circuit->hello_multiplier[0] = (u_int16_t) mult;
2199:
2200: return CMD_SUCCESS;
2201: }
2202:
2203: DEFUN (no_isis_hello_multiplier_l1,
2204: no_isis_hello_multiplier_l1_cmd,
2205: "no isis hello-multiplier level-1",
2206: NO_STR
2207: "IS-IS commands\n"
2208: "Set multiplier for Hello holding time\n"
2209: "Specify hello multiplier for level-1 IIHs\n")
2210: {
1.1.1.2 ! misho 2211: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2212: if (!circuit)
! 2213: return CMD_ERR_NO_MATCH;
1.1 misho 2214:
1.1.1.2 ! misho 2215: circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
1.1 misho 2216:
2217: return CMD_SUCCESS;
2218: }
2219:
2220: ALIAS (no_isis_hello_multiplier_l1,
2221: no_isis_hello_multiplier_l1_arg_cmd,
1.1.1.2 ! misho 2222: "no isis hello-multiplier <2-100> level-1",
1.1 misho 2223: NO_STR
2224: "IS-IS commands\n"
2225: "Set multiplier for Hello holding time\n"
2226: "Hello multiplier value\n"
2227: "Specify hello multiplier for level-1 IIHs\n")
2228:
2229: DEFUN (isis_hello_multiplier_l2,
2230: isis_hello_multiplier_l2_cmd,
1.1.1.2 ! misho 2231: "isis hello-multiplier <2-100> level-2",
1.1 misho 2232: "IS-IS commands\n"
2233: "Set multiplier for Hello holding time\n"
2234: "Hello multiplier value\n"
2235: "Specify hello multiplier for level-2 IIHs\n")
2236: {
2237: int mult;
1.1.1.2 ! misho 2238: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2239: if (!circuit)
! 2240: return CMD_ERR_NO_MATCH;
1.1 misho 2241:
1.1.1.2 ! misho 2242: mult = atoi (argv[0]);
! 2243: if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
1.1 misho 2244: {
1.1.1.2 ! misho 2245: vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
! 2246: mult, VTY_NEWLINE);
! 2247: return CMD_ERR_AMBIGUOUS;
1.1 misho 2248: }
2249:
2250: circuit->hello_multiplier[1] = (u_int16_t) mult;
2251:
2252: return CMD_SUCCESS;
2253: }
2254:
2255: DEFUN (no_isis_hello_multiplier_l2,
2256: no_isis_hello_multiplier_l2_cmd,
2257: "no isis hello-multiplier level-2",
2258: NO_STR
2259: "IS-IS commands\n"
2260: "Set multiplier for Hello holding time\n"
2261: "Specify hello multiplier for level-2 IIHs\n")
2262: {
1.1.1.2 ! misho 2263: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2264: if (!circuit)
! 2265: return CMD_ERR_NO_MATCH;
1.1 misho 2266:
1.1.1.2 ! misho 2267: circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
1.1 misho 2268:
2269: return CMD_SUCCESS;
2270: }
2271:
2272: ALIAS (no_isis_hello_multiplier_l2,
2273: no_isis_hello_multiplier_l2_arg_cmd,
1.1.1.2 ! misho 2274: "no isis hello-multiplier <2-100> level-2",
1.1 misho 2275: NO_STR
2276: "IS-IS commands\n"
2277: "Set multiplier for Hello holding time\n"
2278: "Hello multiplier value\n"
2279: "Specify hello multiplier for level-2 IIHs\n")
2280:
1.1.1.2 ! misho 2281: DEFUN (isis_hello_padding,
! 2282: isis_hello_padding_cmd,
1.1 misho 2283: "isis hello padding",
2284: "IS-IS commands\n"
2285: "Add padding to IS-IS hello packets\n"
2286: "Pad hello packets\n"
2287: "<cr>\n")
2288: {
1.1.1.2 ! misho 2289: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2290: if (!circuit)
! 2291: return CMD_ERR_NO_MATCH;
1.1 misho 2292:
1.1.1.2 ! misho 2293: circuit->pad_hellos = 1;
1.1 misho 2294:
2295: return CMD_SUCCESS;
2296: }
2297:
1.1.1.2 ! misho 2298: DEFUN (no_isis_hello_padding,
! 2299: no_isis_hello_padding_cmd,
1.1 misho 2300: "no isis hello padding",
2301: NO_STR
2302: "IS-IS commands\n"
2303: "Add padding to IS-IS hello packets\n"
2304: "Pad hello packets\n"
2305: "<cr>\n")
2306: {
1.1.1.2 ! misho 2307: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2308: if (!circuit)
! 2309: return CMD_ERR_NO_MATCH;
1.1 misho 2310:
1.1.1.2 ! misho 2311: circuit->pad_hellos = 0;
1.1 misho 2312:
2313: return CMD_SUCCESS;
2314: }
2315:
2316: DEFUN (csnp_interval,
2317: csnp_interval_cmd,
1.1.1.2 ! misho 2318: "isis csnp-interval <1-600>",
1.1 misho 2319: "IS-IS commands\n"
2320: "Set CSNP interval in seconds\n"
2321: "CSNP interval value\n")
2322: {
2323: unsigned long interval;
1.1.1.2 ! misho 2324: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2325: if (!circuit)
! 2326: return CMD_ERR_NO_MATCH;
1.1 misho 2327:
1.1.1.2 ! misho 2328: interval = atol (argv[0]);
! 2329: if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
1.1 misho 2330: {
1.1.1.2 ! misho 2331: vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
! 2332: interval, VTY_NEWLINE);
! 2333: return CMD_ERR_AMBIGUOUS;
1.1 misho 2334: }
2335:
2336: circuit->csnp_interval[0] = (u_int16_t) interval;
2337: circuit->csnp_interval[1] = (u_int16_t) interval;
2338:
2339: return CMD_SUCCESS;
2340: }
2341:
2342: DEFUN (no_csnp_interval,
2343: no_csnp_interval_cmd,
2344: "no isis csnp-interval",
2345: NO_STR
2346: "IS-IS commands\n"
2347: "Set CSNP interval in seconds\n")
2348: {
1.1.1.2 ! misho 2349: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2350: if (!circuit)
! 2351: return CMD_ERR_NO_MATCH;
1.1 misho 2352:
1.1.1.2 ! misho 2353: circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
! 2354: circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
1.1 misho 2355:
2356: return CMD_SUCCESS;
2357: }
2358:
2359: ALIAS (no_csnp_interval,
2360: no_csnp_interval_arg_cmd,
1.1.1.2 ! misho 2361: "no isis csnp-interval <1-600>",
1.1 misho 2362: NO_STR
2363: "IS-IS commands\n"
2364: "Set CSNP interval in seconds\n"
2365: "CSNP interval value\n")
2366:
2367: DEFUN (csnp_interval_l1,
2368: csnp_interval_l1_cmd,
1.1.1.2 ! misho 2369: "isis csnp-interval <1-600> level-1",
1.1 misho 2370: "IS-IS commands\n"
2371: "Set CSNP interval in seconds\n"
2372: "CSNP interval value\n"
2373: "Specify interval for level-1 CSNPs\n")
2374: {
2375: unsigned long interval;
1.1.1.2 ! misho 2376: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2377: if (!circuit)
! 2378: return CMD_ERR_NO_MATCH;
1.1 misho 2379:
1.1.1.2 ! misho 2380: interval = atol (argv[0]);
! 2381: if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
1.1 misho 2382: {
1.1.1.2 ! misho 2383: vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
! 2384: interval, VTY_NEWLINE);
! 2385: return CMD_ERR_AMBIGUOUS;
1.1 misho 2386: }
2387:
2388: circuit->csnp_interval[0] = (u_int16_t) interval;
2389:
2390: return CMD_SUCCESS;
2391: }
2392:
2393: DEFUN (no_csnp_interval_l1,
2394: no_csnp_interval_l1_cmd,
2395: "no isis csnp-interval level-1",
2396: NO_STR
2397: "IS-IS commands\n"
2398: "Set CSNP interval in seconds\n"
2399: "Specify interval for level-1 CSNPs\n")
2400: {
1.1.1.2 ! misho 2401: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2402: if (!circuit)
! 2403: return CMD_ERR_NO_MATCH;
1.1 misho 2404:
1.1.1.2 ! misho 2405: circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
1.1 misho 2406:
2407: return CMD_SUCCESS;
2408: }
2409:
2410: ALIAS (no_csnp_interval_l1,
2411: no_csnp_interval_l1_arg_cmd,
1.1.1.2 ! misho 2412: "no isis csnp-interval <1-600> level-1",
1.1 misho 2413: NO_STR
2414: "IS-IS commands\n"
2415: "Set CSNP interval in seconds\n"
2416: "CSNP interval value\n"
2417: "Specify interval for level-1 CSNPs\n")
2418:
2419: DEFUN (csnp_interval_l2,
2420: csnp_interval_l2_cmd,
1.1.1.2 ! misho 2421: "isis csnp-interval <1-600> level-2",
1.1 misho 2422: "IS-IS commands\n"
2423: "Set CSNP interval in seconds\n"
2424: "CSNP interval value\n"
2425: "Specify interval for level-2 CSNPs\n")
2426: {
2427: unsigned long interval;
1.1.1.2 ! misho 2428: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2429: if (!circuit)
! 2430: return CMD_ERR_NO_MATCH;
1.1 misho 2431:
1.1.1.2 ! misho 2432: interval = atol (argv[0]);
! 2433: if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
1.1 misho 2434: {
1.1.1.2 ! misho 2435: vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
! 2436: interval, VTY_NEWLINE);
! 2437: return CMD_ERR_AMBIGUOUS;
1.1 misho 2438: }
2439:
2440: circuit->csnp_interval[1] = (u_int16_t) interval;
2441:
2442: return CMD_SUCCESS;
2443: }
2444:
2445: DEFUN (no_csnp_interval_l2,
2446: no_csnp_interval_l2_cmd,
2447: "no isis csnp-interval level-2",
2448: NO_STR
2449: "IS-IS commands\n"
2450: "Set CSNP interval in seconds\n"
2451: "Specify interval for level-2 CSNPs\n")
2452: {
1.1.1.2 ! misho 2453: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2454: if (!circuit)
! 2455: return CMD_ERR_NO_MATCH;
1.1 misho 2456:
1.1.1.2 ! misho 2457: circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
1.1 misho 2458:
2459: return CMD_SUCCESS;
2460: }
2461:
2462: ALIAS (no_csnp_interval_l2,
2463: no_csnp_interval_l2_arg_cmd,
1.1.1.2 ! misho 2464: "no isis csnp-interval <1-600> level-2",
1.1 misho 2465: NO_STR
2466: "IS-IS commands\n"
2467: "Set CSNP interval in seconds\n"
2468: "CSNP interval value\n"
2469: "Specify interval for level-2 CSNPs\n")
2470:
1.1.1.2 ! misho 2471: DEFUN (psnp_interval,
! 2472: psnp_interval_cmd,
! 2473: "isis psnp-interval <1-120>",
! 2474: "IS-IS commands\n"
! 2475: "Set PSNP interval in seconds\n"
! 2476: "PSNP interval value\n")
1.1 misho 2477: {
1.1.1.2 ! misho 2478: unsigned long interval;
! 2479: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2480: if (!circuit)
! 2481: return CMD_ERR_NO_MATCH;
1.1 misho 2482:
1.1.1.2 ! misho 2483: interval = atol (argv[0]);
! 2484: if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
! 2485: {
! 2486: vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
! 2487: interval, VTY_NEWLINE);
! 2488: return CMD_ERR_AMBIGUOUS;
! 2489: }
1.1 misho 2490:
1.1.1.2 ! misho 2491: circuit->psnp_interval[0] = (u_int16_t) interval;
! 2492: circuit->psnp_interval[1] = (u_int16_t) interval;
1.1 misho 2493:
1.1.1.2 ! misho 2494: return CMD_SUCCESS;
! 2495: }
1.1 misho 2496:
1.1.1.2 ! misho 2497: DEFUN (no_psnp_interval,
! 2498: no_psnp_interval_cmd,
! 2499: "no isis psnp-interval",
! 2500: NO_STR
! 2501: "IS-IS commands\n"
! 2502: "Set PSNP interval in seconds\n")
! 2503: {
! 2504: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2505: if (!circuit)
! 2506: return CMD_ERR_NO_MATCH;
1.1 misho 2507:
1.1.1.2 ! misho 2508: circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
! 2509: circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
! 2510:
! 2511: return CMD_SUCCESS;
! 2512: }
! 2513:
! 2514: ALIAS (no_psnp_interval,
! 2515: no_psnp_interval_arg_cmd,
! 2516: "no isis psnp-interval <1-120>",
! 2517: NO_STR
! 2518: "IS-IS commands\n"
! 2519: "Set PSNP interval in seconds\n"
! 2520: "PSNP interval value\n")
! 2521:
! 2522: DEFUN (psnp_interval_l1,
! 2523: psnp_interval_l1_cmd,
! 2524: "isis psnp-interval <1-120> level-1",
! 2525: "IS-IS commands\n"
! 2526: "Set PSNP interval in seconds\n"
! 2527: "PSNP interval value\n"
! 2528: "Specify interval for level-1 PSNPs\n")
! 2529: {
! 2530: unsigned long interval;
! 2531: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2532: if (!circuit)
! 2533: return CMD_ERR_NO_MATCH;
1.1 misho 2534:
1.1.1.2 ! misho 2535: interval = atol (argv[0]);
! 2536: if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
1.1 misho 2537: {
1.1.1.2 ! misho 2538: vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
! 2539: interval, VTY_NEWLINE);
! 2540: return CMD_ERR_AMBIGUOUS;
1.1 misho 2541: }
2542:
1.1.1.2 ! misho 2543: circuit->psnp_interval[0] = (u_int16_t) interval;
1.1 misho 2544:
1.1.1.2 ! misho 2545: return CMD_SUCCESS;
! 2546: }
1.1 misho 2547:
1.1.1.2 ! misho 2548: DEFUN (no_psnp_interval_l1,
! 2549: no_psnp_interval_l1_cmd,
! 2550: "no isis psnp-interval level-1",
! 2551: NO_STR
! 2552: "IS-IS commands\n"
! 2553: "Set PSNP interval in seconds\n"
! 2554: "Specify interval for level-1 PSNPs\n")
! 2555: {
! 2556: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2557: if (!circuit)
! 2558: return CMD_ERR_NO_MATCH;
! 2559:
! 2560: circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
1.1 misho 2561:
2562: return CMD_SUCCESS;
2563: }
2564:
1.1.1.2 ! misho 2565: ALIAS (no_psnp_interval_l1,
! 2566: no_psnp_interval_l1_arg_cmd,
! 2567: "no isis psnp-interval <1-120> level-1",
1.1 misho 2568: NO_STR
1.1.1.2 ! misho 2569: "IS-IS commands\n"
! 2570: "Set PSNP interval in seconds\n"
! 2571: "PSNP interval value\n"
! 2572: "Specify interval for level-1 PSNPs\n")
1.1 misho 2573:
1.1.1.2 ! misho 2574: DEFUN (psnp_interval_l2,
! 2575: psnp_interval_l2_cmd,
! 2576: "isis psnp-interval <1-120> level-2",
! 2577: "IS-IS commands\n"
! 2578: "Set PSNP interval in seconds\n"
! 2579: "PSNP interval value\n"
! 2580: "Specify interval for level-2 PSNPs\n")
! 2581: {
! 2582: unsigned long interval;
! 2583: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2584: if (!circuit)
! 2585: return CMD_ERR_NO_MATCH;
1.1 misho 2586:
1.1.1.2 ! misho 2587: interval = atol (argv[0]);
! 2588: if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
1.1 misho 2589: {
1.1.1.2 ! misho 2590: vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
! 2591: interval, VTY_NEWLINE);
! 2592: return CMD_ERR_AMBIGUOUS;
1.1 misho 2593: }
2594:
1.1.1.2 ! misho 2595: circuit->psnp_interval[1] = (u_int16_t) interval;
1.1 misho 2596:
1.1.1.2 ! misho 2597: return CMD_SUCCESS;
! 2598: }
! 2599:
! 2600: DEFUN (no_psnp_interval_l2,
! 2601: no_psnp_interval_l2_cmd,
! 2602: "no isis psnp-interval level-2",
! 2603: NO_STR
! 2604: "IS-IS commands\n"
! 2605: "Set PSNP interval in seconds\n"
! 2606: "Specify interval for level-2 PSNPs\n")
! 2607: {
! 2608: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2609: if (!circuit)
! 2610: return CMD_ERR_NO_MATCH;
! 2611:
! 2612: circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
1.1 misho 2613:
2614: return CMD_SUCCESS;
2615: }
2616:
1.1.1.2 ! misho 2617: ALIAS (no_psnp_interval_l2,
! 2618: no_psnp_interval_l2_arg_cmd,
! 2619: "no isis psnp-interval <1-120> level-2",
! 2620: NO_STR
! 2621: "IS-IS commands\n"
! 2622: "Set PSNP interval in seconds\n"
! 2623: "PSNP interval value\n"
! 2624: "Specify interval for level-2 PSNPs\n")
! 2625:
! 2626: struct cmd_node interface_node = {
1.1 misho 2627: INTERFACE_NODE,
2628: "%s(config-if)# ",
2629: 1,
2630: };
2631:
1.1.1.2 ! misho 2632: DEFUN (isis_network,
! 2633: isis_network_cmd,
! 2634: "isis network point-to-point",
! 2635: "IS-IS commands\n"
! 2636: "Set network type\n"
! 2637: "point-to-point network type\n")
! 2638: {
! 2639: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2640: if (!circuit)
! 2641: return CMD_ERR_NO_MATCH;
! 2642:
! 2643: /* RFC5309 section 4 */
! 2644: if (circuit->circ_type == CIRCUIT_T_P2P)
! 2645: return CMD_SUCCESS;
! 2646:
! 2647: if (circuit->state != C_STATE_UP)
! 2648: {
! 2649: circuit->circ_type = CIRCUIT_T_P2P;
! 2650: circuit->circ_type_config = CIRCUIT_T_P2P;
! 2651: }
! 2652: else
! 2653: {
! 2654: struct isis_area *area = circuit->area;
! 2655: if (!if_is_broadcast (circuit->interface))
! 2656: {
! 2657: vty_out (vty, "isis network point-to-point "
! 2658: "is valid only on broadcast interfaces%s",
! 2659: VTY_NEWLINE);
! 2660: return CMD_ERR_AMBIGUOUS;
! 2661: }
! 2662:
! 2663: isis_csm_state_change (ISIS_DISABLE, circuit, area);
! 2664: circuit->circ_type = CIRCUIT_T_P2P;
! 2665: circuit->circ_type_config = CIRCUIT_T_P2P;
! 2666: isis_csm_state_change (ISIS_ENABLE, circuit, area);
! 2667: }
! 2668:
! 2669: return CMD_SUCCESS;
! 2670: }
! 2671:
! 2672: DEFUN (no_isis_network,
! 2673: no_isis_network_cmd,
! 2674: "no isis network point-to-point",
! 2675: NO_STR
! 2676: "IS-IS commands\n"
! 2677: "Set network type for circuit\n"
! 2678: "point-to-point network type\n")
! 2679: {
! 2680: struct isis_circuit *circuit = isis_circuit_lookup (vty);
! 2681: if (!circuit)
! 2682: return CMD_ERR_NO_MATCH;
! 2683:
! 2684: /* RFC5309 section 4 */
! 2685: if (circuit->circ_type == CIRCUIT_T_BROADCAST)
! 2686: return CMD_SUCCESS;
! 2687:
! 2688: if (circuit->state != C_STATE_UP)
! 2689: {
! 2690: circuit->circ_type = CIRCUIT_T_BROADCAST;
! 2691: circuit->circ_type_config = CIRCUIT_T_BROADCAST;
! 2692: }
! 2693: else
! 2694: {
! 2695: struct isis_area *area = circuit->area;
! 2696: if (circuit->interface &&
! 2697: !if_is_broadcast (circuit->interface))
! 2698: {
! 2699: vty_out (vty, "no isis network point-to-point "
! 2700: "is valid only on broadcast interfaces%s",
! 2701: VTY_NEWLINE);
! 2702: return CMD_ERR_AMBIGUOUS;
! 2703: }
! 2704:
! 2705: isis_csm_state_change (ISIS_DISABLE, circuit, area);
! 2706: circuit->circ_type = CIRCUIT_T_BROADCAST;
! 2707: circuit->circ_type_config = CIRCUIT_T_BROADCAST;
! 2708: isis_csm_state_change (ISIS_ENABLE, circuit, area);
! 2709: }
! 2710:
! 2711: return CMD_SUCCESS;
! 2712: }
! 2713:
1.1 misho 2714: int
2715: isis_if_new_hook (struct interface *ifp)
2716: {
2717: return 0;
2718: }
2719:
2720: int
2721: isis_if_delete_hook (struct interface *ifp)
2722: {
1.1.1.2 ! misho 2723: struct isis_circuit *circuit;
! 2724: /* Clean up the circuit data */
! 2725: if (ifp && ifp->info)
! 2726: {
! 2727: circuit = ifp->info;
! 2728: isis_csm_state_change (IF_DOWN_FROM_Z, circuit, circuit->area);
! 2729: isis_csm_state_change (ISIS_DISABLE, circuit, circuit->area);
! 2730: }
! 2731:
1.1 misho 2732: return 0;
2733: }
2734:
2735: void
2736: isis_circuit_init ()
2737: {
2738: /* Initialize Zebra interface data structure */
2739: if_init ();
2740: if_add_hook (IF_NEW_HOOK, isis_if_new_hook);
2741: if_add_hook (IF_DELETE_HOOK, isis_if_delete_hook);
2742:
2743: /* Install interface node */
2744: install_node (&interface_node, isis_interface_config_write);
2745: install_element (CONFIG_NODE, &interface_cmd);
1.1.1.2 ! misho 2746: install_element (CONFIG_NODE, &no_interface_cmd);
1.1 misho 2747:
2748: install_default (INTERFACE_NODE);
2749: install_element (INTERFACE_NODE, &interface_desc_cmd);
2750: install_element (INTERFACE_NODE, &no_interface_desc_cmd);
2751:
2752: install_element (INTERFACE_NODE, &ip_router_isis_cmd);
2753: install_element (INTERFACE_NODE, &no_ip_router_isis_cmd);
2754:
1.1.1.2 ! misho 2755: install_element (INTERFACE_NODE, &isis_passive_cmd);
! 2756: install_element (INTERFACE_NODE, &no_isis_passive_cmd);
! 2757:
1.1 misho 2758: install_element (INTERFACE_NODE, &isis_circuit_type_cmd);
2759: install_element (INTERFACE_NODE, &no_isis_circuit_type_cmd);
2760:
1.1.1.2 ! misho 2761: install_element (INTERFACE_NODE, &isis_passwd_clear_cmd);
! 2762: install_element (INTERFACE_NODE, &isis_passwd_md5_cmd);
1.1 misho 2763: install_element (INTERFACE_NODE, &no_isis_passwd_cmd);
2764:
2765: install_element (INTERFACE_NODE, &isis_priority_cmd);
2766: install_element (INTERFACE_NODE, &no_isis_priority_cmd);
2767: install_element (INTERFACE_NODE, &no_isis_priority_arg_cmd);
2768: install_element (INTERFACE_NODE, &isis_priority_l1_cmd);
2769: install_element (INTERFACE_NODE, &no_isis_priority_l1_cmd);
2770: install_element (INTERFACE_NODE, &no_isis_priority_l1_arg_cmd);
2771: install_element (INTERFACE_NODE, &isis_priority_l2_cmd);
2772: install_element (INTERFACE_NODE, &no_isis_priority_l2_cmd);
2773: install_element (INTERFACE_NODE, &no_isis_priority_l2_arg_cmd);
2774:
2775: install_element (INTERFACE_NODE, &isis_metric_cmd);
2776: install_element (INTERFACE_NODE, &no_isis_metric_cmd);
2777: install_element (INTERFACE_NODE, &no_isis_metric_arg_cmd);
1.1.1.2 ! misho 2778: install_element (INTERFACE_NODE, &isis_metric_l1_cmd);
! 2779: install_element (INTERFACE_NODE, &no_isis_metric_l1_cmd);
! 2780: install_element (INTERFACE_NODE, &no_isis_metric_l1_arg_cmd);
! 2781: install_element (INTERFACE_NODE, &isis_metric_l2_cmd);
! 2782: install_element (INTERFACE_NODE, &no_isis_metric_l2_cmd);
! 2783: install_element (INTERFACE_NODE, &no_isis_metric_l2_arg_cmd);
1.1 misho 2784:
2785: install_element (INTERFACE_NODE, &isis_hello_interval_cmd);
2786: install_element (INTERFACE_NODE, &no_isis_hello_interval_cmd);
2787: install_element (INTERFACE_NODE, &no_isis_hello_interval_arg_cmd);
2788: install_element (INTERFACE_NODE, &isis_hello_interval_l1_cmd);
2789: install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_cmd);
2790: install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_arg_cmd);
2791: install_element (INTERFACE_NODE, &isis_hello_interval_l2_cmd);
2792: install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_cmd);
2793: install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_arg_cmd);
2794:
2795: install_element (INTERFACE_NODE, &isis_hello_multiplier_cmd);
2796: install_element (INTERFACE_NODE, &no_isis_hello_multiplier_cmd);
2797: install_element (INTERFACE_NODE, &no_isis_hello_multiplier_arg_cmd);
2798: install_element (INTERFACE_NODE, &isis_hello_multiplier_l1_cmd);
2799: install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_cmd);
2800: install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_arg_cmd);
2801: install_element (INTERFACE_NODE, &isis_hello_multiplier_l2_cmd);
2802: install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_cmd);
2803: install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_arg_cmd);
2804:
1.1.1.2 ! misho 2805: install_element (INTERFACE_NODE, &isis_hello_padding_cmd);
! 2806: install_element (INTERFACE_NODE, &no_isis_hello_padding_cmd);
! 2807:
1.1 misho 2808: install_element (INTERFACE_NODE, &csnp_interval_cmd);
2809: install_element (INTERFACE_NODE, &no_csnp_interval_cmd);
2810: install_element (INTERFACE_NODE, &no_csnp_interval_arg_cmd);
2811: install_element (INTERFACE_NODE, &csnp_interval_l1_cmd);
2812: install_element (INTERFACE_NODE, &no_csnp_interval_l1_cmd);
2813: install_element (INTERFACE_NODE, &no_csnp_interval_l1_arg_cmd);
2814: install_element (INTERFACE_NODE, &csnp_interval_l2_cmd);
2815: install_element (INTERFACE_NODE, &no_csnp_interval_l2_cmd);
2816: install_element (INTERFACE_NODE, &no_csnp_interval_l2_arg_cmd);
2817:
1.1.1.2 ! misho 2818: install_element (INTERFACE_NODE, &psnp_interval_cmd);
! 2819: install_element (INTERFACE_NODE, &no_psnp_interval_cmd);
! 2820: install_element (INTERFACE_NODE, &no_psnp_interval_arg_cmd);
! 2821: install_element (INTERFACE_NODE, &psnp_interval_l1_cmd);
! 2822: install_element (INTERFACE_NODE, &no_psnp_interval_l1_cmd);
! 2823: install_element (INTERFACE_NODE, &no_psnp_interval_l1_arg_cmd);
! 2824: install_element (INTERFACE_NODE, &psnp_interval_l2_cmd);
! 2825: install_element (INTERFACE_NODE, &no_psnp_interval_l2_cmd);
! 2826: install_element (INTERFACE_NODE, &no_psnp_interval_l2_arg_cmd);
! 2827:
! 2828: install_element (INTERFACE_NODE, &isis_network_cmd);
! 2829: install_element (INTERFACE_NODE, &no_isis_network_cmd);
! 2830:
1.1 misho 2831: #ifdef HAVE_IPV6
2832: install_element (INTERFACE_NODE, &ipv6_router_isis_cmd);
2833: install_element (INTERFACE_NODE, &no_ipv6_router_isis_cmd);
2834: #endif
2835: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>