Le 25 sept. 2013 à 11:40, Ole Troan a écrit :

> 
>>> 
>>> you need source address dependent routing (e.g. 
>>> http://tools.ietf.org/html/draft-troan-homenet-sadr-01)
>>> I think the latest kernel has SADR working. enable CONFIG_IPV6_SUBTREES.
>> 
>> I didn't know this draft, interesting.
>> About CONFIG_IPV6_SUBTREES, i already use it to mitigate this problem, but 
>> it is all but automatic. You need to implement an external daemon to listen 
>> to RAs and dynamically add source routing entries in order to enforce the 
>> kernel not to route on the bad interface.
> 
> if you are brave (in a month or so you can be a little less brave) you can 
> run this
> https://github.com/fingon

Thanks. Actually i work on a custom daemon which does a lot of more things 
(e.g. Mobile IPv6) so SADR policies are just one more thing among others ! ;)


> 
>> What puzzles me is that the nexthop selection in the linux kernel:
>> * doesn't prefer a router which announces the prefix from which the source 
>> address has been generated (when i do a ping6 -I <slaac_eth2> <dest> )
>> * doesn't enforce the interface we bound to (when i do a ping6 -I eth2 
>> <dest> )
>> ...whereas two equivalent routes exists ("default via <router1> dev eth1" 
>> and "default via <router2> dev eth2" ). Only the expiration time differs 
>> between these routes.
>> 
>> Surprisingly, even the following ping doesn't succeed to enforce the output 
>> interface on my setup:
>> $ ping6 -r -I "<slaac_eth2>%eth2" <dest>
>> 
>> This is what sounds weird to me. If this is the actual kernel behaviour, i 
>> think we might need to enforce the nexthop selection to prefer the interface 
>> corresponding to the source address of the packet (when the packet is 
>> locally generated).
> 
> isn't that the great thing with Linux, just get your coding hat on. ;-)

Before having to do that i wanted some confirmation. ;)
Moreover the routing code in linux, in particular the fib part, isn't so easy 
to understand.

One more thing, which make me think about a bug. If i cleanup the routing cache 
between each test, the following works (i don't works if routing cache entries 
exist via eth1):
$ ping6 -I "<slaac_eth2>%eth2" <dest>

I take it as a first thing to report on linux-netdev, what i will probably do 
soon.

Best regards
Emmanuel Thierry

Reply via email to