Hello!
On 2/26/23 19:17, d...@darkboxed.org wrote:
Hi Ondrej, Toke, Juliusz and lists,
I'm working on v4 of my bird route selection patch[1] and I just have a
couple babel spec and bird implementation questions.
[1]: http://trubka.network.cz/pipermail/bird-users/2023-January/016621.html
Just a quick recap for anyone not following my "Replace internal route
selection" patch: the idea is to install every feasible route into the bird
core and let it give us a callback (rt_notify) with the optimal route it
picked instead of doing this in the babel protocol.
As Toke noted up to my v3 patch I break sending seqno requests when we
loose the last feasible route (RFC8966 section 3.8.2.1.) because I
accidentally removed the code which deals with that together with the
babel_select_route function.
To fix this I tried to move that code to our rt_notify callback instead. In
testing I've found a major problem with this approach however. Say the
babel proto is currently exporting a route to the core, then a more
preferred route is exported by some other protocol (say "static") and then
the babel route expires.
In this case we ought to send a seqno request when the babel routes go away
but rt_notify doesn't get called since the selected (static) route didn't
change at all.
I don't think RFC8966 is really framed in bird's "multi protocol" mindset
so it's unclear to me whether this is something we have to fix or
not. Section 3.8.2.1. says:
A node that has lost all feasible routes to a given destination but still
has unexpired unfeasible routes to that destination MUST send a seqno
request;
I could for example read this as the above mentioned static route
constituting a feasible route received from a bird "internal" babel
neighbour which would make the behaviour described above perfectly fine,
no?
From my point of view, this is perfectly fine.
@Bird folks: can anyone think of a way to be notified of any and all
changes in rt_notify? I assume it's not possible from some light reading of
the nest code but figured I might as well ask.
You may set channel ra_mode to RA_ANY, getting called rt_notify() for
all route updates.
Or in BIRD 3, you can override the channel logic at all and if you don't
mind calling your filters yourself, you can just request "on any change,
give me all the routes for one prefix at once" and do whatever you want
with the routes. Yet these changes most probably won't get backported to
BIRD 2.
Maria