mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 10:49:24 +00:00
isisd: retrofit the 'lsp-gen-interval' command
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
This commit is contained in:
parent
933536e3ab
commit
1d6fe72e12
@ -579,6 +579,58 @@ void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
|
|||||||
vty_out(vty, "\n");
|
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)
|
void isis_cli_init(void)
|
||||||
{
|
{
|
||||||
install_element(CONFIG_NODE, &router_isis_cmd);
|
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, &area_passwd_cmd);
|
||||||
install_element(ISIS_NODE, &domain_passwd_cmd);
|
install_element(ISIS_NODE, &domain_passwd_cmd);
|
||||||
install_element(ISIS_NODE, &no_area_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 */
|
#endif /* ifndef FABRICD */
|
||||||
|
@ -43,5 +43,7 @@ void cli_show_isis_area_pwd(struct vty *vty, struct lyd_node *dnode,
|
|||||||
bool show_defaults);
|
bool show_defaults);
|
||||||
void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
|
void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
|
||||||
bool show_defaults);
|
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_ */
|
#endif /* ISISD_ISIS_CLI_H_ */
|
||||||
|
@ -420,7 +420,16 @@ static int isis_instance_lsp_generation_interval_level_1_modify(
|
|||||||
enum nb_event event, const struct lyd_node *dnode,
|
enum nb_event event, const struct lyd_node *dnode,
|
||||||
union nb_resource *resource)
|
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;
|
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,
|
enum nb_event event, const struct lyd_node *dnode,
|
||||||
union nb_resource *resource)
|
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;
|
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",
|
.xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
|
||||||
.cbs.modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
|
.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",
|
.xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
|
||||||
.cbs.modify = isis_instance_lsp_generation_interval_level_1_modify,
|
.cbs.modify = isis_instance_lsp_generation_interval_level_1_modify,
|
||||||
|
@ -499,57 +499,6 @@ DEFUN (area_purge_originator,
|
|||||||
return CMD_SUCCESS;
|
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,
|
DEFUN (spf_interval,
|
||||||
spf_interval_cmd,
|
spf_interval_cmd,
|
||||||
"spf-interval (1-120)",
|
"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, &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, &spf_interval_cmd);
|
||||||
install_element(ROUTER_NODE, &no_spf_interval_cmd);
|
install_element(ROUTER_NODE, &no_spf_interval_cmd);
|
||||||
|
|
||||||
|
@ -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_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_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_daemon_init(void);
|
||||||
void isis_vty_init(void);
|
void isis_vty_init(void);
|
||||||
|
@ -368,6 +368,57 @@ DEFUN (no_domain_passwd,
|
|||||||
return isis_area_passwd_unset(area, IS_LEVEL_2);
|
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)
|
void isis_vty_daemon_init(void)
|
||||||
{
|
{
|
||||||
install_element(ROUTER_NODE, &fabric_tier_cmd);
|
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, &domain_passwd_cmd);
|
||||||
install_element(ROUTER_NODE, &no_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);
|
||||||
}
|
}
|
||||||
|
@ -465,35 +465,6 @@ DEFUN (no_psnp_interval_level,
|
|||||||
return CMD_SUCCESS;
|
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,
|
DEFUN (max_lsp_lifetime_level,
|
||||||
max_lsp_lifetime_level_cmd,
|
max_lsp_lifetime_level_cmd,
|
||||||
"max-lsp-lifetime <level-1|level-2> (350-65535)",
|
"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, &psnp_interval_level_cmd);
|
||||||
install_element(INTERFACE_NODE, &no_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, &max_lsp_lifetime_level_cmd);
|
||||||
install_element(ROUTER_NODE, &no_max_lsp_lifetime_level_cmd);
|
install_element(ROUTER_NODE, &no_max_lsp_lifetime_level_cmd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user