diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2017-11-29 18:30:26 -0200 | 
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2017-11-29 20:39:23 -0200 | 
| commit | cddef813e1fee33937d1e56fce84f708e17a4aa6 (patch) | |
| tree | 51f715b25b8e05b074961f67432bc73964a535e1 /ldpd | |
| parent | 34eeae65c01d0e97dc2d89b0b0940b51c2f86042 (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')
| -rw-r--r-- | ldpd/ldp_zebra.c | 32 | 
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),  | 
