]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: if destroy the whole ospf, then remove ospf's interface config: passive-interface 8776/head
authoranlancs <anlan_cs@tom.com>
Wed, 2 Jun 2021 02:51:49 +0000 (10:51 +0800)
committeranlancs <anlan_cs@tom.com>
Thu, 3 Jun 2021 05:06:34 +0000 (13:06 +0800)
Signed-off-by: anlancs <anlan_cs@tom.com>
ospfd/ospfd.c

index 7505f24aeff78cf4c598343ec963212798905365..38c0ca2b67deff4e36ca238f0b5c99a434ca3179 100644 (file)
@@ -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);
 }