Annotation of embedaddon/quagga/isisd/isisd.c, revision 1.1.1.2

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>