We have a custom board with an AM3354 processor. We recently upgraded to a 3.2 kernel (based upon the TI PSP 11) that supports Dual EMAC mode. Our hardware has three Ethernet ports, eth0 on an external MAC/PHY, and eth1 and eth2 on the Dual EMAC ports of the AM335x. The system comes up with ipconfig showing all three ports, and I can ping all three from an external machine. All three ports are on different subnets.
We have a test application that uses iptables, ip route and arp to force traffic from eth0 to eth1 or eth2 to go over the external lines, rather than be routed internally. It is based on this example:
The test program works from eth0 to eth1, as long as the eth2 link is not up. If I connect both eth1 and eth2 to a switch, ping from eth0 to eth1 will fail.
Similarly, the test passes from eth0 to eth2, but only if the eth1 link is down.
Any ideas about what's going on?
I think I need to look at what the CPSW driver does in the success and failure cases. What can I look at to see those internals?
thanks,