Hello Łukasz,

the warning lines are also for several latest versions of BIRD 2 and they just tell you that the return type of the function has been inferred from the return call, instead of you specifying "function foo() -> bool".

More on that in docs: <https://bird.nic.cz/doc/bird-3.1.2.html#filters-intro>

Also please note that 3.1.1 has some serious problems with channel reload when import table is not present, please try 3.1.2 instead.

Maria


On June 3, 2025 5:00:39 PM GMT+02:00, "Łukasz Trąbiński" <lukasz@trabinski.net> wrote:
Hello

Could You send me example of rpki config for Bird 3.x.x?
In 2.x.x, I’m use something like below, but it’s not working with 3.x.x

Jun 2 23:29:16 peer bird[2100437]: bird: 2025-06-02 23:29:16.712 [0001] <WARN> /etc/bird.conf:67:71: Inferring function is_v4_rpki_invalid return type from its return value: bool
Jun 2 23:29:16 peer bird[2100437]: bird: 2025-06-02 23:29:16.712 [0001] <WARN> /etc/bird.conf:71:71: Inferring function is_v6_rpki_invalid return type from its return value: bool
Jun 2 23:29:16 peer bird[2100437]: /etc/bird.conf:67:71: Inferring function is_v4_rpki_invalid return type from its return value: bool
Jun 2 23:29:16 peer bird[2100437]: /etc/bird.conf:71:71: Inferring function is_v6_rpki_invalid return type from its return value: bool


—snip--

roa4 table r4;
roa6 table r6;

protocol rpki rpki1
{
roa4 { table r4; };
roa6 { table r6; };
remote xx.xx.xx.xx port 3323;
retry 300;
}

function is_v4_rpki_invalid () {
return roa_check(r4, net, bgp_path.last_nonaggregated) = ROA_INVALID;
}

function is_v6_rpki_invalid () {
return roa_check(r6, net, bgp_path.last_nonaggregated) = ROA_INVALID;
}

filters bgp_import {
if is_v4_rpki_invalid() then reject;
accept;
}

— snip —



--
Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.