summaryrefslogtreecommitdiffstats
path: root/sysdep/unix/krt.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix/krt.c')
-rw-r--r--sysdep/unix/krt.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c
index 816eb44..83456b0 100644
--- a/sysdep/unix/krt.c
+++ b/sysdep/unix/krt.c
@@ -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);