]> git.proxmox.com Git - mirror_frr.git/blobdiff - isisd/isis_circuit.c
*: reindent
[mirror_frr.git] / isisd / isis_circuit.c
index d07ea27c44e2d1d0c308fb88a5564b0410b8cc6a..72810532b01a83026a658b13a9869a16164362c6 100644 (file)
@@ -2,17 +2,17 @@
  * IS-IS Rout(e)ing protocol - isis_circuit.h
  *
  * Copyright (C) 2001,2002   Sampo Saaristo
- *                           Tampere University of Technology      
+ *                           Tampere University of Technology
  *                           Institute of Communications Engineering
  *
- * This program is free software; you can redistribute it and/or modify it 
- * under the terms of the GNU General Public Licenseas published by the Free 
- * Software Foundation; either version 2 of the License, or (at your option) 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public Licenseas published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  *
- * This program is distributed in the hope that it will be useful,but WITHOUT 
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+ * This program is distributed in the hope that it will be useful,but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  * more details.
  *
  * You should have received a copy of the GNU General Public License along
@@ -71,1366 +71,1282 @@ int isis_interface_config_write(struct vty *);
 int isis_if_new_hook(struct interface *);
 int isis_if_delete_hook(struct interface *);
 
-struct isis_circuit *
-isis_circuit_new ()
+struct isis_circuit *isis_circuit_new()
 {
-  struct isis_circuit *circuit;
-  int i;
-
-  circuit = XCALLOC (MTYPE_ISIS_CIRCUIT, sizeof (struct isis_circuit));
-  if (circuit == NULL)
-    {
-      zlog_err ("Can't malloc isis circuit");
-      return NULL;
-    }
-
-  /*
-   * Default values
-   */
-  circuit->is_type = IS_LEVEL_1_AND_2;
-  circuit->flags = 0;
-  circuit->pad_hellos = 1;
-  for (i = 0; i < 2; i++)
-    {
-      circuit->hello_interval[i] = DEFAULT_HELLO_INTERVAL;
-      circuit->hello_multiplier[i] = DEFAULT_HELLO_MULTIPLIER;
-      circuit->csnp_interval[i] = DEFAULT_CSNP_INTERVAL;
-      circuit->psnp_interval[i] = DEFAULT_PSNP_INTERVAL;
-      circuit->priority[i] = DEFAULT_PRIORITY;
-      circuit->metric[i] = DEFAULT_CIRCUIT_METRIC;
-      circuit->te_metric[i] = DEFAULT_CIRCUIT_METRIC;
-    }
-
-  circuit->mtc = mpls_te_circuit_new();
-
-  circuit_mt_init(circuit);
-
-  QOBJ_REG (circuit, isis_circuit);
-
-  return circuit;
+       struct isis_circuit *circuit;
+       int i;
+
+       circuit = XCALLOC(MTYPE_ISIS_CIRCUIT, sizeof(struct isis_circuit));
+       if (circuit == NULL) {
+               zlog_err("Can't malloc isis circuit");
+               return NULL;
+       }
+
+       /*
+        * Default values
+        */
+       circuit->is_type = IS_LEVEL_1_AND_2;
+       circuit->flags = 0;
+       circuit->pad_hellos = 1;
+       for (i = 0; i < 2; i++) {
+               circuit->hello_interval[i] = DEFAULT_HELLO_INTERVAL;
+               circuit->hello_multiplier[i] = DEFAULT_HELLO_MULTIPLIER;
+               circuit->csnp_interval[i] = DEFAULT_CSNP_INTERVAL;
+               circuit->psnp_interval[i] = DEFAULT_PSNP_INTERVAL;
+               circuit->priority[i] = DEFAULT_PRIORITY;
+               circuit->metric[i] = DEFAULT_CIRCUIT_METRIC;
+               circuit->te_metric[i] = DEFAULT_CIRCUIT_METRIC;
+       }
+
+       circuit->mtc = mpls_te_circuit_new();
+
+       circuit_mt_init(circuit);
+
+       QOBJ_REG(circuit, isis_circuit);
+
+       return circuit;
 }
 
-void
-isis_circuit_del (struct isis_circuit *circuit)
+void isis_circuit_del(struct isis_circuit *circuit)
 {
-  if (!circuit)
-    return;
+       if (!circuit)
+               return;
 
-  QOBJ_UNREG (circuit);
+       QOBJ_UNREG(circuit);
 
-  isis_circuit_if_unbind (circuit, circuit->interface);
+       isis_circuit_if_unbind(circuit, circuit->interface);
 
-  circuit_mt_finish(circuit);
+       circuit_mt_finish(circuit);
 
-  /* and lastly the circuit itself */
-  XFREE (MTYPE_ISIS_CIRCUIT, circuit);
+       /* and lastly the circuit itself */
+       XFREE(MTYPE_ISIS_CIRCUIT, circuit);
 
-  return;
+       return;
 }
 
-void
-isis_circuit_configure (struct isis_circuit *circuit, struct isis_area *area)
+void isis_circuit_configure(struct isis_circuit *circuit,
+                           struct isis_area *area)
 {
-  assert (area);
-  circuit->area = area;
-
-  /*
-   * Whenever the is-type of an area is changed, the is-type of each circuit
-   * in that area is updated to a non-empty subset of the area is-type.
-   * Inversely, when configuring a new circuit, this property should be
-   * ensured as well.
-   */
-  if (area->is_type != IS_LEVEL_1_AND_2)
-    circuit->is_type = area->is_type;
-
-  /*
-   * Add the circuit into area
-   */
-  listnode_add (area->circuit_list, circuit);
-
-  circuit->idx = flags_get_index (&area->flags);
-
-  return;
+       assert(area);
+       circuit->area = area;
+
+       /*
+        * Whenever the is-type of an area is changed, the is-type of each
+        * circuit
+        * in that area is updated to a non-empty subset of the area is-type.
+        * Inversely, when configuring a new circuit, this property should be
+        * ensured as well.
+        */
+       if (area->is_type != IS_LEVEL_1_AND_2)
+               circuit->is_type = area->is_type;
+
+       /*
+        * Add the circuit into area
+        */
+       listnode_add(area->circuit_list, circuit);
+
+       circuit->idx = flags_get_index(&area->flags);
+
+       return;
 }
 
-void
-isis_circuit_deconfigure (struct isis_circuit *circuit, struct isis_area *area)
+void isis_circuit_deconfigure(struct isis_circuit *circuit,
+                             struct isis_area *area)
 {
-  /* Free the index of SRM and SSN flags */
-  flags_free_index (&area->flags, circuit->idx);
-  circuit->idx = 0;
-  /* Remove circuit from area */
-  assert (circuit->area == area);
-  listnode_delete (area->circuit_list, circuit);
-  circuit->area = NULL;
-
-  return;
+       /* Free the index of SRM and SSN flags */
+       flags_free_index(&area->flags, circuit->idx);
+       circuit->idx = 0;
+       /* Remove circuit from area */
+       assert(circuit->area == area);
+       listnode_delete(area->circuit_list, circuit);
+       circuit->area = NULL;
+
+       return;
 }
 
-struct isis_circuit *
-circuit_lookup_by_ifp (struct interface *ifp, struct list *list)
+struct isis_circuit *circuit_lookup_by_ifp(struct interface *ifp,
+                                          struct list *list)
 {
-  struct isis_circuit *circuit = NULL;
-  struct listnode *node;
+       struct isis_circuit *circuit = NULL;
+       struct listnode *node;
 
-  if (!list)
-    return NULL;
+       if (!list)
+               return NULL;
 
-  for (ALL_LIST_ELEMENTS_RO (list, node, circuit))
-    if (circuit->interface == ifp)
-      {
-        assert (ifp->info == circuit);
-        return circuit;
-      }
+       for (ALL_LIST_ELEMENTS_RO(list, node, circuit))
+               if (circuit->interface == ifp) {
+                       assert(ifp->info == circuit);
+                       return circuit;
+               }
 
-  return NULL;
+       return NULL;
 }
 
-struct isis_circuit *
-circuit_scan_by_ifp (struct interface *ifp)
+struct isis_circuit *circuit_scan_by_ifp(struct interface *ifp)
 {
-  struct isis_area *area;
-  struct listnode *node;
-  struct isis_circuit *circuit;
-
-  if (ifp->info)
-    return (struct isis_circuit *)ifp->info;
-
-  if (isis->area_list)
-    {
-      for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area))
-        {
-          circuit = circuit_lookup_by_ifp (ifp, area->circuit_list);
-          if (circuit)
-            return circuit;
-        }
-    }
-  return circuit_lookup_by_ifp (ifp, isis->init_circ_list);
+       struct isis_area *area;
+       struct listnode *node;
+       struct isis_circuit *circuit;
+
+       if (ifp->info)
+               return (struct isis_circuit *)ifp->info;
+
+       if (isis->area_list) {
+               for (ALL_LIST_ELEMENTS_RO(isis->area_list, node, area)) {
+                       circuit =
+                               circuit_lookup_by_ifp(ifp, area->circuit_list);
+                       if (circuit)
+                               return circuit;
+               }
+       }
+       return circuit_lookup_by_ifp(ifp, isis->init_circ_list);
 }
 
-void
-isis_circuit_add_addr (struct isis_circuit *circuit,
-                      struct connected *connected)
+void isis_circuit_add_addr(struct isis_circuit *circuit,
+                          struct connected *connected)
 {
-  struct listnode *node;
-  struct prefix_ipv4 *ipv4;
+       struct listnode *node;
+       struct prefix_ipv4 *ipv4;
 #if defined(EXTREME_DEBUG)
-  char buf[PREFIX2STR_BUFFER];
+       char buf[PREFIX2STR_BUFFER];
 #endif
-  struct prefix_ipv6 *ipv6;
+       struct prefix_ipv6 *ipv6;
 
-  if (connected->address->family == AF_INET)
-    {
-      u_int32_t addr = connected->address->u.prefix4.s_addr;
-      addr = ntohl (addr);
-      if (IPV4_NET0(addr) ||
-          IPV4_NET127(addr) ||
-          IN_CLASSD(addr) ||
-          IPV4_LINKLOCAL(addr))
-        return;
+       if (connected->address->family == AF_INET) {
+               u_int32_t addr = connected->address->u.prefix4.s_addr;
+               addr = ntohl(addr);
+               if (IPV4_NET0(addr) || IPV4_NET127(addr) || IN_CLASSD(addr)
+                   || IPV4_LINKLOCAL(addr))
+                       return;
 
-      for (ALL_LIST_ELEMENTS_RO (circuit->ip_addrs, node, ipv4))
-        if (prefix_same ((struct prefix *) ipv4, connected->address))
-          return;
+               for (ALL_LIST_ELEMENTS_RO(circuit->ip_addrs, node, ipv4))
+                       if (prefix_same((struct prefix *)ipv4,
+                                       connected->address))
+                               return;
 
-      ipv4 = prefix_ipv4_new ();
-      ipv4->prefixlen = connected->address->prefixlen;
-      ipv4->prefix = connected->address->u.prefix4;
-      listnode_add (circuit->ip_addrs, ipv4);
+               ipv4 = prefix_ipv4_new();
+               ipv4->prefixlen = connected->address->prefixlen;
+               ipv4->prefix = connected->address->u.prefix4;
+               listnode_add(circuit->ip_addrs, ipv4);
 
-      /* Update MPLS TE Local IP address parameter */
-      set_circuitparams_local_ipaddr (circuit->mtc, ipv4->prefix);
+               /* Update MPLS TE Local IP address parameter */
+               set_circuitparams_local_ipaddr(circuit->mtc, ipv4->prefix);
 
-      if (circuit->area)
-        lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
+               if (circuit->area)
+                       lsp_regenerate_schedule(circuit->area, circuit->is_type,
+                                               0);
 
 #ifdef EXTREME_DEBUG
-      prefix2str (connected->address, buf, sizeof (buf));
-      zlog_debug ("Added IP address %s to circuit %d", buf,
-                circuit->circuit_id);
+               prefix2str(connected->address, buf, sizeof(buf));
+               zlog_debug("Added IP address %s to circuit %d", buf,
+                          circuit->circuit_id);
 #endif /* EXTREME_DEBUG */
-    }
-  if (connected->address->family == AF_INET6)
-    {
-      if (IN6_IS_ADDR_LOOPBACK(&connected->address->u.prefix6))
-        return;
-
-      for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_link, node, ipv6))
-        if (prefix_same ((struct prefix *) ipv6, connected->address))
-          return;
-      for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_non_link, node, ipv6))
-        if (prefix_same ((struct prefix *) ipv6, connected->address))
-          return;
-
-      ipv6 = prefix_ipv6_new ();
-      ipv6->prefixlen = connected->address->prefixlen;
-      ipv6->prefix = connected->address->u.prefix6;
-
-      if (IN6_IS_ADDR_LINKLOCAL (&ipv6->prefix))
-       listnode_add (circuit->ipv6_link, ipv6);
-      else
-       listnode_add (circuit->ipv6_non_link, ipv6);
-      if (circuit->area)
-        lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
+       }
+       if (connected->address->family == AF_INET6) {
+               if (IN6_IS_ADDR_LOOPBACK(&connected->address->u.prefix6))
+                       return;
+
+               for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node, ipv6))
+                       if (prefix_same((struct prefix *)ipv6,
+                                       connected->address))
+                               return;
+               for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_non_link, node, ipv6))
+                       if (prefix_same((struct prefix *)ipv6,
+                                       connected->address))
+                               return;
+
+               ipv6 = prefix_ipv6_new();
+               ipv6->prefixlen = connected->address->prefixlen;
+               ipv6->prefix = connected->address->u.prefix6;
+
+               if (IN6_IS_ADDR_LINKLOCAL(&ipv6->prefix))
+                       listnode_add(circuit->ipv6_link, ipv6);
+               else
+                       listnode_add(circuit->ipv6_non_link, ipv6);
+               if (circuit->area)
+                       lsp_regenerate_schedule(circuit->area, circuit->is_type,
+                                               0);
 
 #ifdef EXTREME_DEBUG
-      prefix2str (connected->address, buf, sizeof (buf));
-      zlog_debug ("Added IPv6 address %s to circuit %d", buf,
-                circuit->circuit_id);
+               prefix2str(connected->address, buf, sizeof(buf));
+               zlog_debug("Added IPv6 address %s to circuit %d", buf,
+                          circuit->circuit_id);
 #endif /* EXTREME_DEBUG */
-    }
-  return;
+       }
+       return;
 }
 
-void
-isis_circuit_del_addr (struct isis_circuit *circuit,
-                      struct connected *connected)
+void isis_circuit_del_addr(struct isis_circuit *circuit,
+                          struct connected *connected)
 {
-  struct prefix_ipv4 *ipv4, *ip = NULL;
-  struct listnode *node;
-  char buf[PREFIX2STR_BUFFER];
-  struct prefix_ipv6 *ipv6, *ip6 = NULL;
-  int found = 0;
-
-  if (connected->address->family == AF_INET)
-    {
-      ipv4 = prefix_ipv4_new ();
-      ipv4->prefixlen = connected->address->prefixlen;
-      ipv4->prefix = connected->address->u.prefix4;
-
-      for (ALL_LIST_ELEMENTS_RO (circuit->ip_addrs, node, ip))
-        if (prefix_same ((struct prefix *) ip, (struct prefix *) ipv4))
-          break;
-
-      if (ip)
-       {
-         listnode_delete (circuit->ip_addrs, ip);
-          if (circuit->area)
-            lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
+       struct prefix_ipv4 *ipv4, *ip = NULL;
+       struct listnode *node;
+       char buf[PREFIX2STR_BUFFER];
+       struct prefix_ipv6 *ipv6, *ip6 = NULL;
+       int found = 0;
+
+       if (connected->address->family == AF_INET) {
+               ipv4 = prefix_ipv4_new();
+               ipv4->prefixlen = connected->address->prefixlen;
+               ipv4->prefix = connected->address->u.prefix4;
+
+               for (ALL_LIST_ELEMENTS_RO(circuit->ip_addrs, node, ip))
+                       if (prefix_same((struct prefix *)ip,
+                                       (struct prefix *)ipv4))
+                               break;
+
+               if (ip) {
+                       listnode_delete(circuit->ip_addrs, ip);
+                       if (circuit->area)
+                               lsp_regenerate_schedule(circuit->area,
+                                                       circuit->is_type, 0);
+               } else {
+                       prefix2str(connected->address, buf, sizeof(buf));
+                       zlog_warn(
+                               "Nonexistant ip address %s removal attempt from \
+                      circuit %d",
+                               buf, circuit->circuit_id);
+                       zlog_warn("Current ip addresses on %s:",
+                                 circuit->interface->name);
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ip_addrs, node,
+                                                 ip)) {
+                               prefix2str(ip, buf, sizeof(buf));
+                               zlog_warn("  %s", buf);
+                       }
+                       zlog_warn("End of addresses");
+               }
+
+               prefix_ipv4_free(ipv4);
        }
-      else
-       {
-         prefix2str (connected->address, buf, sizeof (buf));
-         zlog_warn ("Nonexistant ip address %s removal attempt from \
-                      circuit %d", buf, circuit->circuit_id);
-         zlog_warn ("Current ip addresses on %s:", circuit->interface->name);
-         for (ALL_LIST_ELEMENTS_RO(circuit->ip_addrs, node, ip))
-           {
-             prefix2str(ip, buf, sizeof(buf));
-             zlog_warn("  %s", buf);
-           }
-         zlog_warn("End of addresses");
+       if (connected->address->family == AF_INET6) {
+               ipv6 = prefix_ipv6_new();
+               ipv6->prefixlen = connected->address->prefixlen;
+               ipv6->prefix = connected->address->u.prefix6;
+
+               if (IN6_IS_ADDR_LINKLOCAL(&ipv6->prefix)) {
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node,
+                                                 ip6)) {
+                               if (prefix_same((struct prefix *)ip6,
+                                               (struct prefix *)ipv6))
+                                       break;
+                       }
+                       if (ip6) {
+                               listnode_delete(circuit->ipv6_link, ip6);
+                               found = 1;
+                       }
+               } else {
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_non_link, node,
+                                                 ip6)) {
+                               if (prefix_same((struct prefix *)ip6,
+                                               (struct prefix *)ipv6))
+                                       break;
+                       }
+                       if (ip6) {
+                               listnode_delete(circuit->ipv6_non_link, ip6);
+                               found = 1;
+                       }
+               }
+
+               if (!found) {
+                       prefix2str(connected->address, buf, sizeof(buf));
+                       zlog_warn(
+                               "Nonexitant ip address %s removal attempt from \
+                     circuit %d",
+                               buf, circuit->circuit_id);
+                       zlog_warn("Current ip addresses on %s:",
+                                 circuit->interface->name);
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node,
+                                                 ip6)) {
+                               prefix2str((struct prefix *)ip6, (char *)buf,
+                                          BUFSIZ);
+                               zlog_warn("  %s", buf);
+                       }
+                       zlog_warn(" -----");
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_non_link, node,
+                                                 ip6)) {
+                               prefix2str((struct prefix *)ip6, (char *)buf,
+                                          BUFSIZ);
+                               zlog_warn("  %s", buf);
+                       }
+                       zlog_warn("End of addresses");
+               } else if (circuit->area)
+                       lsp_regenerate_schedule(circuit->area, circuit->is_type,
+                                               0);
+
+               prefix_ipv6_free(ipv6);
        }
+       return;
+}
 
-      prefix_ipv4_free (ipv4);
-    }
-  if (connected->address->family == AF_INET6)
-    {
-      ipv6 = prefix_ipv6_new ();
-      ipv6->prefixlen = connected->address->prefixlen;
-      ipv6->prefix = connected->address->u.prefix6;
-
-      if (IN6_IS_ADDR_LINKLOCAL (&ipv6->prefix))
-       {
-         for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_link, node, ip6))
-           {
-             if (prefix_same ((struct prefix *) ip6, (struct prefix *) ipv6))
-               break;
-           }
-         if (ip6)
-           {
-             listnode_delete (circuit->ipv6_link, ip6);
-             found = 1;
-           }
-       }
-      else
-       {
-         for (ALL_LIST_ELEMENTS_RO (circuit->ipv6_non_link, node, ip6))
-           {
-             if (prefix_same ((struct prefix *) ip6, (struct prefix *) ipv6))
-               break;
-           }
-         if (ip6)
-           {
-             listnode_delete (circuit->ipv6_non_link, ip6);
-             found = 1;
-           }
+static u_char isis_circuit_id_gen(struct interface *ifp)
+{
+       u_char id = 0;
+       char ifname[16];
+       unsigned int i;
+       int start = -1, end = -1;
+
+       /*
+        * Get a stable circuit id from ifname. This makes
+        * the ifindex from flapping when netdevs are created
+        * and deleted on the fly. Note that this circuit id
+        * is used in pseudo lsps so it is better to be stable.
+        * The following code works on any reasonanle ifname
+        * like: eth1 or trk-1.1 etc.
+        */
+       for (i = 0; i < strlen(ifp->name); i++) {
+               if (isdigit((unsigned char)ifp->name[i])) {
+                       if (start < 0) {
+                               start = i;
+                               end = i + 1;
+                       } else {
+                               end = i + 1;
+                       }
+               } else if (start >= 0)
+                       break;
        }
 
-      if (!found)
-       {
-         prefix2str (connected->address, buf, sizeof (buf));
-         zlog_warn ("Nonexitant ip address %s removal attempt from \
-                     circuit %d", buf, circuit->circuit_id);
-         zlog_warn ("Current ip addresses on %s:", circuit->interface->name);
-         for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node, ip6))
-           {
-             prefix2str((struct prefix*)ip6, (char *)buf, BUFSIZ);
-             zlog_warn("  %s", buf);
-           }
-         zlog_warn(" -----");
-         for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_non_link, node, ip6))
-           {
-             prefix2str((struct prefix*)ip6, (char *)buf, BUFSIZ);
-             zlog_warn("  %s", buf);
-           }
-         zlog_warn("End of addresses");
+       if ((start >= 0) && (end >= start) && (end - start) < 16) {
+               memset(ifname, 0, 16);
+               strncpy(ifname, &ifp->name[start], end - start);
+               id = (u_char)atoi(ifname);
        }
-      else if (circuit->area)
-         lsp_regenerate_schedule (circuit->area, circuit->is_type, 0);
 
-      prefix_ipv6_free (ipv6);
-    }
-  return;
-}
+       /* Try to be unique. */
+       if (!id)
+               id = (u_char)((ifp->ifindex & 0xff) | 0x80);
 
