From 2f62d91b61128ae78b9b80b7767e82e05c9e8aaf Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Tue, 18 Apr 2023 17:21:13 +0200 Subject: [PATCH] BMP: Allow build without BMP and disable BMP build by default It has still several important issues to be enabled by default. --- configure.ac | 2 +- proto/bgp/bgp.c | 5 ++++- proto/bgp/packets.c | 6 ++++++ proto/bmp/bmp.h | 18 +++++++++++++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index f2091219..c9c52038 100644 --- a/configure.ac +++ b/configure.ac @@ -312,7 +312,7 @@ if test "$enable_mpls_kernel" != no ; then fi fi -all_protocols="$proto_bfd babel bgp bmp mrt ospf perf pipe radv rip rpki static" +all_protocols="$proto_bfd babel bgp mrt ospf perf pipe radv rip rpki static" all_protocols=`echo $all_protocols | sed 's/ /,/g'` diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index a6d30eff..c806765a 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -1694,7 +1694,6 @@ bgp_init(struct proto_config *CF) struct bgp_config *cf = (struct bgp_config *) CF; P->rt_notify = bgp_rt_notify; - P->rte_update_in_notify = bgp_rte_update_in_notify; P->preexport = bgp_preexport; P->neigh_notify = bgp_neigh_notify; P->reload_routes = bgp_reload_routes; @@ -1706,6 +1705,10 @@ bgp_init(struct proto_config *CF) P->rte_modify = bgp_rte_modify_stale; P->rte_igp_metric = bgp_rte_igp_metric; +#ifdef CONFIG_BMP + P->rte_update_in_notify = bgp_rte_update_in_notify; +#endif + p->cf = cf; p->is_internal = (cf->local_as == cf->remote_as); p->is_interior = p->is_internal || cf->confederation_member; diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c index 42016eae..b9537169 100644 --- a/proto/bgp/packets.c +++ b/proto/bgp/packets.c @@ -2407,6 +2407,9 @@ bgp_create_mp_unreach(struct bgp_write_state *s, struct bgp_bucket *buck, byte * return buf+11+len; } + +#ifdef CONFIG_BMP + static byte * bgp_create_update_bmp(struct bgp_channel *c, byte *buf, struct bgp_bucket *buck, bool update) { @@ -2489,6 +2492,9 @@ bgp_rte_update_in_notify(struct channel *C, const net_addr *n, bmp_route_monitor_put_update_in_pre_msg(buf, end - buf); } +#endif /* CONFIG_BMP */ + + static byte * bgp_create_update(struct bgp_channel *c, byte *buf) { diff --git a/proto/bmp/bmp.h b/proto/bmp/bmp.h index ff02d3b2..22ee79c3 100644 --- a/proto/bmp/bmp.h +++ b/proto/bmp/bmp.h @@ -85,6 +85,9 @@ struct bmp_proto { bool started; // Flag that stores running status of BMP instance }; + +#ifdef CONFIG_BMP + /** * bmp_put_sent_bgp_open_msg - save sent BGP OPEN msg packet in BMP implementation. * NOTE: If there has been passed sent and received BGP OPEN MSGs to the BMP @@ -135,4 +138,17 @@ void bmp_peer_down(const struct bgp_proto *bgp, const int err_class, const byte *pkt, size_t pkt_size); -#endif /* _BIRD_BMP_H_ */ + +#else /* BMP build disabled */ + +static inline void bmp_put_sent_bgp_open_msg(const struct bgp_proto *bgp UNUSED, const byte* pkt UNUSED, const size_t pkt_size UNUSED) { } +static inline void bmp_put_recv_bgp_open_msg(const struct bgp_proto *bgp UNUSED, const byte* pkt UNUSED, const size_t pkt_size UNUSED) { } +static inline void bmp_route_monitor_update_in_pre_begin(void) { } +static inline void bmp_route_monitor_put_update_in_pre_msg(const byte *data UNUSED, const size_t data_size UNUSED) { } +static inline void bmp_route_monitor_update_in_pre_commit(const struct bgp_proto *bgp UNUSED) { } +static inline void bmp_route_monitor_update_in_pre_end(void) { } +static inline void bmp_peer_down(const struct bgp_proto *bgp UNUSED, const int err_class UNUSED, const byte *pkt UNUSED, size_t pkt_size UNUSED) { } + +#endif /* CONFIG_BMP */ + +#endif /* _BIRD_BMP_H_ */