diff options
-rw-r--r-- | ospf6d/ospf6_abr.c | 8 | ||||
-rw-r--r-- | ospf6d/ospf6_area.c | 2 | ||||
-rw-r--r-- | ospf6d/ospf6_asbr.c | 9 | ||||
-rw-r--r-- | ospf6d/ospf6_interface.c | 2 | ||||
-rw-r--r-- | ospf6d/ospf6_intra.c | 4 | ||||
-rw-r--r-- | ospf6d/ospf6_route.c | 6 | ||||
-rw-r--r-- | ospf6d/ospf6_route.h | 5 | ||||
-rw-r--r-- | ospf6d/ospf6_spf.c | 2 |
8 files changed, 23 insertions, 15 deletions
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c index cc99d7c38..587b7dcf1 100644 --- a/ospf6d/ospf6_abr.c +++ b/ospf6d/ospf6_abr.c @@ -715,7 +715,7 @@ void ospf6_abr_defaults_to_stub(struct ospf6 *o) if (!o->backbone) return; - def = ospf6_route_create(); + def = ospf6_route_create(o); def->type = OSPF6_DEST_TYPE_NETWORK; def->prefix.family = AF_INET6; def->prefix.prefixlen = 0; @@ -1150,7 +1150,7 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa) /* (5),(6): the path preference is handled by the sorting in the routing table. Always install the path by substituting old route (if any). */ - route = ospf6_route_create(); + route = ospf6_route_create(oa->ospf6); route->type = type; route->prefix = prefix; @@ -1237,7 +1237,9 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa) listcount(old_route->nh_list)); } } else { - struct ospf6_route *tmp_route = ospf6_route_create(); + struct ospf6_route *tmp_route; + + tmp_route = ospf6_route_create(oa->ospf6); ospf6_copy_nexthops(tmp_route->nh_list, o_path->nh_list); diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c index 355b8441b..f4d9964a5 100644 --- a/ospf6d/ospf6_area.c +++ b/ospf6d/ospf6_area.c @@ -519,7 +519,7 @@ DEFUN (area_range, range = ospf6_route_lookup(&prefix, oa->range_table); if (range == NULL) { - range = ospf6_route_create(); + range = ospf6_route_create(ospf6); range->type = OSPF6_DEST_TYPE_RANGE; range->prefix = prefix; range->path.area_id = oa->area_id; diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c index 41f948c29..6862d05d9 100644 --- a/ospf6d/ospf6_asbr.c +++ b/ospf6d/ospf6_asbr.c @@ -605,7 +605,7 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa) } } - route = ospf6_route_create(); + route = ospf6_route_create(ospf6); route->type = OSPF6_DEST_TYPE_NETWORK; route->prefix.family = AF_INET6; route->prefix.prefixlen = external->prefix.prefix_length; @@ -727,7 +727,7 @@ void ospf6_asbr_lsa_remove(struct ospf6_lsa *lsa, return; } - route_to_del = ospf6_route_create(); + route_to_del = ospf6_route_create(ospf6); route_to_del->type = OSPF6_DEST_TYPE_NETWORK; route_to_del->prefix.family = AF_INET6; route_to_del->prefix.prefixlen = external->prefix.prefix_length; @@ -1465,9 +1465,10 @@ void ospf6_asbr_redistribute_add(int type, ifindex_t ifindex, } /* create new entry */ - route = ospf6_route_create(); + route = ospf6_route_create(ospf6); route->type = OSPF6_DEST_TYPE_NETWORK; prefix_copy(&route->prefix, prefix); + route->ospf6 = ospf6; info = (struct ospf6_external_info *)XCALLOC( MTYPE_OSPF6_EXTERNAL_INFO, sizeof(struct ospf6_external_info)); @@ -2742,7 +2743,7 @@ static void ospf6_originate_new_aggr_lsa(struct ospf6 *ospf6, &prefix_id.u.prefix4, &aggr->p, aggr->metric); /* Create summary route and save it. */ - rt_aggr = ospf6_route_create(); + rt_aggr = ospf6_route_create(ospf6); rt_aggr->type = OSPF6_DEST_TYPE_NETWORK; /* Needed to install route while calling zebra api */ SET_FLAG(rt_aggr->flag, OSPF6_ROUTE_BEST); diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c index b52d6af90..12bc920c1 100644 --- a/ospf6d/ospf6_interface.c +++ b/ospf6d/ospf6_interface.c @@ -448,7 +448,7 @@ void ospf6_interface_connected_route_update(struct interface *ifp) } } - route = ospf6_route_create(); + route = ospf6_route_create(oi->area->ospf6); memcpy(&route->prefix, c->address, sizeof(struct prefix)); apply_mask(&route->prefix); route->type = OSPF6_DEST_TYPE_NETWORK; diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c index c971c6180..c41a682b0 100644 --- a/ospf6d/ospf6_intra.c +++ b/ospf6d/ospf6_intra.c @@ -1347,7 +1347,7 @@ int ospf6_intra_prefix_lsa_originate_transit(struct thread *thread) || current + OSPF6_PREFIX_SIZE(op) > end) break; - route = ospf6_route_create(); + route = ospf6_route_create(oi->area->ospf6); route->type = OSPF6_DEST_TYPE_NETWORK; route->prefix.family = AF_INET6; @@ -1810,7 +1810,7 @@ void ospf6_intra_prefix_lsa_add(struct ospf6_lsa *lsa) continue; } - route = ospf6_route_create(); + route = ospf6_route_create(oa->ospf6); memset(&route->prefix, 0, sizeof(struct prefix)); route->prefix.family = AF_INET6; diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c index d785e623b..43de870ad 100644 --- a/ospf6d/ospf6_route.c +++ b/ospf6d/ospf6_route.c @@ -453,7 +453,7 @@ void ospf6_copy_paths(struct list *dst, struct list *src) } } -struct ospf6_route *ospf6_route_create(void) +struct ospf6_route *ospf6_route_create(struct ospf6 *ospf6) { struct ospf6_route *route; @@ -464,6 +464,8 @@ struct ospf6_route *ospf6_route_create(void) route->paths = list_new(); route->paths->cmp = (int (*)(void *, void *))ospf6_path_cmp; route->paths->del = (void (*)(void *))ospf6_path_free; + route->ospf6 = ospf6; + return route; } @@ -482,7 +484,7 @@ struct ospf6_route *ospf6_route_copy(struct ospf6_route *route) { struct ospf6_route *new; - new = ospf6_route_create(); + new = ospf6_route_create(route->ospf6); new->type = route->type; memcpy(&new->prefix, &route->prefix, sizeof(struct prefix)); new->installed = route->installed; diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h index c354d4adb..db061f9d2 100644 --- a/ospf6d/ospf6_route.h +++ b/ospf6d/ospf6_route.h @@ -165,6 +165,9 @@ struct ospf6_route { struct ospf6_route *prev; struct ospf6_route *next; + /* Back pointer to ospf6 */ + struct ospf6 *ospf6; + unsigned int lock; /* Destination Type */ @@ -339,7 +342,7 @@ extern int ospf6_route_get_first_nh_index(struct ospf6_route *route); #define ospf6_route_add_nexthop(route, ifindex, addr) \ ospf6_add_nexthop(route->nh_list, ifindex, addr) -extern struct ospf6_route *ospf6_route_create(void); +extern struct ospf6_route *ospf6_route_create(struct ospf6 *ospf6); extern void ospf6_route_delete(struct ospf6_route *); extern struct ospf6_route *ospf6_route_copy(struct ospf6_route *route); extern int ospf6_route_cmp(struct ospf6_route *ra, struct ospf6_route *rb); diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c index 051b3a63e..4e7a7146e 100644 --- a/ospf6d/ospf6_spf.c +++ b/ospf6d/ospf6_spf.c @@ -374,7 +374,7 @@ static int ospf6_spf_install(struct ospf6_vertex *v, up to here. */ assert(route == NULL); - route = ospf6_route_create(); + route = ospf6_route_create(v->area->ospf6); memcpy(&route->prefix, &v->vertex_id, sizeof(struct prefix)); route->type = OSPF6_DEST_TYPE_LINKSTATE; route->path.type = OSPF6_PATH_TYPE_INTRA; |