if ((new_changed == old_changed) || (old_best == old_changed))
{
/* Feed or old_best changed -> find first accepted by filters */
- for (struct rte_storage *r = net->routes; r && rte_is_valid(&r->rte); r = r->next)
+ for (struct rte_storage *r = net->routes; rte_is_valid(r); r = r->next)
+ {
+ /* Already rejected before */
+ if (!refeed && bmap_test(&c->export_reject_map, r->rte.id))
+ continue;
+
if (new_best = export_filter(c, ((nb0 = r->rte), &nb0), 0))
break;
+ }
}
else
{
* done outside of scope of rte_announce().
*/
static void
- rte_announce(rtable *tab, uint type, net *net, struct rte_storage *new, struct rte_storage *old,
+ rte_announce(rtable *tab, net *net, struct rte_storage *new, struct rte_storage *old,
struct rte_storage *new_best, struct rte_storage *old_best)
{
- if (!new || !rte_is_valid(&new->rte))
+ if (!rte_is_valid(new))
new = NULL;
- if (!old || !rte_is_valid(&old->rte))
+ if (!rte_is_valid(old))
old = NULL;
- if (!new_best || !rte_is_valid(&new_best->rte))
+ if (!rte_is_valid(new_best))
new_best = NULL;
- if (!old_best || !rte_is_valid(&old_best->rte))
+ if (!rte_is_valid(old_best))
old_best = NULL;
if (!new && !old && !new_best && !old_best)