1
0
mirror of https://github.com/FreeRTOS/FreeRTOS-Plus-TCP synced 2025-10-22 16:37:41 +08:00

Fix DNS to use correct DNS IP preference (#1109)

* Fix xDNS_IP_Preference to be IPv4 in the else case

* Fix UTs

* Fix DNS IP preference

* Uncrustify: triggered by comment

* Fix UTs

---------

Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
Tony Josi
2024-02-28 13:03:52 +05:30
committed by GitHub
parent b098c07b98
commit f50a76b937
2 changed files with 44 additions and 42 deletions

View File

@@ -843,10 +843,6 @@
BaseType_t bHasLocal = pdFALSE;
const char * pcDot = ( const char * ) strchr( pcHostName, ( int32_t ) '.' );
#if ( ipconfigUSE_MDNS == 1 ) || ( ipconfigUSE_LLMNR == 1 )
BaseType_t xNeed_Endpoint = pdFALSE;
#endif
#if ( ipconfigUSE_LLMNR != 1 )
( void ) pcHostName;
#endif
@@ -892,9 +888,8 @@
pxAddress->sin_port = ipMDNS_PORT;
pxAddress->sin_port = FreeRTOS_ntohs( pxAddress->sin_port );
xNeed_Endpoint = pdTRUE;
switch( xDNS_IP_Preference )
switch( xDNS_IP_Preference ) /* LCOV_EXCL_BR_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
{
#if ( ipconfigUSE_IPv4 != 0 )
case xPreferenceIPv4:
@@ -912,11 +907,10 @@
break;
#endif /* ( ipconfigUSE_IPv6 != 0 ) */
default:
default: /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
/* MISRA 16.4 Compliance */
xNeed_Endpoint = pdFALSE;
FreeRTOS_debug_printf( ( "prvFillSockAddress: Undefined xDNS_IP_Preference \n" ) );
break;
break; /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
}
}
}
@@ -929,9 +923,8 @@
/* Use LLMNR addressing. */
pxAddress->sin_port = ipLLMNR_PORT;
pxAddress->sin_port = FreeRTOS_ntohs( pxAddress->sin_port );
xNeed_Endpoint = pdTRUE;
switch( xDNS_IP_Preference )
switch( xDNS_IP_Preference ) /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
{
#if ( ipconfigUSE_IPv4 != 0 )
case xPreferenceIPv4:
@@ -949,19 +942,16 @@
break;
#endif /* ( ipconfigUSE_IPv6 != 0 ) */
default:
default: /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
/* MISRA 16.4 Compliance */
xNeed_Endpoint = pdFALSE;
FreeRTOS_debug_printf( ( "prvFillSockAddress: Undefined xDNS_IP_Preference (LLMNR) \n" ) );
break;
break; /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
}
}
}
#endif /* if ( ipconfigUSE_LLMNR == 1 ) */
#if ( ipconfigUSE_MDNS == 1 ) || ( ipconfigUSE_LLMNR == 1 )
if( xNeed_Endpoint == pdTRUE )
{
for( pxEndPoint = FreeRTOS_FirstEndPoint( NULL );
pxEndPoint != NULL;
pxEndPoint = FreeRTOS_NextEndPoint( NULL, pxEndPoint ) )
@@ -988,7 +978,6 @@
break;
#endif /* if ( ipconfigUSE_IPv6 != 0 ) */
}
}
#endif /* if ( ipconfigUSE_MDNS == 1 ) || ( ipconfigUSE_LLMNR == 1 ) */
}
else
@@ -1000,7 +989,7 @@
pxEndPoint != NULL;
pxEndPoint = FreeRTOS_NextEndPoint( NULL, pxEndPoint ) )
{
switch( xDNS_IP_Preference )
switch( xDNS_IP_Preference ) /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
{
#if ( ipconfigUSE_IPv4 != 0 )
case xPreferenceIPv4:
@@ -1047,10 +1036,10 @@
break;
#endif /* ( ipconfigUSE_IPv6 != 0 ) */
default:
default: /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
/* MISRA 16.4 Compliance */
FreeRTOS_debug_printf( ( "prvFillSockAddress: Undefined xDNS_IP_Preference \n" ) );
break;
break; /* LCOV_EXCL_LINE - xDNS_IP_Preference can be either xPreferenceIPv4 or xPreferenceIPv6 */
}
if( xBreakLoop == pdTRUE )
@@ -1264,6 +1253,10 @@
{
xDNS_IP_Preference = xPreferenceIPv6;
}
else
{
xDNS_IP_Preference = xPreferenceIPv4;
}
#endif /* ( ipconfigUSE_IPv6 != 0 ) */
pxEndPoint = prvFillSockAddress( &xAddress, pcHostName );

View File

@@ -1699,6 +1699,12 @@ void test_FreeRTOS_getaddrinfo_a_IPv4Random_LocalDNSUnknownPreference( void )
/* In prvGetHostByName */
DNS_CreateSocket_ExpectAnyArgsAndReturn( &xDNSSocket );
FreeRTOS_FirstEndPoint_ExpectAndReturn( NULL, &xEndPoint );
DNS_BindSocket_ExpectAnyArgsAndReturn( 0 );
pxGetNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( &xNetworkBuffer );
DNS_SendRequest_ExpectAnyArgsAndReturn( pdPASS );
DNS_ReadReply_ExpectAnyArgsAndReturn( ipconfigNETWORK_MTU );
/* Back prvGetHostByName */
DNS_CloseSocket_Expect( &xDNSSocket );
@@ -1909,8 +1915,11 @@ void test_FreeRTOS_getaddrinfo_a_IPv4Random_LLMNRDNSUnknownPreference( void )
/* In prvGetHostByName */
DNS_CreateSocket_ExpectAnyArgsAndReturn( &xDNSSocket );
/* In prvGetHostByNameOp */
/* In prvFillSockAddress */
FreeRTOS_FirstEndPoint_ExpectAndReturn( NULL, &xEndPoint );
DNS_BindSocket_ExpectAnyArgsAndReturn( 0 );
pxGetNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( &xNetworkBuffer );
DNS_SendRequest_ExpectAnyArgsAndReturn( pdPASS );
DNS_ReadReply_ExpectAnyArgsAndReturn( ipconfigNETWORK_MTU );
/* Back prvGetHostByName */
DNS_CloseSocket_Expect( &xDNSSocket );