netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* IPv6 routing type - not at par with IPv4 one?
@ 2012-09-06 10:02 Markus Stenberg
  2012-09-06 10:35 ` Eric Dumazet
  0 siblings, 1 reply; 9+ messages in thread
From: Markus Stenberg @ 2012-09-06 10:02 UTC (permalink / raw)
  To: netdev

~ # ip route add throw 1.2.3.4
~ # ip -6 route add throw ::1.2.3.4
RTNETLINK answers: No such device
~ # ip route add blackhole 1.2.3.5
~ # ip -6 route add blackhole ::1.2.3.5
RTNETLINK answers: No such device
~ #

The reason for this is in net/ipv6/route.c - ipv6_route_add:

Eventually code winds up at this (1423 line in 3.5.3):

	err = -ENODEV;
	if (!dev)
		goto out;

and poof, ENODEV.

Is there some reason for this? Or should I write a patch? 
Or does someone else want to? Support for dev=NULL 
elsewhere in the code seems to be ok.

Based on quick googling I'm not the first one to have encountered this.

Cheers,

-Markus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: IPv6 routing type - not at par with IPv4 one?
  2012-09-06 10:02 IPv6 routing type - not at par with IPv4 one? Markus Stenberg
@ 2012-09-06 10:35 ` Eric Dumazet
  2012-09-06 10:54   ` Markus
  0 siblings, 1 reply; 9+ messages in thread
From: Eric Dumazet @ 2012-09-06 10:35 UTC (permalink / raw)
  To: Markus Stenberg; +Cc: netdev, Nicolas Dichtel

On Thu, 2012-09-06 at 10:02 +0000, Markus Stenberg wrote:
> ~ # ip route add throw 1.2.3.4
> ~ # ip -6 route add throw ::1.2.3.4
> RTNETLINK answers: No such device
> ~ # ip route add blackhole 1.2.3.5
> ~ # ip -6 route add blackhole ::1.2.3.5
> RTNETLINK answers: No such device
> ~ #
> 
> The reason for this is in net/ipv6/route.c - ipv6_route_add:
> 
> Eventually code winds up at this (1423 line in 3.5.3):
> 
> 	err = -ENODEV;
> 	if (!dev)
> 		goto out;
> 
> and poof, ENODEV.
> 
> Is there some reason for this? Or should I write a patch? 
> Or does someone else want to? Support for dev=NULL 
> elsewhere in the code seems to be ok.
> 
> Based on quick googling I'm not the first one to have encountered this.

Well, it  seems you missed this : 

http://git.kernel.org/?p=linux/kernel/git/davem/net-next.git;a=commitdiff;h=ef2c7d7b59708d54213c7556a82d14de9a7e4475

At least the blackhole is now supported on IPv6, so you probably have to
add the 'throw' bit, if it makes any sense.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: IPv6 routing type - not at par with IPv4 one?
  2012-09-06 10:35 ` Eric Dumazet
@ 2012-09-06 10:54   ` Markus
  2012-09-06 13:21     ` Nicolas Dichtel
  0 siblings, 1 reply; 9+ messages in thread
From: Markus @ 2012-09-06 10:54 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Markus Stenberg, netdev, Nicolas Dichtel

On 6.9.2012, at 13.35, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Well, it  seems you missed this : 
> 
> http://git.kernel.org/?p=linux/kernel/git/davem/net-next.git;a=commitdiff;h=ef2c7d7b59708d54213c7556a82d14de9a7e4475
> 
> At least the blackhole is now supported on IPv6, so you probably have to
> add the 'throw' bit, if it makes any sense.


Ah, cool, teaches me to refresh my git trees before posting ;-)
Nicolas, want to update for that too or will I? 

Throw is useful in various cases (it is RTN_THROW / -EAGAIN). 

Cheers,