-static u_char
-isis_circuit_id_gen (struct interface *ifp)
-{
-  u_char id = 0;
-  char ifname[16];
-  unsigned int i;
-  int start = -1, end = -1;
-
-  /*
-   * Get a stable circuit id from ifname. This makes
-   * the ifindex from flapping when netdevs are created
-   * and deleted on the fly. Note that this circuit id
-   * is used in pseudo lsps so it is better to be stable.
-   * The following code works on any reasonanle ifname
-   * like: eth1 or trk-1.1 etc.
-   */
-  for (i = 0; i < strlen (ifp->name); i++)
-    {
-      if (isdigit((unsigned char)ifp->name[i]))
-        {
-          if (start < 0)
-            {
-              start = i;
-              end = i + 1;
-            }
-          else
-            {
-              end = i + 1;
-            }
-        }
-      else if (start >= 0)
-        break;
-    }
-
-  if ((start >= 0) && (end >= start) && (end - start) < 16)
-    {
-      memset (ifname, 0, 16);
-      strncpy (ifname, &ifp->name[start], end - start);
-      id = (u_char)atoi(ifname);
-    }
-
-  /* Try to be unique. */
-  if (!id)
-    id = (u_char)((ifp->ifindex & 0xff) | 0x80);
-
-  return id;
+       return id;
 }
 
-void
-isis_circuit_if_add (struct isis_circuit *circuit, struct interface *ifp)
+void isis_circuit_if_add(struct isis_circuit *circuit, struct interface *ifp)
 {
-  struct listnode *node, *nnode;
-  struct connected *conn;
-
-  circuit->circuit_id = isis_circuit_id_gen (ifp);
-
-  isis_circuit_if_bind (circuit, ifp);
-  /*  isis_circuit_update_addrs (circuit, ifp); */
-
-  if (if_is_broadcast (ifp))
-    {
-      if (circuit->circ_type_config == CIRCUIT_T_P2P)
-        circuit->circ_type = CIRCUIT_T_P2P;
-      else
-        circuit->circ_type = CIRCUIT_T_BROADCAST;
-    }
-  else if (if_is_pointopoint (ifp))
-    {
-      circuit->circ_type = CIRCUIT_T_P2P;
-    }
-  else if (if_is_loopback (ifp))
-    {
-      circuit->circ_type = CIRCUIT_T_LOOPBACK;
-      circuit->is_passive = 1;
-    }
-  else
-    {
-      /* It's normal in case of loopback etc. */
-      if (isis->debugs & DEBUG_EVENTS)
-        zlog_debug ("isis_circuit_if_add: unsupported media");
-      circuit->circ_type = CIRCUIT_T_UNKNOWN;
-    }
-
-  circuit->ip_addrs = list_new ();
-  circuit->ipv6_link = list_new ();
-  circuit->ipv6_non_link = list_new ();
-
-  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, conn))
-    isis_circuit_add_addr (circuit, conn);
-
-  return;
+       struct listnode *node, *nnode;
+       struct connected *conn;
+
+       circuit->circuit_id = isis_circuit_id_gen(ifp);
+
+       isis_circuit_if_bind(circuit, ifp);
+       /*  isis_circuit_update_addrs (circuit, ifp); */
+
+       if (if_is_broadcast(ifp)) {
+               if (circuit->circ_type_config == CIRCUIT_T_P2P)
+                       circuit->circ_type = CIRCUIT_T_P2P;
+               else
+                       circuit->circ_type = CIRCUIT_T_BROADCAST;
+       } else if (if_is_pointopoint(ifp)) {
+               circuit->circ_type = CIRCUIT_T_P2P;
+       } else if (if_is_loopback(ifp)) {
+               circuit->circ_type = CIRCUIT_T_LOOPBACK;
+               circuit->is_passive = 1;
+       } else {
+               /* It's normal in case of loopback etc. */
+               if (isis->debugs & DEBUG_EVENTS)
+                       zlog_debug("isis_circuit_if_add: unsupported media");
+               circuit->circ_type = CIRCUIT_T_UNKNOWN;
+       }
+
+       circuit->ip_addrs = list_new();
+       circuit->ipv6_link = list_new();
+       circuit->ipv6_non_link = list_new();
+
+       for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, conn))
+               isis_circuit_add_addr(circuit, conn);
+
+       return;
 }
 
-void
-isis_circuit_if_del (struct isis_circuit *circuit, struct interface *ifp)
+void isis_circuit_if_del(struct isis_circuit *circuit, struct interface *ifp)
 {
-  struct listnode *node, *nnode;
-  struct connected *conn;
-
-  assert (circuit->interface == ifp);
-
-  /* destroy addresses */
-  for (ALL_LIST_ELEMENTS (ifp->connected, node, nnode, conn))
-    isis_circuit_del_addr (circuit, conn);
-
-  if (circuit->ip_addrs)
-    {
-      assert (listcount(circuit->ip_addrs) == 0);
-      list_delete (circuit->ip_addrs);
-      circuit->ip_addrs = NULL;
-    }
-
-  if (circuit->ipv6_link)
-    {
-      assert (listcount(circuit->ipv6_link) == 0);
-      list_delete (circuit->ipv6_link);
-      circuit->ipv6_link = NULL;
-    }
-
-  if (circuit->ipv6_non_link)
-    {
-      assert (listcount(circuit->ipv6_non_link) == 0);
-      list_delete (circuit->ipv6_non_link);
-      circuit->ipv6_non_link = NULL;
-    }
-
-  circuit->circ_type = CIRCUIT_T_UNKNOWN;
-  circuit->circuit_id = 0;
-
-  return;
+       struct listnode *node, *nnode;
+       struct connected *conn;
+
+       assert(circuit->interface == ifp);
+
+       /* destroy addresses */
+       for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, conn))
+               isis_circuit_del_addr(circuit, conn);
+
+       if (circuit->ip_addrs) {
+               assert(listcount(circuit->ip_addrs) == 0);
+               list_delete(circuit->ip_addrs);
+               circuit->ip_addrs = NULL;
+       }
+
+       if (circuit->ipv6_link) {
+               assert(listcount(circuit->ipv6_link) == 0);
+               list_delete(circuit->ipv6_link);
+               circuit->ipv6_link = NULL;
+       }
+
+       if (circuit->ipv6_non_link) {
+               assert(listcount(circuit->ipv6_non_link) == 0);
+               list_delete(circuit->ipv6_non_link);
+               circuit->ipv6_non_link = NULL;
+       }
+
+       circuit->circ_type = CIRCUIT_T_UNKNOWN;
+       circuit->circuit_id = 0;
+
+       return;
 }
 
-void
-isis_circuit_if_bind (struct isis_circuit *circuit, struct interface *ifp)
+void isis_circuit_if_bind(struct isis_circuit *circuit, struct interface *ifp)
 {
-  assert (circuit != NULL);
-  assert (ifp != NULL);
-  if (circuit->interface)
-    assert (circuit->interface == ifp);
-  else
-    circuit->interface = ifp;
-  if (ifp->info)
-    assert (ifp->info == circuit);
-  else
-    ifp->info = circuit;
-  isis_link_params_update (circuit, ifp);
+       assert(circuit != NULL);
+       assert(ifp != NULL);
+       if (circuit->interface)
+               assert(circuit->interface == ifp);
+       else
+               circuit->interface = ifp;
+       if (ifp->info)
+               assert(ifp->info == circuit);
+       else
+               ifp->info = circuit;
+       isis_link_params_update(circuit, ifp);
 }
 
-void
-isis_circuit_if_unbind (struct isis_circuit *circuit, struct interface *ifp)
+void isis_circuit_if_unbind(struct isis_circuit *circuit, struct interface *ifp)
 {
-  assert (circuit != NULL);
-  assert (ifp != NULL);
-  assert (circuit->interface == ifp);
-  assert (ifp->info == circuit);
-  circuit->interface = NULL;
-  ifp->info = NULL;
+       assert(circuit != NULL);
+       assert(ifp != NULL);
+       assert(circuit->interface == ifp);
+       assert(ifp->info == circuit);
+       circuit->interface = NULL;
+       ifp->info = NULL;
 }
 
-static void
-isis_circuit_update_all_srmflags (struct isis_circuit *circuit, int is_set)
+static void isis_circuit_update_all_srmflags(struct isis_circuit *circuit,
+                                            int is_set)
 {
-  struct isis_area *area;
-  struct isis_lsp *lsp;
-  dnode_t *dnode, *dnode_next;
-  int level;
-
-  assert (circuit);
-  area = circuit->area;
-  assert (area);
-  for (level = ISIS_LEVEL1; level <= ISIS_LEVEL2; level++)
-    {
-      if (level & circuit->is_type)
-        {
-          if (area->lspdb[level - 1] &&
-              dict_count (area->lspdb[level - 1]) > 0)
-            {
-              for (dnode = dict_first (area->lspdb[level - 1]);
-                   dnode != NULL; dnode = dnode_next)
-                {
-                  dnode_next = dict_next (area->lspdb[level - 1], dnode);
-                  lsp = dnode_get (dnode);
-                  if (is_set)
-                    {
-                      ISIS_SET_FLAG (lsp->SRMflags, circuit);
-                    }
-                  else
-                    {
-                      ISIS_CLEAR_FLAG (lsp->SRMflags, circuit);
-                    }
-                }
-            }
-        }
-    }
+       struct isis_area *area;
+       struct isis_lsp *lsp;
+       dnode_t *dnode, *dnode_next;
+       int level;
+
+       assert(circuit);
+       area = circuit->area;
+       assert(area);
+       for (level = ISIS_LEVEL1; level <= ISIS_LEVEL2; level++) {
+               if (level & circuit->is_type) {
+                       if (area->lspdb[level - 1]
+                           && dict_count(area->lspdb[level - 1]) > 0) {
+                               for (dnode = dict_first(area->lspdb[level - 1]);
+                                    dnode != NULL; dnode = dnode_next) {
+                                       dnode_next = dict_next(
+                                               area->lspdb[level - 1], dnode);
+                                       lsp = dnode_get(dnode);
+                                       if (is_set) {
+                                               ISIS_SET_FLAG(lsp->SRMflags,
+                                                             circuit);
+                                       } else {
+                                               ISIS_CLEAR_FLAG(lsp->SRMflags,
+                                                               circuit);
+                                       }
+                               }
+                       }
+               }
+       }
 }
 
-size_t
-isis_circuit_pdu_size(struct isis_circuit *circuit)
+size_t isis_circuit_pdu_size(struct isis_circuit *circuit)
 {
-  return ISO_MTU(circuit);
+       return ISO_MTU(circuit);
 }
 
-void
-isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream)
+void isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream)
 {
-  size_t stream_size = isis_circuit_pdu_size(circuit);
-
-  if (!*stream)
-    {
-      *stream = stream_new(stream_size);
-    }
-  else
-    {
-      if (STREAM_SIZE(*stream) != stream_size)
-        stream_resize(*stream, stream_size);
-      stream_reset(*stream);
-    }
+       size_t stream_size = isis_circuit_pdu_size(circuit);
+
+       if (!*stream) {
+               *stream = stream_new(stream_size);
+       } else {
+               if (STREAM_SIZE(*stream) != stream_size)
+                       stream_resize(*stream, stream_size);
+               stream_reset(*stream);
+       }
 }
 
-void
-isis_circuit_prepare (struct isis_circuit *circuit)
+void isis_circuit_prepare(struct isis_circuit *circuit)
 {
 #ifdef GNU_LINUX
-  thread_add_read(master, isis_receive, circuit, circuit->fd,
-                  &circuit->t_read);
+       thread_add_read(master, isis_receive, circuit, circuit->fd,
+                       &circuit->t_read);
 #else
-  thread_add_timer_msec(master, isis_receive, circuit,
-                        listcount(circuit->area->circuit_list) * 100,
-                        &circuit->t_read);
+       thread_add_timer_msec(master, isis_receive, circuit,
+                             listcount(circuit->area->circuit_list) * 100,
+                             &circuit->t_read);
 #endif
 }
 
