}
/*
- * XPath: /frr-isisd:isis/instance/lsp/generation-interval
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/generation-interval
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-2/generation-interval
*/
DEFPY(lsp_gen_interval, lsp_gen_interval_cmd,
"lsp-gen-interval [level-1|level-2]$level (1-120)$val",
"Minimum interval in seconds\n")
{
if (!level || strmatch(level, "level-1"))
- nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-1",
- NB_OP_MODIFY, val_str);
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-1/generation-interval",
+ NB_OP_MODIFY, val_str);
if (!level || strmatch(level, "level-2"))
- nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-2",
- NB_OP_MODIFY, val_str);
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-2/generation-interval",
+ NB_OP_MODIFY, val_str);
return nb_cli_apply_changes(vty, NULL);
}
"Minimum interval in seconds\n")
{
if (!level || strmatch(level, "level-1"))
- nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-1",
- NB_OP_MODIFY, NULL);
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-1/generation-interval",
+ NB_OP_MODIFY, NULL);
if (!level || strmatch(level, "level-2"))
- nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-2",
- NB_OP_MODIFY, NULL);
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-2/generation-interval",
+ NB_OP_MODIFY, NULL);
return nb_cli_apply_changes(vty, NULL);
}
-void cli_show_isis_lsp_gen_interval(struct vty *vty, struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *l1 = yang_dnode_get_string(dnode, "./level-1");
- const char *l2 = yang_dnode_get_string(dnode, "./level-2");
-
- if (strmatch(l1, l2))
- vty_out(vty, " lsp-gen-interval %s\n", l1);
- else {
- vty_out(vty, " lsp-gen-interval level-1 %s\n", l1);
- vty_out(vty, " lsp-gen-interval level-2 %s\n", l2);
- }
-}
-
/*
- * XPath: /frr-isisd:isis/instance/lsp/refresh-interval
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval
*/
DEFPY(lsp_refresh_interval, lsp_refresh_interval_cmd,
"lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
"LSP refresh interval in seconds\n")
{
if (!level || strmatch(level, "level-1"))
- nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-1",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/refresh-interval",
NB_OP_MODIFY, val_str);
if (!level || strmatch(level, "level-2"))
- nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-2",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/refresh-interval",
NB_OP_MODIFY, val_str);
return nb_cli_apply_changes(vty, NULL);
"LSP refresh interval in seconds\n")
{
if (!level || strmatch(level, "level-1"))
- nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-1",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/refresh-interval",
NB_OP_MODIFY, NULL);
if (!level || strmatch(level, "level-2"))
- nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-2",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/refresh-interval",
NB_OP_MODIFY, NULL);
return nb_cli_apply_changes(vty, NULL);
}
-void cli_show_isis_lsp_ref_interval(struct vty *vty, struct lyd_node *dnode,
- bool show_defaults)
-{
- const char *l1 = yang_dnode_get_string(dnode, "./level-1");
- const char *l2 = yang_dnode_get_string(dnode, "./level-2");
-
- if (strmatch(l1, l2))
- vty_out(vty, " lsp-refresh-interval %s\n", l1);
- else {
- vty_out(vty, " lsp-refresh-interval level-1 %s\n", l1);
- vty_out(vty, " lsp-refresh-interval level-2 %s\n", l2);
- }
-}
-
/*
- * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime
*/
+
DEFPY(max_lsp_lifetime, max_lsp_lifetime_cmd,
"max-lsp-lifetime [level-1|level-2]$level (350-65535)$val",
"Maximum LSP lifetime\n"
"LSP lifetime in seconds\n")
{
if (!level || strmatch(level, "level-1"))
- nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-1",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/maximum-lifetime",
NB_OP_MODIFY, val_str);
if (!level || strmatch(level, "level-2"))
- nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-2",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/maximum-lifetime",
NB_OP_MODIFY, val_str);
return nb_cli_apply_changes(vty, NULL);
"LSP lifetime in seconds\n")
{
if (!level || strmatch(level, "level-1"))
- nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-1",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/maximum-lifetime",
NB_OP_MODIFY, NULL);
if (!level || strmatch(level, "level-2"))
- nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-2",
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/maximum-lifetime",
NB_OP_MODIFY, NULL);
return nb_cli_apply_changes(vty, NULL);
}
-void cli_show_isis_lsp_max_lifetime(struct vty *vty, struct lyd_node *dnode,
- bool show_defaults)
+/* unified LSP timers command
+ * XPath: /frr-isisd:isis/instance/lsp/timers
+ */
+
+DEFPY(lsp_timers, lsp_timers_cmd,
+ "lsp-timers [level-1|level-2]$level gen-interval (1-120)$gen refresh-interval (1-65235)$refresh max-lifetime (350-65535)$lifetime",
+ "LSP-related timers\n"
+ "LSP-related timers for Level 1 only\n"
+ "LSP-related timers for Level 2 only\n"
+ "Minimum interval between regenerating same LSP\n"
+ "Generation interval in seconds\n"
+ "LSP refresh interval\n"
+ "LSP refresh interval in seconds\n"
+ "Maximum LSP lifetime\n"
+ "Maximum LSP lifetime in seconds\n")
{
- const char *l1 = yang_dnode_get_string(dnode, "./level-1");
- const char *l2 = yang_dnode_get_string(dnode, "./level-2");
+ if (!level || strmatch(level, "level-1")) {
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-1/generation-interval",
+ NB_OP_MODIFY, gen_str);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/refresh-interval",
+ NB_OP_MODIFY, refresh_str);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/maximum-lifetime",
+ NB_OP_MODIFY, lifetime_str);
+ }
+ if (!level || strmatch(level, "level-2")) {
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-2/generation-interval",
+ NB_OP_MODIFY, gen_str);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/refresh-interval",
+ NB_OP_MODIFY, refresh_str);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/maximum-lifetime",
+ NB_OP_MODIFY, lifetime_str);
+ }
- if (strmatch(l1, l2))
- vty_out(vty, " max-lsp-lifetime %s\n", l1);
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_lsp_timers, no_lsp_timers_cmd,
+ "no lsp-timers [level-1|level-2]$level [gen-interval (1-120) refresh-interval (1-65235) max-lifetime (350-65535)]",
+ NO_STR
+ "LSP-related timers\n"
+ "LSP-related timers for Level 1 only\n"
+ "LSP-related timers for Level 2 only\n"
+ "Minimum interval between regenerating same LSP\n"
+ "Generation interval in seconds\n"
+ "LSP refresh interval\n"
+ "LSP refresh interval in seconds\n"
+ "Maximum LSP lifetime\n"
+ "Maximum LSP lifetime in seconds\n")
+{
+ if (!level || strmatch(level, "level-1")) {
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-1/generation-interval",
+ NB_OP_MODIFY, NULL);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/refresh-interval",
+ NB_OP_MODIFY, NULL);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-1/maximum-lifetime",
+ NB_OP_MODIFY, NULL);
+ }
+ if (!level || strmatch(level, "level-2")) {
+ nb_cli_enqueue_change(
+ vty, "./lsp/timers/level-2/generation-interval",
+ NB_OP_MODIFY, NULL);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/refresh-interval",
+ NB_OP_MODIFY, NULL);
+ nb_cli_enqueue_change(vty,
+ "./lsp/timers/level-2/maximum-lifetime",
+ NB_OP_MODIFY, NULL);
+ }
+
+ return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_isis_lsp_timers(struct vty *vty, struct lyd_node *dnode,
+ bool show_defaults)
+{
+ const char *l1_refresh =
+ yang_dnode_get_string(dnode, "./level-1/refresh-interval");
+ const char *l2_refresh =
+ yang_dnode_get_string(dnode, "./level-2/refresh-interval");
+ const char *l1_lifetime =
+ yang_dnode_get_string(dnode, "./level-1/maximum-lifetime");
+ const char *l2_lifetime =
+ yang_dnode_get_string(dnode, "./level-2/maximum-lifetime");
+ const char *l1_gen =
+ yang_dnode_get_string(dnode, "./level-1/generation-interval");
+ const char *l2_gen =
+ yang_dnode_get_string(dnode, "./level-2/generation-interval");
+ if (strmatch(l1_refresh, l2_refresh)
+ && strmatch(l1_lifetime, l2_lifetime) && strmatch(l1_gen, l2_gen))
+ vty_out(vty,
+ " lsp-timers gen-interval %s refresh-interval %s max-lifetime %s\n",
+ l1_gen, l1_refresh, l1_lifetime);
else {
- vty_out(vty, " max-lsp-lifetime level-1 %s\n", l1);
- vty_out(vty, " max-lsp-lifetime level-2 %s\n", l2);
+ vty_out(vty,
+ " lsp-timers level-1 gen-interval %s refresh-interval %s max-lifetime %s\n",
+ l1_gen, l1_refresh, l1_lifetime);
+ vty_out(vty,
+ " lsp-timers level-2 gen-interval %s refresh-interval %s max-lifetime %s\n",
+ l2_gen, l2_refresh, l2_lifetime);
}
}
install_element(ISIS_NODE, &no_lsp_refresh_interval_cmd);
install_element(ISIS_NODE, &max_lsp_lifetime_cmd);
install_element(ISIS_NODE, &no_max_lsp_lifetime_cmd);
+ install_element(ISIS_NODE, &lsp_timers_cmd);
+ install_element(ISIS_NODE, &no_lsp_timers_cmd);
install_element(ISIS_NODE, &area_lsp_mtu_cmd);
install_element(ISIS_NODE, &no_area_lsp_mtu_cmd);
description
"This module defines a model for managing FRR isisd daemon.";
+ revision 2020-04-06 {
+ description
+ "Group LSP timers in a container so that they can be displayed and
+ configured together";
+ }
revision 2019-12-17 {
description
"Changed default area is-type to level-1-2";
revision 2019-09-09 {
description
"Changed interface references to use
- frr-interface:interface-ref typedef";
+ frr-interface:interface-ref typedef";
}
revision 2018-07-26 {
description
}
grouping interface-config {
- description "Interface configuration grouping";
-
+ description
+ "Interface configuration grouping";
leaf area-tag {
type string;
mandatory true;
leaf bfd-monitoring {
type boolean;
- default false;
- description "Monitor IS-IS peers on this circuit.";
+ default "false";
+ description
+ "Monitor IS-IS peers on this circuit.";
}
container csnp-interval {
leaf network-type {
type network-type;
- default "broadcast";
must "(. = \"point-to-point\") or (. = \"broadcast\")";
+ default "broadcast";
description
"Explicitly configured type of IS-IS circuit (broadcast or point-to-point).";
}
}
grouping adjacency-state {
+ description
+ "Adjacency state";
container adjacencies {
config false;
+ description
+ "This container lists the adjacencies of
+ the local node.";
list adjacency {
+ description
+ "List of operational adjacencies.";
leaf neighbor-sys-type {
type level;
description
"Level capability of neighboring system";
}
+
leaf neighbor-sysid {
type system-id;
description
"The system-id of the neighbor";
}
+
leaf neighbor-extended-circuit-id {
type extended-circuit-id;
description
"Circuit ID of the neighbor";
}
+
leaf neighbor-snpa {
type snpa;
description
"SNPA of the neighbor";
}
+
leaf hold-timer {
type uint16;
- units seconds;
+ units "seconds";
description
"The holding time in seconds for this
adjacency. This value is based on
received hello PDUs and the elapsed
time since receipt.";
}
+
leaf neighbor-priority {
type uint8 {
range "0 .. 127";
"Priority of the neighboring IS for becoming
the DIS.";
}
+
leaf state {
type adj-state-type;
description
"This leaf describes the state of the interface.";
}
-
- description
- "List of operational adjacencies.";
}
- description
- "This container lists the adjacencies of
- the local node.";
}
- description
- "Adjacency state";
}
grouping event-counters {
+ description
+ "Grouping for IS-IS interface event counters";
container event-counters {
config false;
+ description
+ "IS-IS interface event counters.";
leaf adjacency-changes {
type uint32;
description
"The number of times an adjacency state change has
occurred on this interface.";
}
+
leaf adjacency-number {
type uint32;
description
"The number of adjacencies on this interface.";
}
+
leaf init-fails {
type uint32;
description
as PPP NCP failures. Failures to form an
adjacency are counted by adjacency-rejects.";
}
+
leaf adjacency-rejects {
type uint32;
description
"The number of times an adjacency has been
rejected on this interface.";
}
+
leaf id-len-mismatch {
type uint32;
description
field length different from that for this
system has been received on this interface.";
}
+
leaf max-area-addresses-mismatch {
type uint32;
description
max area address field differing from that of
this system.";
}
+
leaf authentication-type-fails {
type uint32;
description
"Number of authentication type mismatches.";
}
+
leaf authentication-fails {
type uint32;
description
"Number of authentication key failures.";
}
- description "IS-IS interface event counters.";
}
- description
- "Grouping for IS-IS interface event counters";
}
grouping interface-state {
description
"IS-IS interface operational state.";
uses adjacency-state;
+
uses event-counters;
}
"MTU of an LSP.";
}
- container refresh-interval {
+ container timers {
description
- "";
- leaf level-1 {
- type uint16;
- units "seconds";
- default "900";
+ "LSP-related timers";
+ container level-1 {
description
- "LSP refresh interval for level-1.";
- }
+ "Level-1 LSP-related timers";
+ leaf refresh-interval {
+ type uint16;
+ units "seconds";
+ default "900";
+ description
+ "LSP refresh interval for level-1.";
+ }
- leaf level-2 {
- type uint16;
- units "seconds";
- default "900";
- description
- "LSP refresh interval for level-2.";
- }
- }
+ leaf maximum-lifetime {
+ type uint16 {
+ range "350..65535";
+ }
+ units "seconds";
+ must ". >= ../refresh-interval + 300";
+ default "1200";
+ description
+ "Maximum LSP lifetime for level-1.";
+ }
- container maximum-lifetime {
- description
- "Maximum LSP lifetime.";
- leaf level-1 {
- type uint16 {
- range "350..65535";
+ leaf generation-interval {
+ type uint16 {
+ range "1..120";
+ }
+ units "seconds";
+ must ". < ../refresh-interval";
+ default "30";
+ description
+ "Minimum time allowed before level-1 LSP retransmissions.";
}
- units "seconds";
- must ". >= ../../refresh-interval/level-1 + 300";
- default "1200";
- description
- "Maximum LSP lifetime for level-1.";
}
- leaf level-2 {
- type uint16 {
- range "350..65535";
- }
- units "seconds";
- must ". >= ../../refresh-interval/level-2 + 300";
- default "1200";
+ container level-2 {
description
- "Maximum LSP lifetime for level-2.";
- }
- }
+ "Level-2 LSP-related timers";
+ leaf refresh-interval {
+ type uint16;
+ units "seconds";
+ default "900";
+ description
+ "LSP refresh interval for level-2.";
+ }
- container generation-interval {
- description
- "Minimum LSP regeneration interval.";
- leaf level-1 {
- type uint16 {
- range "1..120";
+ leaf maximum-lifetime {
+ type uint16 {
+ range "350..65535";
+ }
+ units "seconds";
+ must ". >= ../refresh-interval + 300";
+ default "1200";
+ description
+ "Maximum LSP lifetime for level-2.";
}
- units "seconds";
- must ". < ../../refresh-interval/level-1";
- default "30";
- description
- "Minimum time allowed before level-1 LSP retransmissions.";
- }
- leaf level-2 {
- type uint16 {
- range "1..120";
+ leaf generation-interval {
+ type uint16 {
+ range "1..120";
+ }
+ units "seconds";
+ must ". < ../refresh-interval";
+ default "30";
+ description
+ "Minimum time allowed before level-2 LSP retransmissions.";
}
- units "seconds";
- must ". < ../../refresh-interval/level-2";
- default "30";
- description
- "Minimum time allowed before level-2 LSP retransmissions.";
}
}
}
description
"IS-IS interface parameters.";
uses interface-config;
+
uses interface-state;
}
}