Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

do not let through unicast packets on inactive endpoints #1186

4 changes: 1 addition & 3 deletions source/FreeRTOS_IPv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,7 @@ enum eFrameProcessingResult prvAllowIPPacketIPv4( const struct xIP_PACKET * cons
( FreeRTOS_FindEndPointOnIP_IPv4( ulDestinationIPAddress ) == NULL ) &&
/* Is it an IPv4 broadcast address x.x.x.255 ? */
( ( FreeRTOS_ntohl( ulDestinationIPAddress ) & 0xffU ) != 0xffU ) &&
( xIsIPv4Multicast( ulDestinationIPAddress ) == pdFALSE ) &&
/* Or (during DHCP negotiation) we have no IP-address yet? */
( FreeRTOS_IsNetworkUp() != pdFALSE ) )
( xIsIPv4Multicast( ulDestinationIPAddress ) == pdFALSE ) )
{
/* Packet is not for this node, release it */
eReturn = eReleaseBuffer;
Expand Down
1 change: 0 additions & 1 deletion source/FreeRTOS_Routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,6 @@ struct xIPv6_Couple
#endif
{
if( ( ulIPAddress == 0U ) ||
( pxEndPoint->ipv4_settings.ulIPAddress == 0U ) ||
( pxEndPoint->ipv4_settings.ulIPAddress == ulIPAddress ) )
{
break;
Expand Down
20 changes: 14 additions & 6 deletions test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_utest.c
Original file line number Diff line number Diff line change
Expand Up @@ -1440,25 +1440,33 @@ void test_FreeRTOS_FindEndPointOnIP_IPv4_AnyEndpoint( void )
* pxNetworkEndPoints is a global variable using in FreeRTOS_Routing as link list head of all endpoints.
*
* Test step:
* - Create 1 endpoint with IP address 0 and add it to the list.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_ADDRESS.
* - Create 1 endpoint with IP address 0xAB12CD34 and add it to the list.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with 0xAB12CD34.
* - Check if returned endpoint is same.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_GATEWAY.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with 0.
* - Check if returned endpoint is same.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_ADDRESS.
* - Check if returned endpoint is NULL.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_GATEWAY.
* - Check if returned endpoint is NULL.
*/
void test_FreeRTOS_FindEndPointOnIP_IPv4_ZeroAddressEndpoint( void )
{
NetworkEndPoint_t xEndPoint;
NetworkEndPoint_t * pxEndPoint = NULL;

memset( &xEndPoint, 0, sizeof( NetworkEndPoint_t ) );
xEndPoint.ipv4_settings.ulIPAddress = 0;
xEndPoint.ipv4_settings.ulIPAddress = 0xAB12CD34;
pxNetworkEndPoints = &xEndPoint;

pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_ADDRESS );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( 0xAB12CD34 );
TEST_ASSERT_EQUAL( &xEndPoint, pxEndPoint );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_GATEWAY );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( 0 );
TEST_ASSERT_EQUAL( &xEndPoint, pxEndPoint );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_ADDRESS );
TEST_ASSERT_EQUAL( NULL, pxEndPoint );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_GATEWAY );
TEST_ASSERT_EQUAL( NULL, pxEndPoint );
}

/**
Expand Down
Loading