Deleting a single route in BGP

Maria Matejka maria.matejka at nic.cz
Tue Oct 5 11:44:43 CEST 2021


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


More information about the Bird-users mailing list