summaryrefslogtreecommitdiffstats
path: root/ospfd/ospfd.c
diff options
context:
space:
mode:
authoranlancs <anlan_cs@tom.com>2021-06-02 04:51:49 +0200
committeranlancs <anlan_cs@tom.com>2021-06-03 07:06:34 +0200
commit1113a2fb271a49ad4b2d2c531cc924e37919c351 (patch)
tree28575103b45777e8528f458f2a0c18aec5987a4c /ospfd/ospfd.c
parentMerge pull request #8210 from LabNConsulting/chopps/always-batch (diff)
downloadfrr-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.c26
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);
}