isisd: API: timers (IIH, CSNP, PSNP)

No setters needed since change of fields doesn't require any
specific action to make it apply.  Just move the CLI defs to isis_vty.c.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index 707d77a..85e4f9c 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -1368,668 +1368,6 @@
 {
   return isis_circuit_passwd_set (circuit, ISIS_PASSWD_TYPE_HMAC_MD5, passwd);
 }
-
-DEFUN (isis_hello_interval,
-       isis_hello_interval_cmd,
-       "isis hello-interval <1-600>",
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 seconds, interval depends on multiplier\n")
-{
-  int interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atoi (argv[0]);
-  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
-    {
-      vty_out (vty, "Invalid hello-interval %d - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_interval[0] = (u_int16_t) interval;
-  circuit->hello_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_interval,
-       no_isis_hello_interval_cmd,
-       "no isis hello-interval",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
-  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_interval,
-       no_isis_hello_interval_arg_cmd,
-       "no isis hello-interval <1-600>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n")
-
-DEFUN (isis_hello_interval_l1,
-       isis_hello_interval_l1_cmd,
-       "isis hello-interval <1-600> level-1",
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-1 IIHs\n")
-{
-  long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atoi (argv[0]);
-  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
-    {
-      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_interval[0] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_interval_l1,
-       no_isis_hello_interval_l1_cmd,
-       "no isis hello-interval level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Specify hello-interval for level-1 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_interval_l1,
-       no_isis_hello_interval_l1_arg_cmd,
-       "no isis hello-interval <1-600> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-1 IIHs\n")
-
-DEFUN (isis_hello_interval_l2,
-       isis_hello_interval_l2_cmd,
-       "isis hello-interval <1-600> level-2",
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-2 IIHs\n")
-{
-  long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atoi (argv[0]);
-  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
-    {
-      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_interval_l2,
-       no_isis_hello_interval_l2_cmd,
-       "no isis hello-interval level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Specify hello-interval for level-2 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_interval_l2,
-       no_isis_hello_interval_l2_arg_cmd,
-       "no isis hello-interval <1-600> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set Hello interval\n"
-       "Hello interval value\n"
-       "Holdtime 1 second, interval depends on multiplier\n"
-       "Specify hello-interval for level-2 IIHs\n")
-
-DEFUN (isis_hello_multiplier,
-       isis_hello_multiplier_cmd,
-       "isis hello-multiplier <2-100>",
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n")
-{
-  int mult;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  mult = atoi (argv[0]);
-  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
-    {
-      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
-               mult, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_multiplier[0] = (u_int16_t) mult;
-  circuit->hello_multiplier[1] = (u_int16_t) mult;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_multiplier,
-       no_isis_hello_multiplier_cmd,
-       "no isis hello-multiplier",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
-  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_multiplier,
-       no_isis_hello_multiplier_arg_cmd,
-       "no isis hello-multiplier <2-100>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n")
-
-DEFUN (isis_hello_multiplier_l1,
-       isis_hello_multiplier_l1_cmd,
-       "isis hello-multiplier <2-100> level-1",
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-1 IIHs\n")
-{
-  int mult;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  mult = atoi (argv[0]);
-  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
-    {
-      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
-               mult, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_multiplier[0] = (u_int16_t) mult;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_multiplier_l1,
-       no_isis_hello_multiplier_l1_cmd,
-       "no isis hello-multiplier level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Specify hello multiplier for level-1 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_multiplier_l1,
-       no_isis_hello_multiplier_l1_arg_cmd,
-       "no isis hello-multiplier <2-100> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-1 IIHs\n")
-
-DEFUN (isis_hello_multiplier_l2,
-       isis_hello_multiplier_l2_cmd,
-       "isis hello-multiplier <2-100> level-2",
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-2 IIHs\n")
-{
-  int mult;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  mult = atoi (argv[0]);
-  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
-    {
-      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
-               mult, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->hello_multiplier[1] = (u_int16_t) mult;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_multiplier_l2,
-       no_isis_hello_multiplier_l2_cmd,
-       "no isis hello-multiplier level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Specify hello multiplier for level-2 IIHs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_isis_hello_multiplier_l2,
-       no_isis_hello_multiplier_l2_arg_cmd,
-       "no isis hello-multiplier <2-100> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set multiplier for Hello holding time\n"
-       "Hello multiplier value\n"
-       "Specify hello multiplier for level-2 IIHs\n")
-
-DEFUN (isis_hello_padding,
-       isis_hello_padding_cmd,
-       "isis hello padding",
-       "IS-IS commands\n"
-       "Add padding to IS-IS hello packets\n"
-       "Pad hello packets\n"
-       "<cr>\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->pad_hellos = 1;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_hello_padding,
-       no_isis_hello_padding_cmd,
-       "no isis hello padding",
-       NO_STR
-       "IS-IS commands\n"
-       "Add padding to IS-IS hello packets\n"
-       "Pad hello packets\n"
-       "<cr>\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->pad_hellos = 0;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (csnp_interval,
-       csnp_interval_cmd,
-       "isis csnp-interval <1-600>",
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->csnp_interval[0] = (u_int16_t) interval;
-  circuit->csnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_csnp_interval,
-       no_csnp_interval_cmd,
-       "no isis csnp-interval",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
-  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_csnp_interval,
-       no_csnp_interval_arg_cmd,
-       "no isis csnp-interval <1-600>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n")
-
-DEFUN (csnp_interval_l1,
-       csnp_interval_l1_cmd,
-       "isis csnp-interval <1-600> level-1",
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-1 CSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->csnp_interval[0] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_csnp_interval_l1,
-       no_csnp_interval_l1_cmd,
-       "no isis csnp-interval level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "Specify interval for level-1 CSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_csnp_interval_l1,
-       no_csnp_interval_l1_arg_cmd,
-       "no isis csnp-interval <1-600> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-1 CSNPs\n")
-
-DEFUN (csnp_interval_l2,
-       csnp_interval_l2_cmd,
-       "isis csnp-interval <1-600> level-2",
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-2 CSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->csnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_csnp_interval_l2,
-       no_csnp_interval_l2_cmd,
-       "no isis csnp-interval level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "Specify interval for level-2 CSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_csnp_interval_l2,
-       no_csnp_interval_l2_arg_cmd,
-       "no isis csnp-interval <1-600> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set CSNP interval in seconds\n"
-       "CSNP interval value\n"
-       "Specify interval for level-2 CSNPs\n")
-
-DEFUN (psnp_interval,
-       psnp_interval_cmd,
-       "isis psnp-interval <1-120>",
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->psnp_interval[0] = (u_int16_t) interval;
-  circuit->psnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_psnp_interval,
-       no_psnp_interval_cmd,
-       "no isis psnp-interval",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
-  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_psnp_interval,
-       no_psnp_interval_arg_cmd,
-       "no isis psnp-interval <1-120>",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n")
-
-DEFUN (psnp_interval_l1,
-       psnp_interval_l1_cmd,
-       "isis psnp-interval <1-120> level-1",
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-1 PSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->psnp_interval[0] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_psnp_interval_l1,
-       no_psnp_interval_l1_cmd,
-       "no isis psnp-interval level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "Specify interval for level-1 PSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_psnp_interval_l1,
-       no_psnp_interval_l1_arg_cmd,
-       "no isis psnp-interval <1-120> level-1",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-1 PSNPs\n")
-
-DEFUN (psnp_interval_l2,
-       psnp_interval_l2_cmd,
-       "isis psnp-interval <1-120> level-2",
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-2 PSNPs\n")
-{
-  unsigned long interval;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  interval = atol (argv[0]);
-  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
-    {
-      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
-               interval, VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-
-  circuit->psnp_interval[1] = (u_int16_t) interval;
-
-  return CMD_SUCCESS;
-}
-
-DEFUN (no_psnp_interval_l2,
-       no_psnp_interval_l2_cmd,
-       "no isis psnp-interval level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "Specify interval for level-2 PSNPs\n")
-{
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
-
-  return CMD_SUCCESS;
-}
-
-ALIAS (no_psnp_interval_l2,
-       no_psnp_interval_l2_arg_cmd,
-       "no isis psnp-interval <1-120> level-2",
-       NO_STR
-       "IS-IS commands\n"
-       "Set PSNP interval in seconds\n"
-       "PSNP interval value\n"
-       "Specify interval for level-2 PSNPs\n")
-
 struct cmd_node interface_node = {
   INTERFACE_NODE,
   "%s(config-if)# ",
@@ -2112,48 +1450,5 @@
   install_element (INTERFACE_NODE, &interface_desc_cmd);
   install_element (INTERFACE_NODE, &no_interface_desc_cmd);
 
-  install_element (INTERFACE_NODE, &isis_hello_interval_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_arg_cmd);
-
-  install_element (INTERFACE_NODE, &isis_hello_multiplier_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_multiplier_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &isis_hello_multiplier_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_arg_cmd);
-
-  install_element (INTERFACE_NODE, &isis_hello_padding_cmd);
-  install_element (INTERFACE_NODE, &no_isis_hello_padding_cmd);
-
-  install_element (INTERFACE_NODE, &csnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_arg_cmd);
-  install_element (INTERFACE_NODE, &csnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &csnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_csnp_interval_l2_arg_cmd);
-
-  install_element (INTERFACE_NODE, &psnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_arg_cmd);
-  install_element (INTERFACE_NODE, &psnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l1_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l1_arg_cmd);
-  install_element (INTERFACE_NODE, &psnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l2_cmd);
-  install_element (INTERFACE_NODE, &no_psnp_interval_l2_arg_cmd);
-
   isis_vty_init ();
 }
diff --git a/isisd/isis_vty.c b/isisd/isis_vty.c
index c6f2465..3dd3682 100644
--- a/isisd/isis_vty.c
+++ b/isisd/isis_vty.c
@@ -694,6 +694,667 @@
        "Specify metric for level-2 routing\n")
 /* end of metrics */
 
+DEFUN (isis_hello_interval,
+       isis_hello_interval_cmd,
+       "isis hello-interval <1-600>",
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 seconds, interval depends on multiplier\n")
+{
+  int interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atoi (argv[0]);
+  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
+    {
+      vty_out (vty, "Invalid hello-interval %d - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_interval[0] = (u_int16_t) interval;
+  circuit->hello_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_interval,
+       no_isis_hello_interval_cmd,
+       "no isis hello-interval",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
+  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_interval,
+       no_isis_hello_interval_arg_cmd,
+       "no isis hello-interval <1-600>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n")
+
+DEFUN (isis_hello_interval_l1,
+       isis_hello_interval_l1_cmd,
+       "isis hello-interval <1-600> level-1",
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-1 IIHs\n")
+{
+  long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atoi (argv[0]);
+  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
+    {
+      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_interval[0] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_interval_l1,
+       no_isis_hello_interval_l1_cmd,
+       "no isis hello-interval level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Specify hello-interval for level-1 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_interval[0] = DEFAULT_HELLO_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_interval_l1,
+       no_isis_hello_interval_l1_arg_cmd,
+       "no isis hello-interval <1-600> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-1 IIHs\n")
+
+DEFUN (isis_hello_interval_l2,
+       isis_hello_interval_l2_cmd,
+       "isis hello-interval <1-600> level-2",
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-2 IIHs\n")
+{
+  long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atoi (argv[0]);
+  if (interval < MIN_HELLO_INTERVAL || interval > MAX_HELLO_INTERVAL)
+    {
+      vty_out (vty, "Invalid hello-interval %ld - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_interval_l2,
+       no_isis_hello_interval_l2_cmd,
+       "no isis hello-interval level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Specify hello-interval for level-2 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_interval[1] = DEFAULT_HELLO_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_interval_l2,
+       no_isis_hello_interval_l2_arg_cmd,
+       "no isis hello-interval <1-600> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set Hello interval\n"
+       "Hello interval value\n"
+       "Holdtime 1 second, interval depends on multiplier\n"
+       "Specify hello-interval for level-2 IIHs\n")
+
+DEFUN (isis_hello_multiplier,
+       isis_hello_multiplier_cmd,
+       "isis hello-multiplier <2-100>",
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n")
+{
+  int mult;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  mult = atoi (argv[0]);
+  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
+    {
+      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
+               mult, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_multiplier[0] = (u_int16_t) mult;
+  circuit->hello_multiplier[1] = (u_int16_t) mult;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_multiplier,
+       no_isis_hello_multiplier_cmd,
+       "no isis hello-multiplier",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
+  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_multiplier,
+       no_isis_hello_multiplier_arg_cmd,
+       "no isis hello-multiplier <2-100>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n")
+
+DEFUN (isis_hello_multiplier_l1,
+       isis_hello_multiplier_l1_cmd,
+       "isis hello-multiplier <2-100> level-1",
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-1 IIHs\n")
+{
+  int mult;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  mult = atoi (argv[0]);
+  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
+    {
+      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
+               mult, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_multiplier[0] = (u_int16_t) mult;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_multiplier_l1,
+       no_isis_hello_multiplier_l1_cmd,
+       "no isis hello-multiplier level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Specify hello multiplier for level-1 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_multiplier[0] = DEFAULT_HELLO_MULTIPLIER;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_multiplier_l1,
+       no_isis_hello_multiplier_l1_arg_cmd,
+       "no isis hello-multiplier <2-100> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-1 IIHs\n")
+
+DEFUN (isis_hello_multiplier_l2,
+       isis_hello_multiplier_l2_cmd,
+       "isis hello-multiplier <2-100> level-2",
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-2 IIHs\n")
+{
+  int mult;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  mult = atoi (argv[0]);
+  if (mult < MIN_HELLO_MULTIPLIER || mult > MAX_HELLO_MULTIPLIER)
+    {
+      vty_out (vty, "Invalid hello-multiplier %d - should be <2-100>%s",
+               mult, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->hello_multiplier[1] = (u_int16_t) mult;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_multiplier_l2,
+       no_isis_hello_multiplier_l2_cmd,
+       "no isis hello-multiplier level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Specify hello multiplier for level-2 IIHs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->hello_multiplier[1] = DEFAULT_HELLO_MULTIPLIER;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_hello_multiplier_l2,
+       no_isis_hello_multiplier_l2_arg_cmd,
+       "no isis hello-multiplier <2-100> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set multiplier for Hello holding time\n"
+       "Hello multiplier value\n"
+       "Specify hello multiplier for level-2 IIHs\n")
+
+DEFUN (isis_hello_padding,
+       isis_hello_padding_cmd,
+       "isis hello padding",
+       "IS-IS commands\n"
+       "Add padding to IS-IS hello packets\n"
+       "Pad hello packets\n"
+       "<cr>\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->pad_hellos = 1;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_hello_padding,
+       no_isis_hello_padding_cmd,
+       "no isis hello padding",
+       NO_STR
+       "IS-IS commands\n"
+       "Add padding to IS-IS hello packets\n"
+       "Pad hello packets\n"
+       "<cr>\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->pad_hellos = 0;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (csnp_interval,
+       csnp_interval_cmd,
+       "isis csnp-interval <1-600>",
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->csnp_interval[0] = (u_int16_t) interval;
+  circuit->csnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_csnp_interval,
+       no_csnp_interval_cmd,
+       "no isis csnp-interval",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
+  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_csnp_interval,
+       no_csnp_interval_arg_cmd,
+       "no isis csnp-interval <1-600>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n")
+
+DEFUN (csnp_interval_l1,
+       csnp_interval_l1_cmd,
+       "isis csnp-interval <1-600> level-1",
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-1 CSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->csnp_interval[0] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_csnp_interval_l1,
+       no_csnp_interval_l1_cmd,
+       "no isis csnp-interval level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "Specify interval for level-1 CSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->csnp_interval[0] = DEFAULT_CSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_csnp_interval_l1,
+       no_csnp_interval_l1_arg_cmd,
+       "no isis csnp-interval <1-600> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-1 CSNPs\n")
+
+DEFUN (csnp_interval_l2,
+       csnp_interval_l2_cmd,
+       "isis csnp-interval <1-600> level-2",
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-2 CSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_CSNP_INTERVAL || interval > MAX_CSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid csnp-interval %lu - should be <1-600>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->csnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_csnp_interval_l2,
+       no_csnp_interval_l2_cmd,
+       "no isis csnp-interval level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "Specify interval for level-2 CSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->csnp_interval[1] = DEFAULT_CSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_csnp_interval_l2,
+       no_csnp_interval_l2_arg_cmd,
+       "no isis csnp-interval <1-600> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set CSNP interval in seconds\n"
+       "CSNP interval value\n"
+       "Specify interval for level-2 CSNPs\n")
+
+DEFUN (psnp_interval,
+       psnp_interval_cmd,
+       "isis psnp-interval <1-120>",
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->psnp_interval[0] = (u_int16_t) interval;
+  circuit->psnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_psnp_interval,
+       no_psnp_interval_cmd,
+       "no isis psnp-interval",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
+  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_psnp_interval,
+       no_psnp_interval_arg_cmd,
+       "no isis psnp-interval <1-120>",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n")
+
+DEFUN (psnp_interval_l1,
+       psnp_interval_l1_cmd,
+       "isis psnp-interval <1-120> level-1",
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-1 PSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->psnp_interval[0] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_psnp_interval_l1,
+       no_psnp_interval_l1_cmd,
+       "no isis psnp-interval level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "Specify interval for level-1 PSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->psnp_interval[0] = DEFAULT_PSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_psnp_interval_l1,
+       no_psnp_interval_l1_arg_cmd,
+       "no isis psnp-interval <1-120> level-1",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-1 PSNPs\n")
+
+DEFUN (psnp_interval_l2,
+       psnp_interval_l2_cmd,
+       "isis psnp-interval <1-120> level-2",
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-2 PSNPs\n")
+{
+  unsigned long interval;
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  interval = atol (argv[0]);
+  if (interval < MIN_PSNP_INTERVAL || interval > MAX_PSNP_INTERVAL)
+    {
+      vty_out (vty, "Invalid psnp-interval %lu - should be <1-120>%s",
+               interval, VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  circuit->psnp_interval[1] = (u_int16_t) interval;
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_psnp_interval_l2,
+       no_psnp_interval_l2_cmd,
+       "no isis psnp-interval level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "Specify interval for level-2 PSNPs\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  circuit->psnp_interval[1] = DEFAULT_PSNP_INTERVAL;
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_psnp_interval_l2,
+       no_psnp_interval_l2_arg_cmd,
+       "no isis psnp-interval <1-120> level-2",
+       NO_STR
+       "IS-IS commands\n"
+       "Set PSNP interval in seconds\n"
+       "PSNP interval value\n"
+       "Specify interval for level-2 PSNPs\n")
+
 static int
 validate_metric_style_narrow (struct vty *vty, struct isis_area *area)
 {
@@ -899,6 +1560,49 @@
   install_element (INTERFACE_NODE, &no_isis_metric_l2_cmd);
   install_element (INTERFACE_NODE, &no_isis_metric_l2_arg_cmd);
 
+  install_element (INTERFACE_NODE, &isis_hello_interval_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_interval_l2_arg_cmd);
+
+  install_element (INTERFACE_NODE, &isis_hello_multiplier_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_multiplier_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &isis_hello_multiplier_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_multiplier_l2_arg_cmd);
+
+  install_element (INTERFACE_NODE, &isis_hello_padding_cmd);
+  install_element (INTERFACE_NODE, &no_isis_hello_padding_cmd);
+
+  install_element (INTERFACE_NODE, &csnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_arg_cmd);
+  install_element (INTERFACE_NODE, &csnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &csnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_csnp_interval_l2_arg_cmd);
+
+  install_element (INTERFACE_NODE, &psnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_arg_cmd);
+  install_element (INTERFACE_NODE, &psnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l1_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l1_arg_cmd);
+  install_element (INTERFACE_NODE, &psnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l2_cmd);
+  install_element (INTERFACE_NODE, &no_psnp_interval_l2_arg_cmd);
+
   install_element (ISIS_NODE, &metric_style_cmd);
   install_element (ISIS_NODE, &no_metric_style_cmd);