]> git.proxmox.com Git - mirror_frr.git/commit - lib/vrf.h
zebra: treat vrf add for existing vrf as update
authorsudhanshukumar22 <sudhanshu.kumar@broadcom.com>
Thu, 12 Nov 2020 12:37:30 +0000 (04:37 -0800)
committersudhanshukumar22 <sudhanshu.kumar@broadcom.com>
Mon, 1 Feb 2021 16:33:13 +0000 (08:33 -0800)
commit75d26fb3138a015a61919d9291f8791f519fdc0b
tree4205ba15bfbda99a5ea4ca1b9dead2f61e7da8c4
parent79ea62839faf16a2de4ab366d7d6b340f68e58ee
zebra: treat vrf add for existing vrf as update

Description: When we get a new vrf add and vrf with same name, but different vrf-id already
exists in the database, we should treat vrf add as update.
This happens mostly when there are lots of vrf and other configuration being replayed.
There may be a stale vrf delete followed by new vrf add. This
can cause timing race condition where vrf delete could be missed and
further same vrf add would get rejected instead of treating last arrived
vrf add as update.

Treat vrf add for existing vrf as update.
Implicitly disable this VRF to cleanup routes and other functions as part of vrf disable.
Update vrf_id for the vrf and update vrf_id tree.
Re-enable VRF so that all routes are freshly installed.

Above 3 steps are mandatory since it can happen that with config reload
stale routes which are installed in vrf-1 table might contain routes from
older vrf-0 table which might have got deleted due to missing vrf-0 in new configuration.

Signed-off-by: sudhanshukumar22 <sudhanshu.kumar@broadcom.com>
lib/vrf.c
lib/vrf.h
zebra/if_netlink.c