On Mon, Mar 21, 2022 at 12:24:33PM +0100, Claudio Jeker wrote:
> During config reload the RIB may need to be resynced when the
> 'no evaluate' setting changes.
>
> This changes the code to actually flush the Adj-RIB-Out of affected peers
> and then adjust the RIB in a 2nd step. That way there is no need to use
> rde_generate_updates() to remove the prefixes one by one in the NOFIB case.
>
> Also fix the loop to reinsert all prefixes to remove the prefix from the
> temporary list before calling prefix_evaluate(). Calling prefix_evaluate()
> with p as the old prefix is just wrong. It is not on the rib_entry list at
> that time.
I'm ok with this.
I noticed that the bit changing prefix_evaluate(re, p, p) to
prefix_evaluate(re, p, NULL) undoes part of rde.c r1.512 whose commit
message said
Doing the LIST_REMOVE() outside of prefix_evalute() is no longer valid.
> This can be improved further but since this code path is almost never
> needed (changing rib flags happens almost never) it is not urgent.
> --
> :wq Claudio
>
> Index: rde.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
> retrieving revision 1.541
> diff -u -p -r1.541 rde.c
> --- rde.c 21 Mar 2022 10:15:34 -0000 1.541
> +++ rde.c 21 Mar 2022 11:13:34 -0000
> @@ -3469,7 +3469,33 @@ rde_reload_done(void)
> rib_free(rib);
> break;
> case RECONF_RELOAD:
> - rib_update(rib);
> + if (rib_update(rib)) {
> + LIST_FOREACH(peer, &peerlist, peer_l) {
> + /* ignore peerself*/
Missing space after peerself