mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-28 21:19:20 +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"
|
||||
"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");
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
@ -3107,6 +3143,9 @@ void isis_cli_init(void)
|
||||
install_element(ISIS_NODE, &dynamic_hostname_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_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 = {
|
||||
.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",
|
||||
|
@ -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_receive_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_purge_originator_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);
|
||||
void cli_show_isis_overload(struct vty *vty, const struct lyd_node *dnode,
|
||||
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,
|
||||
bool show_defaults);
|
||||
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;
|
||||
bool overload;
|
||||
@ -355,6 +355,24 @@ int isis_instance_overload_modify(struct nb_cb_modify_args *args)
|
||||
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
|
||||
*/
|
||||
|
@ -3205,6 +3205,15 @@ void isis_area_overload_bit_set(struct isis_area *area, bool overload_bit)
|
||||
#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)
|
||||
{
|
||||
|
||||
|
@ -181,6 +181,7 @@ struct isis_area {
|
||||
/* are we overloaded? */
|
||||
char overload_bit;
|
||||
uint32_t overload_counter;
|
||||
uint32_t overload_on_startup_time;
|
||||
/* L1/L2 router identifier for inter-area traffic */
|
||||
char attached_bit_send;
|
||||
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_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_receive_set(struct isis_area *area,
|
||||
bool attached_bit);
|
||||
|
@ -1066,11 +1066,25 @@ module frr-isisd {
|
||||
"If true, identify as L1/L2 router for inter-area traffic.";
|
||||
}
|
||||
|
||||
leaf overload {
|
||||
type boolean;
|
||||
default "false";
|
||||
container overload {
|
||||
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 {
|
||||
|
Loading…
Reference in New Issue
Block a user