My embedded system uses a Micrel KSZ8995M switch, connected to two "internal" devices (and by internal I mean sitting physically on the same board) and a LAN.
Device 1 is a ARMv5 processor running Busybox Linux, with a LAN IP configured either by DHCP or statically on eth0
, and a link-local/APIPA 169.254.137.10
address on eth0:0
.
Device 2 is a smaller chip running ARTOS and who knows what else, with only a link-local/APIPA 169.254.137.11
address.
+----------------------------+
| +----------+ +----------+ |
| | Device 1 | | Device 2 | |
| +-----+----+ +-----+----+ |
| | | | <-- a "unit"
| +-----+-------------+----+ |
| | Micrel KSZ899M switch | |
| +-----------+------------+ |
+-------------|--------------+
|
+--+--+
| LAN |
+ - +
The intention is for device 1 and device 2 to be able to talk to each other via TCP/IP, without any other devices on the LAN (or any recursively attached network) being able to see device 2 or see the data going between the two devices.
Also there may be multiple instances of the whole unit on the network, and the link-local addresses must not clash between units.
By my understanding, link-local addressing as defined in RFC 3927 is intended for "internal" communications only and packets dispatched between interface with link-local addressing should not be forwarded by switches or routers.
Woe and alas, with the system as a whole hooked up to the LAN, I'm seeing ARP responses to device 2 from multiple devices across the wider network, implying that the link-local IPs are visible and clashing across the network. That is, the Micrel appears to forward these and I cannot see any configuration with which to make it stop.
Have I misunderstood the way in which the APIPA addressing works?
Or, if I am correct but the Micrel merely does not support them properly, can I coerce it into compliance?
References: