mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 07:48:07 +00:00
isisd, yang: unified lsp-timers command
Yang constraints enforced by the northbound callbacks require that the maximum lifetime be >= than (refresh interval + 300). When we are moving from one config to another through frr-reload.py, we issue a number of vtysh -c commands ('no lsp-refresh-interval level-1 500', 'no max-lsp-lifetime level-1 1000'), which reset these parameters to their default values, respectively 900 and 1200. Depending on the actual values in the current config, the order in which these commands are sent might be the wrong one, in that we hit an invalid intermediate state and make vtysh (and by extension frr-reload.py) return an error. As a workaround, let's add a one-liner command that sets all these inter-related parameters in one go, and make isisd display them as a single line too, so that the diff will be computed as a single command. The old individual commands are kept to ensure backwards compatibility. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
This commit is contained in:
parent
b71f5218db
commit
d2c970ffb2
199
isisd/isis_cli.c
199
isisd/isis_cli.c
@ -640,7 +640,8 @@ void cli_show_isis_domain_pwd(struct vty *vty, struct lyd_node *dnode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/generation-interval
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/generation-interval
|
||||||
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-2/generation-interval
|
||||||
*/
|
*/
|
||||||
DEFPY(lsp_gen_interval, lsp_gen_interval_cmd,
|
DEFPY(lsp_gen_interval, lsp_gen_interval_cmd,
|
||||||
"lsp-gen-interval [level-1|level-2]$level (1-120)$val",
|
"lsp-gen-interval [level-1|level-2]$level (1-120)$val",
|
||||||
@ -650,11 +651,13 @@ DEFPY(lsp_gen_interval, lsp_gen_interval_cmd,
|
|||||||
"Minimum interval in seconds\n")
|
"Minimum interval in seconds\n")
|
||||||
{
|
{
|
||||||
if (!level || strmatch(level, "level-1"))
|
if (!level || strmatch(level, "level-1"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-1",
|
nb_cli_enqueue_change(
|
||||||
NB_OP_MODIFY, val_str);
|
vty, "./lsp/timers/level-1/generation-interval",
|
||||||
|
NB_OP_MODIFY, val_str);
|
||||||
if (!level || strmatch(level, "level-2"))
|
if (!level || strmatch(level, "level-2"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-2",
|
nb_cli_enqueue_change(
|
||||||
NB_OP_MODIFY, val_str);
|
vty, "./lsp/timers/level-2/generation-interval",
|
||||||
|
NB_OP_MODIFY, val_str);
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, NULL);
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
}
|
}
|
||||||
@ -668,31 +671,20 @@ DEFPY(no_lsp_gen_interval, no_lsp_gen_interval_cmd,
|
|||||||
"Minimum interval in seconds\n")
|
"Minimum interval in seconds\n")
|
||||||
{
|
{
|
||||||
if (!level || strmatch(level, "level-1"))
|
if (!level || strmatch(level, "level-1"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-1",
|
nb_cli_enqueue_change(
|
||||||
NB_OP_MODIFY, NULL);
|
vty, "./lsp/timers/level-1/generation-interval",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
if (!level || strmatch(level, "level-2"))
|
if (!level || strmatch(level, "level-2"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/generation-interval/level-2",
|
nb_cli_enqueue_change(
|
||||||
NB_OP_MODIFY, NULL);
|
vty, "./lsp/timers/level-2/generation-interval",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/refresh-interval
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval
|
||||||
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval
|
||||||
*/
|
*/
|
||||||
DEFPY(lsp_refresh_interval, lsp_refresh_interval_cmd,
|
DEFPY(lsp_refresh_interval, lsp_refresh_interval_cmd,
|
||||||
"lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
|
"lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
|
||||||
@ -702,10 +694,12 @@ DEFPY(lsp_refresh_interval, lsp_refresh_interval_cmd,
|
|||||||
"LSP refresh interval in seconds\n")
|
"LSP refresh interval in seconds\n")
|
||||||
{
|
{
|
||||||
if (!level || strmatch(level, "level-1"))
|
if (!level || strmatch(level, "level-1"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-1",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/refresh-interval",
|
||||||
NB_OP_MODIFY, val_str);
|
NB_OP_MODIFY, val_str);
|
||||||
if (!level || strmatch(level, "level-2"))
|
if (!level || strmatch(level, "level-2"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-2",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/refresh-interval",
|
||||||
NB_OP_MODIFY, val_str);
|
NB_OP_MODIFY, val_str);
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, NULL);
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
@ -720,32 +714,22 @@ DEFPY(no_lsp_refresh_interval, no_lsp_refresh_interval_cmd,
|
|||||||
"LSP refresh interval in seconds\n")
|
"LSP refresh interval in seconds\n")
|
||||||
{
|
{
|
||||||
if (!level || strmatch(level, "level-1"))
|
if (!level || strmatch(level, "level-1"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-1",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/refresh-interval",
|
||||||
NB_OP_MODIFY, NULL);
|
NB_OP_MODIFY, NULL);
|
||||||
if (!level || strmatch(level, "level-2"))
|
if (!level || strmatch(level, "level-2"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/refresh-interval/level-2",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/refresh-interval",
|
||||||
NB_OP_MODIFY, NULL);
|
NB_OP_MODIFY, NULL);
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime
|
||||||
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DEFPY(max_lsp_lifetime, max_lsp_lifetime_cmd,
|
DEFPY(max_lsp_lifetime, max_lsp_lifetime_cmd,
|
||||||
"max-lsp-lifetime [level-1|level-2]$level (350-65535)$val",
|
"max-lsp-lifetime [level-1|level-2]$level (350-65535)$val",
|
||||||
"Maximum LSP lifetime\n"
|
"Maximum LSP lifetime\n"
|
||||||
@ -754,10 +738,12 @@ DEFPY(max_lsp_lifetime, max_lsp_lifetime_cmd,
|
|||||||
"LSP lifetime in seconds\n")
|
"LSP lifetime in seconds\n")
|
||||||
{
|
{
|
||||||
if (!level || strmatch(level, "level-1"))
|
if (!level || strmatch(level, "level-1"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-1",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/maximum-lifetime",
|
||||||
NB_OP_MODIFY, val_str);
|
NB_OP_MODIFY, val_str);
|
||||||
if (!level || strmatch(level, "level-2"))
|
if (!level || strmatch(level, "level-2"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-2",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/maximum-lifetime",
|
||||||
NB_OP_MODIFY, val_str);
|
NB_OP_MODIFY, val_str);
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, NULL);
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
@ -772,26 +758,125 @@ DEFPY(no_max_lsp_lifetime, no_max_lsp_lifetime_cmd,
|
|||||||
"LSP lifetime in seconds\n")
|
"LSP lifetime in seconds\n")
|
||||||
{
|
{
|
||||||
if (!level || strmatch(level, "level-1"))
|
if (!level || strmatch(level, "level-1"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-1",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/maximum-lifetime",
|
||||||
NB_OP_MODIFY, NULL);
|
NB_OP_MODIFY, NULL);
|
||||||
if (!level || strmatch(level, "level-2"))
|
if (!level || strmatch(level, "level-2"))
|
||||||
nb_cli_enqueue_change(vty, "./lsp/maximum-lifetime/level-2",
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/maximum-lifetime",
|
||||||
NB_OP_MODIFY, NULL);
|
NB_OP_MODIFY, NULL);
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, NULL);
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cli_show_isis_lsp_max_lifetime(struct vty *vty, struct lyd_node *dnode,
|
/* unified LSP timers command
|
||||||
bool show_defaults)
|
* XPath: /frr-isisd:isis/instance/lsp/timers
|
||||||
{
|
*/
|
||||||
const char *l1 = yang_dnode_get_string(dnode, "./level-1");
|
|
||||||
const char *l2 = yang_dnode_get_string(dnode, "./level-2");
|
|
||||||
|
|
||||||
if (strmatch(l1, l2))
|
DEFPY(lsp_timers, lsp_timers_cmd,
|
||||||
vty_out(vty, " max-lsp-lifetime %s\n", l1);
|
"lsp-timers [level-1|level-2]$level gen-interval (1-120)$gen refresh-interval (1-65235)$refresh max-lifetime (350-65535)$lifetime",
|
||||||
|
"LSP-related timers\n"
|
||||||
|
"LSP-related timers for Level 1 only\n"
|
||||||
|
"LSP-related timers for Level 2 only\n"
|
||||||
|
"Minimum interval between regenerating same LSP\n"
|
||||||
|
"Generation interval in seconds\n"
|
||||||
|
"LSP refresh interval\n"
|
||||||
|
"LSP refresh interval in seconds\n"
|
||||||
|
"Maximum LSP lifetime\n"
|
||||||
|
"Maximum LSP lifetime in seconds\n")
|
||||||
|
{
|
||||||
|
if (!level || strmatch(level, "level-1")) {
|
||||||
|
nb_cli_enqueue_change(
|
||||||
|
vty, "./lsp/timers/level-1/generation-interval",
|
||||||
|
NB_OP_MODIFY, gen_str);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/refresh-interval",
|
||||||
|
NB_OP_MODIFY, refresh_str);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/maximum-lifetime",
|
||||||
|
NB_OP_MODIFY, lifetime_str);
|
||||||
|
}
|
||||||
|
if (!level || strmatch(level, "level-2")) {
|
||||||
|
nb_cli_enqueue_change(
|
||||||
|
vty, "./lsp/timers/level-2/generation-interval",
|
||||||
|
NB_OP_MODIFY, gen_str);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/refresh-interval",
|
||||||
|
NB_OP_MODIFY, refresh_str);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/maximum-lifetime",
|
||||||
|
NB_OP_MODIFY, lifetime_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFPY(no_lsp_timers, no_lsp_timers_cmd,
|
||||||
|
"no lsp-timers [level-1|level-2]$level [gen-interval (1-120) refresh-interval (1-65235) max-lifetime (350-65535)]",
|
||||||
|
NO_STR
|
||||||
|
"LSP-related timers\n"
|
||||||
|
"LSP-related timers for Level 1 only\n"
|
||||||
|
"LSP-related timers for Level 2 only\n"
|
||||||
|
"Minimum interval between regenerating same LSP\n"
|
||||||
|
"Generation interval in seconds\n"
|
||||||
|
"LSP refresh interval\n"
|
||||||
|
"LSP refresh interval in seconds\n"
|
||||||
|
"Maximum LSP lifetime\n"
|
||||||
|
"Maximum LSP lifetime in seconds\n")
|
||||||
|
{
|
||||||
|
if (!level || strmatch(level, "level-1")) {
|
||||||
|
nb_cli_enqueue_change(
|
||||||
|
vty, "./lsp/timers/level-1/generation-interval",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/refresh-interval",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-1/maximum-lifetime",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
}
|
||||||
|
if (!level || strmatch(level, "level-2")) {
|
||||||
|
nb_cli_enqueue_change(
|
||||||
|
vty, "./lsp/timers/level-2/generation-interval",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/refresh-interval",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
nb_cli_enqueue_change(vty,
|
||||||
|
"./lsp/timers/level-2/maximum-lifetime",
|
||||||
|
NB_OP_MODIFY, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_show_isis_lsp_timers(struct vty *vty, struct lyd_node *dnode,
|
||||||
|
bool show_defaults)
|
||||||
|
{
|
||||||
|
const char *l1_refresh =
|
||||||
|
yang_dnode_get_string(dnode, "./level-1/refresh-interval");
|
||||||
|
const char *l2_refresh =
|
||||||
|
yang_dnode_get_string(dnode, "./level-2/refresh-interval");
|
||||||
|
const char *l1_lifetime =
|
||||||
|
yang_dnode_get_string(dnode, "./level-1/maximum-lifetime");
|
||||||
|
const char *l2_lifetime =
|
||||||
|
yang_dnode_get_string(dnode, "./level-2/maximum-lifetime");
|
||||||
|
const char *l1_gen =
|
||||||
|
yang_dnode_get_string(dnode, "./level-1/generation-interval");
|
||||||
|
const char *l2_gen =
|
||||||
|
yang_dnode_get_string(dnode, "./level-2/generation-interval");
|
||||||
|
if (strmatch(l1_refresh, l2_refresh)
|
||||||
|
&& strmatch(l1_lifetime, l2_lifetime) && strmatch(l1_gen, l2_gen))
|
||||||
|
vty_out(vty,
|
||||||
|
" lsp-timers gen-interval %s refresh-interval %s max-lifetime %s\n",
|
||||||
|
l1_gen, l1_refresh, l1_lifetime);
|
||||||
else {
|
else {
|
||||||
vty_out(vty, " max-lsp-lifetime level-1 %s\n", l1);
|
vty_out(vty,
|
||||||
vty_out(vty, " max-lsp-lifetime level-2 %s\n", l2);
|
" lsp-timers level-1 gen-interval %s refresh-interval %s max-lifetime %s\n",
|
||||||
|
l1_gen, l1_refresh, l1_lifetime);
|
||||||
|
vty_out(vty,
|
||||||
|
" lsp-timers level-2 gen-interval %s refresh-interval %s max-lifetime %s\n",
|
||||||
|
l2_gen, l2_refresh, l2_lifetime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2001,6 +2086,8 @@ void isis_cli_init(void)
|
|||||||
install_element(ISIS_NODE, &no_lsp_refresh_interval_cmd);
|
install_element(ISIS_NODE, &no_lsp_refresh_interval_cmd);
|
||||||
install_element(ISIS_NODE, &max_lsp_lifetime_cmd);
|
install_element(ISIS_NODE, &max_lsp_lifetime_cmd);
|
||||||
install_element(ISIS_NODE, &no_max_lsp_lifetime_cmd);
|
install_element(ISIS_NODE, &no_max_lsp_lifetime_cmd);
|
||||||
|
install_element(ISIS_NODE, &lsp_timers_cmd);
|
||||||
|
install_element(ISIS_NODE, &no_lsp_timers_cmd);
|
||||||
install_element(ISIS_NODE, &area_lsp_mtu_cmd);
|
install_element(ISIS_NODE, &area_lsp_mtu_cmd);
|
||||||
install_element(ISIS_NODE, &no_area_lsp_mtu_cmd);
|
install_element(ISIS_NODE, &no_area_lsp_mtu_cmd);
|
||||||
|
|
||||||
|
@ -95,55 +95,43 @@ const struct frr_yang_module_info frr_isisd_info = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/refresh-interval",
|
.xpath = "/frr-isisd:isis/instance/lsp/timers",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
.cli_show = cli_show_isis_lsp_ref_interval,
|
.cli_show = cli_show_isis_lsp_timers,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
|
.xpath = "/frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
.modify = isis_instance_lsp_refresh_interval_level_1_modify,
|
.modify = isis_instance_lsp_refresh_interval_level_1_modify,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
|
.xpath = "/frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime",
|
||||||
.cbs = {
|
|
||||||
.modify = isis_instance_lsp_refresh_interval_level_2_modify,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime",
|
|
||||||
.cbs = {
|
|
||||||
.cli_show = cli_show_isis_lsp_max_lifetime,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
|
|
||||||
.cbs = {
|
.cbs = {
|
||||||
.modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
|
.modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
|
.xpath = "/frr-isisd:isis/instance/lsp/timers/level-1/generation-interval",
|
||||||
.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 = {
|
.cbs = {
|
||||||
.modify = isis_instance_lsp_generation_interval_level_1_modify,
|
.modify = isis_instance_lsp_generation_interval_level_1_modify,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
|
.xpath = "/frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval",
|
||||||
|
.cbs = {
|
||||||
|
.modify = isis_instance_lsp_refresh_interval_level_2_modify,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-isisd:isis/instance/lsp/timers/level-2/maximum-lifetime",
|
||||||
|
.cbs = {
|
||||||
|
.modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-isisd:isis/instance/lsp/timers/level-2/generation-interval",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
.modify = isis_instance_lsp_generation_interval_level_2_modify,
|
.modify = isis_instance_lsp_generation_interval_level_2_modify,
|
||||||
},
|
},
|
||||||
|
@ -427,12 +427,8 @@ 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,
|
void cli_show_isis_lsp_timers(struct vty *vty, struct lyd_node *dnode,
|
||||||
bool show_defaults);
|
bool show_defaults);
|
||||||
void cli_show_isis_lsp_ref_interval(struct vty *vty, struct lyd_node *dnode,
|
|
||||||
bool show_defaults);
|
|
||||||
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,
|
void cli_show_isis_lsp_mtu(struct vty *vty, struct lyd_node *dnode,
|
||||||
bool show_defaults);
|
bool show_defaults);
|
||||||
void cli_show_isis_spf_min_interval(struct vty *vty, struct lyd_node *dnode,
|
void cli_show_isis_spf_min_interval(struct vty *vty, struct lyd_node *dnode,
|
||||||
|
@ -371,7 +371,7 @@ int isis_instance_lsp_mtu_modify(enum nb_event event,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-1
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval
|
||||||
*/
|
*/
|
||||||
int isis_instance_lsp_refresh_interval_level_1_modify(
|
int isis_instance_lsp_refresh_interval_level_1_modify(
|
||||||
enum nb_event event, const struct lyd_node *dnode,
|
enum nb_event event, const struct lyd_node *dnode,
|
||||||
@ -391,7 +391,7 @@ int isis_instance_lsp_refresh_interval_level_1_modify(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval
|
||||||
*/
|
*/
|
||||||
int isis_instance_lsp_refresh_interval_level_2_modify(
|
int isis_instance_lsp_refresh_interval_level_2_modify(
|
||||||
enum nb_event event, const struct lyd_node *dnode,
|
enum nb_event event, const struct lyd_node *dnode,
|
||||||
@ -411,7 +411,7 @@ int isis_instance_lsp_refresh_interval_level_2_modify(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime
|
||||||
*/
|
*/
|
||||||
int isis_instance_lsp_maximum_lifetime_level_1_modify(
|
int isis_instance_lsp_maximum_lifetime_level_1_modify(
|
||||||
enum nb_event event, const struct lyd_node *dnode,
|
enum nb_event event, const struct lyd_node *dnode,
|
||||||
@ -431,7 +431,7 @@ int isis_instance_lsp_maximum_lifetime_level_1_modify(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-2/maximum-lifetime
|
||||||
*/
|
*/
|
||||||
int isis_instance_lsp_maximum_lifetime_level_2_modify(
|
int isis_instance_lsp_maximum_lifetime_level_2_modify(
|
||||||
enum nb_event event, const struct lyd_node *dnode,
|
enum nb_event event, const struct lyd_node *dnode,
|
||||||
@ -451,7 +451,7 @@ int isis_instance_lsp_maximum_lifetime_level_2_modify(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-1
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-1/generation-interval
|
||||||
*/
|
*/
|
||||||
int isis_instance_lsp_generation_interval_level_1_modify(
|
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,
|
||||||
@ -471,7 +471,7 @@ int isis_instance_lsp_generation_interval_level_1_modify(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
|
* XPath: /frr-isisd:isis/instance/lsp/timers/level-2/generation-interval
|
||||||
*/
|
*/
|
||||||
int isis_instance_lsp_generation_interval_level_2_modify(
|
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,
|
||||||
|
@ -137,17 +137,17 @@ struct isis_area *isis_area_create(const char *area_tag)
|
|||||||
enum isis_metric_style default_style;
|
enum isis_metric_style default_style;
|
||||||
|
|
||||||
area->max_lsp_lifetime[0] = yang_get_default_uint16(
|
area->max_lsp_lifetime[0] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1");
|
"/frr-isisd:isis/instance/lsp/timers/level-1/maximum-lifetime");
|
||||||
area->max_lsp_lifetime[1] = yang_get_default_uint16(
|
area->max_lsp_lifetime[1] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2");
|
"/frr-isisd:isis/instance/lsp/timers/level-2/maximum-lifetime");
|
||||||
area->lsp_refresh[0] = yang_get_default_uint16(
|
area->lsp_refresh[0] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/lsp/refresh-interval/level-1");
|
"/frr-isisd:isis/instance/lsp/timers/level-1/refresh-interval");
|
||||||
area->lsp_refresh[1] = yang_get_default_uint16(
|
area->lsp_refresh[1] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/lsp/refresh-interval/level-2");
|
"/frr-isisd:isis/instance/lsp/timers/level-2/refresh-interval");
|
||||||
area->lsp_gen_interval[0] = yang_get_default_uint16(
|
area->lsp_gen_interval[0] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/lsp/generation-interval/level-1");
|
"/frr-isisd:isis/instance/lsp/timers/level-1/generation-interval");
|
||||||
area->lsp_gen_interval[1] = yang_get_default_uint16(
|
area->lsp_gen_interval[1] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/lsp/generation-interval/level-2");
|
"/frr-isisd:isis/instance/lsp/timers/level-2/generation-interval");
|
||||||
area->min_spf_interval[0] = yang_get_default_uint16(
|
area->min_spf_interval[0] = yang_get_default_uint16(
|
||||||
"/frr-isisd:isis/instance/spf/minimum-interval/level-1");
|
"/frr-isisd:isis/instance/spf/minimum-interval/level-1");
|
||||||
area->min_spf_interval[1] = yang_get_default_uint16(
|
area->min_spf_interval[1] = yang_get_default_uint16(
|
||||||
|
@ -27,6 +27,11 @@ module frr-isisd {
|
|||||||
description
|
description
|
||||||
"This module defines a model for managing FRR isisd daemon.";
|
"This module defines a model for managing FRR isisd daemon.";
|
||||||
|
|
||||||
|
revision 2020-04-06 {
|
||||||
|
description
|
||||||
|
"Group LSP timers in a container so that they can be displayed and
|
||||||
|
configured together";
|
||||||
|
}
|
||||||
revision 2019-12-17 {
|
revision 2019-12-17 {
|
||||||
description
|
description
|
||||||
"Changed default area is-type to level-1-2";
|
"Changed default area is-type to level-1-2";
|
||||||
@ -34,7 +39,7 @@ module frr-isisd {
|
|||||||
revision 2019-09-09 {
|
revision 2019-09-09 {
|
||||||
description
|
description
|
||||||
"Changed interface references to use
|
"Changed interface references to use
|
||||||
frr-interface:interface-ref typedef";
|
frr-interface:interface-ref typedef";
|
||||||
}
|
}
|
||||||
revision 2018-07-26 {
|
revision 2018-07-26 {
|
||||||
description
|
description
|
||||||
@ -301,8 +306,8 @@ module frr-isisd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
grouping interface-config {
|
grouping interface-config {
|
||||||
description "Interface configuration grouping";
|
description
|
||||||
|
"Interface configuration grouping";
|
||||||
leaf area-tag {
|
leaf area-tag {
|
||||||
type string;
|
type string;
|
||||||
mandatory true;
|
mandatory true;
|
||||||
@ -333,8 +338,9 @@ module frr-isisd {
|
|||||||
|
|
||||||
leaf bfd-monitoring {
|
leaf bfd-monitoring {
|
||||||
type boolean;
|
type boolean;
|
||||||
default false;
|
default "false";
|
||||||
description "Monitor IS-IS peers on this circuit.";
|
description
|
||||||
|
"Monitor IS-IS peers on this circuit.";
|
||||||
}
|
}
|
||||||
|
|
||||||
container csnp-interval {
|
container csnp-interval {
|
||||||
@ -490,8 +496,8 @@ module frr-isisd {
|
|||||||
|
|
||||||
leaf network-type {
|
leaf network-type {
|
||||||
type network-type;
|
type network-type;
|
||||||
default "broadcast";
|
|
||||||
must "(. = \"point-to-point\") or (. = \"broadcast\")";
|
must "(. = \"point-to-point\") or (. = \"broadcast\")";
|
||||||
|
default "broadcast";
|
||||||
description
|
description
|
||||||
"Explicitly configured type of IS-IS circuit (broadcast or point-to-point).";
|
"Explicitly configured type of IS-IS circuit (broadcast or point-to-point).";
|
||||||
}
|
}
|
||||||
@ -570,38 +576,50 @@ module frr-isisd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
grouping adjacency-state {
|
grouping adjacency-state {
|
||||||
|
description
|
||||||
|
"Adjacency state";
|
||||||
container adjacencies {
|
container adjacencies {
|
||||||
config false;
|
config false;
|
||||||
|
description
|
||||||
|
"This container lists the adjacencies of
|
||||||
|
the local node.";
|
||||||
list adjacency {
|
list adjacency {
|
||||||
|
description
|
||||||
|
"List of operational adjacencies.";
|
||||||
leaf neighbor-sys-type {
|
leaf neighbor-sys-type {
|
||||||
type level;
|
type level;
|
||||||
description
|
description
|
||||||
"Level capability of neighboring system";
|
"Level capability of neighboring system";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf neighbor-sysid {
|
leaf neighbor-sysid {
|
||||||
type system-id;
|
type system-id;
|
||||||
description
|
description
|
||||||
"The system-id of the neighbor";
|
"The system-id of the neighbor";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf neighbor-extended-circuit-id {
|
leaf neighbor-extended-circuit-id {
|
||||||
type extended-circuit-id;
|
type extended-circuit-id;
|
||||||
description
|
description
|
||||||
"Circuit ID of the neighbor";
|
"Circuit ID of the neighbor";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf neighbor-snpa {
|
leaf neighbor-snpa {
|
||||||
type snpa;
|
type snpa;
|
||||||
description
|
description
|
||||||
"SNPA of the neighbor";
|
"SNPA of the neighbor";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf hold-timer {
|
leaf hold-timer {
|
||||||
type uint16;
|
type uint16;
|
||||||
units seconds;
|
units "seconds";
|
||||||
description
|
description
|
||||||
"The holding time in seconds for this
|
"The holding time in seconds for this
|
||||||
adjacency. This value is based on
|
adjacency. This value is based on
|
||||||
received hello PDUs and the elapsed
|
received hello PDUs and the elapsed
|
||||||
time since receipt.";
|
time since receipt.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf neighbor-priority {
|
leaf neighbor-priority {
|
||||||
type uint8 {
|
type uint8 {
|
||||||
range "0 .. 127";
|
range "0 .. 127";
|
||||||
@ -610,37 +628,36 @@ module frr-isisd {
|
|||||||
"Priority of the neighboring IS for becoming
|
"Priority of the neighboring IS for becoming
|
||||||
the DIS.";
|
the DIS.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf state {
|
leaf state {
|
||||||
type adj-state-type;
|
type adj-state-type;
|
||||||
description
|
description
|
||||||
"This leaf describes the state of the interface.";
|
"This leaf describes the state of the interface.";
|
||||||
}
|
}
|
||||||
|
|
||||||
description
|
|
||||||
"List of operational adjacencies.";
|
|
||||||
}
|
}
|
||||||
description
|
|
||||||
"This container lists the adjacencies of
|
|
||||||
the local node.";
|
|
||||||
}
|
}
|
||||||
description
|
|
||||||
"Adjacency state";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grouping event-counters {
|
grouping event-counters {
|
||||||
|
description
|
||||||
|
"Grouping for IS-IS interface event counters";
|
||||||
container event-counters {
|
container event-counters {
|
||||||
config false;
|
config false;
|
||||||
|
description
|
||||||
|
"IS-IS interface event counters.";
|
||||||
leaf adjacency-changes {
|
leaf adjacency-changes {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
"The number of times an adjacency state change has
|
"The number of times an adjacency state change has
|
||||||
occurred on this interface.";
|
occurred on this interface.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf adjacency-number {
|
leaf adjacency-number {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
"The number of adjacencies on this interface.";
|
"The number of adjacencies on this interface.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf init-fails {
|
leaf init-fails {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
@ -649,12 +666,14 @@ module frr-isisd {
|
|||||||
as PPP NCP failures. Failures to form an
|
as PPP NCP failures. Failures to form an
|
||||||
adjacency are counted by adjacency-rejects.";
|
adjacency are counted by adjacency-rejects.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf adjacency-rejects {
|
leaf adjacency-rejects {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
"The number of times an adjacency has been
|
"The number of times an adjacency has been
|
||||||
rejected on this interface.";
|
rejected on this interface.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf id-len-mismatch {
|
leaf id-len-mismatch {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
@ -662,6 +681,7 @@ module frr-isisd {
|
|||||||
field length different from that for this
|
field length different from that for this
|
||||||
system has been received on this interface.";
|
system has been received on this interface.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf max-area-addresses-mismatch {
|
leaf max-area-addresses-mismatch {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
@ -670,26 +690,26 @@ module frr-isisd {
|
|||||||
max area address field differing from that of
|
max area address field differing from that of
|
||||||
this system.";
|
this system.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf authentication-type-fails {
|
leaf authentication-type-fails {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
"Number of authentication type mismatches.";
|
"Number of authentication type mismatches.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf authentication-fails {
|
leaf authentication-fails {
|
||||||
type uint32;
|
type uint32;
|
||||||
description
|
description
|
||||||
"Number of authentication key failures.";
|
"Number of authentication key failures.";
|
||||||
}
|
}
|
||||||
description "IS-IS interface event counters.";
|
|
||||||
}
|
}
|
||||||
description
|
|
||||||
"Grouping for IS-IS interface event counters";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grouping interface-state {
|
grouping interface-state {
|
||||||
description
|
description
|
||||||
"IS-IS interface operational state.";
|
"IS-IS interface operational state.";
|
||||||
uses adjacency-state;
|
uses adjacency-state;
|
||||||
|
|
||||||
uses event-counters;
|
uses event-counters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,75 +834,75 @@ module frr-isisd {
|
|||||||
"MTU of an LSP.";
|
"MTU of an LSP.";
|
||||||
}
|
}
|
||||||
|
|
||||||
container refresh-interval {
|
container timers {
|
||||||
description
|
description
|
||||||
"";
|
"LSP-related timers";
|
||||||
leaf level-1 {
|
container level-1 {
|
||||||
type uint16;
|
|
||||||
units "seconds";
|
|
||||||
default "900";
|
|
||||||
description
|
description
|
||||||
"LSP refresh interval for level-1.";
|
"Level-1 LSP-related timers";
|
||||||
}
|
leaf refresh-interval {
|
||||||
|
type uint16;
|
||||||
leaf level-2 {
|
units "seconds";
|
||||||
type uint16;
|
default "900";
|
||||||
units "seconds";
|
description
|
||||||
default "900";
|
"LSP refresh interval for level-1.";
|
||||||
description
|
}
|
||||||
"LSP refresh interval for level-2.";
|
|
||||||
}
|
leaf maximum-lifetime {
|
||||||
}
|
type uint16 {
|
||||||
|
range "350..65535";
|
||||||
container maximum-lifetime {
|
}
|
||||||
description
|
units "seconds";
|
||||||
"Maximum LSP lifetime.";
|
must ". >= ../refresh-interval + 300";
|
||||||
leaf level-1 {
|
default "1200";
|
||||||
type uint16 {
|
description
|
||||||
range "350..65535";
|
"Maximum LSP lifetime for level-1.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf generation-interval {
|
||||||
|
type uint16 {
|
||||||
|
range "1..120";
|
||||||
|
}
|
||||||
|
units "seconds";
|
||||||
|
must ". < ../refresh-interval";
|
||||||
|
default "30";
|
||||||
|
description
|
||||||
|
"Minimum time allowed before level-1 LSP retransmissions.";
|
||||||
}
|
}
|
||||||
units "seconds";
|
|
||||||
must ". >= ../../refresh-interval/level-1 + 300";
|
|
||||||
default "1200";
|
|
||||||
description
|
|
||||||
"Maximum LSP lifetime for level-1.";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf level-2 {
|
container level-2 {
|
||||||
type uint16 {
|
|
||||||
range "350..65535";
|
|
||||||
}
|
|
||||||
units "seconds";
|
|
||||||
must ". >= ../../refresh-interval/level-2 + 300";
|
|
||||||
default "1200";
|
|
||||||
description
|
description
|
||||||
"Maximum LSP lifetime for level-2.";
|
"Level-2 LSP-related timers";
|
||||||
}
|
leaf refresh-interval {
|
||||||
}
|
type uint16;
|
||||||
|
units "seconds";
|
||||||
|
default "900";
|
||||||
|
description
|
||||||
|
"LSP refresh interval for level-2.";
|
||||||
|
}
|
||||||
|
|
||||||
container generation-interval {
|
leaf maximum-lifetime {
|
||||||
description
|
type uint16 {
|
||||||
"Minimum LSP regeneration interval.";
|
range "350..65535";
|
||||||
leaf level-1 {
|
}
|
||||||
type uint16 {
|
units "seconds";
|
||||||
range "1..120";
|
must ". >= ../refresh-interval + 300";
|
||||||
|
default "1200";
|
||||||
|
description
|
||||||
|
"Maximum LSP lifetime for level-2.";
|
||||||
}
|
}
|
||||||
units "seconds";
|
|
||||||
must ". < ../../refresh-interval/level-1";
|
|
||||||
default "30";
|
|
||||||
description
|
|
||||||
"Minimum time allowed before level-1 LSP retransmissions.";
|
|
||||||
}
|
|
||||||
|
|
||||||
leaf level-2 {
|
leaf generation-interval {
|
||||||
type uint16 {
|
type uint16 {
|
||||||
range "1..120";
|
range "1..120";
|
||||||
|
}
|
||||||
|
units "seconds";
|
||||||
|
must ". < ../refresh-interval";
|
||||||
|
default "30";
|
||||||
|
description
|
||||||
|
"Minimum time allowed before level-2 LSP retransmissions.";
|
||||||
}
|
}
|
||||||
units "seconds";
|
|
||||||
must ". < ../../refresh-interval/level-2";
|
|
||||||
default "30";
|
|
||||||
description
|
|
||||||
"Minimum time allowed before level-2 LSP retransmissions.";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1152,6 +1172,7 @@ module frr-isisd {
|
|||||||
description
|
description
|
||||||
"IS-IS interface parameters.";
|
"IS-IS interface parameters.";
|
||||||
uses interface-config;
|
uses interface-config;
|
||||||
|
|
||||||
uses interface-state;
|
uses interface-state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user