forked from Mirror/frr
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>
This commit is contained in:
parent
34eeae65c0
commit
cddef813e1
|
@ -450,18 +450,38 @@ ldp_zebra_read_route(int command, struct zclient *zclient, zebra_size_t length,
|
||||||
/* loop through all the nexthops */
|
/* loop through all the nexthops */
|
||||||
for (i = 0; i < api.nexthop_num; i++) {
|
for (i = 0; i < api.nexthop_num; i++) {
|
||||||
api_nh = &api.nexthops[i];
|
api_nh = &api.nexthops[i];
|
||||||
|
switch (api_nh->type) {
|
||||||
switch (kr.af) {
|
case NEXTHOP_TYPE_IPV4:
|
||||||
case AF_INET:
|
if (kr.af != AF_INET)
|
||||||
|
continue;
|
||||||
kr.nexthop.v4 = api_nh->gate.ipv4;
|
kr.nexthop.v4 = api_nh->gate.ipv4;
|
||||||
|
kr.ifindex = 0;
|
||||||
break;
|
break;
|
||||||
case AF_INET6:
|
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 NEXTHOP_TYPE_IPV6:
|
||||||
|
if (kr.af != AF_INET6)
|
||||||
|
continue;
|
||||||
kr.nexthop.v6 = api_nh->gate.ipv6;
|
kr.nexthop.v6 = api_nh->gate.ipv6;
|
||||||
|
kr.ifindex = 0;
|
||||||
|
break;
|
||||||
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
kr.ifindex = api_nh->ifindex;;
|
|
||||||
|
|
||||||
debug_zebra_in("route %s %s/%d nexthop %s ifindex %u (%s)",
|
debug_zebra_in("route %s %s/%d nexthop %s ifindex %u (%s)",
|
||||||
(add) ? "add" : "delete", log_addr(kr.af, &kr.prefix),
|
(add) ? "add" : "delete", log_addr(kr.af, &kr.prefix),
|
||||||
|
|
Loading…
Reference in a new issue