[PATCH v1] conf: only offer bfd in bgp if bfd protocol is enabled

Yuri Honegger yuri.honegger at icloud.com
Fri May 24 14:34:11 CEST 2024


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.
---
 conf/Makefile                                 |  4 +-
 nest/config.Y                                 |  2 +
 proto/bgp/config.Y                            |  3 +-
 ...er-bfd-in-bgp-if-bfd-protocol-is-ena.patch | 71 +++++++++++++++++++
 4 files changed, 78 insertions(+), 2 deletions(-)
 create mode 100644 v1-0001-conf-only-offer-bfd-in-bgp-if-bfd-protocol-is-ena.patch

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:
diff --git a/v1-0001-conf-only-offer-bfd-in-bgp-if-bfd-protocol-is-ena.patch b/v1-0001-conf-only-offer-bfd-in-bgp-if-bfd-protocol-is-ena.patch
new file mode 100644
index 00000000..35480512
--- /dev/null
+++ b/v1-0001-conf-only-offer-bfd-in-bgp-if-bfd-protocol-is-ena.patch
@@ -0,0 +1,71 @@
+From f0e82b5f5ac02ea7a932da761c233b19a001a38c Mon Sep 17 00:00:00 2001
+From: Yuri Honegger <yuri.honegger at icloud.com>
+Date: Fri, 24 May 2024 14:31:08 +0200
+Subject: [PATCH v1] 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.
+---
+ 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)
+
-- 
2.39.3 (Apple Git-146)



More information about the Bird-users mailing list