-int
-isis_circuit_up (struct isis_circuit *circuit)
+int isis_circuit_up(struct isis_circuit *circuit)
 {
-  int retv;
-
-  /* Set the flags for all the lsps of the circuit. */
-  isis_circuit_update_all_srmflags (circuit, 1);
-
-  if (circuit->state == C_STATE_UP)
-    return ISIS_OK;
-
-  if (circuit->is_passive)
-    return ISIS_OK;
-
-  if (circuit->area->lsp_mtu > isis_circuit_pdu_size(circuit))
-    {
-      zlog_err("Interface MTU %zu on %s is too low to support area lsp mtu %u!",
-               isis_circuit_pdu_size(circuit), circuit->interface->name,
-               circuit->area->lsp_mtu);
-      isis_circuit_update_all_srmflags(circuit, 0);
-      return ISIS_ERROR;
-    }
-
-  if (circuit->circ_type == CIRCUIT_T_BROADCAST)
-    {
-      /*
-       * Get the Hardware Address
-       */
-      if (circuit->interface->hw_addr_len != ETH_ALEN)
-        {
-          zlog_warn ("unsupported link layer");
-        }
-      else
-        {
-          memcpy (circuit->u.bc.snpa, circuit->interface->hw_addr, ETH_ALEN);
-        }
+       int retv;
+
+       /* Set the flags for all the lsps of the circuit. */
+       isis_circuit_update_all_srmflags(circuit, 1);
+
+       if (circuit->state == C_STATE_UP)
+               return ISIS_OK;
+
+       if (circuit->is_passive)
+               return ISIS_OK;
+
+       if (circuit->area->lsp_mtu > isis_circuit_pdu_size(circuit)) {
+               zlog_err(
+                       "Interface MTU %zu on %s is too low to support area lsp mtu %u!",
+                       isis_circuit_pdu_size(circuit),
+                       circuit->interface->name, circuit->area->lsp_mtu);
+               isis_circuit_update_all_srmflags(circuit, 0);
+               return ISIS_ERROR;
+       }
+
+       if (circuit->circ_type == CIRCUIT_T_BROADCAST) {
+               /*
+                * Get the Hardware Address
+                */
+               if (circuit->interface->hw_addr_len != ETH_ALEN) {
+                       zlog_warn("unsupported link layer");
+               } else {
+                       memcpy(circuit->u.bc.snpa, circuit->interface->hw_addr,
+                              ETH_ALEN);
+               }
 #ifdef EXTREME_DEGUG
-      zlog_debug ("isis_circuit_if_add: if_id %d, isomtu %d snpa %s",
-                  circuit->interface->ifindex, ISO_MTU (circuit),
-                  snpa_print (circuit->u.bc.snpa));
+               zlog_debug("isis_circuit_if_add: if_id %d, isomtu %d snpa %s",
+                          circuit->interface->ifindex, ISO_MTU(circuit),
+                          snpa_print(circuit->u.bc.snpa));
 #endif /* EXTREME_DEBUG */
 
-      circuit->u.bc.adjdb[0] = list_new ();
-      circuit->u.bc.adjdb[1] = list_new ();
-
-      /*
-       * ISO 10589 - 8.4.1 Enabling of broadcast circuits
-       */
-
-      /* initilizing the hello sending threads
-       * for a broadcast IF
-       */
-
-      /* 8.4.1 a) commence sending of IIH PDUs */
-
-      if (circuit->is_type & IS_LEVEL_1)
-        {
-          thread_add_event(master, send_lan_l1_hello, circuit, 0, NULL);
-          circuit->u.bc.lan_neighs[0] = list_new ();
-        }
-
-      if (circuit->is_type & IS_LEVEL_2)
-        {
-          thread_add_event(master, send_lan_l2_hello, circuit, 0, NULL);
-          circuit->u.bc.lan_neighs[1] = list_new ();
-        }
-
-      /* 8.4.1 b) FIXME: solicit ES - 8.4.6 */
-      /* 8.4.1 c) FIXME: listen for ESH PDUs */
-
-      /* 8.4.1 d) */
-      /* dr election will commence in... */
-      if (circuit->is_type & IS_LEVEL_1)
-        thread_add_timer(master, isis_run_dr_l1, circuit,
-                         2 * circuit->hello_interval[0],
-                         &circuit->u.bc.t_run_dr[0]);
-      if (circuit->is_type & IS_LEVEL_2)
-        thread_add_timer(master, isis_run_dr_l2, circuit,
-                         2 * circuit->hello_interval[1],
-                         &circuit->u.bc.t_run_dr[1]);
-    }
-  else
-    {
-      /* initializing the hello send threads
-       * for a ptp IF
-       */
-      circuit->u.p2p.neighbor = NULL;
-      thread_add_event(master, send_p2p_hello, circuit, 0, NULL);
-    }
-
-  /* initializing PSNP timers */
-  if (circuit->is_type & IS_LEVEL_1)
-    thread_add_timer(master, send_l1_psnp, circuit,
-                     isis_jitter(circuit->psnp_interval[0], PSNP_JITTER),
-                     &circuit->t_send_psnp[0]);
-
-  if (circuit->is_type & IS_LEVEL_2)
-    thread_add_timer(master, send_l2_psnp, circuit,
-                     isis_jitter(circuit->psnp_interval[1], PSNP_JITTER),
-                     &circuit->t_send_psnp[1]);
-
-  /* unified init for circuits; ignore warnings below this level */
-  retv = isis_sock_init (circuit);
-  if (retv != ISIS_OK)
-    {
-      isis_circuit_down (circuit);
-      return retv;
-    }
-
-  /* initialize the circuit streams after opening connection */
-  isis_circuit_stream(circuit, &circuit->rcv_stream);
-  isis_circuit_stream(circuit, &circuit->snd_stream);
-
-  isis_circuit_prepare (circuit);
-
-  circuit->lsp_queue = list_new ();
-  circuit->lsp_queue_last_cleared = time (NULL);
-
-  return ISIS_OK;
+               circuit->u.bc.adjdb[0] = list_new();
+               circuit->u.bc.adjdb[1] = list_new();
+
+               /*
+                * ISO 10589 - 8.4.1 Enabling of broadcast circuits
+                */
+
+               /* initilizing the hello sending threads
+                * for a broadcast IF
+                */
+
+               /* 8.4.1 a) commence sending of IIH PDUs */
+
+               if (circuit->is_type & IS_LEVEL_1) {
+                       thread_add_event(master, send_lan_l1_hello, circuit, 0,
+                                        NULL);
+                       circuit->u.bc.lan_neighs[0] = list_new();
+               }
+
+               if (circuit->is_type & IS_LEVEL_2) {
+                       thread_add_event(master, send_lan_l2_hello, circuit, 0,
+                                        NULL);
+                       circuit->u.bc.lan_neighs[1] = list_new();
+               }
+
+               /* 8.4.1 b) FIXME: solicit ES - 8.4.6 */
+               /* 8.4.1 c) FIXME: listen for ESH PDUs */
+
+               /* 8.4.1 d) */
+               /* dr election will commence in... */
+               if (circuit->is_type & IS_LEVEL_1)
+                       thread_add_timer(master, isis_run_dr_l1, circuit,
+                                        2 * circuit->hello_interval[0],
+                                        &circuit->u.bc.t_run_dr[0]);
+               if (circuit->is_type & IS_LEVEL_2)
+                       thread_add_timer(master, isis_run_dr_l2, circuit,
+                                        2 * circuit->hello_interval[1],
+                                        &circuit->u.bc.t_run_dr[1]);
+       } else {
+               /* initializing the hello send threads
+                * for a ptp IF
+                */
+               circuit->u.p2p.neighbor = NULL;
+               thread_add_event(master, send_p2p_hello, circuit, 0, NULL);
+       }
+
+       /* initializing PSNP timers */
+       if (circuit->is_type & IS_LEVEL_1)
+               thread_add_timer(
+                       master, send_l1_psnp, circuit,
+                       isis_jitter(circuit->psnp_interval[0], PSNP_JITTER),
+                       &circuit->t_send_psnp[0]);
+
+       if (circuit->is_type & IS_LEVEL_2)
+               thread_add_timer(
+                       master, send_l2_psnp, circuit,
+                       isis_jitter(circuit->psnp_interval[1], PSNP_JITTER),
+                       &circuit->t_send_psnp[1]);
+
+       /* unified init for circuits; ignore warnings below this level */
+       retv = isis_sock_init(circuit);
+       if (retv != ISIS_OK) {
+               isis_circuit_down(circuit);
+               return retv;
+       }
+
+       /* initialize the circuit streams after opening connection */
+       isis_circuit_stream(circuit, &circuit->rcv_stream);
+       isis_circuit_stream(circuit, &circuit->snd_stream);
+
+       isis_circuit_prepare(circuit);
+
+       circuit->lsp_queue = list_new();
+       circuit->lsp_queue_last_cleared = time(NULL);
+
+       return ISIS_OK;
 }
 
