Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bgpd: config connect timer not applied immediately for non-established peers. #7449

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions bgpd/bgpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -5305,9 +5305,14 @@ int peer_timers_connect_set(struct peer *peer, uint32_t connect)
peer->v_connect = connect;

/* Skip peer-group mechanics for regular peers. */
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
if (peer->status != Established) {
if (peer_active(peer))
BGP_EVENT_ADD(peer, BGP_Stop);
BGP_EVENT_ADD(peer, BGP_Start);
}
return 0;

}
/*
* Set flag and configuration on all peer-group members, unless they are
* explicitely overriding peer-group configuration.
Expand All @@ -5321,6 +5326,12 @@ int peer_timers_connect_set(struct peer *peer, uint32_t connect)
SET_FLAG(member->flags, PEER_FLAG_TIMER_CONNECT);
member->connect = connect;
member->v_connect = connect;

if (member->status != Established) {
if (peer_active(member))
BGP_EVENT_ADD(member, BGP_Stop);
BGP_EVENT_ADD(member, BGP_Start);
}
}

return 0;
Expand Down Expand Up @@ -5348,9 +5359,14 @@ int peer_timers_connect_unset(struct peer *peer)
peer->v_connect = peer->bgp->default_connect_retry;

/* Skip peer-group mechanics for regular peers. */
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
if (peer->status != Established) {
if (peer_active(peer))
BGP_EVENT_ADD(peer, BGP_Stop);
BGP_EVENT_ADD(peer, BGP_Start);
}
return 0;

}
/*
* Remove flag and configuration from all peer-group members, unless
* they are explicitely overriding peer-group configuration.
Expand All @@ -5364,6 +5380,12 @@ int peer_timers_connect_unset(struct peer *peer)
UNSET_FLAG(member->flags, PEER_FLAG_TIMER_CONNECT);
member->connect = 0;
member->v_connect = peer->bgp->default_connect_retry;

if (member->status != Established) {
if (peer_active(member))
BGP_EVENT_ADD(member, BGP_Stop);
BGP_EVENT_ADD(member, BGP_Start);
}
}

return 0;
Expand Down