Hi Ondrej, On Tue, Jan 31, 2023 at 06:35:27PM +0100, Ondrej Zajicek wrote:
There are some corner cases where the behavior may be different - e.g., if one has Babel and BGP with add-path enabled connected to one table, then all Babel routes would be propagated with BGP. Or if you have a pipe to another table that would filter best route but not others, then protocols in other table will use non-best route. But these are rather artificial cases
One can of worms would be ECMP. On one side, we get (local) ECMP for almost no additional work (with kernel 'merge paths' option), on the other side,
Right, I hadn't even considered that. Nice.
we could not create regular ECMP routes (one route with multiple next hops) like it is done in OSPF and RIP.
Hmm, that might actually be enough of a reason for keeping the internal route selection. I'll have to think about that. I'd like to have the option to only have the best route be a multi-NH one but still have all the non-best routes exported too.
Couple of comments on the code below:
Changes in v3: - Subsume FIB_RESTART v2 patch: instead of restarting FIB iteration we keep lists of actions to perform after FIB iteration is finished.
Could this be a part of separate patch, applied after the primary change? Doing it together rather complicates reviewing these changes, and there may be different considerations for both changes.
I merged them quite on purpose because the changes in the main patch allowed making the code in expire_routes significantly less hairy. If indeed FIB_ITERATE_START resumes from the last position (I haven't convinced myself that this is true yet) then all this can be dropped anyway. --Daniel