forked from Mirror/frr
bgpd: Adding BGP GR Per Neighbor config commands.
* Added configuration commands for enabling and disabling graceful restart per neighbour. Cmd : neighbor A.B.C.D graceful-restart Cmd : no neighbor A.B.C.D graceful-restart Cmd : neighbor A.B.C.D graceful-restart-helper Cmd : no neighbor A.B.C.D graceful-restart-helper Cmd : neighbor A.B.C.D graceful-restart-disable Cmd : no neighbor A.B.C.D graceful-restart-disable * Added configuration commands for disabling graceful restart at the global Level. Cmd : bgp graceful-restart disable Cmd : no bgp graceful-restart disable Signed-off-by: Biswajit Sadhu <sadhub@vmware.com>
This commit is contained in:
parent
034e185dc6
commit
055679e915
339
bgpd/bgp_vty.c
339
bgpd/bgp_vty.c
|
@ -105,9 +105,21 @@ DEFINE_HOOK(bgp_inst_config_write,
|
||||||
(struct bgp *bgp, struct vty *vty),
|
(struct bgp *bgp, struct vty *vty),
|
||||||
(bgp, vty))
|
(bgp, vty))
|
||||||
|
|
||||||
|
#define GR_NO_OPER "The Graceful Restart No Operation was executed as cmd same as previous one"
|
||||||
|
#define GR_INVALID "The Graceful Restart command used is not valid at this moment."
|
||||||
static struct peer_group *listen_range_exists(struct bgp *bgp,
|
static struct peer_group *listen_range_exists(struct bgp *bgp,
|
||||||
struct prefix *range, int exact);
|
struct prefix *range, int exact);
|
||||||
|
|
||||||
|
/* Show BGP peer's information. */
|
||||||
|
enum show_type {
|
||||||
|
show_all,
|
||||||
|
show_peer,
|
||||||
|
show_ipv4_all,
|
||||||
|
show_ipv6_all,
|
||||||
|
show_ipv4_peer,
|
||||||
|
show_ipv6_peer
|
||||||
|
};
|
||||||
|
|
||||||
static enum node_type bgp_node_type(afi_t afi, safi_t safi)
|
static enum node_type bgp_node_type(afi_t afi, safi_t safi)
|
||||||
{
|
{
|
||||||
switch (afi) {
|
switch (afi) {
|
||||||
|
@ -690,7 +702,16 @@ int bgp_vty_return(struct vty *vty, int ret)
|
||||||
str = "Operation not allowed on a directly connected neighbor";
|
str = "Operation not allowed on a directly connected neighbor";
|
||||||
break;
|
break;
|
||||||
case BGP_ERR_PEER_SAFI_CONFLICT:
|
case BGP_ERR_PEER_SAFI_CONFLICT:
|
||||||
str = "Cannot activate peer for both 'ipv4 unicast' and 'ipv4 labeled-unicast'";
|
str = GR_INVALID;
|
||||||
|
break;
|
||||||
|
case BGP_ERR_GR_INVALID_CMD:
|
||||||
|
str = "The Graceful Restart command used is not valid at this moment.";
|
||||||
|
break;
|
||||||
|
case BGP_ERR_GR_OPERATION_FAILED:
|
||||||
|
str = "The Graceful Restart Operation failed due to an err.";
|
||||||
|
break;
|
||||||
|
case BGP_GR_NO_OPERATION:
|
||||||
|
str = GR_NO_OPER;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (str) {
|
if (str) {
|
||||||
|
@ -742,6 +763,8 @@ static int bgp_peer_clear(struct peer *peer, afi_t afi, safi_t safi,
|
||||||
if (!peer->afc[tmp_afi][tmp_safi])
|
if (!peer->afc[tmp_afi][tmp_safi])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
if (stype == BGP_CLEAR_SOFT_NONE)
|
if (stype == BGP_CLEAR_SOFT_NONE)
|
||||||
ret = peer_clear(peer, &nnode);
|
ret = peer_clear(peer, &nnode);
|
||||||
else
|
else
|
||||||
|
@ -2093,16 +2116,25 @@ DEFUN (no_bgp_deterministic_med,
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* "bgp graceful-restart" configuration. */
|
/* "bgp graceful-restart mode" configuration. */
|
||||||
DEFUN (bgp_graceful_restart,
|
DEFUN (bgp_graceful_restart,
|
||||||
bgp_graceful_restart_cmd,
|
bgp_graceful_restart_cmd,
|
||||||
"bgp graceful-restart",
|
"bgp graceful-restart",
|
||||||
"BGP specific commands\n"
|
"BGP specific commands\n"
|
||||||
"Graceful restart capability parameters\n")
|
GR_CMD
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug("BGP_GR:: bgp_graceful_restart_cmd : START ");
|
||||||
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||||
bgp_flag_set(bgp, BGP_FLAG_GRACEFUL_RESTART);
|
|
||||||
return CMD_SUCCESS;
|
ret = bgp_gr_update_all(bgp, GLOBAL_GR_CMD);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug("BGP_GR:: bgp_graceful_restart_cmd : END ");
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (no_bgp_graceful_restart,
|
DEFUN (no_bgp_graceful_restart,
|
||||||
|
@ -2110,11 +2142,22 @@ DEFUN (no_bgp_graceful_restart,
|
||||||
"no bgp graceful-restart",
|
"no bgp graceful-restart",
|
||||||
NO_STR
|
NO_STR
|
||||||
"BGP specific commands\n"
|
"BGP specific commands\n"
|
||||||
"Graceful restart capability parameters\n")
|
NO_GR_CMD
|
||||||
|
)
|
||||||
{
|
{
|
||||||
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||||
bgp_flag_unset(bgp, BGP_FLAG_GRACEFUL_RESTART);
|
|
||||||
return CMD_SUCCESS;
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug("BGP_GR:: no_bgp_graceful_restart_cmd : START ");
|
||||||
|
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
ret = bgp_gr_update_all(bgp, NO_GLOBAL_GR_CMD);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug("BGP_GR:: no_bgp_graceful_restart_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN (bgp_graceful_restart_stalepath_time,
|
DEFUN (bgp_graceful_restart_stalepath_time,
|
||||||
|
@ -2206,6 +2249,249 @@ DEFUN (no_bgp_graceful_restart_preserve_fw,
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (bgp_graceful_restart_disable,
|
||||||
|
bgp_graceful_restart_disable_cmd,
|
||||||
|
"bgp graceful-restart-disable",
|
||||||
|
"BGP specific commands\n"
|
||||||
|
GR_DISABLE)
|
||||||
|
{
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_graceful_restart_disable_cmd : START ");
|
||||||
|
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||||
|
|
||||||
|
ret = bgp_gr_update_all(bgp, GLOBAL_DISABLE_CMD);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_graceful_restart_disable_cmd : END ");
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_bgp_graceful_restart_disable,
|
||||||
|
no_bgp_graceful_restart_disable_cmd,
|
||||||
|
"no bgp graceful-restart-disable",
|
||||||
|
NO_STR
|
||||||
|
"BGP specific commands\n"
|
||||||
|
NO_GR_DISABLE
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_graceful_restart_disable_cmd : START ");
|
||||||
|
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
ret = bgp_gr_update_all(bgp, NO_GLOBAL_DISABLE_CMD);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_graceful_restart_disable_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (bgp_neighbor_graceful_restart_set,
|
||||||
|
bgp_neighbor_graceful_restart_set_cmd,
|
||||||
|
"neighbor <A.B.C.D|X:X::X:X|WORD> graceful-restart",
|
||||||
|
NEIGHBOR_STR
|
||||||
|
NEIGHBOR_ADDR_STR2
|
||||||
|
GR_NEIGHBOR_CMD
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int idx_peer = 1;
|
||||||
|
struct peer *peer;
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_neighbor_graceful_restart_set_cmd : START ");
|
||||||
|
peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
|
ret = bgp_neighbor_graceful_restart(peer, PEER_GR_CMD);
|
||||||
|
|
||||||
|
if (peer->bgp->t_startup)
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_neighbor_graceful_restart_set_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_bgp_neighbor_graceful_restart,
|
||||||
|
no_bgp_neighbor_graceful_restart_set_cmd,
|
||||||
|
"no neighbor <A.B.C.D|X:X::X:X|WORD> graceful-restart",
|
||||||
|
NO_STR
|
||||||
|
NEIGHBOR_STR
|
||||||
|
NEIGHBOR_ADDR_STR2
|
||||||
|
NO_GR_NEIGHBOR_CMD
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int idx_peer = 2;
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
struct peer *peer;
|
||||||
|
|
||||||
|
peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_neighbor_graceful_restart_set_cmd : START ");
|
||||||
|
|
||||||
|
ret = bgp_neighbor_graceful_restart(peer, NO_PEER_GR_CMD);
|
||||||
|
|
||||||
|
if (peer->bgp->t_startup)
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_neighbor_graceful_restart_set_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (bgp_neighbor_graceful_restart_helper_set,
|
||||||
|
bgp_neighbor_graceful_restart_helper_set_cmd,
|
||||||
|
"neighbor <A.B.C.D|X:X::X:X|WORD> graceful-restart-helper",
|
||||||
|
NEIGHBOR_STR
|
||||||
|
NEIGHBOR_ADDR_STR2
|
||||||
|
GR_NEIGHBOR_HELPER_CMD
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int idx_peer = 1;
|
||||||
|
struct peer *peer;
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_neighbor_graceful_restart_set_helper_cmd : START ");
|
||||||
|
peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
|
||||||
|
|
||||||
|
if (peer->bgp->t_startup)
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
|
|
||||||
|
ret = bgp_neighbor_graceful_restart(peer, PEER_HELPER_CMD);
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_neighbor_graceful_restart_helper_set_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_bgp_neighbor_graceful_restart_helper,
|
||||||
|
no_bgp_neighbor_graceful_restart_helper_set_cmd,
|
||||||
|
"no neighbor <A.B.C.D|X:X::X:X|WORD> graceful-restart-helper",
|
||||||
|
NO_STR
|
||||||
|
NEIGHBOR_STR
|
||||||
|
NEIGHBOR_ADDR_STR2
|
||||||
|
NO_GR_NEIGHBOR_HELPER_CMD
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int idx_peer = 2;
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
struct peer *peer;
|
||||||
|
|
||||||
|
peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_neighbor_graceful_restart_helper_set_cmd : START ");
|
||||||
|
|
||||||
|
ret = bgp_neighbor_graceful_restart(peer,
|
||||||
|
NO_PEER_HELPER_CMD);
|
||||||
|
|
||||||
|
if (peer->bgp->t_startup)
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_neighbor_graceful_restart_set_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (bgp_neighbor_graceful_restart_disable_set,
|
||||||
|
bgp_neighbor_graceful_restart_disable_set_cmd,
|
||||||
|
"neighbor <A.B.C.D|X:X::X:X|WORD> graceful-restart-disable",
|
||||||
|
NEIGHBOR_STR
|
||||||
|
NEIGHBOR_ADDR_STR2
|
||||||
|
GR_NEIGHBOR_DISABLE_CMD
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int idx_peer = 1;
|
||||||
|
struct peer *peer;
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: bgp_neighbor_graceful_restart_disable_set_cmd : START ");
|
||||||
|
|
||||||
|
peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
|
|
||||||
|
ret = bgp_neighbor_graceful_restart(peer,
|
||||||
|
PEER_DISABLE_cmd);
|
||||||
|
|
||||||
|
if (peer->bgp->t_startup)
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR::bgp_neighbor_graceful_restart_disable_set_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFUN (no_bgp_neighbor_graceful_restart_disable,
|
||||||
|
no_bgp_neighbor_graceful_restart_disable_set_cmd,
|
||||||
|
"no neighbor <A.B.C.D|X:X::X:X|WORD> graceful-restart-disable",
|
||||||
|
NO_STR
|
||||||
|
NEIGHBOR_STR
|
||||||
|
NEIGHBOR_ADDR_STR2
|
||||||
|
NO_GR_NEIGHBOR_DISABLE_CMD
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int idx_peer = 2;
|
||||||
|
int ret = BGP_GR_FAILURE;
|
||||||
|
struct peer *peer;
|
||||||
|
|
||||||
|
peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
|
||||||
|
if (!peer)
|
||||||
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_neighbor_graceful_restart_disable_set_cmd : START ");
|
||||||
|
|
||||||
|
ret = bgp_neighbor_graceful_restart(peer, NO_PEER_DISABLE_CMD);
|
||||||
|
|
||||||
|
if (peer->bgp->t_startup)
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
|
if (BGP_DEBUG(graceful_restart, GRACEFUL_RESTART))
|
||||||
|
zlog_debug(
|
||||||
|
"BGP_GR:: no_bgp_neighbor_graceful_restart_set_cmd : END ");
|
||||||
|
|
||||||
|
return bgp_vty_return(vty, ret);
|
||||||
|
}
|
||||||
|
|
||||||
/* "bgp graceful-shutdown" configuration */
|
/* "bgp graceful-shutdown" configuration */
|
||||||
DEFUN (bgp_graceful_shutdown,
|
DEFUN (bgp_graceful_shutdown,
|
||||||
bgp_graceful_shutdown_cmd,
|
bgp_graceful_shutdown_cmd,
|
||||||
|
@ -8291,6 +8577,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||||
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
|
if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
bgp_peer_gr_flags_update(peer);
|
||||||
|
|
||||||
if (!peer->afc[afi][safi])
|
if (!peer->afc[afi][safi])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -8882,8 +9170,6 @@ const char *get_afi_safi_str(afi_t afi, safi_t safi, bool for_json)
|
||||||
return get_afi_safi_vty_str(afi, safi);
|
return get_afi_safi_vty_str(afi, safi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Show BGP peer's information. */
|
|
||||||
enum show_type { show_all, show_peer, show_ipv4_all, show_ipv6_all, show_ipv4_peer, show_ipv6_peer };
|
|
||||||
|
|
||||||
static void bgp_show_peer_afi_orf_cap(struct vty *vty, struct peer *p,
|
static void bgp_show_peer_afi_orf_cap(struct vty *vty, struct peer *p,
|
||||||
afi_t afi, safi_t safi,
|
afi_t afi, safi_t safi,
|
||||||
|
@ -14346,9 +14632,36 @@ void bgp_vty_init(void)
|
||||||
install_element(BGP_NODE, &bgp_deterministic_med_cmd);
|
install_element(BGP_NODE, &bgp_deterministic_med_cmd);
|
||||||
install_element(BGP_NODE, &no_bgp_deterministic_med_cmd);
|
install_element(BGP_NODE, &no_bgp_deterministic_med_cmd);
|
||||||
|
|
||||||
/* "bgp graceful-restart" commands */
|
/* "bgp graceful-restart" command */
|
||||||
install_element(BGP_NODE, &bgp_graceful_restart_cmd);
|
install_element(BGP_NODE,
|
||||||
install_element(BGP_NODE, &no_bgp_graceful_restart_cmd);
|
&bgp_graceful_restart_cmd);
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&no_bgp_graceful_restart_cmd);
|
||||||
|
|
||||||
|
/* "bgp graceful-restart-disable" command */
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&bgp_graceful_restart_disable_cmd);
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&no_bgp_graceful_restart_disable_cmd);
|
||||||
|
|
||||||
|
/* "neighbor a:b:c:d graceful-restart" command */
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&bgp_neighbor_graceful_restart_set_cmd);
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&no_bgp_neighbor_graceful_restart_set_cmd);
|
||||||
|
|
||||||
|
/* "neighbor a:b:c:d graceful-restart-disable" command */
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&bgp_neighbor_graceful_restart_disable_set_cmd);
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&no_bgp_neighbor_graceful_restart_disable_set_cmd);
|
||||||
|
|
||||||
|
/* "neighbor a:b:c:d graceful-restart-helper" command */
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&bgp_neighbor_graceful_restart_helper_set_cmd);
|
||||||
|
install_element(BGP_NODE,
|
||||||
|
&no_bgp_neighbor_graceful_restart_helper_set_cmd);
|
||||||
|
|
||||||
install_element(BGP_NODE, &bgp_graceful_restart_stalepath_time_cmd);
|
install_element(BGP_NODE, &bgp_graceful_restart_stalepath_time_cmd);
|
||||||
install_element(BGP_NODE, &no_bgp_graceful_restart_stalepath_time_cmd);
|
install_element(BGP_NODE, &no_bgp_graceful_restart_stalepath_time_cmd);
|
||||||
install_element(BGP_NODE, &bgp_graceful_restart_restart_time_cmd);
|
install_element(BGP_NODE, &bgp_graceful_restart_restart_time_cmd);
|
||||||
|
|
Loading…
Reference in a new issue