Hello bird community, I'm trying to implement a peer-based MRAI on Bird, but before everything else, I would like to hear from you what do you think about my implementation idea.
My idea is to act before prefixes go into the bucket_queue data structure and using a timer inside the bgp_channel.
When a new prefix arrives to bgp_rt_notify function I'll do this checks before the add_tail(buck->prefixes, px->bucket_node)
I check if there is an actual MRAI timer active on the channel c if there is no timer I append the prefix to the prefixes of the buket_queue and I set a new timer equal to MRAI.
If the timer was set before I have to append this prefix to a different queue, "pending_buket_queue", before the append I'll do the correct checks if it already exists with an hash-table in the channel for the pending buckets.
When the timer expires pending buckets will be transferred to the bucket_queue, and now I need to send the updated bucket_queue.
After the transmission, the timer will be updated with the MRAI value.
If at the timer expiration there are no pending buckets the timer will not be rebooted.
My doubts are for the most on the triggered send at the timer expiration, how can I trigger a "bgp_update_process"?
And what do you think about this way to implement a peer-based MRAI?
Obviously, the MRAI timer will be set with a parameter in the conf file.