From f50a76b937f39d5bb0077d56f9426e9f8d4bf95f Mon Sep 17 00:00:00 2001 From: Tony Josi Date: Wed, 28 Feb 2024 13:03:52 +0530 Subject: [PATCH] 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 --- source/FreeRTOS_DNS.c | 73 +++++++++---------- .../FreeRTOS_DNS/FreeRTOS_DNS_utest.c | 13 +++- 2 files changed, 44 insertions(+), 42 deletions(-) diff --git a/source/FreeRTOS_DNS.c b/source/FreeRTOS_DNS.c index cf3814dba..ffce0fe65 100644 --- a/source/FreeRTOS_DNS.c +++ b/source/FreeRTOS_DNS.c @@ -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,45 +942,41 @@ 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 ) ) { - for( pxEndPoint = FreeRTOS_FirstEndPoint( NULL ); - pxEndPoint != NULL; - pxEndPoint = FreeRTOS_NextEndPoint( NULL, pxEndPoint ) ) - { - #if ( ipconfigUSE_IPv6 != 0 ) - if( xDNS_IP_Preference == xPreferenceIPv6 ) + #if ( ipconfigUSE_IPv6 != 0 ) + if( xDNS_IP_Preference == xPreferenceIPv6 ) + { + if( pxEndPoint->bits.bIPv6 != 0U ) { - if( pxEndPoint->bits.bIPv6 != 0U ) + break; + } + } + else + { + #if ( ipconfigUSE_IPv4 != 0 ) + if( pxEndPoint->bits.bIPv6 == 0U ) { break; } - } - else - { - #if ( ipconfigUSE_IPv4 != 0 ) - if( pxEndPoint->bits.bIPv6 == 0U ) - { - break; - } - #endif /* if ( ipconfigUSE_IPv4 != 0 ) */ - } - #else /* if ( ipconfigUSE_IPv6 != 0 ) */ - /* IPv6 is not included, so all end-points are IPv4. */ - break; - #endif /* if ( ipconfigUSE_IPv6 != 0 ) */ - } + #endif /* if ( ipconfigUSE_IPv4 != 0 ) */ + } + #else /* if ( ipconfigUSE_IPv6 != 0 ) */ + /* IPv6 is not included, so all end-points are IPv4. */ + break; + #endif /* if ( ipconfigUSE_IPv6 != 0 ) */ } #endif /* if ( ipconfigUSE_MDNS == 1 ) || ( ipconfigUSE_LLMNR == 1 ) */ } @@ -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 ); diff --git a/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c b/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c index 527664a66..eeea22626 100644 --- a/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c +++ b/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c @@ -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 );