rt_prune: Don't kill routes from protocols in FS_FEEDING state. If debugging,
call fib_check() on the table's fib.
This commit is contained in:
parent
c09d1e8df2
commit
0521e4f684
1 changed files with 8 additions and 1 deletions
|
@ -538,6 +538,9 @@ rt_prune(rtable *tab)
|
||||||
int rcnt = 0, rdel = 0, ncnt = 0, ndel = 0;
|
int rcnt = 0, rdel = 0, ncnt = 0, ndel = 0;
|
||||||
|
|
||||||
DBG("Pruning route table %s\n", tab->name);
|
DBG("Pruning route table %s\n", tab->name);
|
||||||
|
#ifdef DEBUGGING
|
||||||
|
fib_check(&tab->fib);
|
||||||
|
#endif
|
||||||
FIB_ITERATE_INIT(&fit, &tab->fib);
|
FIB_ITERATE_INIT(&fit, &tab->fib);
|
||||||
again:
|
again:
|
||||||
FIB_ITERATE_START(&tab->fib, &fit, f)
|
FIB_ITERATE_START(&tab->fib, &fit, f)
|
||||||
|
@ -547,7 +550,8 @@ again:
|
||||||
ncnt++;
|
ncnt++;
|
||||||
rescan:
|
rescan:
|
||||||
for (e=n->routes; e; e=e->next, rcnt++)
|
for (e=n->routes; e; e=e->next, rcnt++)
|
||||||
if (e->attrs->proto->core_state != FS_HAPPY)
|
if (e->attrs->proto->core_state != FS_HAPPY &&
|
||||||
|
e->attrs->proto->core_state != FS_FEEDING)
|
||||||
{
|
{
|
||||||
rte_discard(tab, e);
|
rte_discard(tab, e);
|
||||||
rdel++;
|
rdel++;
|
||||||
|
@ -563,6 +567,9 @@ again:
|
||||||
}
|
}
|
||||||
FIB_ITERATE_END(f);
|
FIB_ITERATE_END(f);
|
||||||
DBG("Pruned %d of %d routes and %d of %d networks\n", rcnt, rdel, ncnt, ndel);
|
DBG("Pruned %d of %d routes and %d of %d networks\n", rcnt, rdel, ncnt, ndel);
|
||||||
|
#ifdef DEBUGGING
|
||||||
|
fib_check(&tab->fib);
|
||||||
|
#endif
|
||||||
tab->gc_counter = 0;
|
tab->gc_counter = 0;
|
||||||
tab->gc_time = now;
|
tab->gc_time = now;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue