Do not send kroutes from the RDE to the FIB with the true_nexthop but
authorclaudio <claudio@openbsd.org>
Tue, 16 Aug 2022 08:14:58 +0000 (08:14 +0000)
committerclaudio <claudio@openbsd.org>
Tue, 16 Aug 2022 08:14:58 +0000 (08:14 +0000)
commit555d04f4a08b338ebfedd07243e099cb01b35c3c
treeefba928150dfbcb9c56a1385a95cee84ffe5deb4
parent3f0423829b3cacd4af378a55754c617e162d19db
Do not send kroutes from the RDE to the FIB with the true_nexthop but
instead use exit_nexthop (the nexthop from BGP). The FIB code can then
do the lookup and replace the nexthop in the FIB.

This solves an issue when multiple nexthops change concurrently. In the
RDE the decision process handles these changes ansynchronously which
resulted in bad true_nexthops to be sent to the FIB. The exit_nethop
is stable so the data sent to the FIB is always correct.

Fix a bug in netxhop tracking introduced in 1.280. On RTM_CHANGE when the
nexthop of a kroute changes a knexthop_send_update() must be sent but
knexthop_track() does not do that because the kroute did not change.
Introduce a knexthop_update() function for this case instead.

OK tb@
usr.sbin/bgpd/kroute.c
usr.sbin/bgpd/rde.c