From: Kamala R <kam...@aristanetworks.com> The behaviour of blackhole and prohibit routes has been corrected by setting the input and output function pointers of the dst variable appropriately. For blackhole routes, they are set to dst_discard and to ip6_pkt_prohibit and ip6_pkt_prohbit_out respectively for prohibit routes.
Changes from v1: Logic is the same. Changes made for readability and so it looks pleasing. Signed-off-by: Kamala R <kam...@aristanetworks.com> --- net/ipv6/route.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index f54e3a1..d90b9ab 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1564,21 +1564,24 @@ int ip6_route_add(struct fib6_config *cfg) goto out; } } - rt->dst.output = ip6_pkt_discard_out; - rt->dst.input = ip6_pkt_discard; rt->rt6i_flags = RTF_REJECT|RTF_NONEXTHOP; + rt->dst.error = -ENETUNREACH; switch (cfg->fc_type) { case RTN_BLACKHOLE: rt->dst.error = -EINVAL; + rt->dst.output = dst_discard; + rt->dst.input = dst_discard; break; case RTN_PROHIBIT: rt->dst.error = -EACCES; + rt->dst.output = ip6_pkt_prohibit_out; + rt->dst.input = ip6_pkt_prohibit; break; case RTN_THROW: rt->dst.error = -EAGAIN; - break; default: - rt->dst.error = -ENETUNREACH; + rt->dst.output = ip6_pkt_discard_out; + rt->dst.input = ip6_pkt_discard; break; } goto install_route; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/