]> git.puffer.fish Git - mirror/frr.git/commitdiff
isisd, yang: unified lsp-timers command 6166/head
authorEmanuele Di Pascale <emanuele@voltanet.io>
Mon, 6 Apr 2020 15:05:41 +0000 (17:05 +0200)
committerEmanuele Di Pascale <emanuele@voltanet.io>
Mon, 6 Apr 2020 15:38:27 +0000 (17:38 +0200)
Yang constraints enforced by the northbound callbacks require that
the maximum lifetime be >= than (refresh interval + 300). When we are
moving from one config to another through frr-reload.py, we issue
a number of vtysh -c commands ('no lsp-refresh-interval level-1 500',
'no max-lsp-lifetime level-1 1000'), which reset these parameters to their
default values, respectively 900 and 1200. Depending on the actual
values in the current config, the order in which these commands are sent
might be the wrong one, in that we hit an invalid intermediate state and
make vtysh (and by extension frr-reload.py) return an error.

As a workaround, let's add a one-liner command that sets all these
inter-related parameters in one go, and make isisd display them as a
single line too, so that the diff will be computed as a single command.
The old individual commands are kept to ensure backwards compatibility.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
isisd/isis_cli.c
isisd/isis_nb.c
isisd/isis_nb.h
isisd/isis_nb_config.c
isisd/isisd.c
yang/frr-isisd.yang

