]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospf: fix instance initialization when using multi-instance mode 7654/head
authorIgor Ryzhov <iryzhov@nfware.com>
Wed, 2 Dec 2020 00:36:10 +0000 (03:36 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Wed, 2 Dec 2020 08:18:18 +0000 (11:18 +0300)
OSPF instance initialization was moved from "router ospf" vty command to
ospf_get function some time ago but the same thing must be done in
ospf_get_instance function used when multi-instance mode is enabled.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
ospfd/ospfd.c
ospfd/ospfd.h

index d7c4e108c53f79964beb970a708d5ad87c28b7e6..3ca9453bcaa2a36fb9c8d59cd04063eb827586f0 100644 (file)
@@ -377,12 +377,50 @@ struct ospf *ospf_lookup_by_inst_name(unsigned short instance, const char *name)
        return NULL;
 }
 
-struct ospf *ospf_get(unsigned short instance, const char *name, bool *created)
+static void ospf_init(struct ospf *ospf)
 {
-       struct ospf *ospf;
        struct vrf *vrf;
        struct interface *ifp;
 
+       ospf_opaque_type11_lsa_init(ospf);
+
+       if (ospf->vrf_id != VRF_UNKNOWN)
+               ospf->oi_running = 1;
+
+       /* Activate 'ip ospf area x' configured interfaces for given
+        * vrf. Activate area on vrf x aware interfaces.
+        * vrf_enable callback calls router_id_update which
+        * internally will call ospf_if_update to trigger
+        * network_run_state
+        */
+       vrf = vrf_lookup_by_id(ospf->vrf_id);
+
+       FOR_ALL_INTERFACES (vrf, ifp) {
+               struct ospf_if_params *params;
+               struct route_node *rn;
+               uint32_t count = 0;
+
+               params = IF_DEF_PARAMS(ifp);
+               if (OSPF_IF_PARAM_CONFIGURED(params, if_area))
+                       count++;
+
+               for (rn = route_top(IF_OIFS_PARAMS(ifp)); rn; rn = route_next(rn))
+                       if ((params = rn->info) && OSPF_IF_PARAM_CONFIGURED(params, if_area))
+                               count++;
+
+               if (count > 0) {
+                       ospf_interface_area_set(ospf, ifp);
+                       ospf->if_ospf_cli_count += count;
+               }
+       }
+
+       ospf_router_id_update(ospf);
+}
+
+struct ospf *ospf_get(unsigned short instance, const char *name, bool *created)
+{
+       struct ospf *ospf;
+
        /* vrf name provided call inst and name based api
         * in case of no name pass default ospf instance */
        if (name)
@@ -395,39 +433,7 @@ struct ospf *ospf_get(unsigned short instance, const char *name, bool *created)
                ospf = ospf_new(instance, name);
                ospf_add(ospf);
 
-               ospf_opaque_type11_lsa_init(ospf);
-
-               if (ospf->vrf_id != VRF_UNKNOWN)
-                       ospf->oi_running = 1;
-
-               /* Activate 'ip ospf area x' configured interfaces for given
-                * vrf. Activate area on vrf x aware interfaces.
-                * vrf_enable callback calls router_id_update which
-                * internally will call ospf_if_update to trigger
-                * network_run_state
-                */
-               vrf = vrf_lookup_by_id(ospf->vrf_id);
-
-               FOR_ALL_INTERFACES (vrf, ifp) {
-                       struct ospf_if_params *params;
-                       struct route_node *rn;
-                       uint32_t count = 0;
-
-                       params = IF_DEF_PARAMS(ifp);
-                       if (OSPF_IF_PARAM_CONFIGURED(params, if_area))
-                               count++;
-
-                       for (rn = route_top(IF_OIFS_PARAMS(ifp)); rn; rn = route_next(rn))
-                               if ((params = rn->info) && OSPF_IF_PARAM_CONFIGURED(params, if_area))
-                                       count++;
-
-                       if (count > 0) {
-                               ospf_interface_area_set(ospf, ifp);
-                               ospf->if_ospf_cli_count += count;
-                       }
-               }
-
-               ospf_router_id_update(ospf);
+               ospf_init(ospf);
        }
 
        return ospf;
@@ -443,7 +449,7 @@ struct ospf *ospf_get_instance(unsigned short instance, bool *created)
                ospf = ospf_new(instance, NULL /* VRF_DEFAULT*/);
                ospf_add(ospf);
 
-               ospf_opaque_type11_lsa_init(ospf);
+               ospf_init(ospf);
        }
 
        return ospf;
index dba7ee8c337223bbfce0d4faa9f60cd37b5ca12a..b18484ef4f8ad1ab1c1b01008070e7036766d26d 100644 (file)
@@ -556,7 +556,6 @@ extern int ospf_nbr_nbma_poll_interval_set(struct ospf *, struct in_addr,
                                           unsigned int);
 extern int ospf_nbr_nbma_poll_interval_unset(struct ospf *, struct in_addr);
 extern void ospf_prefix_list_update(struct prefix_list *);
-extern void ospf_init(void);
 extern void ospf_if_update(struct ospf *, struct interface *);
 extern void ospf_ls_upd_queue_empty(struct ospf_interface *);
 extern void ospf_terminate(void);