Hello bird users,
I am wondering how you handle matching both IPv6 and IPv4 prefixes efficiently. We have tons of blocks in our config like these: define net_genauso_v6 = [ 2a0a:5480::/29+ ]; define net_genauso_v4 = [ 185.203.113.0/24, 185.116.114.0/24 ]; And then later we have a function that combines them like this: function is_genauso() -> bool { if ((net ~ net_genauso_v6) || (net ~ net_genauso_v4)) then { return true; } return false; } And then much later, we have various filters utilising the function, the most simple one being: filter genauso { if(is_genauso()) then accept; reject; } Which is then used in both IPv4 & IPv6 channels: protocol bgp incoming_r2ge { ... ipv6 { import filter genauso; export none; }; ipv4 { import filter genauso; export none; extended next hop on; }; } Instead of writing a wrapper function for each peer/constellation, it would be great if we could do something like that: define net_genauso = [ 2a0a:5480::/29+, 185.203.113.0/24, 185.116.114.0/24 ]; ... filter genauso { if(net ~ net_genauso) then accept; reject; } ... However as of bird 2.14, this results in the following error: bridge:~nico# bird -f -c ./bird.conf bird: ./bird.conf:208:23 Mixed IPv4/IPv6 prefixes in prefix set. So my question is, how do you usually match on the two families? Do you also write a wrapper function like above? Or do you have a smarter way? BR, Nico -- Sustainable and modern Infrastructures by ungleich.ch