[PATCH v2] conf: only offer bfd in bgp if bfd protocol is enabled
When trying to build bird with bfd support disabled (e.g. ./configure --with-protocols=bgp,static), it fails since the bgp configuration code expects bfd to be around. This patch makes the bfd option in the bgp protocol unavailable using some preprocessor logic if we are building without bfd. I'm currently trying to port bird to mac os x and the bfd module continues to cause trouble. Disabling it would therefore be useful. Sorry, with the first patch I accidentally managed to include the patch file itself. Here is a clean one. --- conf/Makefile | 4 +++- nest/config.Y | 2 ++ proto/bgp/config.Y | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/conf/Makefile b/conf/Makefile index 19db9c2c..0fa6749a 100644 --- a/conf/Makefile +++ b/conf/Makefile @@ -14,8 +14,10 @@ $(o)cf-parse.y: $(s)gen_parser.m4 $(o)keywords.h: $(s)gen_keywords.m4 $(o)commands.h: $(s)gen_commands.m4 +enabled_protocols_m4_defines = $(foreach protocol,$(protocols),-D PROTOCOL_$(protocol)_ENABLED) + $(conf-y-targets): $(s)confbase.Y $(s)flowspec.Y - $(M4) $(M4FLAGS) -P $(if $(word 2,$(filter %.m4,$^)),$(error "Too many M4 scripts for one target"),$(filter %.m4,$^)) $(filter %.Y,$^) >$@ + $(M4) $(M4FLAGS) -P $(enabled_protocols_m4_defines) $(if $(word 2,$(filter %.m4,$^)),$(error "Too many M4 scripts for one target"),$(filter %.m4,$^)) $(filter %.Y,$^) >$@ $(o)cf-parse.tab.h: $(o)cf-parse.tab.c diff --git a/nest/config.Y b/nest/config.Y index 62b28072..a560a12f 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -603,6 +603,7 @@ password_item_end: /* BFD options */ +m4_ifdef([[PROTOCOL_bfd_ENABLED]],[[ bfd_item: INTERVAL expr_us { this_bfd_opts->min_rx_int = this_bfd_opts->min_tx_int = $2; } @@ -647,6 +648,7 @@ bfd_opts_end: bfd_opts: bfd_opts_start '{' bfd_items '}' bfd_opts_end ; +]]) /* Core commands */ diff --git a/proto/bgp/config.Y b/proto/bgp/config.Y index 4ce06488..f15cbad3 100644 --- a/proto/bgp/config.Y +++ b/proto/bgp/config.Y @@ -220,11 +220,12 @@ bgp_proto: | bgp_proto CHECK LINK bool ';' { BGP_CFG->check_link = $4; } | bgp_proto BFD bool ';' { if ($3) init_bfd_opts(&BGP_CFG->bfd); else BGP_CFG->bfd = NULL; } | bgp_proto BFD GRACEFUL ';' { init_bfd_opts(&BGP_CFG->bfd); BGP_CFG->bfd->mode = BGP_BFD_GRACEFUL; } - | bgp_proto BFD { open_bfd_opts(&BGP_CFG->bfd); } bfd_opts { close_bfd_opts(); } ';' | bgp_proto ENFORCE FIRST AS bool ';' { BGP_CFG->enforce_first_as = $5; } | bgp_proto LOCAL ROLE bgp_role_name ';' { BGP_CFG->local_role = $4; } | bgp_proto REQUIRE ROLES bool ';' { BGP_CFG->require_roles = $4; } | bgp_proto DISABLE RX bool ';' { BGP_CFG->disable_rx = $4; } + /* Since BFD is optional, only add the BFD option when building with BFD enabled */ + m4_ifdef([[PROTOCOL_bfd_ENABLED]],[[ | bgp_proto BFD { open_bfd_opts(&BGP_CFG->bfd); } bfd_opts { close_bfd_opts(); } ';']]) ; bgp_afi: -- 2.39.3 (Apple Git-146)
On Fri, May 24, 2024 at 02:54:03PM +0200, Yuri Honegger via Bird-users wrote:
When trying to build bird with bfd support disabled (e.g. ./configure --with-protocols=bgp,static), it fails since the bgp configuration code expects bfd to be around.
This patch makes the bfd option in the bgp protocol unavailable using some preprocessor logic if we are building without bfd.
Hi Thanks for the patch. Build failure with BFD disabled is clearly a bug. Using Make functions to define M4 macros to control Bison grammars seems like a little bit complex solution, so i just fixed it on Bison level by moving bfd_opts grammar to the appropriate place: https://gitlab.nic.cz/labs/bird/-/commit/e29f134ad9346343277b7cb4581d2a70459... -- Elen sila lumenn' omentielvo Ondrej 'Santiago' Zajicek (email: santiago@crfreenet.org) "To err is human -- to blame it on a computer is even more so."
participants (2)
-
Ondrej Zajicek -
Yuri Honegger