summaryrefslogtreecommitdiff
path: root/zebra/zebra_rib.c
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2017-09-01 11:44:22 -0300
committerRenato Westphal <renato@opensourcerouting.org>2017-09-01 11:44:22 -0300
commit5f20552d51647a7ab672b9e7dbdf7de757c9fb29 (patch)
tree87820b135d4628bb327bd5becf15d5ddfd1438be /zebra/zebra_rib.c
parent8ba5bd58aa7bb8de6c18dd4ebddecf142ae4012e (diff)
zebra: add an exception for link-local connected routes
Link-local routes are unique in the sense that they all have the same prefix but have different nexthops (local interfaces). Add an exception in rib_add() to allows us to keep track of all of them. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'zebra/zebra_rib.c')
-rw-r--r--zebra/zebra_rib.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 59b693435d..deb434bd35 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -2472,7 +2472,12 @@ int rib_add(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type, u_short instance,
rtnh = re->nexthop;
if (nexthop_same_no_recurse(rtnh, nh))
return 0;
- else
+ /*
+ * Nexthop is different. Remove the old route unless it's
+ * a link-local route.
+ */
+ else if (afi != AFI_IP6
+ || !IN6_IS_ADDR_LINKLOCAL(&p->u.prefix6))
same = re;
}