-void
-isis_circuit_down (struct isis_circuit *circuit)
+void isis_circuit_down(struct isis_circuit *circuit)
 {
-  if (circuit->state != C_STATE_UP)
-    return;
-
-  /* Clear the flags for all the lsps of the circuit. */
-  isis_circuit_update_all_srmflags (circuit, 0);
-
-  if (circuit->circ_type == CIRCUIT_T_BROADCAST)
-    {
-      /* destroy neighbour lists */
-      if (circuit->u.bc.lan_neighs[0])
-        {
-          list_delete (circuit->u.bc.lan_neighs[0]);
-          circuit->u.bc.lan_neighs[0] = NULL;
-        }
-      if (circuit->u.bc.lan_neighs[1])
-        {
-          list_delete (circuit->u.bc.lan_neighs[1]);
-          circuit->u.bc.lan_neighs[1] = NULL;
-        }
-      /* destroy adjacency databases */
-      if (circuit->u.bc.adjdb[0])
-        {
-          circuit->u.bc.adjdb[0]->del = isis_delete_adj;
-          list_delete (circuit->u.bc.adjdb[0]);
-          circuit->u.bc.adjdb[0] = NULL;
-        }
-      if (circuit->u.bc.adjdb[1])
-        {
-          circuit->u.bc.adjdb[1]->del = isis_delete_adj;
-          list_delete (circuit->u.bc.adjdb[1]);
-          circuit->u.bc.adjdb[1] = NULL;
-        }
-      if (circuit->u.bc.is_dr[0])
-        {
-          isis_dr_resign (circuit, 1);
-          circuit->u.bc.is_dr[0] = 0;
-        }
-      memset (circuit->u.bc.l1_desig_is, 0, ISIS_SYS_ID_LEN + 1);
-      if (circuit->u.bc.is_dr[1])
-        {
-          isis_dr_resign (circuit, 2);
-          circuit->u.bc.is_dr[1] = 0;
-        }
-      memset (circuit->u.bc.l2_desig_is, 0, ISIS_SYS_ID_LEN + 1);
-      memset (circuit->u.bc.snpa, 0, ETH_ALEN);
-
-      THREAD_TIMER_OFF (circuit->u.bc.t_send_lan_hello[0]);
-      THREAD_TIMER_OFF (circuit->u.bc.t_send_lan_hello[1]);
-      THREAD_TIMER_OFF (circuit->u.bc.t_run_dr[0]);
-      THREAD_TIMER_OFF (circuit->u.bc.t_run_dr[1]);
-      THREAD_TIMER_OFF (circuit->u.bc.t_refresh_pseudo_lsp[0]);
-      THREAD_TIMER_OFF (circuit->u.bc.t_refresh_pseudo_lsp[1]);
-      circuit->lsp_regenerate_pending[0] = 0;
-      circuit->lsp_regenerate_pending[1] = 0;
-    }
-  else if (circuit->circ_type == CIRCUIT_T_P2P)
-    {
-      isis_delete_adj (circuit->u.p2p.neighbor);
-      circuit->u.p2p.neighbor = NULL;
-      THREAD_TIMER_OFF (circuit->u.p2p.t_send_p2p_hello);
-    }
-
-  /* Cancel all active threads */
-  THREAD_TIMER_OFF (circuit->t_send_csnp[0]);
-  THREAD_TIMER_OFF (circuit->t_send_csnp[1]);
-  THREAD_TIMER_OFF (circuit->t_send_psnp[0]);
-  THREAD_TIMER_OFF (circuit->t_send_psnp[1]);
-  THREAD_OFF (circuit->t_read);
-
-  if (circuit->lsp_queue)
-    {
-      circuit->lsp_queue->del = NULL;
-      list_delete (circuit->lsp_queue);
-      circuit->lsp_queue = NULL;
-    }
-
-  /* send one gratuitous hello to spead up convergence */
-  if (circuit->is_type & IS_LEVEL_1)
-    send_hello (circuit, IS_LEVEL_1);
-  if (circuit->is_type & IS_LEVEL_2)
-    send_hello (circuit, IS_LEVEL_2);
-
-  circuit->upadjcount[0] = 0;
-  circuit->upadjcount[1] = 0;
-
-  /* close the socket */
-  if (circuit->fd)
-    {
-      close (circuit->fd);
-      circuit->fd = 0;
-    }
-
-  if (circuit->rcv_stream != NULL)
-    {
-      stream_free (circuit->rcv_stream);
-      circuit->rcv_stream = NULL;
-    }
-
-  if (circuit->snd_stream != NULL)
-    {
-      stream_free (circuit->snd_stream);
-      circuit->snd_stream = NULL;
-    }
-
-  thread_cancel_event (master, circuit);
-
-  return;
+       if (circuit->state != C_STATE_UP)
+               return;
+
+       /* Clear the flags for all the lsps of the circuit. */
+       isis_circuit_update_all_srmflags(circuit, 0);
+
+       if (circuit->circ_type == CIRCUIT_T_BROADCAST) {
+               /* destroy neighbour lists */
+               if (circuit->u.bc.lan_neighs[0]) {
+                       list_delete(circuit->u.bc.lan_neighs[0]);
+                       circuit->u.bc.lan_neighs[0] = NULL;
+               }
+               if (circuit->u.bc.lan_neighs[1]) {
+                       list_delete(circuit->u.bc.lan_neighs[1]);
+                       circuit->u.bc.lan_neighs[1] = NULL;
+               }
+               /* destroy adjacency databases */
+               if (circuit->u.bc.adjdb[0]) {
+                       circuit->u.bc.adjdb[0]->del = isis_delete_adj;
+                       list_delete(circuit->u.bc.adjdb[0]);
+                       circuit->u.bc.adjdb[0] = NULL;
+               }
+               if (circuit->u.bc.adjdb[1]) {
+                       circuit->u.bc.adjdb[1]->del = isis_delete_adj;
+                       list_delete(circuit->u.bc.adjdb[1]);
+                       circuit->u.bc.adjdb[1] = NULL;
+               }
+               if (circuit->u.bc.is_dr[0]) {
+                       isis_dr_resign(circuit, 1);
+                       circuit->u.bc.is_dr[0] = 0;
+               }
+               memset(circuit->u.bc.l1_desig_is, 0, ISIS_SYS_ID_LEN + 1);
+               if (circuit->u.bc.is_dr[1]) {
+                       isis_dr_resign(circuit, 2);
+                       circuit->u.bc.is_dr[1] = 0;
+               }
+               memset(circuit->u.bc.l2_desig_is, 0, ISIS_SYS_ID_LEN + 1);
+               memset(circuit->u.bc.snpa, 0, ETH_ALEN);
+
+               THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[0]);
+               THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[1]);
+               THREAD_TIMER_OFF(circuit->u.bc.t_run_dr[0]);
+               THREAD_TIMER_OFF(circuit->u.bc.t_run_dr[1]);
+               THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[0]);
+               THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[1]);
+               circuit->lsp_regenerate_pending[0] = 0;
+               circuit->lsp_regenerate_pending[1] = 0;
+       } else if (circuit->circ_type == CIRCUIT_T_P2P) {
+               isis_delete_adj(circuit->u.p2p.neighbor);
+               circuit->u.p2p.neighbor = NULL;
+               THREAD_TIMER_OFF(circuit->u.p2p.t_send_p2p_hello);
+       }
+
+       /* Cancel all active threads */
+       THREAD_TIMER_OFF(circuit->t_send_csnp[0]);
+       THREAD_TIMER_OFF(circuit->t_send_csnp[1]);
+       THREAD_TIMER_OFF(circuit->t_send_psnp[0]);
+       THREAD_TIMER_OFF(circuit->t_send_psnp[1]);
+       THREAD_OFF(circuit->t_read);
+
+       if (circuit->lsp_queue) {
+               circuit->lsp_queue->del = NULL;
+               list_delete(circuit->lsp_queue);
+               circuit->lsp_queue = NULL;
+       }
+
+       /* send one gratuitous hello to spead up convergence */
+       if (circuit->is_type & IS_LEVEL_1)
+               send_hello(circuit, IS_LEVEL_1);
+       if (circuit->is_type & IS_LEVEL_2)
+               send_hello(circuit, IS_LEVEL_2);
+
+       circuit->upadjcount[0] = 0;
+       circuit->upadjcount[1] = 0;
+
+       /* close the socket */
+       if (circuit->fd) {
+               close(circuit->fd);
+               circuit->fd = 0;
+       }
+
+       if (circuit->rcv_stream != NULL) {
+               stream_free(circuit->rcv_stream);
+               circuit->rcv_stream = NULL;
+       }
+
+       if (circuit->snd_stream != NULL) {
+               stream_free(circuit->snd_stream);
+               circuit->snd_stream = NULL;
+       }
+
+       thread_cancel_event(master, circuit);
+
+       return;
 }
 
-void
-circuit_update_nlpids (struct isis_circuit *circuit)
+void circuit_update_nlpids(struct isis_circuit *circuit)
 {
-  circuit->nlpids.count = 0;
-
-  if (circuit->ip_router)
-    {
-      circuit->nlpids.nlpids[0] = NLPID_IP;
-      circuit->nlpids.count++;
-    }
-  if (circuit->ipv6_router)
-    {
-      circuit->nlpids.nlpids[circuit->nlpids.count] = NLPID_IPV6;
-      circuit->nlpids.count++;
-    }
-  return;
+       circuit->nlpids.count = 0;
+
+       if (circuit->ip_router) {
+               circuit->nlpids.nlpids[0] = NLPID_IP;
+               circuit->nlpids.count++;
+       }
+       if (circuit->ipv6_router) {
+               circuit->nlpids.nlpids[circuit->nlpids.count] = NLPID_IPV6;
+               circuit->nlpids.count++;
+       }
+       return;
 }
 
