ospf6d: remove own routes on SIGTERM (BZ#448)
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index d40bd97..d3ef0a6 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -180,6 +180,7 @@
sigterm (void)
{
zlog_notice ("Terminating on signal SIGTERM");
+ ospf6_clean();
ospf6_exit (0);
}
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
index 8dcc877..b384824 100644
--- a/ospf6d/ospf6_route.h
+++ b/ospf6d/ospf6_route.h
@@ -300,6 +300,7 @@
extern int config_write_ospf6_debug_route (struct vty *vty);
extern void install_element_ospf6_debug_route (void);
extern void ospf6_route_init (void);
+extern void ospf6_clean (void);
#endif /* OSPF6_ROUTE_H */
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index bb091d4..3fdbda1 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -1889,4 +1889,11 @@
thread_add_read (master, ospf6_receive, NULL, ospf6_sock);
}
-
+void
+ospf6_clean (void)
+{
+ if (ospf6->route_table)
+ ospf6_route_remove_all (ospf6->route_table);
+ if (ospf6->brouter_table)
+ ospf6_route_remove_all (ospf6->brouter_table);
+}