]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd: retrofit the 'spf-interval' command
authorEmanuele Di Pascale <emanuele@voltanet.io>
Wed, 14 Nov 2018 09:34:41 +0000 (10:34 +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_fabricd.c
isisd/isis_vty_isisd.c

index b66be8f614373a4c113bb3ae70751cf457cd83c3..10bd67248ddfc5184ba6bd62283bd561282ff82a 100644 (file)
@@ -763,6 +763,58 @@ void cli_show_isis_lsp_mtu(struct vty *vty, struct lyd_node *dnode,
        vty_out(vty, " lsp-mtu %s\n", yang_dnode_get_string(dnode, NULL));
 }
 
+/*
+ * XPath: /frr-isisd:isis/instance/spf/minimum-interval
+ */
+DEFPY(spf_interval, spf_interval_cmd,
+      "spf-interval [level-1|level-2]$level (1-120)$val",
+      "Minimum interval between SPF calculations\n"
+      "Set interval for level 1 only\n"
+      "Set interval for level 2 only\n"
+      "Minimum interval between consecutive SPFs in seconds\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(vty, "./spf/minimum-interval/level-1",
+                                     NB_OP_MODIFY, val_str);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./spf/minimum-interval/level-2",
+                                     NB_OP_MODIFY, val_str);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_spf_interval, no_spf_interval_cmd,
+      "no spf-interval [level-1|level-2]$level [(1-120)]",
+      NO_STR
+      "Minimum interval between SPF calculations\n"
+      "Set interval for level 1 only\n"
+      "Set interval for level 2 only\n"
+      "Minimum interval between consecutive SPFs in seconds\n")
+{
+       if (!level || strmatch(level, "level-1"))
+               nb_cli_enqueue_change(vty, "./spf/minimum-interval/level-1",
+                                     NB_OP_MODIFY, NULL);
+       if (!level || strmatch(level, "level-2"))
+               nb_cli_enqueue_change(vty, "./spf/minimum-interval/level-2",
+                                     NB_OP_MODIFY, NULL);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_isis_spf_min_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, " spf-interval %s\n", l1);
+       else {
+               vty_out(vty, " spf-interval level-1 %s\n", l1);
+               vty_out(vty, " spf-interval level-2 %s\n", l2);
+       }
+}
+
 void isis_cli_init(void)
 {
        install_element(CONFIG_NODE, &router_isis_cmd);
@@ -797,6 +849,9 @@ void isis_cli_init(void)
        install_element(ISIS_NODE, &no_max_lsp_lifetime_cmd);
        install_element(ISIS_NODE, &area_lsp_mtu_cmd);
        install_element(ISIS_NODE, &no_area_lsp_mtu_cmd);
+
+       install_element(ISIS_NODE, &spf_interval_cmd);
+       install_element(ISIS_NODE, &no_spf_interval_cmd);
 }
 
 #endif /* ifndef FABRICD */
index 80ef82940a6dff689170a16a8cd37849c30b9227..452a932609352a484723a39ea1870fd181d4372d 100644 (file)
@@ -51,5 +51,7 @@ void cli_show_isis_lsp_max_lifetime(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,
+                                   bool show_defaults);
 
 #endif /* ISISD_ISIS_CLI_H_ */
index 2480a3c2664c9a3012ed69735c493b2cc40555d2..7c19cde670490fb4fb9c28a67cd7e621c2fa087c 100644 (file)
@@ -604,7 +604,14 @@ isis_instance_spf_minimum_interval_level_1_modify(enum nb_event event,
                                                  const struct lyd_node *dnode,
                                                  union nb_resource *resource)
 {
-       /* TODO: implement me. */
+       struct isis_area *area;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       area = yang_dnode_get_entry(dnode, true);
+       area->min_spf_interval[0] = yang_dnode_get_uint16(dnode, NULL);
+
        return NB_OK;
 }
 
@@ -616,7 +623,14 @@ isis_instance_spf_minimum_interval_level_2_modify(enum nb_event event,
                                                  const struct lyd_node *dnode,
                                                  union nb_resource *resource)
 {
-       /* TODO: implement me. */
+       struct isis_area *area;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       area = yang_dnode_get_entry(dnode, true);
+       area->min_spf_interval[1] = yang_dnode_get_uint16(dnode, NULL);
+
        return NB_OK;
 }
 
@@ -1993,6 +2007,10 @@ const struct frr_yang_module_info frr_isisd_info = {
                        .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn",
                        .cbs.modify = isis_instance_spf_ietf_backoff_delay_time_to_learn_modify,
                },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/minimum-interval",
+                       .cbs.cli_show = cli_show_isis_spf_min_interval,
+               },
                {
                        .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-1",
                        .cbs.modify = isis_instance_spf_minimum_interval_level_1_modify,
index d9a0b52f980ba805a53c59f2de74161bd9c595ce..4e9bba89103a65deca40864992c392934ee8c315 100644 (file)
@@ -452,36 +452,6 @@ DEFUN (area_purge_originator,
        return CMD_SUCCESS;
 }
 
-DEFUN (spf_interval,
-       spf_interval_cmd,
-       "spf-interval (1-120)",
-       "Minimum interval between SPF calculations\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-       uint16_t interval = atoi(argv[1]->arg);
-
-       area->min_spf_interval[0] = interval;
-       area->min_spf_interval[1] = interval;
-
-       return CMD_SUCCESS;
-}
-
-DEFUN (no_spf_interval,
-       no_spf_interval_cmd,
-       "no spf-interval [(1-120)]",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-
-       area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
-       area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
-
-       return CMD_SUCCESS;
-}
-
 DEFUN (no_spf_delay_ietf,
        no_spf_delay_ietf_cmd,
        "no spf-delay-ietf",
@@ -571,9 +541,6 @@ void isis_vty_init(void)
 
        install_element(ROUTER_NODE, &area_purge_originator_cmd);
 
-       install_element(ROUTER_NODE, &spf_interval_cmd);
-       install_element(ROUTER_NODE, &no_spf_interval_cmd);
-
        install_element(ROUTER_NODE, &spf_delay_ietf_cmd);
        install_element(ROUTER_NODE, &no_spf_delay_ietf_cmd);
 
index a763925ffc6e1ab499400f8990340ad8f3ebfe20..b29b3910b11f69be89c4d7cb6bd3ddb679e36994 100644 (file)
@@ -544,6 +544,35 @@ DEFUN (no_max_lsp_lifetime,
                                             DEFAULT_LSP_LIFETIME);
 }
 
+DEFUN (spf_interval,
+       spf_interval_cmd,
+       "spf-interval (1-120)",
+       "Minimum interval between SPF calculations\n"
+       "Minimum interval between consecutive SPFs in seconds\n")
+{
+       VTY_DECLVAR_CONTEXT(isis_area, area);
+       uint16_t interval = atoi(argv[1]->arg);
+
+       area->min_spf_interval[0] = interval;
+       area->min_spf_interval[1] = interval;
+
+       return CMD_SUCCESS;
+}
+
+DEFUN (no_spf_interval,
+       no_spf_interval_cmd,
+       "no spf-interval [(1-120)]",
+       NO_STR
+       "Minimum interval between SPF calculations\n"
+       "Minimum interval between consecutive SPFs in seconds\n")
+{
+       VTY_DECLVAR_CONTEXT(isis_area, area);
+
+       area->min_spf_interval[0] = MINIMUM_SPF_INTERVAL;
+       area->min_spf_interval[1] = MINIMUM_SPF_INTERVAL;
+
+       return CMD_SUCCESS;
+}
 
 static int isis_vty_lsp_mtu_set(struct vty *vty, unsigned int lsp_mtu)
 {
@@ -622,4 +651,7 @@ void isis_vty_daemon_init(void)
 
        install_element(ROUTER_NODE, &area_lsp_mtu_cmd);
        install_element(ROUTER_NODE, &no_area_lsp_mtu_cmd);
+
+       install_element(ROUTER_NODE, &spf_interval_cmd);
+       install_element(ROUTER_NODE, &no_spf_interval_cmd);
 }
index 65248c34e3819a3094e915ad5ef79267e4165e22..cc2ffb3a33a97fee3be6f5660986830ccb9df8ed 100644 (file)
@@ -465,39 +465,6 @@ DEFUN (no_psnp_interval_level,
        return CMD_SUCCESS;
 }
 
-DEFUN (spf_interval_level,
-       spf_interval_level_cmd,
-       "spf-interval <level-1|level-2> (1-120)",
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 1 only\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-       uint16_t interval = atoi(argv[2]->arg);
-
-       area->min_spf_interval[level_for_arg(argv[1]->text)] = interval;
-
-       return CMD_SUCCESS;
-}
-
-DEFUN (no_spf_interval_level,
-       no_spf_interval_level_cmd,
-       "no spf-interval <level-1|level-2> [(1-120)]",
-       NO_STR
-       "Minimum interval between SPF calculations\n"
-       "Set interval for level 1 only\n"
-       "Set interval for level 2 only\n"
-       "Minimum interval between consecutive SPFs in seconds\n")
-{
-       VTY_DECLVAR_CONTEXT(isis_area, area);
-       int level = level_for_arg(argv[1]->text);
-
-       area->min_spf_interval[level] = MINIMUM_SPF_INTERVAL;
-
-       return CMD_SUCCESS;
-}
-
 void isis_vty_daemon_init(void)
 {
        install_element(INTERFACE_NODE, &isis_circuit_type_cmd);
@@ -530,7 +497,4 @@ 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, &spf_interval_level_cmd);
-       install_element(ROUTER_NODE, &no_spf_interval_level_cmd);
 }