Skip to content

Commit

Permalink
bgpd, topotests: bmp, fix wrong peer type for peer up/down events
Browse files Browse the repository at this point in the history
When running the bgp_bmp_2 vrf test, peer up/down events from the pre
and post policy are received with a wrong peer type value

> {"peer_type": "global instance", "policy": "pre-policy", "ipv6": false,
> "peer_ip": "192.168.0.2", "peer_distinguisher": "0:0", "peer_asn": 65502,
> "peer_bgp_id": "192.168.0.2", "timestamp": "2024-10-16 21:59:53.111962",
> "bmp_log_type": "peer up", "local_ip": "192.168.0.1", "local_port": 179,
> "remote_port": 50710, "seq": 4}

RFC7854 defines RD instance peer type, and later in 4.2 requests that
the peer distinguisher value be set to non zero value when the peer type
is not global. This is the case for peer vrf instances.

Fix this by modifying the BMP client, update the peer type
value by updating the peer type value when sending peer up/down messages.

Add a check in the bgp_bmp_2 test to ensure that peer type is correctly
set.

> {"peer_type": "route distinguisher instance", "policy": "pre-policy",
> "ipv6": true, "peer_ip": "192:168::2", "peer_distinguisher": "0:0",
> "peer_asn": 65502, "peer_bgp_id": "192.168.0.2", "timestamp":
> "2024-10-16 21:59:53.111962", "bmp_log_type": "peer up", "local_ip":
> "192:168::1", "local_port": 179, "remote_port": 50836, "seq": 5}

Signed-off-by: Philippe Guibert <[email protected]>
  • Loading branch information
pguibert6WIND committed Dec 3, 2024
1 parent a745a29 commit 9efe823
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
3 changes: 0 additions & 3 deletions bgpd/bgp_bmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -472,9 +472,6 @@ static struct stream *bmp_peerstate(struct peer *peer, bool down)
uint8_t peer_type = bmp_get_peer_type(peer);
bool is_locrib = peer_type == BMP_PEER_TYPE_LOC_RIB_INSTANCE;

if (is_locrib == false)
peer_type = BMP_PEER_TYPE_GLOBAL_INSTANCE;

if (bmp_get_peer_distinguisher(peer->bgp, AFI_UNSPEC, peer_type, &peer_distinguisher)) {
zlog_warn("skipping bmp message for peer %s: can't get peer distinguisher",
peer->host);
Expand Down
4 changes: 3 additions & 1 deletion tests/topotests/bgp_bmp/bgpbmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def bmp_check_for_prefixes(


def bmp_check_for_peer_message(
expected_peers, bmp_log_type, bmp_collector, bmp_log_file
expected_peers, bmp_log_type, bmp_collector, bmp_log_file, is_rd_instance=False
):
"""
Check for the presence of a peer up message for the peer
Expand All @@ -211,6 +211,8 @@ def bmp_check_for_peer_message(
and m["peer_ip"] != "0.0.0.0"
and m["bmp_log_type"] == bmp_log_type
):
if is_rd_instance and m["peer_type"] != "route distinguisher instance":
continue
peers.append(m["peer_ip"])
elif m["policy"] == "loc-rib" and m["bmp_log_type"] == bmp_log_type:
peers.append("0.0.0.0")
Expand Down
2 changes: 2 additions & 0 deletions tests/topotests/bgp_bmp/test_bgp_bmp_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ def test_peer_up():
"peer up",
tgen.gears["bmp1vrf"],
os.path.join(tgen.logdir, "bmp1vrf", "bmp.log"),
is_rd_instance=True,
)
success, _ = topotest.run_and_expect(test_func, True, count=30, wait=1)
assert success, "Checking the updated prefixes has been failed !."
Expand Down Expand Up @@ -245,6 +246,7 @@ def test_peer_down():
"peer down",
tgen.gears["bmp1vrf"],
os.path.join(tgen.logdir, "bmp1vrf", "bmp.log"),
is_rd_instance=True,
)
success, _ = topotest.run_and_expect(test_func, True, count=30, wait=1)
assert success, "Checking the updated prefixes has been failed !."
Expand Down

0 comments on commit 9efe823

Please sign in to comment.