mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-28 16:06:20 +00:00
zebra: Use nexthop/interface vrf, not the routes
When hashing/creating the NHE, use the nexthops vrf as its source of data. This is gotten directly from an interface and should not come from a route. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
parent
139ddad8f1
commit
7f99772169
@ -2658,7 +2658,7 @@ int mpls_ftn_update(int add, struct zebra_vrf *zvrf, enum lsp_types_t type,
|
||||
}
|
||||
|
||||
if (found) {
|
||||
nhe = zebra_nhg_rib_find(0, &new_grp, re->vrf_id, afi);
|
||||
nhe = zebra_nhg_rib_find(0, &new_grp, afi);
|
||||
|
||||
zebra_nhg_re_update_ref(re, nhe);
|
||||
|
||||
@ -2922,8 +2922,7 @@ static void mpls_ftn_uninstall_all(struct zebra_vrf *zvrf,
|
||||
|
||||
if (CHECK_FLAG(re->status,
|
||||
ROUTE_ENTRY_LABELS_CHANGED)) {
|
||||
nhe = zebra_nhg_rib_find(0, &new_grp,
|
||||
re->vrf_id, afi);
|
||||
nhe = zebra_nhg_rib_find(0, &new_grp, afi);
|
||||
zebra_nhg_re_update_ref(re, nhe);
|
||||
}
|
||||
|
||||
|
@ -663,9 +663,8 @@ static struct nhg_hash_entry *depends_find(struct nexthop *nh, afi_t afi)
|
||||
}
|
||||
|
||||
/* Rib-side, you get a nexthop group struct */
|
||||
struct nhg_hash_entry *zebra_nhg_rib_find(uint32_t id,
|
||||
struct nexthop_group *nhg,
|
||||
vrf_id_t rt_vrf_id, afi_t rt_afi)
|
||||
struct nhg_hash_entry *
|
||||
zebra_nhg_rib_find(uint32_t id, struct nexthop_group *nhg, afi_t rt_afi)
|
||||
{
|
||||
struct nhg_hash_entry *nhe = NULL;
|
||||
struct nhg_hash_entry *depend = NULL;
|
||||
@ -673,7 +672,7 @@ struct nhg_hash_entry *zebra_nhg_rib_find(uint32_t id,
|
||||
|
||||
/* Defualt the nhe to the afi and vrf of the route */
|
||||
afi_t nhg_afi = rt_afi;
|
||||
vrf_id_t nhg_vrf_id = rt_vrf_id;
|
||||
vrf_id_t nhg_vrf_id = nhg->nexthop->vrf_id;
|
||||
|
||||
if (!nhg) {
|
||||
flog_err(EC_ZEBRA_TABLE_LOOKUP_FAILED,
|
||||
@ -695,15 +694,6 @@ struct nhg_hash_entry *zebra_nhg_rib_find(uint32_t id,
|
||||
/* change the afi/vrf_id since its a group */
|
||||
nhg_afi = AFI_UNSPEC;
|
||||
nhg_vrf_id = 0;
|
||||
} else {
|
||||
/*
|
||||
* If the vrf_id on the nexthop does not match
|
||||
* the route one, use it instead.
|
||||
*/
|
||||
vrf_id_t nh_vrf_id = nhg->nexthop->vrf_id;
|
||||
|
||||
if (nh_vrf_id && nh_vrf_id != rt_vrf_id)
|
||||
nhg_vrf_id = nh_vrf_id;
|
||||
}
|
||||
|
||||
if (!zebra_nhg_find(&nhe, id, nhg, &nhg_depends, nhg_vrf_id, nhg_afi,
|
||||
@ -1413,7 +1403,7 @@ int nexthop_active_update(struct route_node *rn, struct route_entry *re)
|
||||
struct nhg_hash_entry *new_nhe = NULL;
|
||||
// TODO: Add proto type here
|
||||
|
||||
new_nhe = zebra_nhg_rib_find(0, &new_grp, re->vrf_id, rt_afi);
|
||||
new_nhe = zebra_nhg_rib_find(0, &new_grp, rt_afi);
|
||||
|
||||
zebra_nhg_re_update_ref(re, new_nhe);
|
||||
}
|
||||
|
@ -212,10 +212,8 @@ extern int zebra_nhg_kernel_find(uint32_t id, struct nexthop *nh,
|
||||
vrf_id_t vrf_id, afi_t afi);
|
||||
|
||||
/* Find via route creation */
|
||||
extern struct nhg_hash_entry *zebra_nhg_rib_find(uint32_t id,
|
||||
struct nexthop_group *nhg,
|
||||
vrf_id_t rt_vrf_id,
|
||||
afi_t rt_afi);
|
||||
extern struct nhg_hash_entry *
|
||||
zebra_nhg_rib_find(uint32_t id, struct nexthop_group *nhg, afi_t rt_afi);
|
||||
|
||||
|
||||
void zebra_nhg_free_members(struct nhg_hash_entry *nhe);
|
||||
|
@ -2739,7 +2739,7 @@ int rib_add_multipath(afi_t afi, safi_t safi, struct prefix *p,
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
nhe = zebra_nhg_rib_find(0, re->ng, re->vrf_id, afi);
|
||||
nhe = zebra_nhg_rib_find(0, re->ng, afi);
|
||||
|
||||
/*
|
||||
* The nexthops got copied over into an nhe,
|
||||
|
Loading…
Reference in New Issue
Block a user