Hello,
Between SDK 8.05 and SDK 8.06.45 the error management inside ICSS_EMAC_txPacket() has changed.
I am facing a problem where on the evaluation board there is two ethernet ports (eth1 and eth2), when only one port has link then whenever we want to send a packet at bootup it will try to send on both port (which is normal since the mac table is not yet build up) but then 1 port has no link so the function ICSS_EMAC_txPacketEnqueue() returns ICSS_EMAC_ERR_TX_NO_LINK which is expected.
Here is the code in the SDK I am talking about :
So in this case ret1 or ret2 is then equal to ICSS_EMAC_ERR_TX_NO_LINK
The problem is then at the end of the ICSS_EMAC_txPacket() function we return "return ((ret2 << 16) | (ret1));" so if ret1 or ret2 is not 0 then the upper layer sees as if the send of the packet failed.
For me the behavior was on the ARP, because it was failing then the board was sending the ARP over and over on the available port and because it failed on the second port it was returning an error and tried over and over.
To fix this I have made this change:
I would like to have a feedback on this, would you have a proper fix on your side ? Or maybe you consider the fix I made as the good one ?
Thank you
Regards
Yanyves Genereux