summaryrefslogtreecommitdiff
path: root/ldpd/ldp_zebra.c
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2017-11-29 18:30:26 -0200
committerRenato Westphal <renato@opensourcerouting.org>2017-11-29 20:39:23 -0200
commitcddef813e1fee33937d1e56fce84f708e17a4aa6 (patch)
tree51f715b25b8e05b074961f67432bc73964a535e1 /ldpd/ldp_zebra.c
parent34eeae65c01d0e97dc2d89b0b0940b51c2f86042 (diff)
ldpd: improve processing of redistributed routes
ldpd should ignore blackhole routes and any other route that doesn't have a nexthop address (connected routes being an exception). Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'ldpd/ldp_zebra.c')
-rw-r--r--ldpd/ldp_zebra.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/ldpd/ldp_zebra.c b/ldpd/ldp_zebra.c
index e703a9ff61..a12a4b913e 100644
--- a/ldpd/ldp_zebra.c
+++ b/ldpd/ldp_zebra.c
@@ -450,18 +450,38 @@ ldp_zebra_read_route(int command, struct zclient *zclient, zebra_size_t length,
/* loop through all the nexthops */
for (i = 0; i < api.nexthop_num; i++) {
api_nh = &api.nexthops[i];
-
- switch (kr.af) {
- case AF_INET:
+ switch (api_nh->type) {
+ case NEXTHOP_TYPE_IPV4:
+ if (kr.af != AF_INET)
+ continue;
+ kr.nexthop.v4 = api_nh->gate.ipv4;
+ kr.ifindex = 0;
+ break;
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ if (kr.af != AF_INET)
+ continue;
kr.nexthop.v4 = api_nh->gate.ipv4;
+ kr.ifindex = api_nh->ifindex;
break;
- case AF_INET6:
+ case NEXTHOP_TYPE_IPV6:
+ if (kr.af != AF_INET6)
+ continue;
kr.nexthop.v6 = api_nh->gate.ipv6;
+ kr.ifindex = 0;
break;
- default:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ if (kr.af != AF_INET6)
+ continue;
+ kr.nexthop.v6 = api_nh->gate.ipv6;
+ kr.ifindex = api_nh->ifindex;
+ break;
+ case NEXTHOP_TYPE_IFINDEX:
+ if (!(kr.flags & F_CONNECTED))
+ continue;
break;
+ default:
+ continue;
}
- kr.ifindex = api_nh->ifindex;;
debug_zebra_in("route %s %s/%d nexthop %s ifindex %u (%s)",
(add) ? "add" : "delete", log_addr(kr.af, &kr.prefix),