]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: retrofit the 'max-lsp-lifetime' command
authorEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 13 Nov 2018 17:47:00 +0000 (18:47 +0100)
committerEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 18 Dec 2018 14:22:37 +0000 (15:22 +0100)
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
isisd/isis_cli.c
isisd/isis_cli.h
isisd/isis_northbound.c
isisd/isis_vty_common.c
isisd/isis_vty_common.h
isisd/isis_vty_fabricd.c
isisd/isis_vty_isisd.c

index 48f944e83f2b24255bb8567a898932f86fc991e4..d28af98a08d4cbf60d376af16631c5e8edbd009d 100644 (file)
@@ -683,6 +683,58 @@ void cli_show_isis_lsp_ref_interval(struct vty *vty, struct lyd_node *dnode,
        }
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/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"
+      "Maximum LSP lifetime for Level 1 only\n"
+      "Maximum LSP lifetime for Level 2 only\n"
+      "LSP lifetime in seconds\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-1",
+                                     NB_OP_MODIFY, val_str);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-2",
+                                     NB_OP_MODIFY, val_str);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_max_lsp_lifetime, no_max_lsp_lifetime_cmd,
+      "no max-lsp-lifetime [level-1|level-2]$level [(350-65535)]",
+      NO_STR
+      "Maximum LSP lifetime\n"
+      "Maximum LSP lifetime for Level 1 only\n"
+      "Maximum LSP lifetime for Level 2 only\n"
+      "LSP lifetime in seconds\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-1",
+                                     NB_OP_MODIFY, NULL);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-2",
+                                     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)
+{
+       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, " max-lsp-lifetime %s\n", l1);
+       else {
+               vty_out(vty, " max-lsp-lifetime level-1 %s\n", l1);
+               vty_out(vty, " max-lsp-lifetime level-2 %s\n", l2);
+       }
+}
+
 void isis_cli_init(void)
 {
        install_element(CONFIG_NODE, &router_isis_cmd);
@@ -713,6 +765,8 @@ void isis_cli_init(void)
        install_element(ISIS_NODE, &no_lsp_gen_interval_cmd);
        install_element(ISIS_NODE, &lsp_refresh_interval_cmd);
        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);
 }
 
 #endif /* ifndef FABRICD */
index ee0f17bf91993162bb59c55c8ba5ab4a195624d8..a8fc7f1ce45aa5808b2e5b62585f9bce30404d4c 100644 (file)
@@ -47,5 +47,7 @@ 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);
 
 #endif /* ISISD_ISIS_CLI_H_ */
index e08711909ddfc18ec9beb349eaf4306ef381bf1d..11cc9c230245ccf83da3220f8ec277609b5ca18a 100644 (file)
@@ -415,7 +415,16 @@ isis_instance_lsp_maximum_lifetime_level_1_modify(enum nb_event event,
                                                  const struct lyd_node *dnode,
                                                  union nb_resource *resource)
 {
-       /* TODO: implement me. */
+       struct isis_area *area;
+       uint16_t max_lt;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       max_lt = yang_dnode_get_uint16(dnode, NULL);
+       area = yang_dnode_get_entry(dnode, true);
+       isis_area_max_lsp_lifetime_set(area, IS_LEVEL_1, max_lt);
+
        return NB_OK;
 }
 
@@ -427,7 +436,16 @@ isis_instance_lsp_maximum_lifetime_level_2_modify(enum nb_event event,
                                                  const struct lyd_node *dnode,
                                                  union nb_resource *resource)
 {
-       /* TODO: implement me. */
+       struct isis_area *area;
+       uint16_t max_lt;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       max_lt = yang_dnode_get_uint16(dnode, NULL);
+       area = yang_dnode_get_entry(dnode, true);
+       isis_area_max_lsp_lifetime_set(area, IS_LEVEL_2, max_lt);
+
        return NB_OK;
 }
 
