From 3b56bf8849283977f2f4fa7b8f3dc62fdd8d7587 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Thu, 12 Nov 2020 04:02:38 +0100 Subject: BFD: Better handling of BFD options in BGP configs Merge multiple BFD option blocks in BGP configs instead of using the last one. That is necessary for proper handling of templates when BFD options are used both in a BGP template and in a BGP protocol derived from that template. --- nest/config.Y | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'nest') diff --git a/nest/config.Y b/nest/config.Y index 73556f15..83f2c7ba 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -52,6 +52,28 @@ get_passwords(void) return rv; } +static inline void +init_bfd_opts(struct bfd_options **opts) +{ + cf_check_bfd(1); + + if (! *opts) + *opts = bfd_new_options(); +} + +static inline void +open_bfd_opts(struct bfd_options **opts) +{ + init_bfd_opts(opts); + this_bfd_opts = *opts; +} + +static inline void +close_bfd_opts(void) +{ + this_bfd_opts = NULL; +} + static void proto_postconfig(void) { @@ -99,7 +121,6 @@ CF_ENUM_PX(T_ENUM_AF, AF_, AFI_, IPV4, IPV6) %type proto_patt proto_patt2 %type channel_start proto_channel %type limit_spec -%type bfd_opts %type r_args_for_val %type r_args_for %type r_args_channel @@ -519,7 +540,7 @@ bfd_items: ; bfd_opts: - '{' { this_bfd_opts = bfd_new_options(); } bfd_items '}' { $$ = this_bfd_opts; this_bfd_opts = NULL; } + '{' bfd_items '}' ; /* Core commands */ -- cgit v1.2.3