From: Emanuele Di Pascale Date: Tue, 13 Nov 2018 17:37:24 +0000 (+0100) Subject: isisd: retrofit the 'lsp-gen-interval' command X-Git-Tag: frr-7.1-dev~81^2~50 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=1d6fe72e12e0e42189de1c747c2069eab0e80772;p=mirror%2Ffrr.git isisd: retrofit the 'lsp-gen-interval' command Signed-off-by: Emanuele Di Pascale --- diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c index f1f5bbfec8..bd6f135cba 100644 --- a/isisd/isis_cli.c +++ b/isisd/isis_cli.c @@ -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 */ diff --git a/isisd/isis_cli.h b/isisd/isis_cli.h index b55e5336d5..878884a3f5 100644 --- a/isisd/isis_cli.h +++ b/isisd/isis_cli.h @@ -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_ */ diff --git a/isisd/isis_northbound.c b/isisd/isis_northbound.c index d8474e8819..32a453f423 100644 --- a/isisd/isis_northbound.c +++ b/isisd/isis_northbound.c @@ -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, diff --git a/isisd/isis_vty_common.c b/isisd/isis_vty_common.c index 386d936e5f..478c06c756 100644 --- a/isisd/isis_vty_common.c +++ b/isisd/isis_vty_common.c @@ -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); diff --git a/isisd/isis_vty_common.h b/isisd/isis_vty_common.h index 9d1aeb4d94..0512ea36ca 100644 --- a/isisd/isis_vty_common.h +++ b/isisd/isis_vty_common.h @@ -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); diff --git a/isisd/isis_vty_fabricd.c b/isisd/isis_vty_fabricd.c index 79ad50a3eb..5e12c2bc38 100644 --- a/isisd/isis_vty_fabricd.c +++ b/isisd/isis_vty_fabricd.c @@ -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); } diff --git a/isisd/isis_vty_isisd.c b/isisd/isis_vty_isisd.c index a62618ec88..a4302e96df 100644 --- a/isisd/isis_vty_isisd.c +++ b/isisd/isis_vty_isisd.c @@ -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 (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 [(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 (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);