@@ -1893,6 +1911,10 @@ const struct frr_yang_module_info frr_isisd_info = {
                        .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",
                        .cbs.modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
index 4068a87f776e4d6ff01d6a743b93db242d3ed38b..03432df4cd25df90ebc8d890bf435f6f67018f0f 100644 (file)
@@ -587,74 +587,6 @@ DEFUN (spf_delay_ietf,
        return CMD_SUCCESS;
 }
 
-int isis_vty_max_lsp_lifetime_set(struct vty *vty, int level, uint16_t interval)
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-       int lvl;
-       uint16_t refresh_interval = interval - 300;
-       int set_refresh_interval[ISIS_LEVELS] = {0, 0};
-
-       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++) {
-               if (!(lvl & level))
-                       continue;
-
-               if (refresh_interval < area->lsp_refresh[lvl - 1]) {
-                       vty_out(vty,
-                               "Level %d Max LSP lifetime %us must be 300s greater than "
-                               "the configured LSP refresh interval %us\n",
-                               lvl, interval, area->lsp_refresh[lvl - 1]);
-                       vty_out(vty,
-                               "Automatically reducing level %d LSP refresh interval "
-                               "to %us\n",
-                               lvl, refresh_interval);
-                       set_refresh_interval[lvl - 1] = 1;
-
-                       if (refresh_interval
-                           <= area->lsp_gen_interval[lvl - 1]) {
-                               vty_out(vty,
-                                       "LSP refresh interval %us must be greater than "
-                                       "the configured LSP gen interval %us\n",
-                                       refresh_interval,
-                                       area->lsp_gen_interval[lvl - 1]);
-                               return CMD_WARNING_CONFIG_FAILED;
-                       }
-               }
-       }
-
-       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++) {
-               if (!(lvl & level))
-                       continue;
-               isis_area_max_lsp_lifetime_set(area, lvl, interval);
-               if (set_refresh_interval[lvl - 1])
-                       isis_area_lsp_refresh_set(area, lvl, refresh_interval);
-       }
-
-       return CMD_SUCCESS;
-}
-
-DEFUN (max_lsp_lifetime,
-       max_lsp_lifetime_cmd,
-       "max-lsp-lifetime (350-65535)",
-       "Maximum LSP lifetime\n"
-       "LSP lifetime in seconds\n")
-{
-       int lifetime = atoi(argv[1]->arg);
-
-       return isis_vty_max_lsp_lifetime_set(vty, IS_LEVEL_1_AND_2, lifetime);
-}
-
-
-DEFUN (no_max_lsp_lifetime,
-       no_max_lsp_lifetime_cmd,
-       "no max-lsp-lifetime [(350-65535)]",
-       NO_STR
-       "Maximum LSP lifetime\n"
-       "LSP lifetime in seconds\n")
-{
-       return isis_vty_max_lsp_lifetime_set(vty, IS_LEVEL_1_AND_2,
-                                            DEFAULT_LSP_LIFETIME);
-}
-
 void isis_vty_init(void)
 {
        install_element(INTERFACE_NODE, &isis_passive_cmd);
@@ -692,9 +624,6 @@ void isis_vty_init(void)
        install_element(ROUTER_NODE, &spf_interval_cmd);
        install_element(ROUTER_NODE, &no_spf_interval_cmd);
 
-       install_element(ROUTER_NODE, &max_lsp_lifetime_cmd);
-       install_element(ROUTER_NODE, &no_max_lsp_lifetime_cmd);
-
        install_element(ROUTER_NODE, &spf_delay_ietf_cmd);
        install_element(ROUTER_NODE, &no_spf_delay_ietf_cmd);
 
index b2c4316ace1fed77a158b0129b7d937123e7f686..297da0e2c1102bef850b079e3d14a12df5035b63 100644 (file)
@@ -26,8 +26,6 @@
 
 struct isis_circuit *isis_circuit_lookup(struct vty *vty);
 
-int isis_vty_max_lsp_lifetime_set(struct vty *vty, int level, uint16_t interval);
-
 void isis_vty_daemon_init(void);
 void isis_vty_init(void);
 
index 13fd4193794cf05f6c43cfa38fc05ac286105bad..a507c0d2441d79ae03bfbbc3557e0298e5a3638c 100644 (file)
@@ -475,6 +475,75 @@ DEFUN (no_lsp_refresh_interval,
                                        DEFAULT_MAX_LSP_GEN_INTERVAL);
 }
 
