]> git.puffer.fish Git - mirror/frr.git/commit
zebra: Implement recovery for route install failure
authorvivek <vivek@cumulusnetworks.com>
Fri, 29 Apr 2016 05:09:17 +0000 (22:09 -0700)
committervivek <vivek@cumulusnetworks.com>
Fri, 29 Apr 2016 05:09:17 +0000 (22:09 -0700)
commit3e5c6e00cb16b81a8b5bc06b15c44de86e496530
tree629f8456e4132c36ac24d3306fdef024a71f32e1
parentaeb355e7d3e1b68aa7cd3aba811a75218cda2b02
zebra: Implement recovery for route install failure

Quagga does not have proper recovery for route install failure (in
the kernel). The lack of this may not be a significant issue if the
failure is only an exception. However, the introduction of route
replace presents a new failure scenario which was not there earlier.
Before replace, the update operation involved a delete followed by
add; the failure of add would not leave hanging route entries in the
kernel as they would've got deleted first. With route replace, if
the replace fails, recovery action to delete the route is needed, else
the route remains hanging in the kernel.

In particular, with VRFs and in the presence of ECMP/multipath, a
failure mode exists where Quagga thinks that routes have been cleaned
up and deleted from the kernel but the kernel continues to retain them.
This happens when multiple VRF interfaces are moved from one VRF to
another.

This patch addresses this scenario by implementing proper recovery for
route install failure.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Dinesh Dutt <ddutt@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-10361
Reviewed By: CCR-4566
Testing Done: bgp-min, ospf-min, bgp-smoke, ospf-smoke and manual

Note: There are some test failures and results aren't consistent across
runs; Daniel has resolved many of these through other fixes.
zebra/rt_netlink.c
zebra/zebra_rib.c