Re: Linux 2.2 - BSD/OS 4.1 ARP incompatibility

From: Andrey Savochkin (saw@saw.sw.com.sg)
Date: Sun Sep 03 2000 - 21:22:42 EST


Hi,

On Sat, Sep 02, 2000 at 01:05:02PM +0200, Andi Kleen wrote:
> On Sat, Sep 02, 2000 at 12:28:00PM +1100, David Luyer wrote:
[snip]
> > Now when the Linux box a.b.c.1 (with secondary address d.e.f.1) wants to
> > talk to the BSD/OS system d.e.f.2 it does
> >
> > a.b.c.1 arp who-has d.e.f.2
[snip]
>
> Strictly it is your routing which is wrong, because you're giving different
> routing information to BSDI and Linux.
>
> To work around it you can set an explicit source address on the outgoing
> routes using ip route replace d.e.f/24 src a.b.c.NUM dev DEV

Andi, there may be two reasons of this behavior:
1. skb that triggered ARP request had a.b.c.1 source, either because
   a) the socket had been bound to that address, or
   b) preferred source in the routing table is wrong;
2. the request source address was selected basing on interface address list,
   and produced a wrong result.
I would say that 1b case is the least likely for me.
If the reason of this behavior is 1a or 2, it's a kernel bug in my opinion.

David, could you try to replace the first `if' statement in arp_solicit() by
simple
        saddr = inet_select_addr(dev, target, RT_SCOPE_LINK);

It doesn't harm in any case, and will allow to distinguish cases #1 and #2.

Best regards
                Andrey
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Sep 07 2000 - 21:00:16 EST