+static int
+isis_vty_max_lsp_lifetime_set(struct vty *vty, int level, uint16_t interval)
+{
+       VTY_DECLVAR_CONTEXT(isis_area, area);
+       int lvl;
+       uint16_t refresh_interval = interval - 300;
+       int set_refresh_interval[ISIS_LEVELS] = {0, 0};
+
+       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++) {
+               if (!(lvl & level))
+                       continue;
+
+               if (refresh_interval < area->lsp_refresh[lvl - 1]) {
+                       vty_out(vty,
+                               "Level %d Max LSP lifetime %us must be 300s greater than "
+                               "the configured LSP refresh interval %us\n",
+                               lvl, interval, area->lsp_refresh[lvl - 1]);
+                       vty_out(vty,
+                               "Automatically reducing level %d LSP refresh interval "
+                               "to %us\n",
+                               lvl, refresh_interval);
+                       set_refresh_interval[lvl - 1] = 1;
+
+                       if (refresh_interval
+                           <= area->lsp_gen_interval[lvl - 1]) {
+                               vty_out(vty,
+                                       "LSP refresh interval %us must be greater than "
+                                       "the configured LSP gen interval %us\n",
+                                       refresh_interval,
+                                       area->lsp_gen_interval[lvl - 1]);
+                               return CMD_WARNING_CONFIG_FAILED;
+                       }
+               }
+       }
+
+       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; lvl++) {
+               if (!(lvl & level))
+                       continue;
+               isis_area_max_lsp_lifetime_set(area, lvl, interval);
+               if (set_refresh_interval[lvl - 1])
+                       isis_area_lsp_refresh_set(area, lvl, refresh_interval);
+       }
+
+       return CMD_SUCCESS;
+}
+
+DEFUN (max_lsp_lifetime,
+       max_lsp_lifetime_cmd,
+       "max-lsp-lifetime (350-65535)",
+       "Maximum LSP lifetime\n"
+       "LSP lifetime in seconds\n")
+{
+       int lifetime = atoi(argv[1]->arg);
+
+       return isis_vty_max_lsp_lifetime_set(vty, IS_LEVEL_1_AND_2, lifetime);
+}
+
+
+DEFUN (no_max_lsp_lifetime,
+       no_max_lsp_lifetime_cmd,
+       "no max-lsp-lifetime [(350-65535)]",
+       NO_STR
+       "Maximum LSP lifetime\n"
+       "LSP lifetime in seconds\n")
+{
+       return isis_vty_max_lsp_lifetime_set(vty, IS_LEVEL_1_AND_2,
+                                            DEFAULT_LSP_LIFETIME);
+}
+
 void isis_vty_daemon_init(void)
 {
        install_element(ROUTER_NODE, &fabric_tier_cmd);
@@ -499,4 +568,7 @@ void isis_vty_daemon_init(void)
 
        install_element(ROUTER_NODE, &lsp_refresh_interval_cmd);
        install_element(ROUTER_NODE, &no_lsp_refresh_interval_cmd);
+
+       install_element(ROUTER_NODE, &max_lsp_lifetime_cmd);
+       install_element(ROUTER_NODE, &no_max_lsp_lifetime_cmd);
 }
index fe7e72ba579647465f30ce0138790aa249940c6a..65248c34e3819a3094e915ad5ef79267e4165e22 100644 (file)
@@ -465,33 +465,6 @@ DEFUN (no_psnp_interval_level,
        return CMD_SUCCESS;
 }
 
-DEFUN (max_lsp_lifetime_level,
-       max_lsp_lifetime_level_cmd,
-       "max-lsp-lifetime <level-1|level-2> (350-65535)",
-       "Maximum LSP lifetime\n"
-       "Maximum LSP lifetime for Level 1 only\n"
-       "Maximum LSP lifetime for Level 2 only\n"
-       "LSP lifetime in seconds\n")
-{
-       uint16_t lifetime = atoi(argv[2]->arg);
-
-       return isis_vty_max_lsp_lifetime_set(vty, level_for_arg(argv[1]->text),
-                                            lifetime);
-}
-
-DEFUN (no_max_lsp_lifetime_level,
-       no_max_lsp_lifetime_level_cmd,
-       "no max-lsp-lifetime <level-1|level-2> [(350-65535)]",
-       NO_STR
-       "Maximum LSP lifetime\n"
-       "Maximum LSP lifetime for Level 1 only\n"
-       "Maximum LSP lifetime for Level 2 only\n"
-       "LSP lifetime in seconds\n")
-{
-       return isis_vty_max_lsp_lifetime_set(vty, level_for_arg(argv[1]->text),
-                                            DEFAULT_LSP_LIFETIME);
-}
-
 DEFUN (spf_interval_level,
        spf_interval_level_cmd,
        "spf-interval <level-1|level-2> (1-120)",
@@ -558,9 +531,6 @@ void isis_vty_daemon_init(void)
        install_element(INTERFACE_NODE, &psnp_interval_level_cmd);
        install_element(INTERFACE_NODE, &no_psnp_interval_level_cmd);
 
-       install_element(ROUTER_NODE, &max_lsp_lifetime_level_cmd);
-       install_element(ROUTER_NODE, &no_max_lsp_lifetime_level_cmd);
-
        install_element(ROUTER_NODE, &spf_interval_level_cmd);
        install_element(ROUTER_NODE, &no_spf_interval_level_cmd);
 }