mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00
bgpd: Removed bgp startup timer
With "-K" option (graceful restart option) the startup timer is not required anymore. Signed-off-by: Pooja Jagadeesh Doijode <pdoijode@nvidia.com>
This commit is contained in:
parent
c321ff334c
commit
13283b6238
|
@ -1433,7 +1433,7 @@ static bool gr_path_select_deferral_applicable(struct bgp *bgp)
|
|||
* settings and GR is not complete and path selection
|
||||
* deferral not yet done for this instance
|
||||
*/
|
||||
if (!bgp->t_startup && !bgp_in_graceful_restart())
|
||||
if (!bgp_in_graceful_restart())
|
||||
return false;
|
||||
FOREACH_AFI_SAFI_NSF (afi, safi) {
|
||||
if (!bgp_gr_supported_for_afi_safi(afi, safi))
|
||||
|
|
|
@ -1603,7 +1603,7 @@ static void bgp_peer_send_gr_capability(struct stream *s, struct peer *peer,
|
|||
rcapp = stream_get_endp(s);
|
||||
stream_putc(s, 0);
|
||||
restart_time = bgp->restart_time;
|
||||
if (peer->bgp->t_startup || bgp_in_graceful_restart()) {
|
||||
if (bgp_in_graceful_restart()) {
|
||||
SET_FLAG(restart_time, GRACEFUL_RESTART_R_BIT);
|
||||
SET_FLAG(peer->cap, PEER_CAP_GRACEFUL_RESTART_R_BIT_ADV);
|
||||
}
|
||||
|
|
|
@ -1325,7 +1325,7 @@ void bgp_capability_send(struct peer *peer, afi_t afi, safi_t safi,
|
|||
stream_putc(s, 0);
|
||||
gr_restart_time = peer->bgp->restart_time;
|
||||
|
||||
if (peer->bgp->t_startup || bgp_in_graceful_restart()) {
|
||||
if (bgp_in_graceful_restart()) {
|
||||
SET_FLAG(gr_restart_time, GRACEFUL_RESTART_R_BIT);
|
||||
SET_FLAG(peer->cap, PEER_CAP_GRACEFUL_RESTART_R_BIT_ADV);
|
||||
}
|
||||
|
@ -2255,8 +2255,7 @@ static void bgp_update_receive_eor(struct bgp *bgp, struct peer *peer, afi_t afi
|
|||
|
||||
/* graceful-restart related processing */
|
||||
UNSET_FLAG(peer->af_sflags[afi][safi], PEER_STATUS_GR_WAIT_EOR);
|
||||
if ((bgp->t_startup || bgp_in_graceful_restart()) &&
|
||||
bgp_gr_supported_for_afi_safi(afi, safi)) {
|
||||
if (bgp_in_graceful_restart() && bgp_gr_supported_for_afi_safi(afi, safi)) {
|
||||
struct graceful_restart_info *gr_info;
|
||||
|
||||
gr_info = &(bgp->gr_info[afi][safi]);
|
||||
|
|
|
@ -3663,7 +3663,7 @@ DEFUN (bgp_neighbor_graceful_restart_disable_set,
|
|||
|
||||
ret = bgp_neighbor_graceful_restart(peer, PEER_DISABLE_CMD);
|
||||
if (ret == BGP_GR_SUCCESS) {
|
||||
if (peer->bgp->t_startup || bgp_in_graceful_restart())
|
||||
if (bgp_in_graceful_restart())
|
||||
bgp_peer_gr_flags_update(peer);
|
||||
|
||||
VTY_BGP_GR_ROUTER_DETECT(bgp, peer, peer->bgp->peer);
|
||||
|
|
12
bgpd/bgpd.c
12
bgpd/bgpd.c
|
@ -3420,14 +3420,6 @@ int peer_group_bind(struct bgp *bgp, union sockunion *su, struct peer *peer,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void bgp_startup_timer_expire(struct event *thread)
|
||||
{
|
||||
struct bgp *bgp;
|
||||
|
||||
bgp = EVENT_ARG(thread);
|
||||
bgp->t_startup = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* On shutdown we call the cleanup function which
|
||||
* does a free of the link list nodes, free up
|
||||
|
@ -3606,9 +3598,6 @@ peer_init:
|
|||
if (name && !bgp->name)
|
||||
bgp->name = XSTRDUP(MTYPE_BGP_NAME, name);
|
||||
|
||||
event_add_timer(bm->master, bgp_startup_timer_expire, bgp,
|
||||
bgp->restart_time, &bgp->t_startup);
|
||||
|
||||
/* printable name we can use in debug messages */
|
||||
if (inst_type == BGP_INSTANCE_TYPE_DEFAULT && !hidden) {
|
||||
bgp->name_pretty = XSTRDUP(MTYPE_BGP_NAME, "VRF default");
|
||||
|
@ -4145,7 +4134,6 @@ int bgp_delete(struct bgp *bgp)
|
|||
EVENT_OFF(bgp->t_revalidate[afi][safi]);
|
||||
|
||||
EVENT_OFF(bgp->t_condition_check);
|
||||
EVENT_OFF(bgp->t_startup);
|
||||
EVENT_OFF(bgp->t_maxmed_onstartup);
|
||||
EVENT_OFF(bgp->t_update_delay);
|
||||
EVENT_OFF(bgp->t_establish_wait);
|
||||
|
|
|
@ -554,9 +554,6 @@ struct bgp {
|
|||
struct as_confed *confed_peers;
|
||||
int confed_peers_cnt;
|
||||
|
||||
/* start-up timer on only once at the beginning */
|
||||
struct event *t_startup;
|
||||
|
||||
struct event *clearing_end;
|
||||
|
||||
uint32_t v_maxmed_onstartup; /* Duration of max-med on start-up */
|
||||
|
|
|
@ -112,6 +112,7 @@ from lib.common_config import (
|
|||
start_topology,
|
||||
kill_router_daemons,
|
||||
start_router_daemons,
|
||||
start_router_daemons_gr,
|
||||
verify_rib,
|
||||
check_address_types,
|
||||
write_test_footer,
|
||||
|
@ -1034,7 +1035,8 @@ def test_BGP_GR_TC_4_p0(request):
|
|||
)
|
||||
|
||||
logger.info("[Phase 5] : R2 is about to come up now ")
|
||||
start_router_daemons(tgen, "r2", ["bgpd"])
|
||||
|
||||
start_router_daemons_gr(tgen, "r2", ["bgpd"])
|
||||
|
||||
logger.info("[Phase 4] : R2 is UP now, so time to collect GR stats ")
|
||||
|
||||
|
@ -1200,15 +1202,16 @@ def test_BGP_GR_TC_5_1_2_p1(request):
|
|||
tc_name, result
|
||||
)
|
||||
|
||||
#Verify that the Rbit is be set to false
|
||||
result = verify_r_bit(tgen, topo, addr_type, input_dict, dut="r1", peer="r2")
|
||||
assert result is True, "Testcase {} : Failed \n Error {}".format(
|
||||
assert result is not True, "Testcase {} : Failed \n Error {}".format(
|
||||
tc_name, result
|
||||
)
|
||||
|
||||
logger.info("[Phase 2] : Restart BGPd on router R2. ")
|
||||
kill_router_daemons(tgen, "r2", ["bgpd"])
|
||||
|
||||
start_router_daemons(tgen, "r2", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r2", ["bgpd"])
|
||||
|
||||
logger.info("[Phase 4] : R2 is UP now, so time to collect GR stats ")
|
||||
|
||||
|
|
|
@ -113,6 +113,7 @@ from lib.common_config import (
|
|||
start_topology,
|
||||
kill_router_daemons,
|
||||
start_router_daemons,
|
||||
start_router_daemons_gr,
|
||||
verify_rib,
|
||||
check_address_types,
|
||||
write_test_footer,
|
||||
|
@ -359,7 +360,7 @@ def test_BGP_GR_TC_8_p1(request):
|
|||
kill_router_daemons(tgen, "r1", ["bgpd"])
|
||||
|
||||
logger.info("[Phase 3] : R1 is about to come up now ")
|
||||
start_router_daemons(tgen, "r1", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r1", ["bgpd"])
|
||||
|
||||
logger.info("[Phase 4] : R2 is UP now, so time to collect GR stats ")
|
||||
|
||||
|
|
|
@ -1597,7 +1597,7 @@ def test_BGP_GR_TC_9_p1(request):
|
|||
assert result is True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
||||
|
||||
result = verify_r_bit(tgen, topo, addr_type, input_dict, dut="r1", peer="r2")
|
||||
assert result is True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
||||
assert result is not True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
||||
|
||||
result = verify_f_bit(
|
||||
tgen, topo, addr_type, input_dict, dut="r1", peer="r2", expected=False
|
||||
|
|
|
@ -109,6 +109,7 @@ from lib.common_config import (
|
|||
start_topology,
|
||||
kill_router_daemons,
|
||||
start_router_daemons,
|
||||
start_router_daemons_gr,
|
||||
verify_rib,
|
||||
check_address_types,
|
||||
write_test_footer,
|
||||
|
@ -546,12 +547,12 @@ def test_BGP_GR_chaos_28_p1(request):
|
|||
logger.info("[Step 3] : Start BGPd daemon on R1..")
|
||||
|
||||
# Start BGPd daemon on R1
|
||||
start_router_daemons(tgen, "r1", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r1", ["bgpd"])
|
||||
|
||||
logger.info("[Step 4] : Start BGPd daemon on R3..")
|
||||
|
||||
# Start BGPd daemon on R3
|
||||
start_router_daemons(tgen, "r3", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r3", ["bgpd"])
|
||||
|
||||
# Verify r_bit
|
||||
for addr_type in ADDR_TYPES:
|
||||
|
|
|
@ -108,11 +108,13 @@ from lib.common_config import (
|
|||
start_topology,
|
||||
kill_router_daemons,
|
||||
start_router_daemons,
|
||||
start_router_daemons_gr,
|
||||
verify_rib,
|
||||
check_address_types,
|
||||
write_test_footer,
|
||||
check_router_status,
|
||||
get_frr_ipv6_linklocal,
|
||||
run_frr_cmd,
|
||||
required_linux_kernel_version,
|
||||
)
|
||||
|
||||
|
@ -722,10 +724,9 @@ def test_BGP_GR_chaos_37_p1(request):
|
|||
logger.info("[Step 4] : Start BGPd daemon on R1..")
|
||||
|
||||
# Start BGPd daemon on R1
|
||||
start_router_daemons(tgen, "r1", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r1", ["bgpd"])
|
||||
|
||||
logger.info("[Step 5] : Kill BGPd daemon on R3..")
|
||||
|
||||
# Kill BGPd daemon on R3
|
||||
kill_router_daemons(tgen, "r3", ["bgpd"])
|
||||
|
||||
|
@ -738,7 +739,10 @@ def test_BGP_GR_chaos_37_p1(request):
|
|||
logger.info("[Step 6] : Start BGPd daemon on R3..")
|
||||
|
||||
# Start BGPd daemon on R3
|
||||
start_router_daemons(tgen, "r3", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r3", ["bgpd"])
|
||||
|
||||
#Wait for session to come up
|
||||
sleep(120)
|
||||
|
||||
for addr_type in ADDR_TYPES:
|
||||
# Verify r_bit
|
||||
|
@ -910,7 +914,10 @@ def test_BGP_GR_chaos_30_p1(request):
|
|||
logger.info("[Step 4] : Start BGPd daemon on R1..")
|
||||
|
||||
# Start BGPd daemon on R1
|
||||
start_router_daemons(tgen, "r1", ["bgpd"])
|
||||
start_router_daemons_gr(tgen, "r1", ["bgpd"])
|
||||
|
||||
# Wait for select-deferral-timer to expire/EORs to be received
|
||||
sleep(360)
|
||||
|
||||
for addr_type in ADDR_TYPES:
|
||||
# Verifying BGP RIB routes before shutting down BGPd daemon
|
||||
|
|
|
@ -430,6 +430,24 @@ def start_router_daemons(tgen, router, daemons):
|
|||
return res
|
||||
|
||||
|
||||
def start_router_daemons_gr(tgen, router, daemons):
|
||||
"""
|
||||
Set -K option in daemons file before starting
|
||||
the daemon so that it can start in GR restarter mode.
|
||||
Currently supported for bgpd and zebra only.
|
||||
Remove -K option from daemons file once started
|
||||
"""
|
||||
#Adds extra parameters to daemons file for graceful restart
|
||||
for daemon in daemons:
|
||||
tgen.net[router].daemons_options[daemon] = "-K"
|
||||
|
||||
# Start daemon
|
||||
start_router_daemons(tgen, router, daemons)
|
||||
|
||||
# Remove graceful restart option
|
||||
for daemon in daemons:
|
||||
tgen.net[router].daemons_options[daemon] = ""
|
||||
|
||||
def check_router_status(tgen):
|
||||
"""
|
||||
Check if all daemons are running for all routers in topology
|
||||
|
|
Loading…
Reference in a new issue