-void
-isis_circuit_print_vty (struct isis_circuit *circuit, struct vty *vty,
-                        char detail)
+void isis_circuit_print_vty(struct isis_circuit *circuit, struct vty *vty,
+                           char detail)
 {
-  if (detail == ISIS_UI_LEVEL_BRIEF)
-    {
-      vty_out (vty, "  %-12s", circuit->interface->name);
-      vty_out (vty, "0x%-7x", circuit->circuit_id);
-      vty_out (vty, "%-9s", circuit_state2string (circuit->state));
-      vty_out (vty, "%-9s", circuit_type2string (circuit->circ_type));
-      vty_out (vty, "%-9s", circuit_t2string (circuit->is_type));
-      vty_out (vty, "\n");
-    }
-
-  if (detail == ISIS_UI_LEVEL_DETAIL)
-    {
-      struct listnode *node;
-      struct prefix *ip_addr;
-      char buf[BUFSIZ];
-
-      vty_out (vty, "  Interface: %s", circuit->interface->name);
-      vty_out (vty, ", State: %s", circuit_state2string (circuit->state));
-      if (circuit->is_passive)
-        vty_out (vty, ", Passive");
-      else
-        vty_out (vty, ", Active");
-      vty_out (vty, ", Circuit Id: 0x%x", circuit->circuit_id);
-      vty_out (vty, "\n");
-      vty_out (vty, "    Type: %s", circuit_type2string (circuit->circ_type));
-      vty_out (vty, ", Level: %s", circuit_t2string (circuit->is_type));
-      if (circuit->circ_type == CIRCUIT_T_BROADCAST)
-        vty_out (vty, ", SNPA: %-10s", snpa_print (circuit->u.bc.snpa));
-      vty_out (vty, "\n");
-      if (circuit->is_type & IS_LEVEL_1)
-        {
-          vty_out (vty, "    Level-1 Information:\n");
-          if (circuit->area->newmetric)
-            vty_out (vty, "      Metric: %d", circuit->te_metric[0]);
-          else
-            vty_out (vty, "      Metric: %d",
-                     circuit->metric[0]);
-          if (!circuit->is_passive)
-            {
-              vty_out (vty, ", Active neighbors: %u\n",
-                       circuit->upadjcount[0]);
-              vty_out (vty, "      Hello interval: %u, "
-                            "Holddown count: %u %s\n",
-                       circuit->hello_interval[0],
-                       circuit->hello_multiplier[0],
-                       (circuit->pad_hellos ? "(pad)" : "(no-pad)"));
-              vty_out (vty, "      CNSP interval: %u, "
-                            "PSNP interval: %u\n",
-                       circuit->csnp_interval[0],
-                       circuit->psnp_interval[0]);
-              if (circuit->circ_type == CIRCUIT_T_BROADCAST)
-                vty_out (vty, "      LAN Priority: %u, %s\n",
-                         circuit->priority[0],
-                         (circuit->u.bc.is_dr[0] ? "is DIS" : "is not DIS"));
-            }
-          else
-            {
-              vty_out (vty, "\n");
-            }
-        }
-      if (circuit->is_type & IS_LEVEL_2)
-        {
-          vty_out (vty, "    Level-2 Information:\n");
-          if (circuit->area->newmetric)
-            vty_out (vty, "      Metric: %d", circuit->te_metric[1]);
-          else
-            vty_out (vty, "      Metric: %d",
-                     circuit->metric[1]);
-          if (!circuit->is_passive)
-            {
-              vty_out (vty, ", Active neighbors: %u\n",
-                       circuit->upadjcount[1]);
-              vty_out (vty, "      Hello interval: %u, "
-                            "Holddown count: %u %s\n",
-                       circuit->hello_interval[1],
-                       circuit->hello_multiplier[1],
-                       (circuit->pad_hellos ? "(pad)" : "(no-pad)"));
-              vty_out (vty, "      CNSP interval: %u, "
-                            "PSNP interval: %u\n",
-                       circuit->csnp_interval[1],
-                       circuit->psnp_interval[1]);
-              if (circuit->circ_type == CIRCUIT_T_BROADCAST)
-                vty_out (vty, "      LAN Priority: %u, %s\n",
-                         circuit->priority[1],
-                         (circuit->u.bc.is_dr[1] ? "is DIS" : "is not DIS"));
-            }
-          else
-            {
-              vty_out (vty, "\n");
-            }
-        }
-      if (circuit->ip_addrs && listcount (circuit->ip_addrs) > 0)
-        {
-          vty_out (vty, "    IP Prefix(es):\n");
-          for (ALL_LIST_ELEMENTS_RO (circuit->ip_addrs, node, ip_addr))
-            {
-              prefix2str (ip_addr, buf, sizeof (buf)),
-              vty_out (vty, "      %s\n", buf);
-            }
-        }
-      if (circuit->ipv6_link && listcount(circuit->ipv6_link) > 0)
-        {
-          vty_out (vty, "    IPv6 Link-Locals:\n");
-          for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node, ip_addr))
-            {
-              prefix2str(ip_addr, (char*)buf, BUFSIZ),
-              vty_out (vty, "      %s\n", buf);
-            }
-        }
-      if (circuit->ipv6_non_link && listcount(circuit->ipv6_non_link) > 0)
-        {
-          vty_out (vty, "    IPv6 Prefixes:\n");
-          for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_non_link, node, ip_addr))
-            {
-              prefix2str(ip_addr, (char*)buf, BUFSIZ),
-              vty_out (vty, "      %s\n", buf);
-            }
-        }
-
-      vty_out (vty, "\n");
-    }
-  return;
+       if (detail == ISIS_UI_LEVEL_BRIEF) {
+               vty_out(vty, "  %-12s", circuit->interface->name);
+               vty_out(vty, "0x%-7x", circuit->circuit_id);
+               vty_out(vty, "%-9s", circuit_state2string(circuit->state));
+               vty_out(vty, "%-9s", circuit_type2string(circuit->circ_type));
+               vty_out(vty, "%-9s", circuit_t2string(circuit->is_type));
+               vty_out(vty, "\n");
+       }
+
+       if (detail == ISIS_UI_LEVEL_DETAIL) {
+               struct listnode *node;
+               struct prefix *ip_addr;
+               char buf[BUFSIZ];
+
+               vty_out(vty, "  Interface: %s", circuit->interface->name);
+               vty_out(vty, ", State: %s",
+                       circuit_state2string(circuit->state));
+               if (circuit->is_passive)
+                       vty_out(vty, ", Passive");
+               else
+                       vty_out(vty, ", Active");
+               vty_out(vty, ", Circuit Id: 0x%x", circuit->circuit_id);
+               vty_out(vty, "\n");
+               vty_out(vty, "    Type: %s",
+                       circuit_type2string(circuit->circ_type));
+               vty_out(vty, ", Level: %s", circuit_t2string(circuit->is_type));
+               if (circuit->circ_type == CIRCUIT_T_BROADCAST)
+                       vty_out(vty, ", SNPA: %-10s",
+                               snpa_print(circuit->u.bc.snpa));
+               vty_out(vty, "\n");
+               if (circuit->is_type & IS_LEVEL_1) {
+                       vty_out(vty, "    Level-1 Information:\n");
+                       if (circuit->area->newmetric)
+                               vty_out(vty, "      Metric: %d",
+                                       circuit->te_metric[0]);
+                       else
+                               vty_out(vty, "      Metric: %d",
+                                       circuit->metric[0]);
+                       if (!circuit->is_passive) {
+                               vty_out(vty, ", Active neighbors: %u\n",
+                                       circuit->upadjcount[0]);
+                               vty_out(vty,
+                                       "      Hello interval: %u, "
+                                       "Holddown count: %u %s\n",
+                                       circuit->hello_interval[0],
+                                       circuit->hello_multiplier[0],
+                                       (circuit->pad_hellos ? "(pad)"
+                                                            : "(no-pad)"));
+                               vty_out(vty,
+                                       "      CNSP interval: %u, "
+                                       "PSNP interval: %u\n",
+                                       circuit->csnp_interval[0],
+                                       circuit->psnp_interval[0]);
+                               if (circuit->circ_type == CIRCUIT_T_BROADCAST)
+                                       vty_out(vty,
+                                               "      LAN Priority: %u, %s\n",
+                                               circuit->priority[0],
+                                               (circuit->u.bc.is_dr[0]
+                                                        ? "is DIS"
+                                                        : "is not DIS"));
+                       } else {
+                               vty_out(vty, "\n");
+                       }
+               }
+               if (circuit->is_type & IS_LEVEL_2) {
+                       vty_out(vty, "    Level-2 Information:\n");
+                       if (circuit->area->newmetric)
+                               vty_out(vty, "      Metric: %d",
+                                       circuit->te_metric[1]);
+                       else
+                               vty_out(vty, "      Metric: %d",
+                                       circuit->metric[1]);
+                       if (!circuit->is_passive) {
+                               vty_out(vty, ", Active neighbors: %u\n",
+                                       circuit->upadjcount[1]);
+                               vty_out(vty,
+                                       "      Hello interval: %u, "
+                                       "Holddown count: %u %s\n",
+                                       circuit->hello_interval[1],
+                                       circuit->hello_multiplier[1],
+                                       (circuit->pad_hellos ? "(pad)"
+                                                            : "(no-pad)"));
+                               vty_out(vty,
+                                       "      CNSP interval: %u, "
+                                       "PSNP interval: %u\n",
+                                       circuit->csnp_interval[1],
+                                       circuit->psnp_interval[1]);
+                               if (circuit->circ_type == CIRCUIT_T_BROADCAST)
+                                       vty_out(vty,
+                                               "      LAN Priority: %u, %s\n",
+                                               circuit->priority[1],
+                                               (circuit->u.bc.is_dr[1]
+                                                        ? "is DIS"
+                                                        : "is not DIS"));
+                       } else {
+                               vty_out(vty, "\n");
+                       }
+               }
+               if (circuit->ip_addrs && listcount(circuit->ip_addrs) > 0) {
+                       vty_out(vty, "    IP Prefix(es):\n");
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ip_addrs, node,
+                                                 ip_addr)) {
+                               prefix2str(ip_addr, buf, sizeof(buf)),
+                                       vty_out(vty, "      %s\n", buf);
+                       }
+               }
+               if (circuit->ipv6_link && listcount(circuit->ipv6_link) > 0) {
+                       vty_out(vty, "    IPv6 Link-Locals:\n");
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_link, node,
+                                                 ip_addr)) {
+                               prefix2str(ip_addr, (char *)buf, BUFSIZ),
+                                       vty_out(vty, "      %s\n", buf);
+                       }
+               }
+               if (circuit->ipv6_non_link
+                   && listcount(circuit->ipv6_non_link) > 0) {
+                       vty_out(vty, "    IPv6 Prefixes:\n");
+                       for (ALL_LIST_ELEMENTS_RO(circuit->ipv6_non_link, node,
+                                                 ip_addr)) {
+                               prefix2str(ip_addr, (char *)buf, BUFSIZ),
+                                       vty_out(vty, "      %s\n", buf);
+                       }
+               }
+
+               vty_out(vty, "\n");
+       }
+       return;
 }
 