index 2483d26833bd79d24933cdc82beada880a7eaccf..156335e544fad0c3d1ae9decbd4f5a24b1642a48 100644 (file)
@@ -640,7 +640,8 @@ void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
 }
 
 /*
- * 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",
@@ -650,11 +651,13 @@ DEFPY(lsp_gen_interval, lsp_gen_interval_cmd,
       "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);
 }
@@ -668,31 +671,20 @@ DEFPY(no_lsp_gen_interval, no_lsp_gen_interval_cmd,
       "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",
@@ -702,10 +694,12 @@ DEFPY(lsp_refresh_interval, lsp_refresh_interval_cmd,
       "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);
@@ -720,32 +714,22 @@ DEFPY(no_lsp_refresh_interval, no_lsp_refresh_interval_cmd,
       "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"
@@ -754,10 +738,12 @@ DEFPY(max_lsp_lifetime, max_lsp_lifetime_cmd,
       "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);
@@ -772,26 +758,125 @@ DEFPY(no_max_lsp_lifetime, no_max_lsp_lifetime_cmd,
       "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);
        }
 }
 
@@ -2001,6 +2086,8 @@ void isis_cli_init(void)
        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);
 
index d84e53324079a2be81dc0794e8c01e5ecee806b7..da4322bd4401d9545cb93d2584cc16c420b89b3c 100644 (file)
@@ -95,55 +95,43 @@ const struct frr_yang_module_info frr_isisd_info = {
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers",
                        .cbs = {
-                               .cli_show = cli_show_isis_lsp_ref_interval,
+                               .cli_show = cli_show_isis_lsp_timers,
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval",
                        .cbs = {
                                .modify = isis_instance_lsp_refresh_interval_level_1_modify,
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
-                       .cbs = {
-                               .modify = isis_instance_lsp_refresh_interval_level_2_modify,
-                       },
-               },
-               {
-                       .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime",
-                       .cbs = {
-                               .cli_show = cli_show_isis_lsp_max_lifetime,
-                       },
-               },
-               {
-                       .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime",
                        .cbs = {
                                .modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers/level-1/generation-interval",
                        .cbs = {
-                               .modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
+                               .modify = isis_instance_lsp_generation_interval_level_1_modify,
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/generation-interval",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval",
                        .cbs = {
-                               .cli_show = cli_show_isis_lsp_gen_interval,
+                               .modify = isis_instance_lsp_refresh_interval_level_2_modify,
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers/level-2/maximum-lifetime",
                        .cbs = {
-                               .modify = isis_instance_lsp_generation_interval_level_1_modify,
+                               .modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
                        },
                },
                {
-                       .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
+                       .xpath = "/frr-isisd:isis/instance/lsp/timers/level-2/generation-interval",
                        .cbs = {
                                .modify = isis_instance_lsp_generation_interval_level_2_modify,
                        },
index 29a2ded0de97d32c55be4fc061cd92fe33880f12..e028dfd11b4e6bed971a18e8774143474b9dab6b 100644 (file)
@@ -427,12 +427,8 @@ void cli_show_isis_area_pwd(struct vty *vty, struct lyd_node *dnode,
                            bool show_defaults);
 void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
                              bool show_defaults);
-void cli_show_isis_lsp_gen_interval(struct vty *vty, struct lyd_node *dnode,
-                                   bool show_defaults);
-void cli_show_isis_lsp_ref_interval(struct vty *vty, struct lyd_node *dnode,
-                                   bool show_defaults);
-void cli_show_isis_lsp_max_lifetime(struct vty *vty, struct lyd_node *dnode,
-                                   bool show_defaults);
+void cli_show_isis_lsp_timers(struct vty *vty, struct lyd_node *dnode,
+                             bool show_defaults);
 void cli_show_isis_lsp_mtu(struct vty *vty, struct lyd_node *dnode,
                           bool show_defaults);
 void cli_show_isis_spf_min_interval(struct vty *vty, struct lyd_node *dnode,
index d14704b4ee18320a11ef0cfb7f77ea001edf97d8..4347c85664a3b9dbccbccb617fc0177836cd5aa4 100644 (file)
@@ -371,7 +371,7 @@ int isis_instance_lsp_mtu_modify(enum nb_event event,
 }
 
 /*
- * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-1
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval
  */
 int isis_instance_lsp_refresh_interval_level_1_modify(
        enum nb_event event, const struct lyd_node *dnode,
@@ -391,7 +391,7 @@ int isis_instance_lsp_refresh_interval_level_1_modify(
 }
 
 /*
- * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval
  */
 int isis_instance_lsp_refresh_interval_level_2_modify(
        enum nb_event event, const struct lyd_node *dnode,
@@ -411,7 +411,7 @@ int isis_instance_lsp_refresh_interval_level_2_modify(
 }
 
 /*
- * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime
  */
 int isis_instance_lsp_maximum_lifetime_level_1_modify(
        enum nb_event event, const struct lyd_node *dnode,
@@ -431,7 +431,7 @@ int isis_instance_lsp_maximum_lifetime_level_1_modify(
 }
 
 /*
- * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-2/maximum-lifetime
  */
 int isis_instance_lsp_maximum_lifetime_level_2_modify(
        enum nb_event event, const struct lyd_node *dnode,
@@ -451,7 +451,7 @@ int isis_instance_lsp_maximum_lifetime_level_2_modify(
 }
 
 /*
- * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-1
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-1/generation-interval
  */
 int isis_instance_lsp_generation_interval_level_1_modify(
        enum nb_event event, const struct lyd_node *dnode,
@@ -471,7 +471,7 @@ int isis_instance_lsp_generation_interval_level_1_modify(
 }
 
 /*
- * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
+ * XPath: /frr-isisd:isis/instance/lsp/timers/level-2/generation-interval
  */
 int isis_instance_lsp_generation_interval_level_2_modify(
        enum nb_event event, const struct lyd_node *dnode,
index 47d2e9faabd96d76bccf439cab964c5709776e32..c61c7f0e0c8ff15a81a7eee7453e5eaa8a2ef9c1 100644 (file)
@@ -137,17 +137,17 @@ struct isis_area *isis_area_create(const char *area_tag)
        enum isis_metric_style default_style;
 
        area->max_lsp_lifetime[0] = yang_get_default_uint16(
-               "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1");
+               "/frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime");
        area->max_lsp_lifetime[1] = yang_get_default_uint16(
-               "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2");
+               "/frr-isisd:isis/instance/lsp/timers/level-2/maximum-lifetime");
        area->lsp_refresh[0] = yang_get_default_uint16(
-               "/frr-isisd:isis/instance/lsp/refresh-interval/level-1");
+               "/frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval");
        area->lsp_refresh[1] = yang_get_default_uint16(
-               "/frr-isisd:isis/instance/lsp/refresh-interval/level-2");
+               "/frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval");
        area->lsp_gen_interval[0] = yang_get_default_uint16(
-               "/frr-isisd:isis/instance/lsp/generation-interval/level-1");
+               "/frr-isisd:isis/instance/lsp/timers/level-1/generation-interval");
        area->lsp_gen_interval[1] = yang_get_default_uint16(
-               "/frr-isisd:isis/instance/lsp/generation-interval/level-2");
+               "/frr-isisd:isis/instance/lsp/timers/level-2/generation-interval");
        area->min_spf_interval[0] = yang_get_default_uint16(
                "/frr-isisd:isis/instance/spf/minimum-interval/level-1");
        area->min_spf_interval[1] = yang_get_default_uint16(
index 8dcc0f97a30d7fce27bb84f7170c27ca3d85628e..57f81892e03ce807e46244c16ecc92cc90032603 100644 (file)
@@ -27,6 +27,11 @@ module frr-isisd {
   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";
@@ -34,7 +39,7 @@ module frr-isisd {
   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
@@ -301,8 +306,8 @@ module frr-isisd {
   }
 
   grouping interface-config {
-    description "Interface configuration grouping";
-
+    description
+      "Interface configuration grouping";
     leaf area-tag {
       type string;
       mandatory true;
@@ -333,8 +338,9 @@ module frr-isisd {
 
     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 {
@@ -490,8 +496,8 @@ module frr-isisd {
 
     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).";
     }
@@ -570,38 +576,50 @@ module frr-isisd {
   }
 
   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";
@@ -610,37 +628,36 @@ module frr-isisd {
             "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
@@ -649,12 +666,14 @@ module frr-isisd {
            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
@@ -662,6 +681,7 @@ module frr-isisd {
            field length different from that for this
            system has been received on this interface.";
       }
+
       leaf max-area-addresses-mismatch {
         type uint32;
         description
@@ -670,26 +690,26 @@ module frr-isisd {
            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;
   }
 
@@ -814,75 +834,75 @@ module frr-isisd {
             "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.";
           }
         }
       }
@@ -1152,6 +1172,7 @@ module frr-isisd {
       description
         "IS-IS interface parameters.";
       uses interface-config;
+
       uses interface-state;
     }
   }