From 2c722516c3b8cf3fe63853ed8cae2d518ec62f59 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Thu, 23 Feb 2023 22:54:12 +0200 Subject: [PATCH] bgpd: Convert peer_af_flag_check() to bool Since we increased peer->af_flags from uint32_t to uint64_t, peer_af_flag_check() was historically returning integer, and not bool as should be. The bug was that if we have af_flags higher than uint32_t it will never returned a right value. Signed-off-by: Donatas Abraitis --- bgpd/bgp_vty.c | 2 +- bgpd/bgpd.c | 5 +++-- bgpd/bgpd.h | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 8ef18a34d0..928a41e9ed 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -17154,7 +17154,7 @@ static bool peergroup_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, if (CHECK_FLAG(peer->af_flags_invert[afi][safi], flag)) return !peer_af_flag_check(peer, afi, safi, flag); else - return !!peer_af_flag_check(peer, afi, safi, flag); + return peer_af_flag_check(peer, afi, safi, flag); } return !!CHECK_FLAG(peer->af_flags_override[afi][safi], flag); diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 0fd0dafa22..26da5d3e26 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -977,9 +977,10 @@ void peer_flag_inherit(struct peer *peer, uint64_t flag) COND_FLAG(peer->flags, flag, group_val); } -int peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, uint32_t flag) +bool peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, + uint64_t flag) { - return CHECK_FLAG(peer->af_flags[afi][safi], flag); + return !!CHECK_FLAG(peer->af_flags[afi][safi], flag); } void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi, diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 2a7c7a3143..44da63bd54 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -2247,7 +2247,8 @@ extern int peer_af_flag_set(struct peer *peer, afi_t afi, safi_t safi, uint64_t flag); extern int peer_af_flag_unset(struct peer *peer, afi_t afi, safi_t safi, uint64_t flag); -extern int peer_af_flag_check(struct peer *, afi_t, safi_t, uint32_t); +extern bool peer_af_flag_check(struct peer *peer, afi_t afi, safi_t safi, + uint64_t flag); extern void peer_af_flag_inherit(struct peer *peer, afi_t afi, safi_t safi, uint64_t flag); extern void peer_change_action(struct peer *peer, afi_t afi, safi_t safi, -- 2.39.5