Bird 2.0.8 - Automatic RPKI reload behaviour

Tiago Felipe Goncalves heisenbug at xpto.eng.br
Wed Oct 27 06:53:20 CEST 2021


Hello,

I'm curious to understand how "Automatic channel reloads based on RPKI changes" works, as I've noticed that after I enabled RPKI reload, the daemon is constantly reloading the ingress policies/filters. I have set it up in the laboratory and observed that the ingress policies/filters are constantly re-processed even if the following:
- We don't have RPKI RTR sessions flapping, being renegotiated, and/or changing state.
- We don't have a refresh requested from/to the clients/neighbours BGP sessions.
- We don't have BGP updates coming or going from/to BGP clients/neighbours at the moment that I see the ingress policy/filter being re-processed in bird2.
- We don't have RPKI ROA update/changes for the specific prefix during this meantime.

>From Bird doc:
"BIRD offers crude automatic re-validating of affected routes after RPKI update, see option rpki reload.
...
In contrast to to other filter operators, this status for the same route may change as the content of ROA tables changes. When this option is active, BIRD activates automatic reload of affected channels whenever ROA tables are updated (after a short settle time)."

I sincerely expected that the automatic reload would be triggered after an event (RPKI RTR session flapping/changing state) or if the specific ROA changes (not any ROA changes).
For small deployments, the extra load wouldn't be an issue, but I have deployments with 3k active clients/neighbours, and the extra load concerns me to use this function in production.

The lab env is using as minimal configuration as possible, doing RPKI validation (one RTR session with routinator), and 2 clients/neighbours. I just added a "print" to ingress protocol filter to see each time that the daemon process it:
Oct 26 07:21:19 bird_lab-01 bird: Reconfigured                                                                                                                                     
Oct 26 07:21:43 bird_lab-01 bird: Started                                                                                                                                          
Oct 26 07:21:48 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                                                                                                          
Oct 26 07:21:48 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                                                                                                       
Oct 26 07:26:43 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 07:26:43 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 07:47:21 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 07:47:21 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 08:07:52 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 08:07:52 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 08:20:39 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 08:20:39 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 08:43:35 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 08:43:35 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 09:04:07 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 09:04:07 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 09:26:56 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 09:26:56 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 09:47:28 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 09:47:28 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 10:08:00 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)                                                                                                 
Oct 26 10:08:00 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)                                                                                                 
Oct 26 10:28:36 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)
Oct 26 10:28:36 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)
Oct 26 10:51:29 bird_lab-01 bird: INGRESS FILTER => 192.168.0.0/24 => (path 65002)
Oct 26 10:51:29 bird_lab-01 bird: INGRESS FILTER => 192.168.1.0/24 => (path 65003)
...

bird> show proto
Name       Proto      Table      State  Since         Info
device1    Device     ---        up     2021-10-26 07:21:43  
kernel1    Kernel     master4    up     2021-10-26 07:21:43  
rpki1      RPKI       ---        up     2021-10-26 07:21:43  Established
TEST       BGP        ---        up     2021-10-26 07:21:47  Established   
TEST2      BGP        ---        up     2021-10-26 07:21:47  Established 


Configuration snippet(not production configuration):
...
filter BGP_IN
{
  RPKI_IPV4(65002);
  print "INGRESS FILTER => ", net, " => ", bgp_path;
  accept;
}

protocol bgp TEST from PEERS {
  neighbor 192.168.242.49 as 65002;
  ipv4 {
    import keep filtered on;
    import table yes;
    import filter BGP_IN;
    export all;
    next hop keep;
  };
}
...

When/if I disable the automatic RPKI reload(comment out import table yes), this behaviour(constantly re-processing ingress filters) is gone. 

If possible, could you please help me to understand if this is the expected behaviour for the automatic RPKI reload?

Thanks in advance!


Best regards,

Tiago Felipe Gonçalves
PGP Fingerprint - A2:82:BD:48:EE:8D:C4:99:C2:4E:81:D4:C4:7B:1C:2E:C7:F3:04:C9


More information about the Bird-users mailing list