Skip to content

Commit

Permalink
bgpd, topotests: bmp, fix wrong peer distinguisher value for peer vrf…
Browse files Browse the repository at this point in the history
… up/down

When running the bgp_bmp_2 vrf test, peer vrf up/down events from the pre
and post policy are received with a wrong peer distinguisher value.

> {"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}

RFC7854 mentions in 4.2 that if the peer is a "RD Instance Peer", it is
set to the route distinguisher of the particular instance the peer
belongs to.

Fix this by modifying the BMP client, update the peer distinguisher
value by filling the peer distinguisher in the bmp_peerstate function.

> {"peer_type": "route distinguisher instance", "policy": "pre-policy",
> "ipv6": true, "peer_ip": "192:168::2", "peer_distinguisher": "444:1",
> "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}

Add a test to check that peer_distinguisher value is not 0:0 when an
RD instance is set.

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

bmp_common_hdr(s, BMP_VERSION_3,
BMP_TYPE_PEER_UP_NOTIFICATION);
bmp_per_peer_hdr(s, peer->bgp, peer, 0,
BMP_PEER_TYPE_GLOBAL_INSTANCE, 0,
&uptime_real);
bmp_per_peer_hdr(s, peer->bgp, peer, 0, peer_type, peer_distinguisher, &uptime_real);

/* Local Address (16 bytes) */
if (is_locrib)
Expand Down Expand Up @@ -551,7 +549,7 @@ static struct stream *bmp_peerstate(struct peer *peer, bool down)

bmp_common_hdr(s, BMP_VERSION_3,
BMP_TYPE_PEER_DOWN_NOTIFICATION);
bmp_per_peer_hdr(s, peer->bgp, peer, 0, peer_type, 0, &uptime_real);
bmp_per_peer_hdr(s, peer->bgp, peer, 0, peer_type, peer_distinguisher, &uptime_real);

type_pos = stream_get_endp(s);
stream_putc(s, 0); /* placeholder for down reason */
Expand Down
2 changes: 2 additions & 0 deletions tests/topotests/bgp_bmp/bgpbmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ def bmp_check_for_peer_message(
# get the list of pairs (prefix, policy, seq) for the given message type
peers = []
for m in messages:
if is_rd_instance and m["peer_distinguisher"] == "0:0":
continue
if (
"peer_ip" in m.keys()
and m["peer_ip"] != "0.0.0.0"
Expand Down

0 comments on commit 268f3f7

Please sign in to comment.