(usagi-users 03786) Re: [Patch][IPv6] Fix wrong routing mechanism for Link Local IPv6 packets

"Wei Dong" <[email protected]> Wed, 31 Jan 2007 13:22:08 +0900
Newsgroups gmane.linux.ipv6.usagi.users
Message-ID <002201c744ef$5ed442b0$ccb1220a@ZhaoleiSOTEC>
Hello, 

The latest RFC4291:

2.5.6.  Link-Local IPv6 Unicast Addresses

   Link-Local addresses are designed to be used for addressing on a
   single link for purposes such as automatic address configuration,
   neighbor discovery, or when no routers are present.

   Routers must not forward any packets with Link-Local source or
   destination addresses to other links.

Of course router MUST NOT forward Link-Local packet.
Our case is very spcial. I think we can consider that router's eth1 and
 the host attached to router's eth0 are on the same site not the same Link.
Because no wire connect them together:)

----- Original Message ----- 
> Hello,
> this is from RFC2373:
>   Link-Local addresses are designed to be used for addressing on a
>   single link for purposes such as auto-address configuration, neighbor
>   discovery, or when no routers are present.
> 
> Does the same problem occur when you are using globally route-able
> unicast addresses (and subnets)? I'm not sure if link-local addresses
> (fe80::/64) are supposed to be routed?
> 
> From Stuart.
> 
> Wei Dong wrote:
>> Hello, Mr yoshfuji
>>    Take ping6 for example. Asumming there is a router which has 2
>> NICs. eth0 on router has ipv6 addr fe80::20c:29ff:fe24:fa0a, eth1 on
>> router has ipv6 addr fe80::20c:29ff:fe24:fa14. Also there is a host
>> connected to router's eth0, and the host's ipv6 addr is
>> fe80::200:ff:fe00:100. We ping6 to router's eth1(ipv6 addr
>> fe80::20c:29ff:fe24:fa14). But now Linux kernel deals with this kind
>> of packet incorrectly. Router forward the Echo request to eth0. And
>> send ICMP redirect packet to the host. In ICMP redirect packt
>> TargetAddress =fe80::20c:29ff:fe24:fa14, DestinationAddress =
>> fe80::20c:29ff:fe24:fa14. So I think Linux  kernel considers that
>> fe80::200:ff:fe00:100 and fe80::20c:29ff:fe24:fa14 are neighbors.
>>
>> I dived into the kernel, and found that maybe function
>> rt6_score_route() has problems. In rt6_score_route(), if
>> rt6_check_dev() return 0, and the dst ipv6 addr is link local addr,
>> rt6_socre_route() return -1 directly. I think this is not correct, we
>> should return -1 only if the entry is in the route cache, and the dst
>> addr is link local addr. Only entries in cache will select wrong IPv6
>> Link Local NIC for a link local addr, because they are copied from
>> static IPv6 fib tables.
>>
>> ----- Original Message -----
>>> Hello.
>>>
>>> In article <1172042666.4512.8.camel@LINE> (at Wed, 21 Feb 2007
>>> 02:24:26 -0500), weidong <[email protected]> says:
>>>
>>>>          eth0: fe80::20c:29ff:fe24:fa0a
>>>>             |                     eth1: fe80::20c:29ff:fe24:fa14
>>>>             |                      |
>>>> ------------------------------------------------
>>>>             |                      |
>>>>             |                      |
>>>>             | LAN1                 |LAN2
>>>>             |                      |
>>>>           -----
>>>>             ^
>>>>             |
>>>>      Send Echo Request(src addr = fe80::200:ff:fe00:100)
>>>
>>> Sorry, I could not understand this figure....
>>> Would you elaborate this?
>>>
>>> --yoshfuji 
>>
>>
> 
> -- 
> Stuart MacIntosh
> IT Consultancy & Technical Services
> Phone: +64 21 2259576
> Email: [email protected]
> 
>