mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-30 03:08:59 +00:00
isisd: Add set-overload on-startup CLI/YANG support
Before: r1# conf r1(config)# router isis <area-tag> r1(config-router)# set-overload-bit <cr> r1(config-router)# end After: r1# conf r1(config)# router isis <area-tag> r1(config-router)# set-overload-bit <cr> on-startup Set overload bit on startup r1(config-router)# set-overload-bit on-startup (0-86400) Set overload time in seconds r1(config-router)# set-overload-bit on-startup 300 r1(config-router)# end Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
This commit is contained in:
parent
6bae02045b
commit
01ea9b035e
@ -404,7 +404,7 @@ DEFPY_YANG(set_overload_bit, set_overload_bit_cmd, "[no] set-overload-bit",
|
|||||||
"Reset overload bit to accept transit traffic\n"
|
"Reset overload bit to accept transit traffic\n"
|
||||||
"Set overload bit to avoid any transit traffic\n")
|
"Set overload bit to avoid any transit traffic\n")
|
||||||
{
|
{
|
||||||
nb_cli_enqueue_change(vty, "./overload", NB_OP_MODIFY,
|
nb_cli_enqueue_change(vty, "./overload/enabled", NB_OP_MODIFY,
|
||||||
no ? "false" : "true");
|
no ? "false" : "true");
|
||||||
|
|
||||||
return nb_cli_apply_changes(vty, NULL);
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
@ -418,6 +418,42 @@ void cli_show_isis_overload(struct vty *vty, const struct lyd_node *dnode,
|
|||||||
vty_out(vty, " set-overload-bit\n");
|
vty_out(vty, " set-overload-bit\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath: /frr-isisd:isis/instance/overload/on-startup
|
||||||
|
*/
|
||||||
|
DEFPY_YANG(set_overload_bit_on_startup, set_overload_bit_on_startup_cmd,
|
||||||
|
"set-overload-bit on-startup (0-86400)$val",
|
||||||
|
"Set overload bit to avoid any transit traffic\n"
|
||||||
|
"Set overload bit on startup\n"
|
||||||
|
"Set overload time in seconds\n")
|
||||||
|
{
|
||||||
|
nb_cli_enqueue_change(vty, "./overload/on-startup", NB_OP_MODIFY,
|
||||||
|
val_str);
|
||||||
|
|
||||||
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFPY_YANG(no_set_overload_bit_on_startup, no_set_overload_bit_on_startup_cmd,
|
||||||
|
"no set-overload-bit on-startup [(0-86400)$val]",
|
||||||
|
NO_STR
|
||||||
|
"Reset overload bit to accept transit traffic\n"
|
||||||
|
"Set overload bit on startup\n"
|
||||||
|
"Set overload time in seconds\n")
|
||||||
|
{
|
||||||
|
nb_cli_enqueue_change(vty, "./overload/on-startup", NB_OP_DESTROY,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
return nb_cli_apply_changes(vty, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_show_isis_overload_on_startup(struct vty *vty,
|
||||||
|
const struct lyd_node *dnode,
|
||||||
|
bool show_defaults)
|
||||||
|
{
|
||||||
|
vty_out(vty, " set-overload-bit on-startup %s\n",
|
||||||
|
yang_dnode_get_string(dnode, NULL));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/attach-send
|
* XPath: /frr-isisd:isis/instance/attach-send
|
||||||
*/
|
*/
|
||||||
@ -3107,6 +3143,9 @@ void isis_cli_init(void)
|
|||||||
install_element(ISIS_NODE, &dynamic_hostname_cmd);
|
install_element(ISIS_NODE, &dynamic_hostname_cmd);
|
||||||
|
|
||||||
install_element(ISIS_NODE, &set_overload_bit_cmd);
|
install_element(ISIS_NODE, &set_overload_bit_cmd);
|
||||||
|
install_element(ISIS_NODE, &set_overload_bit_on_startup_cmd);
|
||||||
|
install_element(ISIS_NODE, &no_set_overload_bit_on_startup_cmd);
|
||||||
|
|
||||||
install_element(ISIS_NODE, &attached_bit_send_cmd);
|
install_element(ISIS_NODE, &attached_bit_send_cmd);
|
||||||
install_element(ISIS_NODE, &attached_bit_receive_ignore_cmd);
|
install_element(ISIS_NODE, &attached_bit_receive_ignore_cmd);
|
||||||
|
|
||||||
|
@ -81,11 +81,18 @@ const struct frr_yang_module_info frr_isisd_info = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/overload",
|
.xpath = "/frr-isisd:isis/instance/overload/enabled",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
.cli_show = cli_show_isis_overload,
|
.cli_show = cli_show_isis_overload,
|
||||||
.modify = isis_instance_overload_modify,
|
.modify = isis_instance_overload_enabled_modify,
|
||||||
},
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-isisd:isis/instance/overload/on-startup",
|
||||||
|
.cbs = {
|
||||||
|
.cli_show = cli_show_isis_overload_on_startup,
|
||||||
|
.modify = isis_instance_overload_on_startup_modify,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-isisd:isis/instance/metric-style",
|
.xpath = "/frr-isisd:isis/instance/metric-style",
|
||||||
|
@ -37,7 +37,8 @@ int isis_instance_dynamic_hostname_modify(struct nb_cb_modify_args *args);
|
|||||||
int isis_instance_attached_send_modify(struct nb_cb_modify_args *args);
|
int isis_instance_attached_send_modify(struct nb_cb_modify_args *args);
|
||||||
int isis_instance_attached_receive_modify(struct nb_cb_modify_args *args);
|
int isis_instance_attached_receive_modify(struct nb_cb_modify_args *args);
|
||||||
int isis_instance_attached_modify(struct nb_cb_modify_args *args);
|
int isis_instance_attached_modify(struct nb_cb_modify_args *args);
|
||||||
int isis_instance_overload_modify(struct nb_cb_modify_args *args);
|
int isis_instance_overload_enabled_modify(struct nb_cb_modify_args *args);
|
||||||
|
int isis_instance_overload_on_startup_modify(struct nb_cb_modify_args *args);
|
||||||
int isis_instance_metric_style_modify(struct nb_cb_modify_args *args);
|
int isis_instance_metric_style_modify(struct nb_cb_modify_args *args);
|
||||||
int isis_instance_purge_originator_modify(struct nb_cb_modify_args *args);
|
int isis_instance_purge_originator_modify(struct nb_cb_modify_args *args);
|
||||||
int isis_instance_lsp_mtu_modify(struct nb_cb_modify_args *args);
|
int isis_instance_lsp_mtu_modify(struct nb_cb_modify_args *args);
|
||||||
@ -442,6 +443,9 @@ void cli_show_isis_attached_receive(struct vty *vty,
|
|||||||
bool show_defaults);
|
bool show_defaults);
|
||||||
void cli_show_isis_overload(struct vty *vty, const struct lyd_node *dnode,
|
void cli_show_isis_overload(struct vty *vty, const struct lyd_node *dnode,
|
||||||
bool show_defaults);
|
bool show_defaults);
|
||||||
|
void cli_show_isis_overload_on_startup(struct vty *vty,
|
||||||
|
const struct lyd_node *dnode,
|
||||||
|
bool show_defaults);
|
||||||
void cli_show_isis_metric_style(struct vty *vty, const struct lyd_node *dnode,
|
void cli_show_isis_metric_style(struct vty *vty, const struct lyd_node *dnode,
|
||||||
bool show_defaults);
|
bool show_defaults);
|
||||||
void cli_show_isis_area_pwd(struct vty *vty, const struct lyd_node *dnode,
|
void cli_show_isis_area_pwd(struct vty *vty, const struct lyd_node *dnode,
|
||||||
|
@ -338,9 +338,9 @@ int isis_instance_attached_modify(struct nb_cb_modify_args *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/overload
|
* XPath: /frr-isisd:isis/instance/overload/enabled
|
||||||
*/
|
*/
|
||||||
int isis_instance_overload_modify(struct nb_cb_modify_args *args)
|
int isis_instance_overload_enabled_modify(struct nb_cb_modify_args *args)
|
||||||
{
|
{
|
||||||
struct isis_area *area;
|
struct isis_area *area;
|
||||||
bool overload;
|
bool overload;
|
||||||
@ -355,6 +355,24 @@ int isis_instance_overload_modify(struct nb_cb_modify_args *args)
|
|||||||
return NB_OK;
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath: /frr-isisd:isis/instance/overload/on-startup
|
||||||
|
*/
|
||||||
|
int isis_instance_overload_on_startup_modify(struct nb_cb_modify_args *args)
|
||||||
|
{
|
||||||
|
struct isis_area *area;
|
||||||
|
uint32_t overload_time;
|
||||||
|
|
||||||
|
if (args->event != NB_EV_APPLY)
|
||||||
|
return NB_OK;
|
||||||
|
|
||||||
|
overload_time = yang_dnode_get_uint32(args->dnode, NULL);
|
||||||
|
area = nb_running_get_entry(args->dnode, NULL, true);
|
||||||
|
isis_area_overload_on_startup_set(area, overload_time);
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-isisd:isis/instance/metric-style
|
* XPath: /frr-isisd:isis/instance/metric-style
|
||||||
*/
|
*/
|
||||||
|
@ -3205,6 +3205,15 @@ void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit)
|
|||||||
#endif /* ifndef FABRICD */
|
#endif /* ifndef FABRICD */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void isis_area_overload_on_startup_set(struct isis_area *area,
|
||||||
|
uint32_t startup_time)
|
||||||
|
{
|
||||||
|
if (area->overload_on_startup_time != startup_time)
|
||||||
|
area->overload_on_startup_time = startup_time;
|
||||||
|
|
||||||
|
// TODO: Implement overload on startup functionality
|
||||||
|
}
|
||||||
|
|
||||||
void isis_area_attached_bit_send_set(struct isis_area *area, bool attached_bit)
|
void isis_area_attached_bit_send_set(struct isis_area *area, bool attached_bit)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -181,6 +181,7 @@ struct isis_area {
|
|||||||
/* are we overloaded? */
|
/* are we overloaded? */
|
||||||
char overload_bit;
|
char overload_bit;
|
||||||
uint32_t overload_counter;
|
uint32_t overload_counter;
|
||||||
|
uint32_t overload_on_startup_time;
|
||||||
/* L1/L2 router identifier for inter-area traffic */
|
/* L1/L2 router identifier for inter-area traffic */
|
||||||
char attached_bit_send;
|
char attached_bit_send;
|
||||||
char attached_bit_rcv_ignore;
|
char attached_bit_rcv_ignore;
|
||||||
@ -289,6 +290,8 @@ void isis_area_invalidate_routes(struct isis_area *area, int levels);
|
|||||||
void isis_area_verify_routes(struct isis_area *area);
|
void isis_area_verify_routes(struct isis_area *area);
|
||||||
|
|
||||||
void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit);
|
void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit);
|
||||||
|
void isis_area_overload_on_startup_set(struct isis_area *area,
|
||||||
|
uint32_t startup_time);
|
||||||
void isis_area_attached_bit_send_set(struct isis_area *area, bool attached_bit);
|
void isis_area_attached_bit_send_set(struct isis_area *area, bool attached_bit);
|
||||||
void isis_area_attached_bit_receive_set(struct isis_area *area,
|
void isis_area_attached_bit_receive_set(struct isis_area *area,
|
||||||
bool attached_bit);
|
bool attached_bit);
|
||||||
|
@ -1066,11 +1066,25 @@ module frr-isisd {
|
|||||||
"If true, identify as L1/L2 router for inter-area traffic.";
|
"If true, identify as L1/L2 router for inter-area traffic.";
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf overload {
|
container overload {
|
||||||
type boolean;
|
|
||||||
default "false";
|
|
||||||
description
|
description
|
||||||
"If true, avoid any transit traffic.";
|
"Overload bit configuration.";
|
||||||
|
leaf enabled {
|
||||||
|
type boolean;
|
||||||
|
default "false";
|
||||||
|
description
|
||||||
|
"If true, avoid any transit traffic.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf on-startup {
|
||||||
|
type uint32 {
|
||||||
|
range "0..86400";
|
||||||
|
}
|
||||||
|
units "seconds";
|
||||||
|
default "0";
|
||||||
|
description
|
||||||
|
"The duration the overload bit should be set on startup.";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
leaf metric-style {
|
leaf metric-style {
|
||||||
|
Loading…
Reference in New Issue
Block a user