On Tue, Jul 21, 2015 at 2:03 PM, dbextern <db_ext...@gmx.de> wrote:
Hello!
For our link local functionality I'm using udhcpc together with zcip out of
busybox on a Blackfin BF-537 CPU without MMU.
The base functionality is there.
But when I connect two networks with stable IP addresses, and both networks had
the same IP(s) in them, the conflict stays unresolved.
My setup is one master PC or MAC and several embedded boards.
What I would expect (following RFC3927
https://tools.ietf.org/html/rfc3927#page-10[https://3c.gmx.net/mail/client/dereferrer?redirectUrl=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Frfc3927%23page-10];
chapter 2.x and 4) is that after a while the ARP messages will resolve the
problem because the still running zcip sees ARP responses on it's own IP and
reacts accordingly.
What really happens is:
* Windows only sends broadcast ARP requests as long as it never got an answer.
After that there is only unicast. And the requested device answers with a
unicast as well.
* the MAC always sends broadcasts. And both embedded devices with the
conflicting IP answer. But with a unicast ARP reply to the MAC.
As I understand the specification (last paragraph in chapter 2.5) then all ARP
messages between devices with link local addresses should be link layer
broadcasts.
Did I get that right? And if yes, why does zcip not follow that rule?
zcip does use bcast for all packets it sends:
# tcpdump -nliwlan0 -s0 -vv -e arp
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size
65535 bytes
<zcip runs>
02:49:51.078369 00:04:e2:64:23:c2 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: arp who-has 169.254.194.171 tell 0.0.0.0
02:49:52.391711 00:04:e2:64:23:c2 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: arp who-has 169.254.194.171 tell 0.0.0.0
02:49:54.254628 00:04:e2:64:23:c2 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: arp who-has 169.254.194.171 tell 0.0.0.0
02:49:55.305731 00:04:e2:64:23:c2 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: arp who-has 169.254.194.171 (00:04:e2:64:23:c2)
tell 169.254.194.171
02:49:57.307788 00:04:e2:64:23:c2 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: arp who-has 169.254.194.171 (00:04:e2:64:23:c2)
tell 169.254.194.171
02:49:59.309844 00:04:e2:64:23:c2 > ff:ff:ff:ff:ff:ff, ethertype ARP
(0x0806), length 42: arp who-has 169.254.194.171 (00:04:e2:64:23:c2)
tell 169.254.194.171
Thanks for looking into that.
These are the probing and announcement messages from zcip. They need to
be and are bcasts.
What it does not do is answer normal ARP requests with a broadcast.
Which is specified in RCF3927 as the right thing to do.
After some time with this problem I think the main reason for this is
that we can not keep the kernel from answering normal ARP requests. And
zcip does not want to double the answer.
And from what has been said in the netdev mailing list keeping bcasts
out of your system is more important than following the specs.
I have a device (a Dante Brooklyn Modul for an audio stream) that does
exactly what I expected. But that modul does not have any ARP code in
the kernel. I assume it uses the option of completely taking care of ARP
in userspace.
My current solution is to send an extra ARP response from zcip. That
means two replies to every request (one from zcip, one from kernel). But
that is better for my usecase than not having a bcast answer. And I am
not part of a big network but only a small single purpose one. So nobody
else gets hurt.
And a more general question: when I handle an ARP packet in zcip, how does the
kernel know not to work on it as well?
I don't know...
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox