From cddef813e1fee33937d1e56fce84f708e17a4aa6 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Wed, 29 Nov 2017 18:30:26 -0200 Subject: [PATCH] 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 --- ldpd/ldp_zebra.c | 32 ++++++++++++++++++++++++++------ 1 file 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), -- 2.39.5