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

Reply via email to