Hello!

My first two thoughts are:

* add path
* filters

Is this something you can implement using neither of them?

Maria

On 10/5/21 11:24 AM, Johannes Ludwig wrote:
Hello everyone!


Currently I'm writing my bachelor thesis that also contains an implementation of an extension in BIRD and BGP. One building block is deleting a single route in BGP without triggering an Update message (with route withdraws) and the route must be deleted programmatically, so without receiving an Update message. The problem is, that I see no support for that. I can't call rte_update2 with /new == NULL/, because this would delete all routes that lead to the specified network. But I want to delete only one specific route! The problem description and what I have done so far:

Delete a specific route without triggering a BGP Update Message:

Since BGP has no use case where only a specific route should be deleted, this problem is difficult (at least for me). Normally we receive a Route Withdraw Message and can call rte_update2() with the not reachable network and when/ rte * new == NULL/ all routes that lead to the target network are deleted. But in my use case I only want to remove one specific route. At the moment I add specific /pflags/ to the /rte/ I want to delete and in rte_update2 I check if /new->pflags /has the specific value. If so, I jump to /drop/ in rte_update2, where the route is deleted. The route is deleted but no recalculation is done, therefore I set /new/ to the best route of the reachable network (/net->routes/) and jump to recalc in rte/_update2/(). I add my specific /pflags/ and when /bgp_rt_notify/ in attrs.c is called I return. Unbelievable but this works -- almost! My problem is that the route is deleted in the BIRD BGP Routingtable, so when I call /birdc show //route all /it shows me all routes without the deleted one (so far so good), BUT the kernel routing table is not changed. And this is the point where I have to change my approach.

To summarize my problem in one sentence: How can I delete a single route in BIRD without declaring a network as unreachable and calling rte_update2() with new == NULL, because this approach would lead to the deletion of all routes that lead to a network.


I hope someone can help me and maybe explain where I can look, what functions could be useful and what things I have to consider.

Many thanks in advance!


Johannes Ludwig

Reply via email to