Fix bugs related to kernel table synchronization.
KRF_INSTALLED flag was not cleared during reconfiguration that lead to not removing routes during reconfigure when export rules changed. We also should not try to remove routes we didi not installed, on Linux this leads to warnings (as kernel checks route source field and do not allow to remove non-bird routes) but we should not rely on it.
This commit is contained in:
parent
48d79d521c
commit
3d574679b8
1 changed files with 8 additions and 3 deletions
|
@ -462,8 +462,12 @@ krt_flush_routes(struct krt_proto *p)
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
rta *a = e->attrs;
|
rta *a = e->attrs;
|
||||||
if (a->source != RTS_DEVICE && a->source != RTS_INHERIT)
|
if ((n->n.flags & KRF_INSTALLED) &&
|
||||||
krt_set_notify(p, e->net, NULL, e);
|
a->source != RTS_DEVICE && a->source != RTS_INHERIT)
|
||||||
|
{
|
||||||
|
krt_set_notify(p, e->net, NULL, e);
|
||||||
|
n->n.flags &= ~KRF_INSTALLED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FIB_WALK_END;
|
FIB_WALK_END;
|
||||||
|
@ -795,7 +799,8 @@ krt_shutdown(struct proto *P)
|
||||||
#endif
|
#endif
|
||||||
tm_stop(p->scan_timer);
|
tm_stop(p->scan_timer);
|
||||||
|
|
||||||
if (!KRT_CF->persist)
|
/* FIXME we should flush routes even when persist during reconfiguration */
|
||||||
|
if (p->initialized && !KRT_CF->persist)
|
||||||
krt_flush_routes(p);
|
krt_flush_routes(p);
|
||||||
|
|
||||||
krt_set_shutdown(p, last);
|
krt_set_shutdown(p, last);
|
||||||
|
|
Loading…
Reference in a new issue