]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: retrofit the 'lsp-refresh-interval' command
authorEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 13 Nov 2018 17:41:56 +0000 (18:41 +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 bd6f135cba3b1949311ffea2a236d78f9b875486..48f944e83f2b24255bb8567a898932f86fc991e4 100644 (file)
@@ -631,6 +631,58 @@ void cli_show_isis_lsp_gen_interval(struct vty *vty, struct lyd_node *dnode,
        }
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/refresh-interval
+ */
+DEFPY(lsp_refresh_interval, lsp_refresh_interval_cmd,
+      "lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
+      "LSP refresh interval\n"
+      "LSP refresh interval for Level 1 only\n"
+      "LSP refresh interval for Level 2 only\n"
+      "LSP refresh interval in seconds\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-1",
+                                     NB_OP_MODIFY, val_str);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-2",
+                                     NB_OP_MODIFY, val_str);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_lsp_refresh_interval, no_lsp_refresh_interval_cmd,
+      "no lsp-refresh-interval [level-1|level-2]$level [(1-65235)]",
+      NO_STR
+      "LSP refresh interval\n"
+      "LSP refresh interval for Level 1 only\n"
+      "LSP refresh interval for Level 2 only\n"
+      "LSP refresh interval in seconds\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-1",
+                                     NB_OP_MODIFY, NULL);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-2",
+                                     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);
+       }
+}
+
 void isis_cli_init(void)
 {
        install_element(CONFIG_NODE, &router_isis_cmd);
@@ -659,6 +711,8 @@ void isis_cli_init(void)
 
        install_element(ISIS_NODE, &lsp_gen_interval_cmd);
        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);
 }
 
 #endif /* ifndef FABRICD */
index 878884a3f549d33391345fedf85358436769792d..ee0f17bf91993162bb59c55c8ba5ab4a195624d8 100644 (file)
@@ -45,5 +45,7 @@ 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);
 
 #endif /* ISISD_ISIS_CLI_H_ */
index 32a453f423aad9c4df312ed0e5cb15ac0bddd32f..e08711909ddfc18ec9beb349eaf4306ef381bf1d 100644 (file)
@@ -373,7 +373,16 @@ isis_instance_lsp_refresh_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 refr_int;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       refr_int = yang_dnode_get_uint16(dnode, NULL);
+       area = yang_dnode_get_entry(dnode, true);
+       isis_area_lsp_refresh_set(area, IS_LEVEL_1, refr_int);
+
        return NB_OK;
 }
 
@@ -385,7 +394,16 @@ isis_instance_lsp_refresh_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 refr_int;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       refr_int = yang_dnode_get_uint16(dnode, NULL);
+       area = yang_dnode_get_entry(dnode, true);
+       isis_area_lsp_refresh_set(area, IS_LEVEL_2, refr_int);
+
        return NB_OK;
 }
 
@@ -1863,6 +1881,10 @@ const struct frr_yang_module_info frr_isisd_info = {
                        .xpath = "/frr-isisd:isis/instance/lsp/mtu",
                        .cbs.modify = isis_instance_lsp_mtu_modify,
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval",
+                       .cbs.cli_show = cli_show_isis_lsp_ref_interval,
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
                        .cbs.modify = isis_instance_lsp_refresh_interval_level_1_modify,
index 478c06c756a42912d21ea2a1a12c07eff7432863..4068a87f776e4d6ff01d6a743b93db242d3ed38b 100644 (file)
@@ -655,60 +655,6 @@ DEFUN (no_max_lsp_lifetime,
                                             DEFAULT_LSP_LIFETIME);
 }
 
-int isis_vty_lsp_refresh_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_gen_interval[lvl - 1]) {
-                       vty_out(vty,
-                               "LSP refresh interval %us must be greater than "
-                               "the configured LSP gen interval %us\n",
-                               interval, area->lsp_gen_interval[lvl - 1]);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-               if (interval > (area->max_lsp_lifetime[lvl - 1] - 300)) {
-                       vty_out(vty,
-                               "LSP refresh interval %us must be less than "
-                               "the configured LSP lifetime %us less 300\n",
-                               interval, area->max_lsp_lifetime[lvl - 1]);
-                       return CMD_WARNING_CONFIG_FAILED;
-               }
-       }
-
-       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl) {
-               if (!(lvl & level))
-                       continue;
-               isis_area_lsp_refresh_set(area, lvl, interval);
-       }
-
-       return CMD_SUCCESS;
-}
-
-DEFUN (lsp_refresh_interval,
-       lsp_refresh_interval_cmd,
-       "lsp-refresh-interval (1-65235)",
-       "LSP refresh interval\n"
-       "LSP refresh interval in seconds\n")
-{
-       unsigned int interval = atoi(argv[1]->arg);
-       return isis_vty_lsp_refresh_set(vty, IS_LEVEL_1_AND_2, interval);
-}
-
-DEFUN (no_lsp_refresh_interval,
-       no_lsp_refresh_interval_cmd,
-       "no lsp-refresh-interval [(1-65235)]",
-       NO_STR
-       "LSP refresh interval\n"
-       "LSP refresh interval in seconds\n")
-{
-       return isis_vty_lsp_refresh_set(vty, IS_LEVEL_1_AND_2,
-                                       DEFAULT_MAX_LSP_GEN_INTERVAL);
-}
-
 void isis_vty_init(void)
 {
        install_element(INTERFACE_NODE, &isis_passive_cmd);
@@ -749,9 +695,6 @@ void isis_vty_init(void)
        install_element(ROUTER_NODE, &max_lsp_lifetime_cmd);
        install_element(ROUTER_NODE, &no_max_lsp_lifetime_cmd);
 
-       install_element(ROUTER_NODE, &lsp_refresh_interval_cmd);
-       install_element(ROUTER_NODE, &no_lsp_refresh_interval_cmd);
-
        install_element(ROUTER_NODE, &spf_delay_ietf_cmd);
        install_element(ROUTER_NODE, &no_spf_delay_ietf_cmd);
 
index 0512ea36ca5217ecc2f0105e69f75eb56fdfabfd..b2c4316ace1fed77a158b0129b7d937123e7f686 100644 (file)
@@ -27,7 +27,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);
 
 void isis_vty_daemon_init(void);
 void isis_vty_init(void);
index 5e12c2bc38826c3b2476f7c5031ba5b4468dd30b..13fd4193794cf05f6c43cfa38fc05ac286105bad 100644 (file)
@@ -419,6 +419,62 @@ DEFUN (no_lsp_gen_interval,
        return isis_vty_lsp_gen_interval_set(vty, IS_LEVEL_1_AND_2,
                                             DEFAULT_MIN_LSP_GEN_INTERVAL);
 }
+
+static int
+isis_vty_lsp_refresh_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_gen_interval[lvl - 1]) {
+                       vty_out(vty,
+                               "LSP refresh interval %us must be greater than "
+                               "the configured LSP gen interval %us\n",
+                               interval, area->lsp_gen_interval[lvl - 1]);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+               if (interval > (area->max_lsp_lifetime[lvl - 1] - 300)) {
+                       vty_out(vty,
+                               "LSP refresh interval %us must be less than "
+                               "the configured LSP lifetime %us less 300\n",
+                               interval, area->max_lsp_lifetime[lvl - 1]);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+       }
+
+       for (lvl = IS_LEVEL_1; lvl <= IS_LEVEL_2; ++lvl) {
+               if (!(lvl & level))
+                       continue;
+               isis_area_lsp_refresh_set(area, lvl, interval);
+       }
+
+       return CMD_SUCCESS;
+}
+
+DEFUN (lsp_refresh_interval,
+       lsp_refresh_interval_cmd,
+       "lsp-refresh-interval (1-65235)",
+       "LSP refresh interval\n"
+       "LSP refresh interval in seconds\n")
+{
+       unsigned int interval = atoi(argv[1]->arg);
+       return isis_vty_lsp_refresh_set(vty, IS_LEVEL_1_AND_2, interval);
+}
+
+DEFUN (no_lsp_refresh_interval,
+       no_lsp_refresh_interval_cmd,
+       "no lsp-refresh-interval [(1-65235)]",
+       NO_STR
+       "LSP refresh interval\n"
+       "LSP refresh interval in seconds\n")
+{
+       return isis_vty_lsp_refresh_set(vty, IS_LEVEL_1_AND_2,
+                                       DEFAULT_MAX_LSP_GEN_INTERVAL);
+}
+
 void isis_vty_daemon_init(void)
 {
        install_element(ROUTER_NODE, &fabric_tier_cmd);
@@ -440,4 +496,7 @@ void isis_vty_daemon_init(void)
 
        install_element(ROUTER_NODE, &lsp_gen_interval_cmd);
        install_element(ROUTER_NODE, &no_lsp_gen_interval_cmd);
+
+       install_element(ROUTER_NODE, &lsp_refresh_interval_cmd);
+       install_element(ROUTER_NODE, &no_lsp_refresh_interval_cmd);
 }
index a4302e96dfc67c7579b173c89c0994f69d57a7f3..fe7e72ba579647465f30ce0138790aa249940c6a 100644 (file)
@@ -525,32 +525,6 @@ DEFUN (no_spf_interval_level,
        return CMD_SUCCESS;
 }
 
-DEFUN (lsp_refresh_interval_level,
-       lsp_refresh_interval_level_cmd,
-       "lsp-refresh-interval <level-1|level-2> (1-65235)",
-       "LSP refresh interval\n"
-       "LSP refresh interval for Level 1 only\n"
-       "LSP refresh interval for Level 2 only\n"
-       "LSP refresh interval in seconds\n")
-{
-       uint16_t interval = atoi(argv[2]->arg);
-       return isis_vty_lsp_refresh_set(vty, level_for_arg(argv[1]->text),
-                                       interval);
-}
-
-DEFUN (no_lsp_refresh_interval_level,
-       no_lsp_refresh_interval_level_cmd,
-       "no lsp-refresh-interval <level-1|level-2> [(1-65235)]",
-       NO_STR
-       "LSP refresh interval\n"
-       "LSP refresh interval for Level 1 only\n"
-       "LSP refresh interval for Level 2 only\n"
-       "LSP refresh interval in seconds\n")
-{
-       return isis_vty_lsp_refresh_set(vty, level_for_arg(argv[2]->text),
-                                       DEFAULT_MAX_LSP_GEN_INTERVAL);
-}
-
 void isis_vty_daemon_init(void)
 {
        install_element(INTERFACE_NODE, &isis_circuit_type_cmd);
@@ -589,7 +563,4 @@ void isis_vty_daemon_init(void)
 
        install_element(ROUTER_NODE, &spf_interval_level_cmd);
        install_element(ROUTER_NODE, &no_spf_interval_level_cmd);
-
-       install_element(ROUTER_NODE, &lsp_refresh_interval_level_cmd);
-       install_element(ROUTER_NODE, &no_lsp_refresh_interval_level_cmd);
 }