mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 20:51:17 +00:00
bgpd: Send End-of-RIB not only if Graceful Restart capability is received
Before we checked for received Graceful Restart capability, but that was also incorrect, because we SHOULD HAVE checked it per AFI/SAFI instead. https://datatracker.ietf.org/doc/html/rfc4724 says: Although the End-of-RIB marker is specified for the purpose of BGP graceful restart, it is noted that the generation of such a marker upon completion of the initial update would be useful for routing convergence in general, and thus the practice is recommended. Thus, it might be reasonable to send EoR regardless of whether the Graceful Restart capability is received or not from the peer. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
parent
8e7bc85b71
commit
637ab53f75
@ -560,40 +560,37 @@ void bgp_generate_updgrp_packets(struct event *thread)
|
||||
}
|
||||
}
|
||||
|
||||
if (CHECK_FLAG(peer->cap,
|
||||
PEER_CAP_RESTART_RCV)) {
|
||||
if (!(PAF_SUBGRP(paf))->t_coalesce
|
||||
&& peer->afc_nego[afi][safi]
|
||||
&& peer->synctime
|
||||
&& !CHECK_FLAG(
|
||||
peer->af_sflags[afi][safi],
|
||||
PEER_STATUS_EOR_SEND)) {
|
||||
/* If EOR is disabled,
|
||||
* the message is not sent
|
||||
*/
|
||||
if (BGP_SEND_EOR(peer->bgp, afi,
|
||||
safi)) {
|
||||
SET_FLAG(
|
||||
peer->af_sflags
|
||||
[afi]
|
||||
[safi],
|
||||
PEER_STATUS_EOR_SEND);
|
||||
/* rfc4724 says:
|
||||
* Although the End-of-RIB marker is
|
||||
* specified for the purpose of BGP
|
||||
* graceful restart, it is noted that
|
||||
* the generation of such a marker upon
|
||||
* completion of the initial update would
|
||||
* be useful for routing convergence in
|
||||
* general, and thus the practice is
|
||||
* recommended.
|
||||
*/
|
||||
if (!(PAF_SUBGRP(paf))->t_coalesce &&
|
||||
peer->afc_nego[afi][safi] &&
|
||||
peer->synctime &&
|
||||
!CHECK_FLAG(peer->af_sflags[afi][safi],
|
||||
PEER_STATUS_EOR_SEND)) {
|
||||
/* If EOR is disabled, the message is
|
||||
* not sent.
|
||||
*/
|
||||
if (!BGP_SEND_EOR(peer->bgp, afi, safi))
|
||||
continue;
|
||||
|
||||
/* Update EOR
|
||||
* send time
|
||||
*/
|
||||
peer->eor_stime[afi]
|
||||
[safi] =
|
||||
monotime(NULL);
|
||||
SET_FLAG(peer->af_sflags[afi][safi],
|
||||
PEER_STATUS_EOR_SEND);
|
||||
|
||||
BGP_UPDATE_EOR_PKT(
|
||||
peer, afi, safi,
|
||||
s);
|
||||
bgp_process_pending_refresh(
|
||||
peer, afi,
|
||||
safi);
|
||||
}
|
||||
}
|
||||
/* Update EOR send time */
|
||||
peer->eor_stime[afi][safi] =
|
||||
monotime(NULL);
|
||||
|
||||
BGP_UPDATE_EOR_PKT(peer, afi, safi, s);
|
||||
bgp_process_pending_refresh(peer, afi,
|
||||
safi);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user