summaryrefslogtreecommitdiff
path: root/zebra/zebra_rib.c
diff options
context:
space:
mode:
authorvivek <vivek@cumulusnetworks.com>2015-11-19 12:48:02 -0800
committervivek <vivek@cumulusnetworks.com>2015-11-19 12:48:02 -0800
commit0b560feb23d1ca0d59cd427f0d1fefb4db7b3c2a (patch)
treedc7c1e5e6062391139ba76bcb68782d8f6672a99 /zebra/zebra_rib.c
parentdccc522572a41a2121f006f1fd9fa7c16493197d (diff)
Zebra: Fix replace route for uninstall scenario
When a Quagga route that is currently installed is superceded by a kernel route (connected or static route to same destination), the Quagga route is not uninstalled from the kernel. Fix by ensuring this case is handled correctly. Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Ticket: CM-7152 Reviewed By: CCR-3476 Testing Done: Manual tests and verify failed test. Fixes: Replace route implementation (IPv4 and IPv6)
Diffstat (limited to 'zebra/zebra_rib.c')
-rw-r--r--zebra/zebra_rib.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 9eb28483c6..300c2143cb 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -1670,6 +1670,12 @@ rib_process (struct route_node *rn)
}
rib_install_kernel (rn, select, fib? 1 : 0);
}
+ else
+ {
+ /* Uninstall prior route here, if needed. */
+ if (fib && !RIB_SYSTEM_ROUTE (fib))
+ rib_uninstall_kernel (rn, fib);
+ }
SET_FLAG (select->flags, ZEBRA_FLAG_SELECTED);
/* Unconditionally announce, this part is exercised by new routes */