diff options
Diffstat (limited to 'ospfd/ospfd.c')
| -rw-r--r-- | ospfd/ospfd.c | 19 |
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); |
