On Mon, Mar 21, 2022 at 05:16:53PM +0100, Claudio Jeker wrote: > In struct rib_entry bgpd keeps the 'best' or active prefix cached. > Now to support more than one one prefix per path (for ECMP and add-path) > I need the ability to access the previous element. The currently used > LIST macros do not support that. So I want to switch that to TAILQ but > the TAILQ head is 2 pointers not 1 and so I need to free a pointer from > struct rib_entry. Also this active cache makes less sense with multiple > paths. > > Access to the active prefix is replaced with the better named > prefix_best() which returns the LIST_FIRST entry if that one is eligible.
Missed one bit in prefix_evaluate_all(): /usr/src/usr.sbin/bgpd/rde_rib.c:1526:17: error: no member named 'active' in 'struct rib_entry' p == re->active) ~~ ^ With that fixed, ok tiny nit below: > Index: rde_decide.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/rde_decide.c,v > retrieving revision 1.89 > diff -u -p -r1.89 rde_decide.c > --- rde_decide.c 3 Mar 2022 13:06:15 -0000 1.89 > +++ rde_decide.c 21 Mar 2022 16:03:05 -0000 > @@ -443,6 +443,23 @@ prefix_eligible(struct prefix *p) > return 1; > } > > +struct prefix * > +prefix_best(struct rib_entry *re) > +{ > + struct prefix *xp; > + struct rib *rib; > + > + rib = re_rib(re); > + if (rib->flags & F_RIB_NOEVALUATE) > + /* decision process is turned off */ > + return NULL; > + > + xp = LIST_FIRST(&re->prefix_h); Use tab instead of 8 spaces for indent > + if (xp != NULL && !prefix_eligible(xp)) > + xp = NULL; > + return xp; > +} > +