Also adding, mDNS needs to explicitly set the endpoint somewhere, weighting the prvFillSockAddress to choose up interfaces results yields an empty endpoint, requiring adding
#if ipconfigIS_ENABLED( ipconfigUSE_IPv4 )
+ /* __HT__ Should be done only if all network interfaces are down. */
vIPSetARPTimerEnableState( pdFALSE );
#endif
~~~
Actually this is the only place where the timer can be disabled. So if one out of two interfaces goes down, the other will not have timer-driven services. vARPAgeCache() and vARPSendGratuitous() wonât be called any more.
@htibosch Iâm not sure this is enough, but its fine with me.
I really believe this is more of an architecture issue. +TCP is also a free offering, so I really canât require FreeRTOS to fix this, or fix it the way I see the problem. Also, htibosch obviously has other irons in the fire, and that is understandable, so hopefully FreeRTOS adds some other experienced network architects to the project.
The core issue , at least the way I understand, is that the routing and selection layer needs to be more context aware. The way it is now, its really chance and the order the interfaces were added to FreeRTOS TCP that decides which interface the outbound packet goes out on, rather than proper metrics like, is this interface active, etc.
So to make this work in a reasonable fashion and get this shipped, I modified this to work for me, and Iâve attached the diff file based on 4.3.3 to what I ended up at.