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