Messages in this thread | | | Date | Mon, 4 Sep 2000 10:22:42 +0800 | From | Andrey Savochkin <> | Subject | Re: Linux 2.2 - BSD/OS 4.1 ARP incompatibility |
| |
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/
| |