[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20131120045726.GT16541@order.stressinduktion.org>
Date: Wed, 20 Nov 2013 05:57:26 +0100
From: Hannes Frederic Sowa <hannes@...essinduktion.org>
To: Kamala R <kamala@...stanetworks.com>
Cc: netdev@...r.kernel.org, David Miller <davem@...emloft.net>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/1] IPv6: Fixed support for blackhole and prohibit routes
On Tue, Nov 19, 2013 at 10:19:33PM +0530, Kamala R wrote:
> From: Kamala R <kamala@...stanetworks.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 for prohibit routes they are set to ip6_pkt_prohibit and ip6_pkt_prohbit_out
> respectively.
>
> Signed-off-by: Kamala R <kamala@...stanetworks.com>
> ---
> net/ipv6/route.c | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/net/ipv6/route.c b/net/ipv6/route.c
> index f54e3a1..f2289fd 100644
> --- a/net/ipv6/route.c
> +++ b/net/ipv6/route.c
> @@ -1564,21 +1564,25 @@ 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 = (cfg->fc_type == RTN_BLACKHOLE) ? -EINVAL
> + : ((cfg->fc_type == RTN_PROHIBIT ? -EACCES
> + : ((cfg->fc_type == RTN_THROW ? -EAGAIN
> + : -ENETUNREACH))));
Uh, sorry, I was a bit too unclear. This is rather ugly. I meant merging
the RTN_THROW and default case and just use one dst.error assignment
with a ternary operator where it makes sense.
> 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;
case RTN_THROW:
default:
rt->dst.error = (cfg->fc_type == ...) ? ... : ...;
rt->dst.output = ....
rt->dst.input = ....
I also don't mind if you are more verbose and specify each case
independent. Just have a look how it looks more pleasing. ;)
Greetings,
Hannes
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists