Skip to content

Commit

Permalink
Merge pull request #10185 from FRRouting/mergify/bp/stable/8.0/pr-10144
Browse files Browse the repository at this point in the history
bgpd: Handle Delete status when peers flapping for BMP (backport #10144)
  • Loading branch information
idryzhov committed Dec 7, 2021
2 parents 8558b17 + 3e388b6 commit 085e51c
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions bgpd/bgp_bmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -688,22 +688,32 @@ static int bmp_outgoing_packet(struct peer *peer, uint8_t type, bgp_size_t size,
return 0;
}

static int bmp_peer_established(struct peer *peer)
static int bmp_peer_status_changed(struct peer *peer)
{
struct bmp_bgp *bmpbgp = bmp_bgp_find(peer->bgp);
struct bmp_bgp_peer *bbpeer, *bbdopp;

frrtrace(1, frr_bgp, bmp_peer_status_changed, peer);

if (!bmpbgp)
return 0;

if (peer->status == Deleted) {
bbpeer = bmp_bgp_peer_find(peer->qobj_node.nid);
if (bbpeer) {
XFREE(MTYPE_BMP_OPEN, bbpeer->open_rx);
XFREE(MTYPE_BMP_OPEN, bbpeer->open_tx);
bmp_peerh_del(&bmp_peerh, bbpeer);
XFREE(MTYPE_BMP_PEER, bbpeer);
}
return 0;
}

/* Check if this peer just went to Established */
if ((peer->ostatus != OpenConfirm) || !(peer_established(peer)))
return 0;

if (peer->doppelganger && (peer->doppelganger->status != Deleted)) {
struct bmp_bgp_peer *bbpeer, *bbdopp;

bbpeer = bmp_bgp_peer_get(peer);
bbdopp = bmp_bgp_peer_find(peer->doppelganger->qobj_node.nid);
if (bbdopp) {
Expand Down Expand Up @@ -2433,7 +2443,7 @@ static int bgp_bmp_module_init(void)
{
hook_register(bgp_packet_dump, bmp_mirror_packet);
hook_register(bgp_packet_send, bmp_outgoing_packet);
hook_register(peer_status_changed, bmp_peer_established);
hook_register(peer_status_changed, bmp_peer_status_changed);
hook_register(peer_backward_transition, bmp_peer_backward);
hook_register(bgp_process, bmp_process);
hook_register(bgp_inst_config_write, bmp_config_write);
Expand Down

0 comments on commit 085e51c

Please sign in to comment.