-Markus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: IPv6 routing type - not at par with IPv4 one?
  2012-09-06 10:54   ` Markus
@ 2012-09-06 13:21     ` Nicolas Dichtel
  2012-09-06 15:53       ` [PATCH net-next] ipv6: fix handling of throw routes Nicolas Dichtel
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Dichtel @ 2012-09-06 13:21 UTC (permalink / raw)
  To: Markus; +Cc: Eric Dumazet, Markus Stenberg, netdev

Le 06/09/2012 12:54, Markus a écrit :
> On 6.9.2012, at 13.35, Eric Dumazet <eric.dumazet@gmail.com> wrote:
>> Well, it  seems you missed this :
>>
>> http://git.kernel.org/?p=linux/kernel/git/davem/net-next.git;a=commitdiff;h=ef2c7d7b59708d54213c7556a82d14de9a7e4475
>>
>> At least the blackhole is now supported on IPv6, so you probably have to
>> add the 'throw' bit, if it makes any sense.
>
>
> Ah, cool, teaches me to refresh my git trees before posting ;-)
> Nicolas, want to update for that too or will I?
Ok, I will send another patch for this.


Thank you,
Nicolas

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next] ipv6: fix handling of throw routes
  2012-09-06 15:53       ` [PATCH net-next] ipv6: fix handling of throw routes Nicolas Dichtel
@ 2012-09-06 13:58         ` Eric Dumazet
  2012-09-07 18:18         ` David Miller
  1 sibling, 0 replies; 9+ messages in thread
From: Eric Dumazet @ 2012-09-06 13:58 UTC (permalink / raw)
  To: Nicolas Dichtel; +Cc: davem, netdev, markus.stenberg

On Thu, 2012-09-06 at 11:53 -0400, Nicolas Dichtel wrote:
> It's the same problem that previous fix about blackhole and prohibit routes.
> 
> When adding a throw route, it was handled like a classic route.
> Moreover, it was only possible to add this kind of routes by specifying
> an interface.
> 
> Before the patch:
>   $ ip route add throw 2001::2/128
>   RTNETLINK answers: No such device
>   $ ip route add throw 2001::2/128 dev eth0
>   $ ip -6 route | grep 2001::2
>   2001::2 dev eth0  metric 1024
> 
> After:
>   $ ip route add throw 2001::2/128
>   $ ip -6 route | grep 2001::2
>   throw 2001::2 dev lo  metric 1024  error -11
> 
> Reported-by: Markus Stenberg <markus.stenberg@iki.fi>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> ---
>  net/ipv6/route.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)

Acked-by: Eric Dumazet <edumazet@google.com>

Thanks Nicolas

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH net-next] ipv6: fix handling of throw routes
  2012-09-06 13:21     ` Nicolas Dichtel
@ 2012-09-06 15:53       ` Nicolas Dichtel
  2012-09-06 13:58         ` Eric Dumazet
  2012-09-07 18:18         ` David Miller
  0 siblings, 2 replies; 9+ messages in thread
From: Nicolas Dichtel @ 2012-09-06 15:53 UTC (permalink / raw)
  To: davem; +Cc: netdev, markus.stenberg, eric.dumazet, Nicolas Dichtel

It's the same problem that previous fix about blackhole and prohibit routes.

When adding a throw route, it was handled like a classic route.
Moreover, it was only possible to add this kind of routes by specifying
an interface.

Before the patch:
  $ ip route add throw 2001::2/128
  RTNETLINK answers: No such device
  $ ip route add throw 2001::2/128 dev eth0
  $ ip -6 route | grep 2001::2
  2001::2 dev eth0  metric 1024

After:
  $ ip route add throw 2001::2/128
  $ ip -6 route | grep 2001::2
  throw 2001::2 dev lo  metric 1024  error -11

Reported-by: Markus Stenberg <markus.stenberg@iki.fi>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
 net/ipv6/route.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index fa26444..339d921 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1471,6 +1471,9 @@ int ip6_route_add(struct fib6_config *cfg)
 		case RTN_PROHIBIT:
 			rt->dst.error = -EACCES;
 			break;
+		case RTN_THROW:
+			rt->dst.error = -EAGAIN;
+			break;
 		default:
 			rt->dst.error = -ENETUNREACH;
 			break;
@@ -2275,7 +2278,8 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
 
 	if (rtm->rtm_type == RTN_UNREACHABLE ||
 	    rtm->rtm_type == RTN_BLACKHOLE ||
-	    rtm->rtm_type == RTN_PROHIBIT)
+	    rtm->rtm_type == RTN_PROHIBIT ||
+	    rtm->rtm_type == RTN_THROW)
 		cfg->fc_flags |= RTF_REJECT;
 
 	if (rtm->rtm_type == RTN_LOCAL)
