if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) {
prefix2str(&prefix, buf, sizeof(buf));
zlog_debug(
- "%s: route %s path found with nh %u to remove.",
+ "%s: route %s path found with cost %u nh %u to remove.",
__PRETTY_FUNCTION__, buf,
+ route->path.cost,
listcount(o_path->nh_list));
}
listcount(route->nh_list));
}
- /* Update RIB/FIB with effective nh_list */
- if (ospf6->route_table->hook_add)
- (*ospf6->route_table->hook_add)(route);
+ if (listcount(route->paths)) {
+ /* Update RIB/FIB with effective
+ * nh_list
+ */
+ if (ospf6->route_table->hook_add)
+ (*ospf6->route_table->hook_add)
+ (route);
- /* route's primary path is similar to LSA,
- * replace route's primary path with
- * route's paths list head.
- */
- if (route->path.origin.id == lsa->header->id
- && route->path.origin.adv_router
- == lsa->header->adv_router) {
- struct ospf6_path *h_path;
+ /* route's primary path is similar
+ * to LSA, replace route's primary
+ * path with route's paths list head.
+ */
+ if ((route->path.origin.id ==
+ lsa->header->id) &&
+ (route->path.origin.adv_router
+ == lsa->header->adv_router)) {
+ struct ospf6_path *h_path;
- h_path = (struct ospf6_path *)
+ h_path = (struct ospf6_path *)
listgetdata(
listhead(route->paths));
- route->path.origin.type =
- h_path->origin.type;
- route->path.origin.id =
- h_path->origin.id;
- route->path.origin.adv_router =
+ route->path.origin.type =
+ h_path->origin.type;
+ route->path.origin.id =
+ h_path->origin.id;
+ route->path.origin.adv_router =
h_path->origin.adv_router;
+ }
+ } else {
+ ospf6_route_remove(route,
+ ospf6->route_table);
}
}
continue;