FreeRTOS+TCP_Multi Bug: ARP resolves remote addresses locally

miclam wrote on Friday, August 11, 2017:

Hello,

I’m currently testing the DNS client of +TCP_multi. When using 8.8.8.8 as DNS server I noticed, that eARPGetCacheEntry does not resolve unmatched remote ip addresses to the default gateway.
This is because FreeRTOS_FindEndPointOnNetMask returns either the correct EndPoint, or the default EndPoint, and only in case no default is set NULL.
eARPGetCacheEntry then checks by if( pxEndPoint == NULL ) (Line 456 in FreeRTOS_ARP.c) if the default gateway should be used, which is never reached.

My idea was to let FreeRTOS_FindEndPointOnNetMask return NULL instead of the default EndPoint, and to explicitly call FreeRTOS_FindDefaultEndPoint wherever the default EndPoint is required. But FreeRTOS_FindEndPointOnNetMask is used in quiet a lot locations, I’m afraid of breaking something without knowing.

What do you think?

Many thanks,
Michael

miclam wrote on Friday, August 11, 2017:

Hello,
as far as I can see commenting out pxEndPoint = pxDefault; in Line 375 in FreeRTOS_Routing.c and changing Line 2655 in FreeRTOS_IP.c and Line 195 in FreeRTOS_UDP_IP.c to

        pxNetworkBuffer->pxEndPoint = FreeRTOS_FindEndPointOnNetMask( pxIPPacket->xIPHeader.ulDestinationIPAddress, 7 );
        /* _ML_ Removed default EndPoint from FreeRTOS_FindEndPointOnNetMask, so get it here if needed. */
        if( pxNetworkBuffer->pxEndPoint == NULL )
        {
            pxNetworkBuffer->pxEndPoint = FreeRTOS_FindDefaultEndPoint();
        }

works. The other occurences of FreeRTOS_FindEndPointOnNetMask seem to actually expect it not to return the default gateway.

Regards,
Michael

heinbali01 wrote on Friday, August 11, 2017:

See my reponse here