@@ -2412,6 +2416,9 @@ static int rt6_fill_node(struct net *net,
 		case -EACCES:
 			rtm->rtm_type = RTN_PROHIBIT;
 			break;
+		case -EAGAIN:
+			rtm->rtm_type = RTN_THROW;
+			break;
 		default:
 			rtm->rtm_type = RTN_UNREACHABLE;
 			break;
-- 
1.7.12

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next] ipv6: fix handling of throw routes
  2012-09-06 15:53       ` [PATCH net-next] ipv6: fix handling of throw routes Nicolas Dichtel
  2012-09-06 13:58         ` Eric Dumazet
@ 2012-09-07 18:18         ` David Miller
  2012-09-10  7:15           ` Nicolas Dichtel
  1 sibling, 1 reply; 9+ messages in thread
From: David Miller @ 2012-09-07 18:18 UTC (permalink / raw)
  To: nicolas.dichtel; +Cc: netdev, markus.stenberg, eric.dumazet

From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date: Thu,  6 Sep 2012 11:53:35 -0400

> It's the same problem that previous fix about blackhole and prohibit routes.
> 
> When adding a throw route, it was handled like a classic route.
> Moreover, it was only possible to add this kind of routes by specifying
> an interface.
> 
> Before the patch:
>   $ ip route add throw 2001::2/128
>   RTNETLINK answers: No such device
>   $ ip route add throw 2001::2/128 dev eth0
>   $ ip -6 route | grep 2001::2
>   2001::2 dev eth0  metric 1024
> 
> After:
>   $ ip route add throw 2001::2/128
>   $ ip -6 route | grep 2001::2
>   throw 2001::2 dev lo  metric 1024  error -11
> 
> Reported-by: Markus Stenberg <markus.stenberg@iki.fi>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

Applied, thanks.

See how easy this was to implement via ->rtm_type? :-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next] ipv6: fix handling of throw routes
  2012-09-07 18:18         ` David Miller
@ 2012-09-10  7:15           ` Nicolas Dichtel
  2013-01-24 10:11             ` Axel Neumann
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Dichtel @ 2012-09-10  7:15 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, markus.stenberg, eric.dumazet

Le 07/09/2012 20:18, David Miller a écrit :
> From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> Date: Thu,  6 Sep 2012 11:53:35 -0400
>
>> It's the same problem that previous fix about blackhole and prohibit routes.
>>
>> When adding a throw route, it was handled like a classic route.
>> Moreover, it was only possible to add this kind of routes by specifying
>> an interface.
>>
>> Before the patch:
>>    $ ip route add throw 2001::2/128
>>    RTNETLINK answers: No such device
>>    $ ip route add throw 2001::2/128 dev eth0
>>    $ ip -6 route | grep 2001::2
>>    2001::2 dev eth0  metric 1024
>>
>> After:
>>    $ ip route add throw 2001::2/128
>>    $ ip -6 route | grep 2001::2
>>    throw 2001::2 dev lo  metric 1024  error -11
>>
>> Reported-by: Markus Stenberg <markus.stenberg@iki.fi>
>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>
> Applied, thanks.
>
> See how easy this was to implement via ->rtm_type? :-)
>
Definitely!

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next] ipv6: fix handling of throw routes
  2012-09-10  7:15           ` Nicolas Dichtel
