Strange behaviour on filtering bgp_large_community ...

Ondrej Zajicek santiago at crfreenet.org
Fri May 19 01:43:48 CEST 2023


On Mon, May 15, 2023 at 12:59:11PM +0200, Tim Weippert via Bird-users wrote:
> Hi List, 
> 
> maybe i'm doing something wrong, but if i use some quick and dirty
> filter on the CLI all is working as expecting:
> 
> show route where bgp_large_community ~ [(65000, 0, 1001)]
> show route where (65000, 0, 1001) ~ bgp_large_community
> 
> both get the expected results, show all routes with the specific
> community attached.
> 
> If i use it in a filter function to filter the routes out:
> 
> function filter_large(int TestID)
> {
>   if ( bgp_large_community ~ [(65000, 0, TestID)] ) then { return false; }
>   return true;
> }
> 
> i get "all" routes, if clause doesn't get catched.
> 
> function filter_large_V2(int TestID)
> {
>   if ( (65000, 0, TestID) ~ bgp_large_community ) then { return false; }
>   return true;
> }
> 
> with the V2 function i get what i want, filter out all routes with the
> community attached and show all the rest.
> 
> I'm a little confused here, because the first version of the if clause is
> used for bgp_ext_community on several functions on my setup and working
> as expected, only for bgp_large_community i need to switch to if clause
> from version V2, and only in a function?

Hi

Set expressions like [...] in BIRD are static and created in parse-time.
Therefore [(65000, 0, 1001)] is valid, while [(65000, 0, TestID)] is
valid only if TestID is constant (like  with 'define TestID = 100;').

In your case of filter_large() the TestID is a local variable, so
[(65000, 0, TestID)] should fail during configuration parsing as
non-constant expression. It seems it is not checked, so it is probably
just evaluated TestID to zero or some random value and used that.

-- 
Elen sila lumenn' omentielvo

Ondrej 'Santiago' Zajicek (email: santiago at crfreenet.org)
OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net)
"To err is human -- to blame it on a computer is even more so."


More information about the Bird-users mailing list