diff options
author | anlancs <anlan_cs@tom.com> | 2021-06-02 04:51:49 +0200 |
---|---|---|
committer | anlancs <anlan_cs@tom.com> | 2021-06-03 07:06:34 +0200 |
commit | 1113a2fb271a49ad4b2d2c531cc924e37919c351 (patch) | |
tree | 28575103b45777e8528f458f2a0c18aec5987a4c /ospfd/ospfd.c | |
parent | Merge pull request #8210 from LabNConsulting/chopps/always-batch (diff) | |
download | frr-1113a2fb271a49ad4b2d2c531cc924e37919c351.tar.xz frr-1113a2fb271a49ad4b2d2c531cc924e37919c351.zip |
ospfd: if destroy the whole ospf, then remove ospf's interface config: passive-interface
Signed-off-by: anlancs <anlan_cs@tom.com>
Diffstat (limited to 'ospfd/ospfd.c')
-rw-r--r-- | ospfd/ospfd.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index 7505f24ae..38c0ca2b6 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -688,10 +688,11 @@ void ospf_finish(struct ospf *ospf) /* Final cleanup of ospf instance */ static void ospf_finish_final(struct ospf *ospf) { - struct vrf *vrf; + struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id); struct route_node *rn; struct ospf_nbr_nbma *nbr_nbma; struct ospf_lsa *lsa; + struct interface *ifp; struct ospf_interface *oi; struct ospf_area *area; struct ospf_vl_data *vl_data; @@ -739,6 +740,15 @@ static void ospf_finish_final(struct ospf *ospf) if (ospf->vrf_id == VRF_DEFAULT) ospf_ldp_sync_gbl_exit(ospf, true); + /* Remove ospf interface config params: only passive-interface */ + FOR_ALL_INTERFACES (vrf, ifp) { + struct ospf_if_params *params; + + params = IF_DEF_PARAMS(ifp); + if (OSPF_IF_PARAM_CONFIGURED(params, passive_interface)) + UNSET_IF_PARAM(params, passive_interface); + } + /* Reset interface. */ for (ALL_LIST_ELEMENTS(ospf->oiflist, node, nnode, oi)) ospf_if_free(oi); @@ -898,17 +908,11 @@ static void ospf_finish_final(struct ospf *ospf) ospf->max_multipath = MULTIPATH_NUM; ospf_delete(ospf); - if (ospf->name) { - vrf = vrf_lookup_by_name(ospf->name); - if (vrf) - ospf_vrf_unlink(ospf, vrf); - XFREE(MTYPE_OSPF_TOP, ospf->name); - } else { - vrf = vrf_lookup_by_id(VRF_DEFAULT); - if (vrf) - ospf_vrf_unlink(ospf, vrf); - } + if (vrf) + ospf_vrf_unlink(ospf, vrf); + if (ospf->name) + XFREE(MTYPE_OSPF_TOP, ospf->name); XFREE(MTYPE_OSPF_TOP, ospf); } |