W
WallyOne
We are developing a product based on an ARM9 processor (having an
internal 10/100 Mbit ethernet MAC) and running Microsoft Windows
Embedded CE 6.0 R2. To give it the capability of having a redundant
ethernet link (a compromise to avoid the cost and real estate of a
second ethernet controller that would have provided a full redundant
ethernet) we use a Marvell 88E6121 3-port switch chip that integrates
two 10/100/1000 Mbit PHYs and a MII interface.
In operation the ethernet is regularly (every minute) momentarily
switched to the secondary (redundant) port for a quick check to ensure
that the link is up to the nearest network switch/router.
The problem arises whereby the peer-to-peer communications (via SSL
sockets) with other similar devices stalls. By sniffing the ethernet
traffic between the two we can see that the device sends an ARP
request but the reply is received coincidental with the regular
ethernet port switch. The suspicion is that the ARP reply is directed
by the switch to the port that its own internal port-mapping table
indicates was last connected to the MAC, unfortunately we've just
switched to the other port and not yet transmitted an ethernet frame
that would allow the switch to update its port-map, thus the ARP reply
is lost. The IP frame that led the CE TCP stack to send the ARP
request ends up waiting around inside the TCP stack which doesn't seem
to retry the ARP.
A contributing factor to the problem is that every two minutes CE
purges all Dynamic entries from its ARP table, thus forcing each host
to be ARPed that frequently. One attempted solution was to use the
Iphlpapi to change the Dynamic ARP table entries to be Static and so
avoid having to ARP, but that's when we observed the second problem...
A few seconds following each switch to the other ethernet port the
entire ARP table is purged, including Static entries!
I've not been able to find much documentation on the inner workings of
the CE TCP/IP stack and how it's ARPing works or how it manages its
ARP table (other than the two minute deletion of entries). Can anyone
direct me to a useful source? Can we stop the ARP table (especially
the Static entries) from being purged following the PHY switch? Any
other suggestions or ideas?
Thanks
Andrew
internal 10/100 Mbit ethernet MAC) and running Microsoft Windows
Embedded CE 6.0 R2. To give it the capability of having a redundant
ethernet link (a compromise to avoid the cost and real estate of a
second ethernet controller that would have provided a full redundant
ethernet) we use a Marvell 88E6121 3-port switch chip that integrates
two 10/100/1000 Mbit PHYs and a MII interface.
In operation the ethernet is regularly (every minute) momentarily
switched to the secondary (redundant) port for a quick check to ensure
that the link is up to the nearest network switch/router.
The problem arises whereby the peer-to-peer communications (via SSL
sockets) with other similar devices stalls. By sniffing the ethernet
traffic between the two we can see that the device sends an ARP
request but the reply is received coincidental with the regular
ethernet port switch. The suspicion is that the ARP reply is directed
by the switch to the port that its own internal port-mapping table
indicates was last connected to the MAC, unfortunately we've just
switched to the other port and not yet transmitted an ethernet frame
that would allow the switch to update its port-map, thus the ARP reply
is lost. The IP frame that led the CE TCP stack to send the ARP
request ends up waiting around inside the TCP stack which doesn't seem
to retry the ARP.
A contributing factor to the problem is that every two minutes CE
purges all Dynamic entries from its ARP table, thus forcing each host
to be ARPed that frequently. One attempted solution was to use the
Iphlpapi to change the Dynamic ARP table entries to be Static and so
avoid having to ARP, but that's when we observed the second problem...
A few seconds following each switch to the other ethernet port the
entire ARP table is purged, including Static entries!
I've not been able to find much documentation on the inner workings of
the CE TCP/IP stack and how it's ARPing works or how it manages its
ARP table (other than the two minute deletion of entries). Can anyone
direct me to a useful source? Can we stop the ARP table (especially
the Static entries) from being purged following the PHY switch? Any
other suggestions or ideas?
Thanks
Andrew