Commit 3d574679 authored by Ondřej Zajíček's avatar Ondřej Zajíček

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.
parent 48d79d52
......@@ -462,8 +462,12 @@ krt_flush_routes(struct krt_proto *p)
if (e)
{
rta *a = e->attrs;
if (a->source != RTS_DEVICE && a->source != RTS_INHERIT)
krt_set_notify(p, e->net, NULL, e);
if ((n->n.flags & KRF_INSTALLED) &&
a->source != RTS_DEVICE && a->source != RTS_INHERIT)
{
krt_set_notify(p, e->net, NULL, e);
n->n.flags &= ~KRF_INSTALLED;
}
}
}
FIB_WALK_END;
......@@ -795,7 +799,8 @@ krt_shutdown(struct proto *P)
#endif
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_set_shutdown(p, last);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment