struct ospf6_nexthop *nh, *rnh;
char buf[PREFIX2STR_BUFFER];
bool route_found = false;
- struct interface *ifp;
+ struct interface *ifp = NULL;
struct ospf6_lsa *lsa;
struct ospf6_intra_prefix_lsa *intra_prefix_lsa;
ifp = if_lookup_prefix(
&old_route->prefix,
oa->ospf6->vrf_id);
- if (ifp)
- ospf6_route_add_nexthop(
- old_route,
+ }
+
+ if (ifp) {
+ /* Nexthop interface found */
+ ospf6_route_add_nexthop(old_route,
ifp->ifindex,
NULL);
} else {
+ /* The connected interfaces between
+ * routers can be in different networks.
+ * In this case the matching interface
+ * is not found. Copy nexthops from the
+ * link state entry
+ */
ospf6_route_merge_nexthops(old_route,
ls_entry);
}
struct ospf6_prefix *op;
char *start, *current, *end;
char buf[PREFIX2STR_BUFFER];
- struct interface *ifp;
+ struct interface *ifp = NULL;
int direct_connect = 0;
struct ospf6_path *path;
if (direct_connect) {
ifp = if_lookup_prefix(&route->prefix,
oa->ospf6->vrf_id);
- if (ifp)
- ospf6_route_add_nexthop(route, ifp->ifindex,
- NULL);
+ }
+
+ if (ifp) {
+ /* Nexthop interface found */
+ ospf6_route_add_nexthop(route, ifp->ifindex, NULL);
} else {
+ /* The connected interfaces between routers can be in
+ * different networks. In this case the matching
+ * interface is not found. Copy nexthops from the
+ * link state entry
+ */
ospf6_route_copy_nexthops(route, ls_entry);
}