ARP issues with dual ethernet link and CE 6.0 R2

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
 
R

Rik Attrill

> Any other suggestions or ideas?



Hi Andrew,



If you've installed the optional source code in C:\WINCE600\PRIVATE,

you might find it useful to browse the source code in C:

\WINCE600\PRIVATE\WINCEOS\COMM (and subdirectories).

A quick browse shows some ARP processing functions there (although

I've not looked in-depth enough to see if they are useful to you

specifically).



best regards,

Rik A
 
Back
Top Bottom