forked from Mirror/frr
ospf6d : Intra area route for connected prefix not installed
Issue: When ospfv3 is configured on interface between routers in different network, the intra area route for the remote connected prefix is not installed in ospf route table and zebra Fix: When the advertising router is directly connected but in different network the interface lookup in the intra area lsa processing does not provide the matching interface and valid nexthop. Therefore the nexthop is copied from the link state entry which contains valid ifindex required for installing the route. Signed-off-by: kssoman <somanks@gmail.com>
This commit is contained in:
parent
4b40d5ffb0
commit
cad3ca4cf9
|
@ -1368,7 +1368,7 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
|
|||
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;
|
||||
|
||||
|
@ -1571,12 +1571,20 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
|
|||
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);
|
||||
}
|
||||
|
@ -1626,7 +1634,7 @@ void ospf6_intra_prefix_lsa_add(struct ospf6_lsa *lsa)
|
|||
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;
|
||||
|
||||
|
@ -1716,10 +1724,17 @@ void ospf6_intra_prefix_lsa_add(struct ospf6_lsa *lsa)
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue