summaryrefslogtreecommitdiff
path: root/ospfd/ospfd.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospfd.c')
-rw-r--r--ospfd/ospfd.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index c6e24eb776..a839806720 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -312,6 +312,8 @@ static struct ospf *ospf_new(unsigned short instance, const char *name)
ospf_gr_helper_init(new);
+ ospf_asbr_external_aggregator_init(new);
+
QOBJ_REG(new, ospf);
new->fd = -1;
@@ -716,6 +718,7 @@ static void ospf_finish_final(struct ospf *ospf)
OSPF_TIMER_OFF(ospf->t_opaque_lsa_self);
OSPF_TIMER_OFF(ospf->t_sr_update);
OSPF_TIMER_OFF(ospf->t_default_routemap_timer);
+ OSPF_TIMER_OFF(ospf->t_external_aggr);
LSDB_LOOP (OPAQUE_AS_LSDB(ospf), rn, lsa)
ospf_discard_from_db(ospf, ospf->lsdb, lsa);
@@ -784,6 +787,22 @@ static void ospf_finish_final(struct ospf *ospf)
ospf_distance_reset(ospf);
route_table_finish(ospf->distance_table);
+ /* Release extrenal Aggregator table */
+ for (rn = route_top(ospf->rt_aggr_tbl); rn; rn = route_next(rn)) {
+ struct ospf_external_aggr_rt *aggr;
+
+ aggr = rn->info;
+
+ if (aggr) {
+ ospf_external_aggregator_free(aggr);
+ rn->info = NULL;
+ route_unlock_node(rn);
+ }
+ }
+
+ route_table_finish(ospf->rt_aggr_tbl);
+
+
list_delete(&ospf->areas);
list_delete(&ospf->oi_write_q);