forked from Mirror/frr
ospfd: Prune duplicate next-hops when installing into zebra
Duplicate next-hops are maintained for OSPF inter-area and AS external routes in the OSPF routing table as long as they correspond to LSAs for different adverting routers. The intra-area route computation will not result in duplicate next-hops. Signed-off-by: Acee Lindem <acee@lindem.com>
This commit is contained in:
parent
1d96c58375
commit
1c55cf27a2
|
@ -304,6 +304,27 @@ void ospf_zebra_add(struct ospf *ospf, struct prefix_ipv4 *p,
|
|||
if (api.nexthop_num >= ospf->max_multipath)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Prune duplicate next-hops from the route that is
|
||||
* installed in the zebra IP route table. OSPF Intra-Area
|
||||
* routes never have duplicates.
|
||||
*/
|
||||
if (or->path_type != OSPF_PATH_INTRA_AREA) {
|
||||
struct zapi_nexthop *api_nh = &api.nexthops[0];
|
||||
unsigned int nh_index;
|
||||
bool duplicate_next_hop = false;
|
||||
|
||||
for (nh_index = 0; nh_index < api.nexthop_num; api_nh++, nh_index++) {
|
||||
if (IPV4_ADDR_SAME(&api_nh->gate.ipv4, &path->nexthop) &&
|
||||
(api_nh->ifindex == path->ifindex)) {
|
||||
duplicate_next_hop = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (duplicate_next_hop)
|
||||
continue;
|
||||
}
|
||||
|
||||
ospf_zebra_add_nexthop(ospf, path, &api);
|
||||
|
||||
if (IS_DEBUG_OSPF(zebra, ZEBRA_REDISTRIBUTE)) {
|
||||
|
|
Loading…
Reference in a new issue