]> git.puffer.fish Git - mirror/frr.git/commitdiff
isisd: retrofit the 'lsp-gen-interval' command
authorEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 13 Nov 2018 17:37:24 +0000 (18:37 +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 f1f5bbfec858ca35a564d475aa921dac38c4ab37..bd6f135cba3b1949311ffea2a236d78f9b875486 100644 (file)
@@ -579,6 +579,58 @@ void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
        vty_out(vty, "\n");
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/generation-interval
+ */
+DEFPY(lsp_gen_interval, lsp_gen_interval_cmd,
+      "lsp-gen-interval [level-1|level-2]$level (1-120)$val",
+      "Minimum interval between regenerating same LSP\n"
+      "Set interval for level 1 only\n"
+      "Set interval for level 2 only\n"
+      "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);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-2",
+                                     NB_OP_MODIFY, val_str);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_lsp_gen_interval, no_lsp_gen_interval_cmd,
+      "no lsp-gen-interval [level-1|level-2]$level [(1-120)]",
+      NO_STR
+      "Minimum interval between regenerating same LSP\n"
+      "Set interval for level 1 only\n"
+      "Set interval for level 2 only\n"
+      "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);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-2",
+                                     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);
+       }
+}
+
 void isis_cli_init(void)
 {
        install_element(CONFIG_NODE, &router_isis_cmd);
@@ -604,6 +656,9 @@ void isis_cli_init(void)
        install_element(ISIS_NODE, &area_passwd_cmd);
        install_element(ISIS_NODE, &domain_passwd_cmd);
        install_element(ISIS_NODE, &no_area_passwd_cmd);
+
+       install_element(ISIS_NODE, &lsp_gen_interval_cmd);
+       install_element(ISIS_NODE, &no_lsp_gen_interval_cmd);
 }
 
 #endif /* ifndef FABRICD */
index b55e5336d563bb64dee9b39a242ab0e3abb41767..878884a3f549d33391345fedf85358436769792d 100644 (file)
@@ -43,5 +43,7 @@ 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);
 
 #endif /* ISISD_ISIS_CLI_H_ */
index d8474e88196e6dc5a798079e2b40a06ca2cafd6c..32a453f423aad9c4df312ed0e5cb15ac0bddd32f 100644 (file)
@@ -420,7 +420,16 @@ static int isis_instance_lsp_generation_interval_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 gen_int;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       gen_int = yang_dnode_get_uint16(dnode, NULL);
+       area = yang_dnode_get_entry(dnode, true);
+       area->lsp_gen_interval[0] = gen_int;
+
        return NB_OK;
 }
 
@@ -431,7 +440,16 @@ static int isis_instance_lsp_generation_interval_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 gen_int;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       gen_int = yang_dnode_get_uint16(dnode, NULL);
+       area = yang_dnode_get_entry(dnode, true);
+       area->lsp_gen_interval[1] = gen_int;
+
        return NB_OK;
 }
 
@@ -1861,6 +1879,10 @@ const struct frr_yang_module_info frr_isisd_info = {
                        .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
                        .cbs.modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/generation-interval",
+                       .cbs.cli_show = cli_show_isis_lsp_gen_interval,
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
                        .cbs.modify = isis_instance_lsp_generation_interval_level_1_modify,
index 386d936e5f033d76ca8898231862538176f106c5..478c06c756a42912d21ea2a1a12c07eff7432863 100644 (file)
@@ -499,57 +499,6 @@ DEFUN (area_purge_originator,
        return CMD_SUCCESS;
 }
 
-int isis_vty_lsp_gen_interval_set(struct vty *vty, int level, uint16_t interval)
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-       int lvl;
-
-       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl) {
-               if (!(lvl & level))
-                       continue;
-
-               if (interval >= area->lsp_refresh[lvl - 1]) {
-                       vty_out(vty,
-                               "LSP gen interval %us must be less than "
-                               "the LSP refresh interval %us\n",
-                               interval, area->lsp_refresh[lvl - 1]);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-       }
-
-       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl) {
-               if (!(lvl & level))
-                       continue;
-               area->lsp_gen_interval[lvl - 1] = interval;
-       }
-
-       return CMD_SUCCESS;
-}
-
-DEFUN (lsp_gen_interval,
-       lsp_gen_interval_cmd,
-       "lsp-gen-interval (1-120)",
-       "Minimum interval between regenerating same LSP\n"
-       "Minimum interval in seconds\n")
-{
-       uint16_t interval = atoi(argv[1]->arg);
-
-       return isis_vty_lsp_gen_interval_set(vty, IS_LEVEL_1_AND_2, interval);
-}
-
-DEFUN (no_lsp_gen_interval,
-       no_lsp_gen_interval_cmd,
-       "no lsp-gen-interval [(1-120)]",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Minimum interval in seconds\n")
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-
-       return isis_vty_lsp_gen_interval_set(vty, IS_LEVEL_1_AND_2,
-                                            DEFAULT_MIN_LSP_GEN_INTERVAL);
-}
-
 DEFUN (spf_interval,
        spf_interval_cmd,
        "spf-interval (1-120)",
@@ -794,9 +743,6 @@ void isis_vty_init(void)
 
        install_element(ROUTER_NODE, &area_purge_originator_cmd);
 
-       install_element(ROUTER_NODE, &lsp_gen_interval_cmd);
-       install_element(ROUTER_NODE, &no_lsp_gen_interval_cmd);
-
        install_element(ROUTER_NODE, &spf_interval_cmd);
        install_element(ROUTER_NODE, &no_spf_interval_cmd);
 
index 9d1aeb4d94e35d60bc3d48434fbf128ea4f773b6..0512ea36ca5217ecc2f0105e69f75eb56fdfabfd 100644 (file)
@@ -28,7 +28,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);
 int isis_vty_lsp_refresh_set(struct vty *vty, int level, uint16_t interval);
-int isis_vty_lsp_gen_interval_set(struct vty *vty, int level, uint16_t interval);
 
 void isis_vty_daemon_init(void);
 void isis_vty_init(void);
index 79ad50a3ebe8c526cbf4c7b0775ebb0f1973f279..5e12c2bc38826c3b2476f7c5031ba5b4468dd30b 100644 (file)
@@ -368,6 +368,57 @@ DEFUN (no_domain_passwd,
        return isis_area_passwd_unset(area, IS_LEVEL_2);
 }
 
+static int
+isis_vty_lsp_gen_interval_set(struct vty *vty, int level, uint16_t interval)
+{
+       VTY_DECLVAR_CONTEXT(isis_area, area);
+       int lvl;
+
+       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl) {
+               if (!(lvl & level))
+                       continue;
+
+               if (interval >= area->lsp_refresh[lvl - 1]) {
+                       vty_out(vty,
+                               "LSP gen interval %us must be less than "
+                               "the LSP refresh interval %us\n",
+                               interval, area->lsp_refresh[lvl - 1]);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+       }
+
+       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl) {
+               if (!(lvl & level))
+                       continue;
+               area->lsp_gen_interval[lvl - 1] = interval;
+       }
+
+       return CMD_SUCCESS;
+}
+
+DEFUN (lsp_gen_interval,
+       lsp_gen_interval_cmd,
+       "lsp-gen-interval (1-120)",
+       "Minimum interval between regenerating same LSP\n"
+       "Minimum interval in seconds\n")
+{
+       uint16_t interval = atoi(argv[1]->arg);
+
+       return isis_vty_lsp_gen_interval_set(vty, IS_LEVEL_1_AND_2, interval);
+}
+
+DEFUN (no_lsp_gen_interval,
+       no_lsp_gen_interval_cmd,
+       "no lsp-gen-interval [(1-120)]",
+       NO_STR
+       "Minimum interval between regenerating same LSP\n"
+       "Minimum interval in seconds\n")
+{
+       VTY_DECLVAR_CONTEXT(isis_area, area);
+
+       return isis_vty_lsp_gen_interval_set(vty, IS_LEVEL_1_AND_2,
+                                            DEFAULT_MIN_LSP_GEN_INTERVAL);
+}
 void isis_vty_daemon_init(void)
 {
        install_element(ROUTER_NODE, &fabric_tier_cmd);
@@ -386,4 +437,7 @@ void isis_vty_daemon_init(void)
 
        install_element(ROUTER_NODE, &domain_passwd_cmd);
        install_element(ROUTER_NODE, &no_domain_passwd_cmd);
+
+       install_element(ROUTER_NODE, &lsp_gen_interval_cmd);
+       install_element(ROUTER_NODE, &no_lsp_gen_interval_cmd);
 }
index a62618ec8860a95820cc70a800e0cb6a8405cb96..a4302e96dfc67c7579b173c89c0994f69d57a7f3 100644 (file)
@@ -465,35 +465,6 @@ DEFUN (no_psnp_interval_level,
        return CMD_SUCCESS;
 }
 
-DEFUN (lsp_gen_interval_level,
-       lsp_gen_interval_level_cmd,
-       "lsp-gen-interval <level-1|level-2> (1-120)",
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 1 only\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval in seconds\n")
-{
-       uint16_t interval = atoi(argv[2]->arg);
-
-       return isis_vty_lsp_gen_interval_set(vty, level_for_arg(argv[1]->text),
-                                            interval);
-}
-
-DEFUN (no_lsp_gen_interval_level,
-       no_lsp_gen_interval_level_cmd,
-       "no lsp-gen-interval <level-1|level-2> [(1-120)]",
-       NO_STR
-       "Minimum interval between regenerating same LSP\n"
-       "Set interval for level 1 only\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval in seconds\n")
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-
-       return isis_vty_lsp_gen_interval_set(vty, level_for_arg(argv[2]->text),
-                                            DEFAULT_MIN_LSP_GEN_INTERVAL);
-}
-
 DEFUN (max_lsp_lifetime_level,
        max_lsp_lifetime_level_cmd,
        "max-lsp-lifetime <level-1|level-2> (350-65535)",
@@ -613,9 +584,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, &lsp_gen_interval_level_cmd);
-       install_element(ROUTER_NODE, &no_lsp_gen_interval_level_cmd);
-
        install_element(ROUTER_NODE, &max_lsp_lifetime_level_cmd);
        install_element(ROUTER_NODE, &no_max_lsp_lifetime_level_cmd);