Skip to content

Commit

Permalink
Merge pull request #16350 from raja-rajasekar/rajasekarr/table_id_for…
Browse files Browse the repository at this point in the history
…_2vrf_3970414

zebra: Fix to avoid two Vrfs with same table ids
  • Loading branch information
ton31337 authored Jul 14, 2024
2 parents 701c3d6 + c77e157 commit 659741f
Showing 1 changed file with 20 additions and 16 deletions.
36 changes: 20 additions & 16 deletions zebra/interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -1483,23 +1483,27 @@ static void interface_vrf_change(enum dplane_op_e op, ifindex_t ifindex,
"DPLANE_OP_INTF_UPDATE for VRF %s(%u) table %u",
name, ifindex, tableid);

if (!vrf_lookup_by_id((vrf_id_t)ifindex)) {
vrf_id_t exist_id;

exist_id = zebra_vrf_lookup_by_table(tableid, ns_id);
if (exist_id != VRF_DEFAULT) {
vrf = vrf_lookup_by_id(exist_id);

if (vrf)
flog_err(EC_ZEBRA_VRF_MISCONFIGURED,
"VRF %s id %u table id overlaps existing vrf %s(%d), misconfiguration exiting",
name, ifindex, vrf->name,
vrf->vrf_id);
else
flog_err(EC_ZEBRA_VRF_NOT_FOUND,
"VRF %s id %u does not exist",
name, ifindex);
/*
* For a given tableid, if there already exists a vrf and it
* is different from the current vrf to be operated, then there
* is a misconfiguration and zebra will exit.
*/
vrf_id_t exist_id = zebra_vrf_lookup_by_table(tableid, ns_id);

if (exist_id != VRF_DEFAULT) {
vrf = vrf_lookup_by_id(exist_id);

if (!vrf_lookup_by_id((vrf_id_t)ifindex) && !vrf) {
flog_err(EC_ZEBRA_VRF_NOT_FOUND,
"VRF %s id %u does not exist", name,
ifindex);
exit(-1);
}

if (vrf && strcmp(name, vrf->name)) {
flog_err(EC_ZEBRA_VRF_MISCONFIGURED,
"VRF %s id %u table id overlaps existing vrf %s(%d), misconfiguration exiting",
name, ifindex, vrf->name, vrf->vrf_id);
exit(-1);
}
}
Expand Down

0 comments on commit 659741f

Please sign in to comment.