@ 2013-01-24 10:11             ` Axel Neumann
  0 siblings, 0 replies; 9+ messages in thread
From: Axel Neumann @ 2013-01-24 10:11 UTC (permalink / raw)
  To: netdev

Hi

Nicolas Dichtel <nicolas.dichtel <at> 6wind.com> writes:

> 
> Le 07/09/2012 20:18, David Miller a écrit :
> > From: Nicolas Dichtel <nicolas.dichtel <at> 6wind.com>
> > Date: Thu,  6 Sep 2012 11:53:35 -0400
> >
> >> It's the same problem that previous fix about blackhole and prohibit routes.
> >>
> >> When adding a throw route, it was handled like a classic route.
> >> Moreover, it was only possible to add this kind of routes by specifying
> >> an interface.
> >>
> >> Before the patch:
> >>    $ ip route add throw 2001::2/128
> >>    RTNETLINK answers: No such device
> >>    $ ip route add throw 2001::2/128 dev eth0
> >>    $ ip -6 route | grep 2001::2
> >>    2001::2 dev eth0  metric 1024
> >>
> >> After:
> >>    $ ip route add throw 2001::2/128
> >>    $ ip -6 route | grep 2001::2
> >>    throw 2001::2 dev lo  metric 1024  error -11
> >>
> >> Reported-by: Markus Stenberg <markus.stenberg <at> iki.fi>
> >> Signed-off-by: Nicolas Dichtel <nicolas.dichtel <at> 6wind.com>
> >
> > Applied, thanks.


Although 'ip -6 route show' now reports a "throw" instead of an "unreachable"
route the behavior of a configured IPv6 "throw" route still seems incorrect and
similar to that of an "unreachable" route!


I've tested with kernel 3.7.4 which includes this patch:
http://git.kernel.org/?p=linux/kernel/git/davem/net-next.git;a=commitdiff;h=ef2c7d7b59708d54213c7556a82d14de9a7e4475

An example scenario using a dedicated routing table (IMHO the main use case for
throw routes) is given below...

greetings
/axel



The following scenario shows an example:
computer 1001 and 1002 connected via ethernet eth2
computer 1002 has 1001:2::2/64 on eth2


Now at computer 1001:

root@mlc1001:~# ping6 1001:2::2 -c 1
connect: Network is unreachable

root@mlc1001:~# ip a add 1001:2::1/64 dev eth2

root@mlc1001:~# ip -6 rule add from all lookup 10 pref 1000

root@mlc1001:~# ip -6 rule    
0:      from all lookup local 
1000:   from all lookup 10 
32766:  from all lookup main 

root@mlc1001:~# ip -6 route list table 10

root@mlc1001:~# ping6 1001:2::2 -c 1
PING 1001:2::2(1001:2::2) 56 data bytes
64 bytes from 1001:2::2: icmp_seq=1 ttl=64 time=0.263 ms
--- 1001:2::2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.263/0.263/0.263/0.000 ms

root@mlc1001:~# ip -6 route add throw 1001:2::/64 table 10

root@mlc1001:~# ip -6 route list table 10
throw 1001:2::/64 dev lo  metric 1024  error -11

root@mlc1001:~# ping6 1001:2::2 -c 1
connect: Resource temporarily unavailable


# Although the destination lookup should only be thrown for table 10
# and continue on the main table where a valid local route exists
# it fails. For remote throw routes the error says something like:
# From 1001:2::2 icmp_seq=1 Destination unreachable: No route
# Removing the throw route again it works again...


root@mlc1001:~# ip -6 r
1001:2::/64 dev eth2  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
fe80::/64 dev eth2  proto kernel  metric 256 

root@mlc1001:~# ip -6 route del throw 1001:2::/64 table 10

root@mlc1001:~# ping6 1001:2::2 -c 1
PING 1001:2::2(1001:2::2) 56 data bytes
64 bytes from 1001:2::2: icmp_seq=1 ttl=64 time=0.264 ms
--- 1001:2::2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.264/0.264/0.264/0.000 ms

root@mlc1001:~# ip -6 r
1001:2::2 via 1001:2::2 dev eth2  metric 0 
    cache 
1001:2::/64 dev eth2  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
fe80::/64 dev eth2  proto kernel  metric 256 
root@mlc1001:~# 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-01-24 10:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-06 10:02 IPv6 routing type - not at par with IPv4 one? Markus Stenberg
2012-09-06 10:35 ` Eric Dumazet
2012-09-06 10:54   ` Markus
2012-09-06 13:21     ` Nicolas Dichtel
2012-09-06 15:53       ` [PATCH net-next] ipv6: fix handling of throw routes Nicolas Dichtel
2012-09-06 13:58         ` Eric Dumazet
2012-09-07 18:18         ` David Miller
2012-09-10  7:15           ` Nicolas Dichtel
2013-01-24 10:11             ` Axel Neumann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).