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: bmp loc-rib peer up/down for vrfs #17001

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

louis-6wind
Copy link
Contributor

added bmp bgp peer for vrfs
added peer up vrf in bmp peer up state
added vrf state in bmpbgp
added safe bmp_peer_sendall : bmp_peer_sendall_safe
changed bgp_open_send to call new bgp_open_make
bgp_open_make creates a bgp open packet, now used in bmp for peer up vrf
added hook and call to bgp instance state
vrf peer state is recomputed when interfaces (including vrf itf) go up / down
and when it gets created or removed

Link: mxyns@e48ba38
Signed-off-by: Philippe Guibert [email protected]
Signed-off-by: Louis Scalbert [email protected]
Signed-off-by: Maxence Younsi [email protected]

Check export labels to pre-policy bmp

Signed-off-by: Louis Scalbert <[email protected]>
bgpd/bgp_bmp.c Outdated
struct stream *s = bmp_peerstate(bmpbgp->bgp->peer_self, bmpbgp->vrf_up == vrf_state_down);

if (!s) {
zlog_warn("bmp: peer state error");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally, I don't understand this warning (or error)...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed

bgpd/bgp_bmp.c Outdated
@@ -570,6 +641,14 @@ static void bmp_send_all(struct bmp_bgp *bmpbgp, struct stream *s)
stream_free(s);
}

static void bmp_send_all_safe(struct bmp_bgp *bmpbgp, struct stream *s)
{
if (!s || !bmpbgp)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this be &&? Because if bmpbgp is NULL, then bmp_send_all() would dereference it...?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed to

if (!bmpbgp)
stream_free(s);

@@ -698,12 +678,40 @@ void bgp_open_send(struct peer_connection *connection)
/* Set BGP packet length. */
bgp_packet_set_size(s);


Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we drop this change?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dropped

bgpd/bgp_main.c Outdated
@@ -319,6 +324,8 @@ static int bgp_vrf_disable(struct vrf *vrf)
{
struct bgp *bgp;

zlog_info("BGP VRF DISABLE %s", vrf->name);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we drop this or guard by debug foo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dropped

bgpd/bgp_main.c Outdated
@@ -286,6 +289,8 @@ static int bgp_vrf_enable(struct vrf *vrf)
struct bgp *bgp;
vrf_id_t old_vrf_id;

zlog_info("BGP VRF ENABLE %s", vrf->name);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we drop this or guard by debug foo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dropped

bgpd/bgp_main.c Outdated
@@ -275,6 +277,7 @@ static int bgp_vrf_new(struct vrf *vrf)

static int bgp_vrf_delete(struct vrf *vrf)
{
zlog_info("BGP VRF DELETE %s", vrf->name);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we drop this or guard by debug foo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dropped

bgpd/bgp_main.c Outdated
@@ -267,6 +267,8 @@ static __attribute__((__noreturn__)) void bgp_exit(int status)

static int bgp_vrf_new(struct vrf *vrf)
{
zlog_info("BGP VRF CREATE %s", vrf->name);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we drop this or guard by debug foo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dropped

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dropped

BMP_PEERDOWN_REMOTE_NOTIFY = 3,
BMP_PEERDOWN_REMOTE_CLOSE = 4,
BMP_PEERDOWN_ENDMONITOR = 5,
BMP_PEERDOWN_LOCAL_TLV = 6,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see this https://datatracker.ietf.org/doc/html/rfc7854#section-10.8 Peer Down type, is it defined somewhere else?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mxyns and others added 3 commits October 4, 2024 13:53
added bmp bgp peer for vrfs
added peer up vrf in bmp peer up state
added vrf state in bmpbgp
added safe bmp_peer_sendall : bmp_peer_sendall_safe
changed bgp_open_send to call new bgp_open_make
bgp_open_make creates a bgp open packet, now used in bmp for peer up vrf
added hook and call to bgp instance state
vrf peer state is recomputed when interfaces (including vrf itf) go up / down
and when it gets created or removed

Link: mxyns@e48ba38
Signed-off-by: Philippe Guibert <[email protected]>
Signed-off-by: Louis Scalbert <[email protected]>
Signed-off-by: Maxence Younsi <[email protected]>
Log "peer up" message type in BMP collector logs.

Signed-off-by: Louis Scalbert <[email protected]>
Add peer down log in bmp collector

Signed-off-by: Louis Scalbert <[email protected]>
Check for bmp peer up / down  messages

Signed-off-by: Louis Scalbert <[email protected]>
Add test to check BMP in VRF.

Note that the following configuration works with interface r1-eth0
towards 192.0.2.10 (BMP collector) in the default VRF but not in vrf1.

> router bgp 65501 vrf vrf1
>  bmp targets bmp1
>   bmp connect 192.0.2.10 port 1789 min-retry 100 max-retry 10000

Also, for some reasons, the test works even without "bgpd: bmp loc-rib
peer up/down for vrfs" commit.

Signed-off-by: Louis Scalbert <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants