Rework the re-evaluation of a prefix if PREFIX_FLAG_FILTERED changed.
The fix committed in rev 1.291 is not quite right. The problem is that
prefix_evaluate() uses prefix_best() which calls prefix_eligible().
It is wrong to alter the eligible state of a prefix while it is still
on the rib list.
Instead remove the prefix first, toggle the state, then readd it again.
Even though prefix_evaluate() is called twice the code complexity is
about the same since the 2 calls only do half the work.
OK tb@
re2: fix build on sparc64
This needs the usual abseil-cpp workaround
CXXFLAGS_ports-gcc = -fdelete-null-pointer-checks
due to
/usr/local/include/absl/container/internal/hash_policy_traits.h:158:66: error: '(absl::lts_20260107::container_internal::TypeErasedApplyToSlotFn<absl::lts_20260107::hash_internal::Hash<long long unsigned int>, long long unsigned int, true> == 0)' is not a constant expression
158 | return Policy::template get_hash_slot_fn<Hash, kIsDefault>() == nullptr
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
If either tcp_md5_set() or pfkey_establish() fail then also fail the
ongoing connect.
The old graceful failure mode was added for strange cases like kernels
without TCP MD5 support but there is honestly no good reason to limp along.
The correct way to handle this on such broken systems is to edit the config
and remove the auth settings. After that a bgpctl reload will fix the problem
by skipping the TCP MD5 or IPSec setup.
Reported by Frank Denis
OK tb@