Merge pull request #14033 from donaldsharp/zebra_same_route

Zebra same route
This commit is contained in:
Donatas Abraitis 2023-07-18 10:37:15 +03:00 committed by GitHub
commit ef87237121
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 9 deletions

View File

@ -68,6 +68,8 @@ show ip nht vrf all
show ipv6 nht vrf all show ipv6 nht vrf all
show ip route vrf all show ip route vrf all
show ipv6 route vrf all show ipv6 route vrf all
show ip fib
show ipv6 fib
show nexthop-group rib show nexthop-group rib
show route-map show route-map
show memory show memory

View File

@ -2366,17 +2366,18 @@ static int nexthop_active(struct nexthop *nexthop, struct nhg_hash_entry *nhe,
if (is_default_prefix(&rn->p) if (is_default_prefix(&rn->p)
&& !rnh_resolve_via_default(zvrf, p.family)) { && !rnh_resolve_via_default(zvrf, p.family)) {
if (IS_ZEBRA_DEBUG_RIB_DETAILED) if (IS_ZEBRA_DEBUG_RIB_DETAILED)
zlog_debug( zlog_debug(" :%s: %pFX Resolved against default route",
" :%s: Resolved against default route", __func__, &p);
__func__);
return 0; return 0;
} }
dest = rib_dest_from_rnode(rn); dest = rib_dest_from_rnode(rn);
if (dest && dest->selected_fib if (dest && dest->selected_fib &&
&& !CHECK_FLAG(dest->selected_fib->status, (!CHECK_FLAG(dest->selected_fib->status,
ROUTE_ENTRY_REMOVED) ROUTE_ENTRY_REMOVED) ||
&& dest->selected_fib->type != ZEBRA_ROUTE_TABLE) CHECK_FLAG(dest->selected_fib->status,
ROUTE_ENTRY_ROUTE_REPLACING)) &&
dest->selected_fib->type != ZEBRA_ROUTE_TABLE)
match = dest->selected_fib; match = dest->selected_fib;
/* If there is no selected route or matched route is EGP, go up /* If there is no selected route or matched route is EGP, go up
@ -2388,7 +2389,6 @@ static int nexthop_active(struct nexthop *nexthop, struct nhg_hash_entry *nhe,
} while (rn && rn->info == NULL); } while (rn && rn->info == NULL);
if (rn) if (rn)
route_lock_node(rn); route_lock_node(rn);
continue; continue;
} }

View File

@ -2824,8 +2824,13 @@ static void process_subq_early_route_add(struct zebra_early_route *ere)
rib_addnode(rn, re, 1); rib_addnode(rn, re, 1);
/* Free implicit route.*/ /* Free implicit route.*/
if (same) if (same) {
rib_dest_t *dest = rn->info;
if (same == dest->selected_fib)
SET_FLAG(same->status, ROUTE_ENTRY_ROUTE_REPLACING);
rib_delnode(rn, same); rib_delnode(rn, same);
}
/* See if we can remove some RE entries that are queued for /* See if we can remove some RE entries that are queued for
* removal, but won't be considered in rib processing. * removal, but won't be considered in rib processing.