-int
-isis_interface_config_write (struct vty *vty)
+int isis_interface_config_write(struct vty *vty)
 {
-  int write = 0;
-  struct listnode *node, *node2;
-  struct interface *ifp;
-  struct isis_area *area;
-  struct isis_circuit *circuit;
-  int i;
-
-  for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp))
-    {
-      if (ifp->ifindex == IFINDEX_DELETED)
-        continue;
-
-      /* IF name */
-      vty_out (vty, "interface %s\n", ifp->name);
-      write++;
-      /* IF desc */
-      if (ifp->desc)
-        {
-          vty_out (vty, " description %s\n", ifp->desc);
-          write++;
-        }
-      /* ISIS Circuit */
-      for (ALL_LIST_ELEMENTS_RO (isis->area_list, node2, area))
-        {
-          circuit = circuit_lookup_by_ifp (ifp, area->circuit_list);
-          if (circuit == NULL)
-            continue;
-          if (circuit->ip_router)
-            {
-              vty_out (vty, " ip router isis %s\n",area->area_tag);
-              write++;
-            }
-          if (circuit->is_passive)
-            {
-              vty_out (vty, " isis passive\n");
-              write++;
-            }
-          if (circuit->circ_type_config == CIRCUIT_T_P2P)
-            {
-              vty_out (vty, " isis network point-to-point\n");
-              write++;
-            }
-          if (circuit->ipv6_router)
-            {
-              vty_out (vty, " ipv6 router isis %s\n",area->area_tag);
-              write++;
-            }
-
-          /* ISIS - circuit type */
-          if (circuit->is_type == IS_LEVEL_1)
-            {
-              vty_out (vty, " isis circuit-type level-1\n");
-              write++;
-            }
-          else
-            {
-              if (circuit->is_type == IS_LEVEL_2)
-                {
-                  vty_out (vty," isis circuit-type level-2-only\n");
-                  write++;
-                }
-            }
-
-          /* ISIS - CSNP interval */
-          if (circuit->csnp_interval[0] == circuit->csnp_interval[1])
-            {
-              if (circuit->csnp_interval[0] != DEFAULT_CSNP_INTERVAL)
-                {
-                  vty_out (vty, " isis csnp-interval %d\n",
-                           circuit->csnp_interval[0]);
-                  write++;
-                }
-            }
-          else
-          {
-            for (i = 0; i < 2; i++)
-              {
-                if (circuit->csnp_interval[i] != DEFAULT_CSNP_INTERVAL)
-                  {
-                    vty_out (vty, " isis csnp-interval %d level-%d\n",
-                             circuit->csnp_interval[i], i + 1);
-                    write++;
-                  }
-              }
-          }
-
-          /* ISIS - PSNP interval */
-          if (circuit->psnp_interval[0] == circuit->psnp_interval[1])
-            {
-              if (circuit->psnp_interval[0] != DEFAULT_PSNP_INTERVAL)
-                {
-                  vty_out (vty, " isis psnp-interval %d\n",
-                           circuit->psnp_interval[0]);
-                  write++;
-                }
-            }
-          else
-            {
-              for (i = 0; i < 2; i++)
-                {
-                  if (circuit->psnp_interval[i] != DEFAULT_PSNP_INTERVAL)
-                  {
-                    vty_out (vty, " isis psnp-interval %d level-%d\n",
-                             circuit->psnp_interval[i], i + 1);
-                    write++;
-                  }
-                }
-            }
-
-          /* ISIS - Hello padding - Defaults to true so only display if false */
-          if (circuit->pad_hellos == 0)
-            {
-              vty_out (vty, " no isis hello padding\n");
-              write++;
-            }
-
-          /* ISIS - Hello interval */
-          if (circuit->hello_interval[0] == circuit->hello_interval[1])
-            {
-              if (circuit->hello_interval[0] != DEFAULT_HELLO_INTERVAL)
-                {
-                  vty_out (vty, " isis hello-interval %d\n",
-                           circuit->hello_interval[0]);
-                  write++;
-                }
-            }
-          else
-            {
-              for (i = 0; i < 2; i++)
-                {
-                  if (circuit->hello_interval[i] != DEFAULT_HELLO_INTERVAL)
-                    {
-                      vty_out (vty, " isis hello-interval %d level-%d\n",
-                               circuit->hello_interval[i], i + 1);
-                      write++;
-                    }
-                }
-            }
-
-          /* ISIS - Hello Multiplier */
-          if (circuit->hello_multiplier[0] == circuit->hello_multiplier[1])
-            {
-              if (circuit->hello_multiplier[0] != DEFAULT_HELLO_MULTIPLIER)
-                {
-                  vty_out (vty, " isis hello-multiplier %d\n",
-                           circuit->hello_multiplier[0]);
-                  write++;
-                }
-            }
-          else
-            {
-              for (i = 0; i < 2; i++)
-                {
-                  if (circuit->hello_multiplier[i] != DEFAULT_HELLO_MULTIPLIER)
-                    {
-                      vty_out (vty, " isis hello-multiplier %d level-%d\n",
-                               circuit->hello_multiplier[i],i + 1);
-                      write++;
-                    }
-                }
-            }
-
-          /* ISIS - Priority */
-          if (circuit->priority[0] == circuit->priority[1])
-            {
-              if (circuit->priority[0] != DEFAULT_PRIORITY)
-                {
-                  vty_out (vty, " isis priority %d\n",
-                           circuit->priority[0]);
-                  write++;
-                }
-            }
-          else
-            {
-              for (i = 0; i < 2; i++)
-                {
-                  if (circuit->priority[i] != DEFAULT_PRIORITY)
-                    {
-                      vty_out (vty, " isis priority %d level-%d\n",
-                               circuit->priority[i], i + 1);
-                      write++;
-                    }
-                }
-            }
-
-          /* ISIS - Metric */
-          if (circuit->te_metric[0] == circuit->te_metric[1])
-            {
-              if (circuit->te_metric[0] != DEFAULT_CIRCUIT_METRIC)
-                {
-                  vty_out (vty, " isis metric %d\n",circuit->te_metric[0]);
-                  write++;
-                }
-            }
-          else
-            {
-              for (i = 0; i < 2; i++)
-                {
-                  if (circuit->te_metric[i] != DEFAULT_CIRCUIT_METRIC)
-                    {
-                      vty_out (vty, " isis metric %d level-%d\n",
-                               circuit->te_metric[i], i + 1);
-                      write++;
-                    }
-                }
-            }
-          if (circuit->passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5)
-            {
-              vty_out (vty, " isis password md5 %s\n",
-                         circuit->passwd.passwd);
-              write++;
-            }
-          else if (circuit->passwd.type == ISIS_PASSWD_TYPE_CLEARTXT)
-            {
-              vty_out (vty, " isis password clear %s\n",
-                         circuit->passwd.passwd);
-              write++;
-            }
-          write += circuit_write_mt_settings(circuit, vty);
-        }
-      vty_out (vty, "!\n");
-    }
-
-  return write;
+       int write = 0;
+       struct listnode *node, *node2;
+       struct interface *ifp;
+       struct isis_area *area;
+       struct isis_circuit *circuit;
+       int i;
+
+       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp)) {
+               if (ifp->ifindex == IFINDEX_DELETED)
+                       continue;
+
+               /* IF name */
+               vty_out(vty, "interface %s\n", ifp->name);
+               write++;
+               /* IF desc */
+               if (ifp->desc) {
+                       vty_out(vty, " description %s\n", ifp->desc);
+                       write++;
+               }
+               /* ISIS Circuit */
+               for (ALL_LIST_ELEMENTS_RO(isis->area_list, node2, area)) {
+                       circuit =
+                               circuit_lookup_by_ifp(ifp, area->circuit_list);
+                       if (circuit == NULL)
+                               continue;
+                       if (circuit->ip_router) {
+                               vty_out(vty, " ip router isis %s\n",
+                                       area->area_tag);
+                               write++;
+                       }
+                       if (circuit->is_passive) {
+                               vty_out(vty, " isis passive\n");
+                               write++;
+                       }
+                       if (circuit->circ_type_config == CIRCUIT_T_P2P) {
+                               vty_out(vty, " isis network point-to-point\n");
+                               write++;
+                       }
+                       if (circuit->ipv6_router) {
+                               vty_out(vty, " ipv6 router isis %s\n",
+                                       area->area_tag);
+                               write++;
+                       }
+
+                       /* ISIS - circuit type */
+                       if (circuit->is_type == IS_LEVEL_1) {
+                               vty_out(vty, " isis circuit-type level-1\n");
+                               write++;
+                       } else {
+                               if (circuit->is_type == IS_LEVEL_2) {
+                                       vty_out(vty,
+                                               " isis circuit-type level-2-only\n");
+                                       write++;
+                               }
+                       }
+
+                       /* ISIS - CSNP interval */
+                       if (circuit->csnp_interval[0]
+                           == circuit->csnp_interval[1]) {
+                               if (circuit->csnp_interval[0]
+                                   != DEFAULT_CSNP_INTERVAL) {
+                                       vty_out(vty, " isis csnp-interval %d\n",
+                                               circuit->csnp_interval[0]);
+                                       write++;
+                               }
+                       } else {
+                               for (i = 0; i < 2; i++) {
+                                       if (circuit->csnp_interval[i]
+                                           != DEFAULT_CSNP_INTERVAL) {
+                                               vty_out(vty,
+                                                       " isis csnp-interval %d level-%d\n",
+                                                       circuit->csnp_interval
+                                                               [i],
+                                                       i + 1);
+                                               write++;
+                                       }
+                               }
+                       }
+
+                       /* ISIS - PSNP interval */
+                       if (circuit->psnp_interval[0]
+                           == circuit->psnp_interval[1]) {
+                               if (circuit->psnp_interval[0]
+                                   != DEFAULT_PSNP_INTERVAL) {
+                                       vty_out(vty, " isis psnp-interval %d\n",
+                                               circuit->psnp_interval[0]);
+                                       write++;
+                               }
+                       } else {
+                               for (i = 0; i < 2; i++) {
+                                       if (circuit->psnp_interval[i]
+                                           != DEFAULT_PSNP_INTERVAL) {
+                                               vty_out(vty,
+                                                       " isis psnp-interval %d level-%d\n",
+                                                       circuit->psnp_interval
+                                                               [i],
+                                                       i + 1);
+                                               write++;
+                                       }
+                               }
+                       }
+
+                       /* ISIS - Hello padding - Defaults to true so only
+                        * display if false */
+                       if (circuit->pad_hellos == 0) {
+                               vty_out(vty, " no isis hello padding\n");
+                               write++;
+                       }
+
+                       /* ISIS - Hello interval */
+                       if (circuit->hello_interval[0]
+                           == circuit->hello_interval[1]) {
+                               if (circuit->hello_interval[0]
+                                   != DEFAULT_HELLO_INTERVAL) {
+                                       vty_out(vty,
+                                               " isis hello-interval %d\n",
+                                               circuit->hello_interval[0]);
+                                       write++;
+                               }
+                       } else {
+                               for (i = 0; i < 2; i++) {
+                                       if (circuit->hello_interval[i]
+                                           != DEFAULT_HELLO_INTERVAL) {
+                                               vty_out(vty,
+                                                       " isis hello-interval %d level-%d\n",
+                                                       circuit->hello_interval
+                                                               [i],
+                                                       i + 1);
+                                               write++;
+                                       }
+                               }
+                       }
+
+                       /* ISIS - Hello Multiplier */
+                       if (circuit->hello_multiplier[0]
+                           == circuit->hello_multiplier[1]) {
+                               if (circuit->hello_multiplier[0]
+                                   != DEFAULT_HELLO_MULTIPLIER) {
+                                       vty_out(vty,
+                                               " isis hello-multiplier %d\n",
+                                               circuit->hello_multiplier[0]);
+                                       write++;
+                               }
+                       } else {
+                               for (i = 0; i < 2; i++) {
+                                       if (circuit->hello_multiplier[i]
+                                           != DEFAULT_HELLO_MULTIPLIER) {
+                                               vty_out(vty,
+                                                       " isis hello-multiplier %d level-%d\n",
+                                                       circuit->hello_multiplier
+                                                               [i],
+                                                       i + 1);
+                                               write++;
+                                       }
+                               }
+                       }
+
+                       /* ISIS - Priority */
+                       if (circuit->priority[0] == circuit->priority[1]) {
+                               if (circuit->priority[0] != DEFAULT_PRIORITY) {
+                                       vty_out(vty, " isis priority %d\n",
+                                               circuit->priority[0]);
+                                       write++;
+                               }
+                       } else {
+                               for (i = 0; i < 2; i++) {
+                                       if (circuit->priority[i]
+                                           != DEFAULT_PRIORITY) {
+                                               vty_out(vty,
+                                                       " isis priority %d level-%d\n",
+                                                       circuit->priority[i],
+                                                       i + 1);
+                                               write++;
+                                       }
+                               }
+                       }
+
+                       /* ISIS - Metric */
+                       if (circuit->te_metric[0] == circuit->te_metric[1]) {
+                               if (circuit->te_metric[0]
+                                   != DEFAULT_CIRCUIT_METRIC) {
+                                       vty_out(vty, " isis metric %d\n",
+                                               circuit->te_metric[0]);
+                                       write++;
+                               }
+                       } else {
+                               for (i = 0; i < 2; i++) {
+                                       if (circuit->te_metric[i]
+                                           != DEFAULT_CIRCUIT_METRIC) {
+                                               vty_out(vty,
+                                                       " isis metric %d level-%d\n",
+                                                       circuit->te_metric[i],
+                                                       i + 1);
+                                               write++;
+                                       }
+                               }
+                       }
+                       if (circuit->passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5) {
+                               vty_out(vty, " isis password md5 %s\n",
+                                       circuit->passwd.passwd);
+                               write++;
+                       } else if (circuit->passwd.type
+                                  == ISIS_PASSWD_TYPE_CLEARTXT) {
+                               vty_out(vty, " isis password clear %s\n",
+                                       circuit->passwd.passwd);
+                               write++;
+                       }
+                       write += circuit_write_mt_settings(circuit, vty);
+               }
+               vty_out(vty, "!\n");
+       }
+
+       return write;
 }
 
-struct isis_circuit *
-isis_circuit_create (struct isis_area *area, struct interface *ifp)
+struct isis_circuit *isis_circuit_create(struct isis_area *area,
+                                        struct interface *ifp)
 {
-  struct isis_circuit *circuit = circuit_scan_by_ifp (ifp);
-  if (circuit && circuit->area)
-    return NULL;
-  circuit = isis_csm_state_change (ISIS_ENABLE, circuit, area);
-  if (circuit->state != C_STATE_CONF && circuit->state != C_STATE_UP)
-    return circuit;
-  isis_circuit_if_bind (circuit, ifp);
-  return circuit;
+       struct isis_circuit *circuit = circuit_scan_by_ifp(ifp);
+       if (circuit && circuit->area)
+               return NULL;
+       circuit = isis_csm_state_change(ISIS_ENABLE, circuit, area);
+       if (circuit->state != C_STATE_CONF && circuit->state != C_STATE_UP)
+               return circuit;
+       isis_circuit_if_bind(circuit, ifp);
+       return circuit;
 }
 
-void
-isis_circuit_af_set (struct isis_circuit *circuit, bool ip_router, bool ipv6_router)
+void isis_circuit_af_set(struct isis_circuit *circuit, bool ip_router,
+                        bool ipv6_router)
 {
-  struct isis_area *area = circuit->area;
-  bool change = circuit->ip_router != ip_router || circuit->ipv6_router != ipv6_router;
-  bool was_enabled = !!circuit->area;
-
-  area->ip_circuits   += ip_router   - circuit->ip_router;
-  area->ipv6_circuits += ipv6_router - circuit->ipv6_router;
-  circuit->ip_router   = ip_router;
-  circuit->ipv6_router = ipv6_router;
-
-  if (!change)
-    return;
-
-  circuit_update_nlpids (circuit);
-
-  if (!ip_router && !ipv6_router)
-    isis_csm_state_change (ISIS_DISABLE, circuit, area);
-  else if (!was_enabled)
-    isis_csm_state_change (ISIS_ENABLE, circuit, area);
-  else
-    lsp_regenerate_schedule(circuit->area, circuit->is_type, 0);
+       struct isis_area *area = circuit->area;
+       bool change = circuit->ip_router != ip_router
+                     || circuit->ipv6_router != ipv6_router;
+       bool was_enabled = !!circuit->area;
+
+       area->ip_circuits += ip_router - circuit->ip_router;
+       area->ipv6_circuits += ipv6_router - circuit->ipv6_router;
+       circuit->ip_router = ip_router;
+       circuit->ipv6_router = ipv6_router;
+
+       if (!change)
+               return;
+
+       circuit_update_nlpids(circuit);
+
+       if (!ip_router && !ipv6_router)
+               isis_csm_state_change(ISIS_DISABLE, circuit, area);
+       else if (!was_enabled)
+               isis_csm_state_change(ISIS_ENABLE, circuit, area);
+       else
+               lsp_regenerate_schedule(circuit->area, circuit->is_type, 0);
 }
 
-int
-isis_circuit_passive_set (struct isis_circuit *circuit, bool passive)
+int isis_circuit_passive_set(struct isis_circuit *circuit, bool passive)
 {
-  if (circuit->is_passive == passive)
-    return 0;
-
-  if (if_is_loopback (circuit->interface) && !passive)
-    return -1;
-
-  if (circuit->state != C_STATE_UP)
-    {
-      circuit->is_passive = passive;
-    }
-  else
-    {
-      struct isis_area *area = circuit->area;
-      isis_csm_state_change (ISIS_DISABLE, circuit, area);
-      circuit->is_passive = passive;
-      isis_csm_state_change (ISIS_ENABLE, circuit, area);
-    }
-
-  return 0;
+       if (circuit->is_passive == passive)
+               return 0;
+
+       if (if_is_loopback(circuit->interface) && !passive)
+               return -1;
+
+       if (circuit->state != C_STATE_UP) {
+               circuit->is_passive = passive;
+       } else {
+               struct isis_area *area = circuit->area;
+               isis_csm_state_change(ISIS_DISABLE, circuit, area);
+               circuit->is_passive = passive;
+               isis_csm_state_change(ISIS_ENABLE, circuit, area);
+       }
+
+       return 0;
 }
 
-int
-isis_circuit_metric_set (struct isis_circuit *circuit, int level, int metric)
+int isis_circuit_metric_set(struct isis_circuit *circuit, int level, int metric)
 {
-  assert (level == IS_LEVEL_1 || level == IS_LEVEL_2);
-  if (metric > MAX_WIDE_LINK_METRIC)
-    return -1;
-  if (circuit->area && circuit->area->oldmetric
-      && metric > MAX_NARROW_LINK_METRIC)
-    return -1;
-
-  circuit->te_metric[level - 1] = metric;
-  circuit->metric[level - 1] = metric;
-
-  if (circuit->area)
-    lsp_regenerate_schedule (circuit->area, level, 0);
-  return 0;
+       assert(level == IS_LEVEL_1 || level == IS_LEVEL_2);
+       if (metric > MAX_WIDE_LINK_METRIC)
+               return -1;
+       if (circuit->area && circuit->area->oldmetric
+           && metric > MAX_NARROW_LINK_METRIC)
+               return -1;
+
+       circuit->te_metric[level - 1] = metric;
+       circuit->metric[level - 1] = metric;
+
+       if (circuit->area)
+               lsp_regenerate_schedule(circuit->area, level, 0);
+       return 0;
 }
 
-int
-isis_circuit_passwd_unset (struct isis_circuit *circuit)
+int isis_circuit_passwd_unset(struct isis_circuit *circuit)
 {
-  memset(&circuit->passwd, 0, sizeof(circuit->passwd));
-  return 0;
+       memset(&circuit->passwd, 0, sizeof(circuit->passwd));
+       return 0;
 }
 
-static int
-isis_circuit_passwd_set (struct isis_circuit *circuit, u_char passwd_type, const char *passwd)
+static int isis_circuit_passwd_set(struct isis_circuit *circuit,
+                                  u_char passwd_type, const char *passwd)
 {
-  int len;
+       int len;
 
-  if (!passwd)
-    return -1;
+       if (!passwd)
+               return -1;
 
-  len = strlen(passwd);
-  if (len > 254)
-    return -1;
+       len = strlen(passwd);
+       if (len > 254)
+               return -1;
 
-  circuit->passwd.len = len;
-  strncpy((char *)circuit->passwd.passwd, passwd, 255);
-  circuit->passwd.type = passwd_type;
-  return 0;
+       circuit->passwd.len = len;
+       strncpy((char *)circuit->passwd.passwd, passwd, 255);
+       circuit->passwd.type = passwd_type;
+       return 0;
 }
 
-int
-isis_circuit_passwd_cleartext_set (struct isis_circuit *circuit, const char *passwd)
+int isis_circuit_passwd_cleartext_set(struct isis_circuit *circuit,
+                                     const char *passwd)
 {
-  return isis_circuit_passwd_set (circuit, ISIS_PASSWD_TYPE_CLEARTXT, passwd);
+       return isis_circuit_passwd_set(circuit, ISIS_PASSWD_TYPE_CLEARTXT,
+                                      passwd);
 }
 
-int
-isis_circuit_passwd_hmac_md5_set (struct isis_circuit *circuit, const char *passwd)
+int isis_circuit_passwd_hmac_md5_set(struct isis_circuit *circuit,
+                                    const char *passwd)
 {
-  return isis_circuit_passwd_set (circuit, ISIS_PASSWD_TYPE_HMAC_MD5, passwd);
+       return isis_circuit_passwd_set(circuit, ISIS_PASSWD_TYPE_HMAC_MD5,
+                                      passwd);
 }
 struct cmd_node interface_node = {
-  INTERFACE_NODE,
-  "%s(config-if)# ",
-  1,
+       INTERFACE_NODE, "%s(config-if)# ", 1,
 };
 
-int
-isis_circuit_circ_type_set(struct isis_circuit *circuit, int circ_type)
+int isis_circuit_circ_type_set(struct isis_circuit *circuit, int circ_type)
 {
-  /* Changing the network type to/of loopback or unknown interfaces
-   * is not supported. */
-  if (circ_type == CIRCUIT_T_UNKNOWN
-      || circ_type == CIRCUIT_T_LOOPBACK
-      || circuit->circ_type == CIRCUIT_T_LOOPBACK)
-    {
-      if (circuit->circ_type != circ_type)
-        return -1;
-      else
-        return 0;
-    }
-
-  if (circuit->circ_type == circ_type)
-    return 0;
-
-  if (circuit->state != C_STATE_UP)
-    {
-      circuit->circ_type = circ_type;
-      circuit->circ_type_config = circ_type;
-    }
-  else
-    {
-      struct isis_area *area = circuit->area;
-      if (circ_type == CIRCUIT_T_BROADCAST
-          && !if_is_broadcast(circuit->interface))
-        return -1;
-
-      isis_csm_state_change(ISIS_DISABLE, circuit, area);
-      circuit->circ_type = circ_type;
-      circuit->circ_type_config = circ_type;
-      isis_csm_state_change(ISIS_ENABLE, circuit, area);
-    }
-  return 0;
+       /* Changing the network type to/of loopback or unknown interfaces
+        * is not supported. */
+       if (circ_type == CIRCUIT_T_UNKNOWN || circ_type == CIRCUIT_T_LOOPBACK
+           || circuit->circ_type == CIRCUIT_T_LOOPBACK) {
+               if (circuit->circ_type != circ_type)
+                       return -1;
+               else
+                       return 0;
+       }
+
+       if (circuit->circ_type == circ_type)
+               return 0;
+
+       if (circuit->state != C_STATE_UP) {
+               circuit->circ_type = circ_type;
+               circuit->circ_type_config = circ_type;
+       } else {
+               struct isis_area *area = circuit->area;
+               if (circ_type == CIRCUIT_T_BROADCAST
+                   && !if_is_broadcast(circuit->interface))
+                       return -1;
+
+               isis_csm_state_change(ISIS_DISABLE, circuit, area);
+               circuit->circ_type = circ_type;
+               circuit->circ_type_config = circ_type;
+               isis_csm_state_change(ISIS_ENABLE, circuit, area);
+       }
+       return 0;
 }
 
-int
-isis_circuit_mt_enabled_set (struct isis_circuit *circuit, uint16_t mtid,
-                             bool enabled)
+int isis_circuit_mt_enabled_set(struct isis_circuit *circuit, uint16_t mtid,
+                               bool enabled)
 {
-  struct isis_circuit_mt_setting *setting;
+       struct isis_circuit_mt_setting *setting;
 
-  setting = circuit_get_mt_setting(circuit, mtid);
-  if (setting->enabled != enabled)
-    {
-      setting->enabled = enabled;
-      lsp_regenerate_schedule (circuit->area, IS_LEVEL_1 | IS_LEVEL_2, 0);
-    }
+       setting = circuit_get_mt_setting(circuit, mtid);
+       if (setting->enabled != enabled) {
+               setting->enabled = enabled;
+               lsp_regenerate_schedule(circuit->area, IS_LEVEL_1 | IS_LEVEL_2,
+                                       0);
+       }
 
-  return CMD_SUCCESS;
+       return CMD_SUCCESS;
 }
 
-int
-isis_if_new_hook (struct interface *ifp)
+int isis_if_new_hook(struct interface *ifp)
 {
-  return 0;
+       return 0;
 }
 
-int
-isis_if_delete_hook (struct interface *ifp)
+int isis_if_delete_hook(struct interface *ifp)
 {
-  struct isis_circuit *circuit;
-  /* Clean up the circuit data */
-  if (ifp && ifp->info)
-    {
-      circuit = ifp->info;
-      isis_csm_state_change (IF_DOWN_FROM_Z, circuit, circuit->area);
-      isis_csm_state_change (ISIS_DISABLE, circuit, circuit->area);
-    }
-
-  return 0;
+       struct isis_circuit *circuit;
+       /* Clean up the circuit data */
+       if (ifp && ifp->info) {
+               circuit = ifp->info;
+               isis_csm_state_change(IF_DOWN_FROM_Z, circuit, circuit->area);
+               isis_csm_state_change(ISIS_DISABLE, circuit, circuit->area);
+       }
+
+       return 0;
 }
 
-void
-isis_circuit_init ()
+void isis_circuit_init()
 {
-  /* Initialize Zebra interface data structure */
-  if_add_hook (IF_NEW_HOOK, isis_if_new_hook);
-  if_add_hook (IF_DELETE_HOOK, isis_if_delete_hook);
+       /* Initialize Zebra interface data structure */
+       if_add_hook(IF_NEW_HOOK, isis_if_new_hook);
+       if_add_hook(IF_DELETE_HOOK, isis_if_delete_hook);
 
-  /* Install interface node */
-  install_node (&interface_node, isis_interface_config_write);
-  if_cmd_init ();
+       /* Install interface node */
+       install_node(&interface_node, isis_interface_config_write);
+       if_cmd_init();
 
-  isis_vty_init ();
+       isis_vty_init();
 }