From 5058d3f3423d040409dd9585bf111d6e2d5c4d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Mon, 25 Sep 2023 12:07:45 +0200 Subject: [PATCH 01/21] Disable DHCP timer when network goes down --- source/FreeRTOS_IP_Utils.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/FreeRTOS_IP_Utils.c b/source/FreeRTOS_IP_Utils.c index 7c115fe676..b097b51885 100644 --- a/source/FreeRTOS_IP_Utils.c +++ b/source/FreeRTOS_IP_Utils.c @@ -861,6 +861,13 @@ void prvProcessNetworkDownEvent( struct xNetworkInterface * pxInterface ) * treat network down as a "delivery problem" and flush the ARP cache for this * interface. */ FreeRTOS_ClearARP( pxEndPoint ); + + #if ( ipconfigUSE_DHCP == 1 ) || ( ipconfigUSE_RA == 1 ) || ( ipconfigUSE_DHCPv6 == 1 ) + if( END_POINT_USES_DHCP( pxEndPoint ) ) + { + vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); + } + #endif } /* The network has been disconnected (or is being initialised for the first From f5d8d98856a37bad9d10b003d770e0c0871d3a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Fri, 22 Sep 2023 14:38:41 +0200 Subject: [PATCH 02/21] Don't stop checking the Network Timer --- source/FreeRTOS_IP_Timers.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/source/FreeRTOS_IP_Timers.c b/source/FreeRTOS_IP_Timers.c index 709c9e5b8b..1ab657416b 100644 --- a/source/FreeRTOS_IP_Timers.c +++ b/source/FreeRTOS_IP_Timers.c @@ -55,16 +55,6 @@ #include "NetworkBufferManagement.h" #include "FreeRTOS_Routing.h" #include "FreeRTOS_DNS.h" -/*-----------------------------------------------------------*/ - -/** @brief 'xAllNetworksUp' becomes pdTRUE as soon as all network interfaces have - * been initialised. */ -/* MISRA Ref 8.9.1 [File scoped variables] */ -/* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-89 */ -/* coverity[misra_c_2012_rule_8_9_violation] */ -static BaseType_t xAllNetworksUp = pdFALSE; - -/*-----------------------------------------------------------*/ /* * Utility functions for the light weight IP timers. @@ -313,22 +303,14 @@ void vCheckNetworkTimers( void ) #endif /* ipconfigUSE_TCP == 1 */ /* Is it time to trigger the repeated NetworkDown events? */ - if( xAllNetworksUp == pdFALSE ) + if( prvIPTimerCheck( &( xNetworkTimer ) ) != pdFALSE ) { - if( prvIPTimerCheck( &( xNetworkTimer ) ) != pdFALSE ) + for( pxInterface = pxNetworkInterfaces; pxInterface != NULL; pxInterface = pxInterface->pxNext ) { - BaseType_t xUp = pdTRUE; - - for( pxInterface = pxNetworkInterfaces; pxInterface != NULL; pxInterface = pxInterface->pxNext ) + if( pxInterface->bits.bInterfaceUp == pdFALSE_UNSIGNED ) { - if( pxInterface->bits.bInterfaceUp == pdFALSE_UNSIGNED ) - { - xUp = pdFALSE; - FreeRTOS_NetworkDown( pxInterface ); - } + FreeRTOS_NetworkDown( pxInterface ); } - - xAllNetworksUp = xUp; } } } From 9132077dc4dc1ca587ffe4ed2773a3598c0c1539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Mon, 25 Sep 2023 13:08:09 +0200 Subject: [PATCH 03/21] Fix network down when using RA --- source/FreeRTOS_IP_Utils.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/source/FreeRTOS_IP_Utils.c b/source/FreeRTOS_IP_Utils.c index b097b51885..a2d1f63774 100644 --- a/source/FreeRTOS_IP_Utils.c +++ b/source/FreeRTOS_IP_Utils.c @@ -862,12 +862,21 @@ void prvProcessNetworkDownEvent( struct xNetworkInterface * pxInterface ) * interface. */ FreeRTOS_ClearARP( pxEndPoint ); - #if ( ipconfigUSE_DHCP == 1 ) || ( ipconfigUSE_RA == 1 ) || ( ipconfigUSE_DHCPv6 == 1 ) + #if ( ( ipconfigUSE_DHCP != 0 ) || ( ipconfigUSE_DHCPv6 != 0 ) ) if( END_POINT_USES_DHCP( pxEndPoint ) ) { + /* Stop the DHCP process for this end-point. */ vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); } - #endif + #endif /* ( ( ipconfigUSE_DHCP != 0 ) || ( ipconfigUSE_DHCPv6 != 0 ) ) */ + + #if ( ( ipconfigUSE_RA != 0 ) && ( ipconfigUSE_IPv6 != 0 ) ) + if( END_POINT_USES_RA( pxEndPoint ) ) + { + /* Stop the RA/SLAAC process for this end-point. */ + vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); + } + #endif /* ( ( ipconfigUSE_RA != 0 ) && ( ipconfigUSE_IPv6 != 0 ) ) */ } /* The network has been disconnected (or is being initialised for the first From 3c69c916e3525937750a3bcd26118f79c95f7b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Fri, 22 Sep 2023 14:38:41 +0200 Subject: [PATCH 04/21] Revert "Don't stop checking the Network Timer" This reverts commit f5d8d98856a37bad9d10b003d770e0c0871d3a9e. --- source/FreeRTOS_IP_Timers.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/source/FreeRTOS_IP_Timers.c b/source/FreeRTOS_IP_Timers.c index 1ab657416b..709c9e5b8b 100644 --- a/source/FreeRTOS_IP_Timers.c +++ b/source/FreeRTOS_IP_Timers.c @@ -55,6 +55,16 @@ #include "NetworkBufferManagement.h" #include "FreeRTOS_Routing.h" #include "FreeRTOS_DNS.h" +/*-----------------------------------------------------------*/ + +/** @brief 'xAllNetworksUp' becomes pdTRUE as soon as all network interfaces have + * been initialised. */ +/* MISRA Ref 8.9.1 [File scoped variables] */ +/* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-89 */ +/* coverity[misra_c_2012_rule_8_9_violation] */ +static BaseType_t xAllNetworksUp = pdFALSE; + +/*-----------------------------------------------------------*/ /* * Utility functions for the light weight IP timers. @@ -303,14 +313,22 @@ void vCheckNetworkTimers( void ) #endif /* ipconfigUSE_TCP == 1 */ /* Is it time to trigger the repeated NetworkDown events? */ - if( prvIPTimerCheck( &( xNetworkTimer ) ) != pdFALSE ) + if( xAllNetworksUp == pdFALSE ) { - for( pxInterface = pxNetworkInterfaces; pxInterface != NULL; pxInterface = pxInterface->pxNext ) + if( prvIPTimerCheck( &( xNetworkTimer ) ) != pdFALSE ) { - if( pxInterface->bits.bInterfaceUp == pdFALSE_UNSIGNED ) + BaseType_t xUp = pdTRUE; + + for( pxInterface = pxNetworkInterfaces; pxInterface != NULL; pxInterface = pxInterface->pxNext ) { - FreeRTOS_NetworkDown( pxInterface ); + if( pxInterface->bits.bInterfaceUp == pdFALSE_UNSIGNED ) + { + xUp = pdFALSE; + FreeRTOS_NetworkDown( pxInterface ); + } } + + xAllNetworksUp = xUp; } } } From 0975315762855f40fc732710b2fe527b2bc84c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Wed, 27 Sep 2023 10:59:55 +0200 Subject: [PATCH 05/21] Add vSetNotAllNetworksUp function --- source/FreeRTOS_IP_Timers.c | 8 ++++++++ source/FreeRTOS_IP_Utils.c | 4 +++- source/include/FreeRTOS_IP_Private.h | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/source/FreeRTOS_IP_Timers.c b/source/FreeRTOS_IP_Timers.c index 709c9e5b8b..1405b3bad3 100644 --- a/source/FreeRTOS_IP_Timers.c +++ b/source/FreeRTOS_IP_Timers.c @@ -604,3 +604,11 @@ void vIPSetARPResolutionTimerEnableState( BaseType_t xEnableState ) #endif /* ipconfigDNS_USE_CALLBACKS == 1 */ /*-----------------------------------------------------------*/ + +/** + * @brief Mark that at least one interface is down so that the 'xNetworkTimer' is checked. Whenever the timer expires, all interfaces that are down will get a new NetworkDown event. + */ +void vSetNotAllNetworksUp( void ) +{ + xAllNetworksUp = pdFALSE; +} diff --git a/source/FreeRTOS_IP_Utils.c b/source/FreeRTOS_IP_Utils.c index a2d1f63774..3d12e526c4 100644 --- a/source/FreeRTOS_IP_Utils.c +++ b/source/FreeRTOS_IP_Utils.c @@ -952,7 +952,9 @@ void prvProcessNetworkDownEvent( struct xNetworkInterface * pxInterface ) } else { - /* Nothing to do. When the 'xNetworkTimer' expires, all interfaces + vSetNotAllNetworksUp(); + + /* Nothing else to do. When the 'xNetworkTimer' expires, all interfaces * with bits.bInterfaceUp cleared will get a new 'eNetworkDownEvent' */ } } diff --git a/source/include/FreeRTOS_IP_Private.h b/source/include/FreeRTOS_IP_Private.h index 1c97d5c898..e1571ff3cf 100644 --- a/source/include/FreeRTOS_IP_Private.h +++ b/source/include/FreeRTOS_IP_Private.h @@ -882,6 +882,9 @@ BaseType_t xIsCallingFromIPTask( void ); /* Send the network-up event and start the ARP timer. */ void vIPNetworkUpCalls( struct xNetworkEndPoint * pxEndPoint ); +/* Mark that at least one interface is down to trigger repeated NetworkDown events. */ +void vSetNotAllNetworksUp( void ); + /* *INDENT-OFF* */ #ifdef __cplusplus } /* extern "C" */ From 07b23eaf22643329f849cdd37d953ef5d24153c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Wed, 27 Sep 2023 11:58:50 +0200 Subject: [PATCH 06/21] Fix unit tests --- .../FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c | 12 ++++++++++++ .../FreeRTOS_IP_Utils_DiffConfig_utest.c | 2 ++ 2 files changed, 14 insertions(+) diff --git a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c index 24e8df2760..ffacc8b46d 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c @@ -482,6 +482,8 @@ void test_prvProcessNetworkDownEvent_Pass( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPProcess_Expect( pdTRUE, &xEndPoint ); prvProcessNetworkDownEvent( &xInterfaces[ 0 ] ); @@ -497,6 +499,8 @@ void test_prvProcessNetworkDownEvent_Pass( void ) FreeRTOS_ClearARP_Expect( &xEndPoint ); + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPProcess_Expect( pdTRUE, &xEndPoint ); prvProcessNetworkDownEvent( &xInterfaces[ 0 ] ); @@ -575,6 +579,10 @@ void test_prvProcessNetworkDownEvent_InterfaceInitFail( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + + vSetNotAllNetworksUp_Expect(); + prvProcessNetworkDownEvent( &xInterface ); } @@ -601,6 +609,8 @@ void test_prvProcessNetworkDownEvent_PassDHCPv6( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPv6Process_Expect( pdTRUE, &xEndPoint ); prvProcessNetworkDownEvent( &xInterface ); @@ -629,6 +639,8 @@ void test_prvProcessNetworkDownEvent_PassRA( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vRAProcess_Expect( pdTRUE, &xEndPoint ); prvProcessNetworkDownEvent( &xInterface ); diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c index bf39c69aeb..ff18a96025 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c @@ -104,6 +104,8 @@ void test_prvProcessNetworkDownEvent_Pass_DHCP_Enabled( void ) FreeRTOS_ClearARP_Expect( &xEndPoint ); + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + FreeRTOS_NextEndPoint_ExpectAndReturn( &xInterface, &xEndPoint, NULL ); xInterface.pfInitialise = xNetworkInterfaceInitialise_test; From 83a3d9e7e94cf8900915cbdded14bec131a7b70e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Wed, 27 Sep 2023 12:08:19 +0200 Subject: [PATCH 07/21] Update comments --- source/FreeRTOS_IP_Timers.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/FreeRTOS_IP_Timers.c b/source/FreeRTOS_IP_Timers.c index 1405b3bad3..086f558ce3 100644 --- a/source/FreeRTOS_IP_Timers.c +++ b/source/FreeRTOS_IP_Timers.c @@ -57,8 +57,8 @@ #include "FreeRTOS_DNS.h" /*-----------------------------------------------------------*/ -/** @brief 'xAllNetworksUp' becomes pdTRUE as soon as all network interfaces have - * been initialised. */ +/** @brief 'xAllNetworksUp' becomes pdTRUE when all network interfaces are initialised + * and becomes pdFALSE when any network interface goes down. */ /* MISRA Ref 8.9.1 [File scoped variables] */ /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-89 */ /* coverity[misra_c_2012_rule_8_9_violation] */ @@ -606,7 +606,9 @@ void vIPSetARPResolutionTimerEnableState( BaseType_t xEnableState ) /*-----------------------------------------------------------*/ /** - * @brief Mark that at least one interface is down so that the 'xNetworkTimer' is checked. Whenever the timer expires, all interfaces that are down will get a new NetworkDown event. + * @brief Mark that at least one interface is down so that the 'xNetworkTimer' is checked. + * Whenever the timer expires, all interfaces that are down will get a new NetworkDown + * event. */ void vSetNotAllNetworksUp( void ) { From 4bb3d52ace0efa2ab632380399de435afc6b2b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Thu, 5 Oct 2023 12:00:36 +0200 Subject: [PATCH 08/21] Store DHCPv4 socket locally for all endpoints --- source/FreeRTOS_DHCP.c | 53 +++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/source/FreeRTOS_DHCP.c b/source/FreeRTOS_DHCP.c index f775f6cec3..9dc1622fff 100644 --- a/source/FreeRTOS_DHCP.c +++ b/source/FreeRTOS_DHCP.c @@ -118,12 +118,12 @@ /* * Create the DHCP socket, if it has not been created already. */ - _static void prvCreateDHCPSocket( const NetworkEndPoint_t * pxEndPoint ); + _static void prvCreateDHCPSocket( NetworkEndPoint_t * pxEndPoint ); /* * Close the DHCP socket, only when not in use anymore (i.e. xDHCPSocketUserCount = 0). */ - static void prvCloseDHCPSocket( const NetworkEndPoint_t * pxEndPoint ); + static void prvCloseDHCPSocket( NetworkEndPoint_t * pxEndPoint ); static void vDHCPProcessEndPoint( BaseType_t xReset, BaseType_t xDoCheck, @@ -214,20 +214,20 @@ FreeRTOS_debug_printf( ( "DHCP wrong state: expect: %d got: %d : ignore\n", EP_DHCPData.eExpectedState, EP_DHCPData.eDHCPState ) ); } - else if( xDHCPv4Socket != NULL ) /* If there is a socket, check for incoming messages first. */ + else if( EP_DHCPData.xDHCPSocket != NULL ) /* If there is a socket, check for incoming messages first. */ { /* No need to initialise 'pucUDPPayload', it just looks nicer. */ uint8_t * pucUDPPayload = NULL; const DHCPMessage_IPv4_t * pxDHCPMessage; int32_t lBytes; - while( xDHCPv4Socket != NULL ) + while( EP_DHCPData.xDHCPSocket != NULL ) { BaseType_t xRecvFlags = FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK; NetworkEndPoint_t * pxIterator = NULL; /* Peek the next UDP message. */ - lBytes = FreeRTOS_recvfrom( xDHCPv4Socket, &( pucUDPPayload ), 0, xRecvFlags, NULL, NULL ); + lBytes = FreeRTOS_recvfrom( EP_DHCPData.xDHCPSocket, &( pucUDPPayload ), 0, xRecvFlags, NULL, NULL ); if( lBytes < ( ( int32_t ) sizeof( DHCPMessage_IPv4_t ) ) ) { @@ -282,7 +282,7 @@ { /* Target not found, fetch the message and delete it. */ /* PAss the address of a pointer pucUDPPayload, because zero-copy is used. */ - lBytes = FreeRTOS_recvfrom( xDHCPv4Socket, &( pucUDPPayload ), 0, FREERTOS_ZERO_COPY, NULL, NULL ); + lBytes = FreeRTOS_recvfrom( EP_DHCPData.xDHCPSocket, &( pucUDPPayload ), 0, FREERTOS_ZERO_COPY, NULL, NULL ); if( ( lBytes > 0 ) && ( pucUDPPayload != NULL ) ) { @@ -564,7 +564,7 @@ #endif /* ipconfigUSE_DHCP_HOOK */ { /* See if prvInitialiseDHCP() has creates a socket. */ - if( xDHCPv4Socket == NULL ) + if( EP_DHCPData.xDHCPSocket == NULL ) { xGivingUp = pdTRUE; } @@ -618,7 +618,7 @@ /* Resend the request at the appropriate time to renew the lease. */ prvCreateDHCPSocket( pxEndPoint ); - if( xDHCPv4Socket != NULL ) + if( EP_DHCPData.xDHCPSocket != NULL ) { uint32_t ulID = 0U; @@ -829,11 +829,13 @@ * using it. * @param[in] pxEndPoint The end-point that stops using the socket. */ - static void prvCloseDHCPSocket( const NetworkEndPoint_t * pxEndPoint ) + void prvCloseDHCPSocket( NetworkEndPoint_t * pxEndPoint ) { - ( void ) pxEndPoint; - - if( ( xDHCPv4Socket != NULL ) && ( xDHCPSocketUserCount > 0 ) ) + if( ( EP_DHCPData.xDHCPSocket == NULL ) || ( EP_DHCPData.xDHCPSocket != xDHCPv4Socket ) ) + { + /* the socket can not be closed. */ + } + else if( xDHCPSocketUserCount > 0 ) { xDHCPSocketUserCount--; @@ -844,6 +846,8 @@ ( void ) vSocketClose( xDHCPv4Socket ); xDHCPv4Socket = NULL; } + + EP_DHCPData.xDHCPSocket = NULL; } else { @@ -862,13 +866,17 @@ * @brief Create a DHCP socket with the defined timeouts. The same socket * will be shared among all end-points that need DHCP. */ - _static void prvCreateDHCPSocket( const NetworkEndPoint_t * pxEndPoint ) + _static void prvCreateDHCPSocket( NetworkEndPoint_t * pxEndPoint ) { struct freertos_sockaddr xAddress; BaseType_t xReturn; TickType_t xTimeoutTime = ( TickType_t ) 0; - if( xDHCPv4Socket == NULL ) /* Create the socket, if it has not already been created. */ + if( ( xDHCPv4Socket != NULL ) && ( EP_DHCPData.xDHCPSocket == xDHCPv4Socket ) ) + { + /* the socket is still valid. */ + } + else if( xDHCPv4Socket == NULL ) /* Create the socket, if it has not already been created. */ { xDHCPv4Socket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP ); configASSERT( xSocketValid( xDHCPv4Socket ) == pdTRUE ); @@ -887,6 +895,7 @@ xAddress.sin_port = ( uint16_t ) dhcpCLIENT_PORT_IPv4; xReturn = vSocketBind( xDHCPv4Socket, &xAddress, sizeof( xAddress ), pdFALSE ); xDHCPSocketUserCount = 1; + EP_DHCPData.xDHCPSocket = xDHCPv4Socket; FreeRTOS_printf( ( "DHCP-socket[%02x-%02x]: DHCP Socket Create\n", pxEndPoint->xMACAddress.ucBytes[ 4 ], pxEndPoint->xMACAddress.ucBytes[ 5 ] ) ); @@ -901,11 +910,13 @@ { /* Change to NULL for easier testing. */ xDHCPv4Socket = NULL; + EP_DHCPData.xDHCPSocket = NULL; } } else { xDHCPSocketUserCount++; + EP_DHCPData.xDHCPSocket = xDHCPv4Socket; } FreeRTOS_printf( ( "prvCreateDHCPSocket[%02x-%02x]: %s, user count %d\n", @@ -1248,7 +1259,7 @@ ( void ) memset( &( xSet ), 0, sizeof( xSet ) ); /* Passing the address of a pointer (pucUDPPayload) because FREERTOS_ZERO_COPY is used. */ - lBytes = FreeRTOS_recvfrom( xDHCPv4Socket, &pucUDPPayload, 0U, FREERTOS_ZERO_COPY, NULL, NULL ); + lBytes = FreeRTOS_recvfrom( EP_DHCPData.xDHCPSocket, &pucUDPPayload, 0U, FREERTOS_ZERO_COPY, NULL, NULL ); if( lBytes > 0 ) { @@ -1507,7 +1518,7 @@ /* MISRA Ref 11.4.1 [Socket error and integer to pointer conversion] */ /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-114 */ /* coverity[misra_c_2012_rule_11_4_violation] */ - if( ( xSocketValid( xDHCPv4Socket ) == pdTRUE ) && ( pucUDPPayloadBuffer != NULL ) ) + if( ( xSocketValid( EP_DHCPData.xDHCPSocket ) == pdTRUE ) && ( pucUDPPayloadBuffer != NULL ) ) { /* Copy in the IP address being requested. */ @@ -1528,9 +1539,9 @@ FreeRTOS_debug_printf( ( "vDHCPProcess: reply %xip\n", ( unsigned ) FreeRTOS_ntohl( EP_DHCPData.ulOfferedIPAddress ) ) ); iptraceSENDING_DHCP_REQUEST(); - xDHCPv4Socket->pxEndPoint = pxEndPoint; + EP_DHCPData.xDHCPSocket->pxEndPoint = pxEndPoint; - if( FreeRTOS_sendto( xDHCPv4Socket, pucUDPPayloadBuffer, sizeof( DHCPMessage_IPv4_t ) + uxOptionsLength, FREERTOS_ZERO_COPY, &xAddress, ( socklen_t ) sizeof( xAddress ) ) == 0 ) + if( FreeRTOS_sendto( EP_DHCPData.xDHCPSocket, pucUDPPayloadBuffer, sizeof( DHCPMessage_IPv4_t ) + uxOptionsLength, FREERTOS_ZERO_COPY, &xAddress, ( socklen_t ) sizeof( xAddress ) ) == 0 ) { /* The packet was not successfully queued for sending and must be * returned to the stack. */ @@ -1579,7 +1590,7 @@ /* MISRA Ref 11.4.1 [Socket error and integer to pointer conversion] */ /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-114 */ /* coverity[misra_c_2012_rule_11_4_violation] */ - if( ( xSocketValid( xDHCPv4Socket ) == pdTRUE ) && ( pucUDPPayloadBuffer != NULL ) ) + if( ( xSocketValid( EP_DHCPData.xDHCPSocket ) == pdTRUE ) && ( pucUDPPayloadBuffer != NULL ) ) { const void * pvCopySource; void * pvCopyDest; @@ -1608,9 +1619,9 @@ uxOptionsLength -= dhcpOPTION_50_SIZE; } - xDHCPv4Socket->pxEndPoint = pxEndPoint; + EP_DHCPData.xDHCPSocket->pxEndPoint = pxEndPoint; - if( FreeRTOS_sendto( xDHCPv4Socket, + if( FreeRTOS_sendto( EP_DHCPData.xDHCPSocket, pucUDPPayloadBuffer, sizeof( DHCPMessage_IPv4_t ) + uxOptionsLength, FREERTOS_ZERO_COPY, From 6e7f2b976cdda4898ed4cbfee6f8f5e6b5f9773c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Thu, 5 Oct 2023 12:03:10 +0200 Subject: [PATCH 09/21] Add vDHCPStop and vDHCPv6Stop functions --- source/FreeRTOS_DHCP.c | 14 ++++++++++++++ source/FreeRTOS_DHCPv6.c | 14 ++++++++++++++ source/FreeRTOS_IP_Utils.c | 19 ++++++++++++++----- source/include/FreeRTOS_DHCP.h | 6 ++++++ source/include/FreeRTOS_DHCPv6.h | 6 ++++++ 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/source/FreeRTOS_DHCP.c b/source/FreeRTOS_DHCP.c index 9dc1622fff..1d89d63396 100644 --- a/source/FreeRTOS_DHCP.c +++ b/source/FreeRTOS_DHCP.c @@ -305,6 +305,20 @@ } } +/** + * @brief Stop the DHCP process. Close the DHCP socket when it's no longer used by any end-point. + * + * @param[in] pxEndPoint The end-point for which we want to stop the DHCP process. + */ + void vDHCPStop( struct xNetworkEndPoint * pxEndPoint ) + { + /* Disable the DHCP timer. */ + vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); + + /* Close socket to ensure packets don't queue on it. */ + prvCloseDHCPSocket( pxEndPoint ); + } + /** * @brief Called by vDHCPProcessEndPoint(), this function handles the state 'eWaitingOffer'. * If there is a reply, it will be examined, if there is a time-out, there may be a new diff --git a/source/FreeRTOS_DHCPv6.c b/source/FreeRTOS_DHCPv6.c index a416fedb14..ad946f0a13 100644 --- a/source/FreeRTOS_DHCPv6.c +++ b/source/FreeRTOS_DHCPv6.c @@ -464,6 +464,20 @@ void vDHCPv6Process( BaseType_t xReset, vDHCPv6ProcessEndPoint( xReset, pxEndPoint, pxEndPoint->pxDHCPMessage ); } } + +/** + * @brief Stop the DHCP process. Close the DHCP socket when it's no longer used by any end-point. + * + * @param[in] pxEndPoint The end-point for which we want to stop the DHCP process. + */ +void vDHCPv6Stop( struct xNetworkEndPoint * pxEndPoint ) +{ + /* Disable the DHCP timer. */ + vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); + + /* Close socket to ensure packets don't queue on it. */ + prvCloseDHCPv6Socket( pxEndPoint ); +} /*-----------------------------------------------------------*/ /** diff --git a/source/FreeRTOS_IP_Utils.c b/source/FreeRTOS_IP_Utils.c index 3d12e526c4..a417bcccdf 100644 --- a/source/FreeRTOS_IP_Utils.c +++ b/source/FreeRTOS_IP_Utils.c @@ -862,13 +862,22 @@ void prvProcessNetworkDownEvent( struct xNetworkInterface * pxInterface ) * interface. */ FreeRTOS_ClearARP( pxEndPoint ); - #if ( ( ipconfigUSE_DHCP != 0 ) || ( ipconfigUSE_DHCPv6 != 0 ) ) + #if ( ipconfigUSE_DHCP == 1 ) if( END_POINT_USES_DHCP( pxEndPoint ) ) { - /* Stop the DHCP process for this end-point. */ - vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); + #if ( ( ipconfigUSE_DHCPv6 != 0 ) && ( ipconfigUSE_IPv6 != 0 ) ) + if( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) + { + vDHCPv6Stop( pxEndPoint ); + } + else + #endif /* (( ipconfigUSE_DHCPv6 != 0 ) && ( ipconfigUSE_IPv6 != 0 )) */ + { + /* Stop the DHCP process for this end-point. */ + vDHCPStop( pxEndPoint ); + } } - #endif /* ( ( ipconfigUSE_DHCP != 0 ) || ( ipconfigUSE_DHCPv6 != 0 ) ) */ + #endif /* ( ipconfigUSE_DHCP == 1 ) */ #if ( ( ipconfigUSE_RA != 0 ) && ( ipconfigUSE_IPv6 != 0 ) ) if( END_POINT_USES_RA( pxEndPoint ) ) @@ -876,7 +885,7 @@ void prvProcessNetworkDownEvent( struct xNetworkInterface * pxInterface ) /* Stop the RA/SLAAC process for this end-point. */ vIPSetDHCP_RATimerEnableState( pxEndPoint, pdFALSE ); } - #endif /* ( ( ipconfigUSE_RA != 0 ) && ( ipconfigUSE_IPv6 != 0 ) ) */ + #endif /* ( (ipconfigUSE_RA != 0) && ( ipconfigUSE_IPv6 != 0 )) */ } /* The network has been disconnected (or is being initialised for the first diff --git a/source/include/FreeRTOS_DHCP.h b/source/include/FreeRTOS_DHCP.h index bc1eeb6d68..4dc21daffa 100644 --- a/source/include/FreeRTOS_DHCP.h +++ b/source/include/FreeRTOS_DHCP.h @@ -237,6 +237,12 @@ eDHCPState_t eGetDHCPState( const struct xNetworkEndPoint * pxEndPoint ); void vDHCPProcess( BaseType_t xReset, struct xNetworkEndPoint * pxEndPoint ); +/* + * NOT A PUBLIC API FUNCTION. + * It will be called when the network interface, that the endpoint is associated with, goes down. + */ +void vDHCPStop( struct xNetworkEndPoint * pxEndPoint ); + /* Internal call: returns true if socket is the current DHCP socket */ BaseType_t xIsDHCPSocket( const ConstSocket_t xSocket ); diff --git a/source/include/FreeRTOS_DHCPv6.h b/source/include/FreeRTOS_DHCPv6.h index b3537d9703..70bbd7ddff 100644 --- a/source/include/FreeRTOS_DHCPv6.h +++ b/source/include/FreeRTOS_DHCPv6.h @@ -152,6 +152,12 @@ void vDHCPv6Process( BaseType_t xReset, struct xNetworkEndPoint * pxEndPoint ); +/* + * NOT A PUBLIC API FUNCTION. + * It will be called when the network interface, that the endpoint is associated with, goes down. + */ + void vDHCPv6Stop( struct xNetworkEndPoint * pxEndPoint ); + #ifdef __cplusplus } /* extern "C" */ #endif From 47a5d02216183945d2b91f998430b1f089c17d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Thu, 5 Oct 2023 12:03:42 +0200 Subject: [PATCH 10/21] Fix IP Utils tests --- .../unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c | 8 ++++---- .../FreeRTOS_IP_Utils_DiffConfig_utest.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c index ffacc8b46d..b09addb436 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c @@ -482,7 +482,7 @@ void test_prvProcessNetworkDownEvent_Pass( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); - vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPStop_Expect( &xEndPoint ); vDHCPProcess_Expect( pdTRUE, &xEndPoint ); @@ -499,7 +499,7 @@ void test_prvProcessNetworkDownEvent_Pass( void ) FreeRTOS_ClearARP_Expect( &xEndPoint ); - vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPStop_Expect( &xEndPoint ); vDHCPProcess_Expect( pdTRUE, &xEndPoint ); @@ -579,7 +579,7 @@ void test_prvProcessNetworkDownEvent_InterfaceInitFail( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); - vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPStop_Expect( &xEndPoint ); vSetNotAllNetworksUp_Expect(); @@ -609,7 +609,7 @@ void test_prvProcessNetworkDownEvent_PassDHCPv6( void ) FreeRTOS_ClearARP_ExpectAnyArgs(); - vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPv6Stop_Expect( &xEndPoint ); vDHCPv6Process_Expect( pdTRUE, &xEndPoint ); diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c index ff18a96025..8a19cad367 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c @@ -104,7 +104,7 @@ void test_prvProcessNetworkDownEvent_Pass_DHCP_Enabled( void ) FreeRTOS_ClearARP_Expect( &xEndPoint ); - vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint, pdFALSE ); + vDHCPStop_Expect( &xEndPoint ); FreeRTOS_NextEndPoint_ExpectAndReturn( &xInterface, &xEndPoint, NULL ); From 6b304cd4ad08e3525902132eb4d91a7efafbd3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Thu, 5 Oct 2023 13:20:41 +0200 Subject: [PATCH 11/21] Fix most of DHCP unit tests --- .../FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c | 156 +++++++++++++++++- 1 file changed, 155 insertions(+), 1 deletion(-) diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c index f6b20ecb91..6fe5bee353 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c @@ -128,6 +128,7 @@ void test_vDHCPProcess_ResetAndInvalidSocket( void ) NetworkEndPoint_t xEndPoint = { 0 }, * pxEndPoint = &xEndPoint; xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put any state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = 0; @@ -157,6 +158,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithRNGSuccessSocketCreationFail( v { /* This should get assigned to a given value. */ xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put any state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = i; @@ -184,6 +186,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithRNGSuccessSocketCreationFail( v * the DHCP the state machine. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.xUseBroadcast ); /* This should be reset as well */ TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.ulOfferedIPAddress ); @@ -202,6 +205,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithRNGSuccessSocketSuccess( void ) { /* This should get assigned to a given value. */ xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put any state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = i; @@ -235,6 +239,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithRNGSuccessSocketSuccess( void ) * the DHCP the state machine. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.xUseBroadcast ); /* This should be reset as well */ TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.ulOfferedIPAddress ); @@ -253,6 +258,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithRNGSuccessSocketBindFail( void { /* This should remain unchanged. */ xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put any state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = i; @@ -295,6 +301,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithSocketAlreadyCreated( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put any state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = i; @@ -321,7 +328,8 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithSocketAlreadyCreated( void ) /* Expected state is incorrect, but we are trying to reset * the DHCP the state machine. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); - TEST_ASSERT_EQUAL( xDHCPv4Socket, &xTestSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.xUseBroadcast ); /* This should be reset as well */ TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.ulOfferedIPAddress ); @@ -338,6 +346,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookFailsDHCPSocketNULL( void ) /* The DHCP socket is NULL. */ xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -360,6 +369,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookFailsDHCPSocketNULL( void ) /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we are not using leased address. */ TEST_ASSERT_EQUAL( eNotUsingLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that the Endpoint IP address pointer indicates that. */ @@ -375,6 +385,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookFailsDHCPSocketNonNULL( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -404,6 +415,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookFailsDHCPSocketNonNULL( void ) /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we are not using leased address. */ TEST_ASSERT_EQUAL( eNotUsingLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that the local IP address pointer indicates that. */ @@ -418,6 +430,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookDefaultReturn( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -449,6 +462,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookDefaultReturn( void ) /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we are not using leased address. */ TEST_ASSERT_EQUAL( eNotUsingLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that the network addressing struct is updated to show that. */ @@ -466,6 +480,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNotNULLButGNW /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -490,6 +505,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNotNULLButGNW /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we are not using leased address. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); } @@ -502,6 +518,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNotNULLButHos /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -526,6 +543,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNotNULLButHos /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we are not using leased address. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); } @@ -536,6 +554,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNULL( void ) /* This should remain unchanged. */ xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -555,6 +574,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnDHCPSocketNULL( void ) /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we are not using leased address. */ TEST_ASSERT_EQUAL( eNotUsingLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); } @@ -567,6 +587,8 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsNoBroadcast( v /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; + xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -599,6 +621,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsNoBroadcast( v /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); /* The time value should be as expected. */ @@ -613,6 +636,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsNoBroadcast_NU /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -645,6 +669,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsNoBroadcast_NU /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); /* The time value should be as expected. */ @@ -660,6 +685,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsUseBroadCast( /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -692,6 +718,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendFailsUseBroadCast( /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); /* The time value should be as expected. */ @@ -707,6 +734,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendSucceedsUseBroadCas /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -738,6 +766,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendSucceedsUseBroadCas /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); /* The time value should be as expected. */ @@ -756,6 +785,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendSucceedsUseBroadCas /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingSendFirstDiscover; pxEndPoint->xDHCPData.eExpectedState = eWaitingSendFirstDiscover; @@ -787,6 +817,7 @@ void test_vDHCPProcess_CorrectStateDHCPHookContinueReturnSendSucceedsUseBroadCas /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); /* The time value should be as expected. */ @@ -804,6 +835,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWFails( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = eSendDHCPRequest; @@ -822,6 +854,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWFails( void ) /* DHCP socket should be NULL */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eSendDHCPRequest, pxEndPoint->xDHCPData.eDHCPState ); } @@ -834,6 +867,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWSucceedsSendFails( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = eSendDHCPRequest; @@ -856,6 +890,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWSucceedsSendFails( void ) /* DHCP socket should be still allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eSendDHCPRequest, pxEndPoint->xDHCPData.eDHCPState ); } @@ -870,6 +905,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWSucceedsSendSucceeds( void /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eSendDHCPRequest; pxEndPoint->xDHCPData.eExpectedState = eSendDHCPRequest; @@ -892,6 +928,7 @@ void test_vDHCPProcess_eSendDHCPRequestCorrectStateGNWSucceedsSendSucceeds( void /* DHCP socket should be still allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( xTimeValue, pxEndPoint->xDHCPData.xDHCPTxTime ); @@ -907,6 +944,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -927,6 +965,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsNoTimeout( void ) /* DHCP socket should be still allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -940,6 +979,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutGiveUp( void ) /* prvClo /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -977,6 +1017,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutGiveUp( void ) /* prvClo /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eGetLinkLayerAddress, pxEndPoint->xDHCPData.eDHCPState ); } @@ -990,6 +1031,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGFail( void /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1014,6 +1056,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGFail( void /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); /* make sure that the period is increased by a factor of two. */ @@ -1029,6 +1072,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGPassUseBroa /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1065,6 +1109,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGPassUseBroa /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); /* make sure that the period is increased by a factor of two. */ @@ -1080,6 +1125,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGPassNoBroad /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1114,6 +1160,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromFailsTimeoutDontGiveUpRNGPassNoBroad /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eInitialWait, pxEndPoint->xDHCPData.eDHCPState ); /* make sure that the period is increased by a factor of two. */ @@ -1133,6 +1180,7 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1172,6 +1220,7 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage_NullEndPo /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1211,6 +1260,7 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage_Transacti /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1326,6 +1376,7 @@ void test_vDHCPProcess_eLeasedAddress_IncorrectDHCPCookie_ValidBytesInMessage( v /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1365,6 +1416,7 @@ void test_vDHCPProcess_eLeasedAddress_IncorrectOpCode_ValidBytesInMessage( void /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1502,6 +1554,7 @@ void test_vDHCPProcessEndPoint_NullEndPoint( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1530,6 +1583,7 @@ void test_vDHCPProcessEndPoint_eWaitingOfferNullUDPBuffer( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1559,6 +1613,7 @@ void test_vDHCPProcessEndPoint_eWaitingOfferDHCPReply_NullUDPmessage( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1588,6 +1643,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSucceedsFalseCookieNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1614,6 +1670,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSucceedsFalseCookieNoTimeout( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1627,6 +1684,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSucceedsFalseOpcodeNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1652,6 +1710,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSucceedsFalseOpcodeNoTimeout( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1665,6 +1724,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSucceedsCorrectCookieAndOpcodeNoTime /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1692,6 +1752,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSucceedsCorrectCookieAndOpcodeNoTime /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1705,6 +1766,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromLessBytesNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1732,6 +1794,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromLessBytesNoTimeout( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1745,6 +1808,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccessCorrectTxID( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1772,6 +1836,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccessCorrectTxID( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1785,6 +1850,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrType( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1812,6 +1878,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrType( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1825,6 +1892,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_BroadcastAddr /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1850,6 +1918,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_BroadcastAddr /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1863,6 +1932,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_LocalHostAddr /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1890,6 +1960,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_LocalHostAddr /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1903,6 +1974,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_NonLocalHostA /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1930,6 +2002,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_NonLocalHostA /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1944,6 +2017,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_LocalMACNotma /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1977,6 +2051,7 @@ void test_vDHCPProcess_eWaitingOfferRecvfromSuccess_CorrectAddrLen_LocalMACNotma /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -1999,6 +2074,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageWithoutOptionsNoTimeout( v /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2026,6 +2102,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageWithoutOptionsNoTimeout( v /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2062,6 +2139,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageIncorrectOptionsNoTimeout( /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2089,6 +2167,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageIncorrectOptionsNoTimeout( /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2126,6 +2205,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageMissingLengthByteNoTimeout /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2153,6 +2233,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageMissingLengthByteNoTimeout /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2192,6 +2273,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageIncorrectLengthByteNoTimeo /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2219,6 +2301,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageIncorrectLengthByteNoTimeo /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2260,6 +2343,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageGetNACKNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2287,6 +2371,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageGetNACKNoTimeout( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2328,6 +2413,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageGetNACKNoTimeout_MatchingM /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2357,6 +2443,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageGetNACKNoTimeout_MatchingM /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2398,6 +2485,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageGetACKNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2425,6 +2513,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageGetACKNoTimeout( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2466,6 +2555,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageOneOptionNoTimeout( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2494,6 +2584,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageOneOptionNoTimeout( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2535,6 +2626,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageOneOptionNoTimeout2( void /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2562,6 +2654,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageOneOptionNoTimeout2( void /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that we still in the state from where we started. */ TEST_ASSERT_EQUAL( eWaitingOffer, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2619,6 +2712,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsSendFails( void /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2655,6 +2749,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsSendFails( void /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that sending failed. */ TEST_ASSERT_EQUAL( eSendDHCPRequest, pxEndPoint->xDHCPData.eDHCPState ); } @@ -2714,6 +2809,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsSendSucceeds( vo /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2751,6 +2847,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsSendSucceeds( vo /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that sending failed. */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); /* The time should be updated. */ @@ -2814,6 +2911,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsDHCPHookReturnDe /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2848,6 +2946,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsDHCPHookReturnDe /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that sending failed. */ TEST_ASSERT_EQUAL( eNotUsingLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL_MEMORY( &( pxEndPoint->ipv4_settings ), &( pxEndPoint->ipv4_defaults ), sizeof( IPV4Parameters_t ) ); @@ -2911,6 +3010,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsDHCPHookReturnEr /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -2946,6 +3046,7 @@ void test_vDHCPProcess_eWaitingOfferCorrectDHCPMessageTwoOptionsDHCPHookReturnEr /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* The state should indicate that sending failed. */ TEST_ASSERT_EQUAL( eNotUsingLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL_MEMORY( &( pxEndPoint->ipv4_settings ), &( testMemory ), sizeof( IPV4Parameters_t ) ); @@ -3008,6 +3109,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerNoTimeout( vo /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3031,6 +3133,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerNoTimeout( vo /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Still waiting on acknowledge. */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL_MEMORY( &( pxEndPoint->ipv4_settings ), &( testMemory ), sizeof( IPV4Parameters_t ) ); @@ -3091,6 +3194,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutGNBfai /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3121,6 +3225,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutGNBfai /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Still waiting on acknowledge. */ TEST_ASSERT_EQUAL( eSendDHCPRequest, pxEndPoint->xDHCPData.eDHCPState ); /* The time value should be stored in the state machine. */ @@ -3180,6 +3285,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutGNBSuc /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3216,6 +3322,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutGNBSuc /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Still waiting on acknowledge. */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( xTimeValue, pxEndPoint->xDHCPData.xDHCPTxTime ); @@ -3273,6 +3380,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutPeriod /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3298,6 +3406,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutPeriod /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Period exceeded. We should now be in initial state. */ TEST_ASSERT_EQUAL( eInitialWait, pxEndPoint->xDHCPData.eDHCPState ); /* Period exceeded, should have initial value */ @@ -3356,6 +3465,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutPeriod /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3381,6 +3491,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsIncorrectServerTimeoutPeriod /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Period exceeded. We should now be in initial state. */ /* Period exceeded, should have initial value */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); @@ -3440,6 +3551,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsCorrectServerLeaseTimeZero( /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3481,6 +3593,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsCorrectServerLeaseTimeZero( /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); } @@ -3539,6 +3652,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsCorrectServerLeaseTimeLessTh /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3578,6 +3692,7 @@ void test_vDHCPProcess_eWaitingAcknowledgeTwoOptionsCorrectServerLeaseTimeLessTh /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( dhcpMINIMUM_LEASE_TIME, pxEndPoint->xDHCPData.ulLeaseTime ); @@ -3636,6 +3751,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_TwoOptions_CorrectServer_AptLeaseTime /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3673,6 +3789,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_TwoOptions_CorrectServer_AptLeaseTime /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -3732,6 +3849,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_TwoOptions_NACK( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3760,6 +3878,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_TwoOptions_NACK( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be reset after NACK. */ TEST_ASSERT_EQUAL( eInitialWait, pxEndPoint->xDHCPData.eDHCPState ); } @@ -3817,6 +3936,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_TwoOptions_OFFER( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3845,6 +3965,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_TwoOptions_OFFER( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should not be reset after OFFER. */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); } @@ -3949,6 +4070,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_AllOptionsCorrectLength( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -3986,6 +4108,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_AllOptionsCorrectLength( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4093,6 +4216,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_AllOptionsCorrectLength2( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4130,6 +4254,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_AllOptionsCorrectLength2( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4238,6 +4363,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_DNSIncorrectLength( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4275,6 +4401,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_DNSIncorrectLength( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4382,6 +4509,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_DNSIncorrectLength2( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4419,6 +4547,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_DNSIncorrectLength2( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4526,6 +4655,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IncorrectDNSServerAddress( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4563,6 +4693,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IncorrectDNSServerAddress( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4670,6 +4801,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IncorrectDNSServerAddress2( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4707,6 +4839,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IncorrectDNSServerAddress2( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4786,6 +4919,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IPv4ServerIncorrectLength( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4823,6 +4957,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IPv4ServerIncorrectLength( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -4901,6 +5036,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_SubnetMaskIncorrectLength( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -4938,6 +5074,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_SubnetMaskIncorrectLength( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -5023,6 +5160,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_GatewayIncorrectLength( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -5060,6 +5198,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_GatewayIncorrectLength( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -5155,6 +5294,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_LeaseTimeIncorrectLength( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -5192,6 +5332,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_LeaseTimeIncorrectLength( void ) /* DHCP socket should be unallocated */ TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should now be using leased address. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); /* Make sure that this is not changed. */ @@ -5286,6 +5427,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_LeaseTimeIncorrectLength2( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -5359,6 +5501,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IncorrectLengthOfPacket( void ) /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingAcknowledge; pxEndPoint->xDHCPData.eExpectedState = eWaitingAcknowledge; @@ -5399,6 +5542,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_IncorrectLengthOfPacket( void ) /* DHCP socket should be allocated */ TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); /* Should still be stuck in waiting for ack state. */ TEST_ASSERT_EQUAL( eWaitingAcknowledge, pxEndPoint->xDHCPData.eDHCPState ); } @@ -5417,6 +5561,7 @@ void test_vDHCPProcess_eGetLinkLayerAddress_Timeout_NoARPIPClash( void ) xARPHadIPClash = pdFALSE; xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; xTaskGetTickCount_ExpectAndReturn( pxEndPoint->xDHCPData.xDHCPTxPeriod + pxEndPoint->xDHCPData.xDHCPTxTime + 100 ); @@ -5441,6 +5586,7 @@ void test_vDHCPProcess_eGetLinkLayerAddress_Timeout_ARPIPClash( void ) /* prvPre /* This should be nullified. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; xARPHadIPClash = pdTRUE; @@ -5457,6 +5603,7 @@ void test_vDHCPProcess_eGetLinkLayerAddress_Timeout_ARPIPClash( void ) /* prvPre TEST_ASSERT_EQUAL( eGetLinkLayerAddress, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); } void test_vDHCPProcess_eGetLinkLayerAddress_Timeout_ARPIPClash_NoSocketInUse( void ) /* prvPrepareLinkLayerIPLookUp + prvCloseDHCPSocket */ @@ -5473,6 +5620,7 @@ void test_vDHCPProcess_eGetLinkLayerAddress_Timeout_ARPIPClash_NoSocketInUse( vo /* This should be nullified. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 0; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; xARPHadIPClash = pdTRUE; @@ -5503,6 +5651,7 @@ void test_vDHCPProcess_eGetLinkLayerAddress_Timeout_ARPIPClash_TwoSocketsInUse( /* This should be nullified. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 2; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; xARPHadIPClash = pdTRUE; @@ -5529,6 +5678,7 @@ void test_vDHCPProcess_eGetLinkLayerAddress_NoTimeout( void ) pxEndPoint->xDHCPData.eDHCPState = eGetLinkLayerAddress; pxEndPoint->xDHCPData.eExpectedState = eGetLinkLayerAddress; xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; xARPHadIPClash = pdTRUE; /* Make it so that there is no timeout. */ @@ -5569,6 +5719,7 @@ void test_vDHCPProcess_eLeasedAddress_NetworkUp_SocketCreated_RNGPass_GNBfail( v /* Socket is already created. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; @@ -5604,6 +5755,7 @@ void test_vDHCPProcess_eLeasedAddress_NetworkUp_SocketCreated_RNGFail( void ) /* Socket is already created. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; @@ -5639,6 +5791,7 @@ void test_vDHCPProcess_eLeasedAddress_NetworkUp_SocketNotCreated_RNGPass_GNBfail /* Socket not created. */ xDHCPv4Socket = NULL; + pxEndPoint->xDHCPData.xDHCPSocket = NULL; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; @@ -5656,6 +5809,7 @@ void test_vDHCPProcess_eLeasedAddress_NetworkUp_SocketNotCreated_RNGPass_GNBfail /* Still here. */ TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint->xDHCPData.xDHCPSocket ); } void test_vDHCPProcess_eNotUsingLeasedAddress( void ) From e0a861d08aa4b61fe62a36098a83ec0f2394c4c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Thu, 5 Oct 2023 13:23:38 +0200 Subject: [PATCH 12/21] Fix formatting --- test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c index 6fe5bee353..9e2137ba48 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c @@ -328,7 +328,7 @@ void test_vDHCPProcess_ResetAndIncorrectStateWithSocketAlreadyCreated( void ) /* Expected state is incorrect, but we are trying to reset * the DHCP the state machine. */ TEST_ASSERT_EQUAL( eWaitingSendFirstDiscover, pxEndPoint->xDHCPData.eDHCPState ); - TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint->xDHCPData.xDHCPSocket ); TEST_ASSERT_EQUAL( 0, pxEndPoint->xDHCPData.xUseBroadcast ); /* This should be reset as well */ From 5a707058f86b023444301a69f270fecc440d234c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Thu, 5 Oct 2023 15:01:04 +0200 Subject: [PATCH 13/21] Change vSetNotAllNetworksUp into a more generic vSetAllNetworksUp --- source/FreeRTOS_IP_Timers.c | 11 +++++------ source/FreeRTOS_IP_Utils.c | 3 ++- source/include/FreeRTOS_IP_Private.h | 4 ++-- .../FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/FreeRTOS_IP_Timers.c b/source/FreeRTOS_IP_Timers.c index 086f558ce3..0e2259ac5c 100644 --- a/source/FreeRTOS_IP_Timers.c +++ b/source/FreeRTOS_IP_Timers.c @@ -328,7 +328,7 @@ void vCheckNetworkTimers( void ) } } - xAllNetworksUp = xUp; + vSetAllNetworksUp( xUp ); } } } @@ -606,11 +606,10 @@ void vIPSetARPResolutionTimerEnableState( BaseType_t xEnableState ) /*-----------------------------------------------------------*/ /** - * @brief Mark that at least one interface is down so that the 'xNetworkTimer' is checked. - * Whenever the timer expires, all interfaces that are down will get a new NetworkDown - * event. + * @brief Mark whether all interfaces are up or at least one interface is down. + * If all interfaces are up, the 'xNetworkTimer' will not be checked. */ -void vSetNotAllNetworksUp( void ) +void vSetAllNetworksUp( BaseType_t xIsAllNetworksUp ) { - xAllNetworksUp = pdFALSE; + xAllNetworksUp = xIsAllNetworksUp; } diff --git a/source/FreeRTOS_IP_Utils.c b/source/FreeRTOS_IP_Utils.c index a417bcccdf..f9d50158b8 100644 --- a/source/FreeRTOS_IP_Utils.c +++ b/source/FreeRTOS_IP_Utils.c @@ -961,7 +961,8 @@ void prvProcessNetworkDownEvent( struct xNetworkInterface * pxInterface ) } else { - vSetNotAllNetworksUp(); + /* At least one interface is down. */ + vSetAllNetworksUp( pdFALSE ); /* Nothing else to do. When the 'xNetworkTimer' expires, all interfaces * with bits.bInterfaceUp cleared will get a new 'eNetworkDownEvent' */ diff --git a/source/include/FreeRTOS_IP_Private.h b/source/include/FreeRTOS_IP_Private.h index e1571ff3cf..3d4ee932d7 100644 --- a/source/include/FreeRTOS_IP_Private.h +++ b/source/include/FreeRTOS_IP_Private.h @@ -882,8 +882,8 @@ BaseType_t xIsCallingFromIPTask( void ); /* Send the network-up event and start the ARP timer. */ void vIPNetworkUpCalls( struct xNetworkEndPoint * pxEndPoint ); -/* Mark that at least one interface is down to trigger repeated NetworkDown events. */ -void vSetNotAllNetworksUp( void ); +/* Mark whether all interfaces are up or at least one interface is down. */ +void vSetAllNetworksUp( BaseType_t xIsAllNetworksUp ); /* *INDENT-OFF* */ #ifdef __cplusplus diff --git a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c index b09addb436..2de291f115 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c @@ -581,7 +581,7 @@ void test_prvProcessNetworkDownEvent_InterfaceInitFail( void ) vDHCPStop_Expect( &xEndPoint ); - vSetNotAllNetworksUp_Expect(); + vSetAllNetworksUp_Expect( pdFALSE ); prvProcessNetworkDownEvent( &xInterface ); } From 21ca7101fb0c2682f273f2b0612d3afb24f0c659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Fri, 6 Oct 2023 18:21:15 +0200 Subject: [PATCH 14/21] Fix almost all of DHCP unit tests --- .../FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c | 41 ++++++++++++++++--- .../FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c | 5 +++ 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c index 3c5f6c870e..49cee9826c 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c @@ -347,6 +347,13 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ socklen_t * pxSourceAddressLength, int callbacks ) { + NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; + while ( pxIterator != NULL ) + { + pxIterator->xDHCPData.xDHCPSocket = NULL; + pxIterator = pxIterator->pxNext; + } + if( xFlags == FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK ) { *( ( uint8_t ** ) pvBuffer ) = pucUDPBuffer; @@ -358,7 +365,6 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ ( ( struct xDHCPMessage_IPv4 * ) pucUDPBuffer )->ucOpcode = dhcpREPLY_OPCODE; ( ( struct xDHCPMessage_IPv4 * ) pucUDPBuffer )->ulTransactionID = FreeRTOS_htonl( 0x01ABCDEF ); - xDHCPv4Socket = NULL; return xSizeofUDPBuffer; } @@ -371,8 +377,13 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ int callbacks ) { int32_t lBytes = 0; + NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; - xDHCPv4Socket = NULL; + while ( pxIterator != NULL ) + { + pxIterator->xDHCPData.xDHCPSocket = NULL; + pxIterator = pxIterator->pxNext; + } if( xFlags == FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK ) { @@ -402,7 +413,13 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ socklen_t * pxSourceAddressLength, int callbacks ) { - xDHCPv4Socket = NULL; + NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; + + while ( pxIterator != NULL ) + { + pxIterator->xDHCPData.xDHCPSocket = NULL; + pxIterator = pxIterator->pxNext; + } if( xFlags == FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK ) { @@ -430,6 +447,14 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ socklen_t * pxSourceAddressLength, int callbacks ) { + NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; + + while ( pxIterator != NULL ) + { + pxIterator->xDHCPData.xDHCPSocket = NULL; + pxIterator = pxIterator->pxNext; + } + if( xFlags == FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK ) { *( ( uint8_t ** ) pvBuffer ) = pucUDPBuffer; @@ -441,7 +466,6 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ ( ( struct xDHCPMessage_IPv4 * ) pucUDPBuffer )->ucOpcode = dhcpREPLY_OPCODE; ( ( struct xDHCPMessage_IPv4 * ) pucUDPBuffer )->ulTransactionID = FreeRTOS_htonl( 0x01ABCDEF ); - xDHCPv4Socket = NULL; return xSizeofUDPBuffer; } @@ -453,6 +477,14 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ socklen_t * pxSourceAddressLength, int callbacks ) { + NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; + + while ( pxIterator != NULL ) + { + pxIterator->xDHCPData.xDHCPSocket = NULL; + pxIterator = pxIterator->pxNext; + } + if( xFlags == FREERTOS_ZERO_COPY + FREERTOS_MSG_PEEK ) { *( ( uint8_t ** ) pvBuffer ) = pucUDPBuffer; @@ -464,7 +496,6 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ ( ( struct xDHCPMessage_IPv4 * ) pucUDPBuffer )->ucOpcode = dhcpREQUEST_OPCODE; ( ( struct xDHCPMessage_IPv4 * ) pucUDPBuffer )->ulTransactionID = FreeRTOS_htonl( 0x01ABCDEF ); - xDHCPv4Socket = NULL; return xSizeofUDPBuffer; } diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c index 9e2137ba48..53c1490905 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c @@ -1302,6 +1302,7 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage_TwoFlagOp /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1339,6 +1340,7 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage_TwoFlagOp /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; @@ -1461,6 +1463,7 @@ void test_vDHCPProcess_eWaitingOffer_CorrectState_ValidBytesInMessage_MatchingEn /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1501,6 +1504,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_CorrectState_ValidBytesInMessage_diff /* This should remain unchanged. */ xDHCPv4Socket = &xTestSocket; xDHCPSocketUserCount = 1; + pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; /* Put the required state. */ pxEndPoint->xDHCPData.eDHCPState = eWaitingOffer; pxEndPoint->xDHCPData.eExpectedState = eWaitingOffer; @@ -1530,6 +1534,7 @@ void test_vDHCPProcess_eWaitingAcknowledge_CorrectState_ValidBytesInMessage_diff memset( &pxEndPoint_2->ipv4_defaults, 0xAA, sizeof( IPV4Parameters_t ) ); pxNetworkEndPoints = pxEndPoint_2; + pxEndPoint_2->pxNext = pxEndPoint; pxEndPoint->xDHCPData.xDHCPTxTime = 100; pxEndPoint->xDHCPData.xDHCPTxPeriod = 100; From 3f49d0860190757392ac0aba8d4b7bd2eebc60af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Fri, 6 Oct 2023 18:23:01 +0200 Subject: [PATCH 15/21] Fix formatting --- test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c index 49cee9826c..0ce4d385e6 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_stubs.c @@ -348,7 +348,8 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ int callbacks ) { NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; - while ( pxIterator != NULL ) + + while( pxIterator != NULL ) { pxIterator->xDHCPData.xDHCPSocket = NULL; pxIterator = pxIterator->pxNext; @@ -379,7 +380,7 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ int32_t lBytes = 0; NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; - while ( pxIterator != NULL ) + while( pxIterator != NULL ) { pxIterator->xDHCPData.xDHCPSocket = NULL; pxIterator = pxIterator->pxNext; @@ -415,7 +416,7 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ { NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; - while ( pxIterator != NULL ) + while( pxIterator != NULL ) { pxIterator->xDHCPData.xDHCPSocket = NULL; pxIterator = pxIterator->pxNext; @@ -449,7 +450,7 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ { NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; - while ( pxIterator != NULL ) + while( pxIterator != NULL ) { pxIterator->xDHCPData.xDHCPSocket = NULL; pxIterator = pxIterator->pxNext; @@ -479,7 +480,7 @@ static int32_t FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_ { NetworkEndPoint_t * pxIterator = pxNetworkEndPoints; - while ( pxIterator != NULL ) + while( pxIterator != NULL ) { pxIterator->xDHCPData.xDHCPSocket = NULL; pxIterator = pxIterator->pxNext; From a645291863cb997a2ad4b6f970242e2082a98b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Fri, 6 Oct 2023 19:33:48 +0200 Subject: [PATCH 16/21] Add tests for vDHCPStop and vDHCPv6Stop functions --- .../FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c | 90 ++++++++++--------- .../FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c | 52 +++++++++++ 2 files changed, 102 insertions(+), 40 deletions(-) diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c index 53c1490905..62245d49b1 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c @@ -1211,46 +1211,6 @@ void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage( void ) TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); } -void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage_NullEndPoint( void ) -{ - struct xSOCKET xTestSocket; - NetworkEndPoint_t xEndPoint = { 0 }, * pxEndPoint = &xEndPoint; - uint8_t * pucUDPPayload; - - /* This should remain unchanged. */ - xDHCPv4Socket = &xTestSocket; - xDHCPSocketUserCount = 1; - pxEndPoint->xDHCPData.xDHCPSocket = &xTestSocket; - /* Put the required state. */ - pxEndPoint->xDHCPData.eDHCPState = eLeasedAddress; - pxEndPoint->xDHCPData.eExpectedState = eLeasedAddress; - pxEndPoint->xDHCPData.ulTransactionId = 0x01ABCDEF; - - /* Make sure that the local IP address is uninitialised. */ - pxEndPoint->ipv4_settings.ulIPAddress = 0; - /* Put a verifiable value. */ - memset( &pxEndPoint->ipv4_settings, 0xAA, sizeof( IPV4Parameters_t ) ); - /* Put a verifiable value. */ - memset( &pxEndPoint->ipv4_defaults, 0xBB, sizeof( IPV4Parameters_t ) ); - - pxNetworkEndPoints = NULL; - - /* Expect these arguments. */ - FreeRTOS_recvfrom_Stub( FreeRTOS_recvfrom_ResetAndIncorrectStateWithSocketAlreadyCreated_validUDPmessage ); - - FreeRTOS_ReleaseUDPPayloadBuffer_Expect( pucUDPBuffer ); - - FreeRTOS_IsEndPointUp_IgnoreAndReturn( pdFALSE ); - - /* Expect the DHCP timer to be reloaded. */ - vDHCP_RATimerReload_Expect( &xEndPoint, pdMS_TO_TICKS( 5000U ) ); - - vDHCPProcess( pdFALSE, pxEndPoint ); - - /* Still in this phase. */ - TEST_ASSERT_EQUAL( eLeasedAddress, pxEndPoint->xDHCPData.eDHCPState ); -} - void test_vDHCPProcess_eLeasedAddress_CorrectState_ValidBytesInMessage_TransactionIDMismatch( void ) { struct xSOCKET xTestSocket; @@ -5848,6 +5808,56 @@ void test_vDHCPProcess_IncorrectState( void ) TEST_ASSERT_EQUAL( ( eNotUsingLeasedAddress << 1 ), pxEndPoint->xDHCPData.eDHCPState ); } +void test_vDHCPStop( void ) +{ + struct xSOCKET xTestSocket; + NetworkEndPoint_t xEndPoint_1 = { 0 }, * pxEndPoint_1 = &xEndPoint_1; + NetworkEndPoint_t xEndPoint_2 = { 0 }, * pxEndPoint_2 = &xEndPoint_2; + NetworkEndPoint_t xEndPoint_3 = { 0 }, * pxEndPoint_3 = &xEndPoint_3; + + /* Socket is already created. */ + xDHCPv4Socket = &xTestSocket; + + /* 2 end-points opened the socket */ + xDHCPSocketUserCount = 2; + pxEndPoint_1->xDHCPData.xDHCPSocket = FREERTOS_INVALID_SOCKET; + pxEndPoint_2->xDHCPData.xDHCPSocket = &xTestSocket; + pxEndPoint_3->xDHCPData.xDHCPSocket = &xTestSocket; + + /* Stop DHCP for end-point 1 */ + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint_1, pdFALSE ); + + vDHCPStop( pxEndPoint_1 ); + + TEST_ASSERT_EQUAL( 2, xDHCPSocketUserCount ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( FREERTOS_INVALID_SOCKET, pxEndPoint_1->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_2->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_3->xDHCPData.xDHCPSocket ); + + /* Stop DHCP for end-point 2 */ + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint_2, pdFALSE ); + + vDHCPStop( pxEndPoint_2 ); + + TEST_ASSERT_EQUAL( 1, xDHCPSocketUserCount ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint_2->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_3->xDHCPData.xDHCPSocket ); + + /* Stop DHCP for end-point 3 */ + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint_3, pdFALSE ); + + /* Expect the socket to be closed. */ + vSocketClose_ExpectAndReturn( &xTestSocket, NULL ); + + vDHCPStop( pxEndPoint_3 ); + + TEST_ASSERT_EQUAL( 0, xDHCPSocketUserCount ); + TEST_ASSERT_EQUAL( NULL, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint_3->xDHCPData.xDHCPSocket ); +} + /* * @brief Check static function , in case of malformed packet , where length byte is zero. */ diff --git a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c index 7a1136b5dc..9e0d4ca5f0 100644 --- a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c +++ b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c @@ -59,6 +59,8 @@ #define TEST_DHCPv6_DEFAULT_DUID_LENGTH ( 14U ) #define TEST_DHCPv6_DIFFERENT_DUID_LENGTH ( 12U ) +extern BaseType_t xDHCPv6SocketUserCount; + extern void prvSendDHCPMessage( NetworkEndPoint_t * pxEndPoint ); extern void prvCloseDHCPv6Socket( NetworkEndPoint_t * pxEndPoint ); extern const char * prvStateName( eDHCPState_t eState ); @@ -3994,3 +3996,53 @@ void test_vDHCPv6Process_AdvertiseStatusFail() * Then change the state to eWaitingAcknowledge. */ TEST_ASSERT_EQUAL( eWaitingOffer, xEndPoint.xDHCPData.eDHCPState ); } + +void test_vDHCPv6Stop( void ) +{ + struct xSOCKET xTestSocket; + NetworkEndPoint_t xEndPoint_1 = { 0 }, * pxEndPoint_1 = &xEndPoint_1; + NetworkEndPoint_t xEndPoint_2 = { 0 }, * pxEndPoint_2 = &xEndPoint_2; + NetworkEndPoint_t xEndPoint_3 = { 0 }, * pxEndPoint_3 = &xEndPoint_3; + + /* Socket is already created. */ + xDHCPv6Socket = &xTestSocket; + + /* 2 end-points opened the socket */ + xDHCPv6SocketUserCount = 2; + pxEndPoint_1->xDHCPData.xDHCPSocket = FREERTOS_INVALID_SOCKET; + pxEndPoint_2->xDHCPData.xDHCPSocket = &xTestSocket; + pxEndPoint_3->xDHCPData.xDHCPSocket = &xTestSocket; + + /* Stop DHCP for end-point 1 */ + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint_1, pdFALSE ); + + vDHCPv6Stop( pxEndPoint_1 ); + + TEST_ASSERT_EQUAL( 2, xDHCPv6SocketUserCount ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv6Socket ); + TEST_ASSERT_EQUAL( FREERTOS_INVALID_SOCKET, pxEndPoint_1->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_2->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_3->xDHCPData.xDHCPSocket ); + + /* Stop DHCP for end-point 2 */ + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint_2, pdFALSE ); + + vDHCPv6Stop( pxEndPoint_2 ); + + TEST_ASSERT_EQUAL( 1, xDHCPv6SocketUserCount ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv6Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint_2->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_3->xDHCPData.xDHCPSocket ); + + /* Stop DHCP for end-point 3 */ + vIPSetDHCP_RATimerEnableState_Expect( &xEndPoint_3, pdFALSE ); + + /* Expect the socket to be closed. */ + vSocketClose_ExpectAndReturn( &xTestSocket, NULL ); + + vDHCPv6Stop( pxEndPoint_3 ); + + TEST_ASSERT_EQUAL( 0, xDHCPv6SocketUserCount ); + TEST_ASSERT_EQUAL( NULL, xDHCPv6Socket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint_3->xDHCPData.xDHCPSocket ); +} \ No newline at end of file From 04a6ad29b91d91a6f548226956657b7e265d884a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Fri, 6 Oct 2023 19:41:37 +0200 Subject: [PATCH 17/21] Fix formatting --- test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c index 9e0d4ca5f0..86e6a7f007 100644 --- a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c +++ b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c @@ -4045,4 +4045,4 @@ void test_vDHCPv6Stop( void ) TEST_ASSERT_EQUAL( 0, xDHCPv6SocketUserCount ); TEST_ASSERT_EQUAL( NULL, xDHCPv6Socket ); TEST_ASSERT_EQUAL( NULL, pxEndPoint_3->xDHCPData.xDHCPSocket ); -} \ No newline at end of file +} From f92294aaa47816a11a79c82f14ce30af3acddc54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Mon, 9 Oct 2023 08:10:53 +0000 Subject: [PATCH 18/21] Remove redundant MISRA comment --- source/FreeRTOS_DHCP.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/FreeRTOS_DHCP.c b/source/FreeRTOS_DHCP.c index 1d89d63396..e61e6a7d11 100644 --- a/source/FreeRTOS_DHCP.c +++ b/source/FreeRTOS_DHCP.c @@ -1529,9 +1529,6 @@ &( uxOptionsLength ), pxEndPoint ); - /* MISRA Ref 11.4.1 [Socket error and integer to pointer conversion] */ - /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-114 */ - /* coverity[misra_c_2012_rule_11_4_violation] */ if( ( xSocketValid( EP_DHCPData.xDHCPSocket ) == pdTRUE ) && ( pucUDPPayloadBuffer != NULL ) ) { /* Copy in the IP address being requested. */ From 26ecb0734bcc462eef9c1721f097aecfd8ebfd54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Mon, 9 Oct 2023 08:18:46 +0000 Subject: [PATCH 19/21] Set all fields of xAddress when binding DHCP socket --- source/FreeRTOS_DHCP.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/FreeRTOS_DHCP.c b/source/FreeRTOS_DHCP.c index e61e6a7d11..19a50bafd0 100644 --- a/source/FreeRTOS_DHCP.c +++ b/source/FreeRTOS_DHCP.c @@ -905,6 +905,9 @@ ( void ) FreeRTOS_setsockopt( xDHCPv4Socket, 0, FREERTOS_SO_RCVTIMEO, &( xTimeoutTime ), sizeof( TickType_t ) ); ( void ) FreeRTOS_setsockopt( xDHCPv4Socket, 0, FREERTOS_SO_SNDTIMEO, &( xTimeoutTime ), sizeof( TickType_t ) ); + memset( &xAddress, 0, sizeof( xAddress ) ); + xAddress.sin_family = FREERTOS_AF_INET4; + xAddress.sin_len = ( uint8_t ) sizeof( xAddress ); /* Bind to the standard DHCP client port. */ xAddress.sin_port = ( uint16_t ) dhcpCLIENT_PORT_IPv4; xReturn = vSocketBind( xDHCPv4Socket, &xAddress, sizeof( xAddress ), pdFALSE ); From cb86c13afc99c233509e1c54d2c5d399067e6516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Mon, 9 Oct 2023 09:08:46 +0000 Subject: [PATCH 20/21] Fix unit test coverage of prvCreateDHCPSocket --- .../FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c index 62245d49b1..bba25d176e 100644 --- a/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c +++ b/test/unit-test/FreeRTOS_DHCP/FreeRTOS_DHCP_utest.c @@ -5808,6 +5808,54 @@ void test_vDHCPProcess_IncorrectState( void ) TEST_ASSERT_EQUAL( ( eNotUsingLeasedAddress << 1 ), pxEndPoint->xDHCPData.eDHCPState ); } +void test_vDHCPProcess_ResetWithRNGSuccessSocketSuccess_TwoEndPoints( void ) +{ + struct xSOCKET xTestSocket; + NetworkEndPoint_t xEndPoint_1 = { 0 }, * pxEndPoint_1 = &xEndPoint_1; + NetworkEndPoint_t xEndPoint_2 = { 0 }, * pxEndPoint_2 = &xEndPoint_2; + + /* Socket not created. */ + xDHCPv4Socket = NULL; + pxEndPoint_1->xDHCPData.xDHCPSocket = NULL; + pxEndPoint_2->xDHCPData.xDHCPSocket = NULL; + + /* Make random number generation pass. */ + xApplicationGetRandomNumber_ExpectAndReturn( &( pxEndPoint_1->xDHCPData.ulTransactionId ), pdTRUE ); + /* Return a valid socket. */ + FreeRTOS_socket_ExpectAndReturn( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP, &xTestSocket ); + + xSocketValid_ExpectAnyArgsAndReturn( pdTRUE ); + xSocketValid_ExpectAnyArgsAndReturn( pdTRUE ); + + /* Ignore the inputs to setting the socket options. */ + FreeRTOS_setsockopt_ExpectAnyArgsAndReturn( pdPASS ); + FreeRTOS_setsockopt_ExpectAnyArgsAndReturn( pdPASS ); + /* Make sure that binding passes. Return zero. */ + vSocketBind_ExpectAnyArgsAndReturn( 0 ); + /* See if the timer is reloaded. */ + vDHCP_RATimerReload_Expect( &xEndPoint_1, dhcpINITIAL_TIMER_PERIOD ); + + vDHCPProcess( pdTRUE, pxEndPoint_1 ); + + TEST_ASSERT_EQUAL( 1, xDHCPSocketUserCount ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_1->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( NULL, pxEndPoint_2->xDHCPData.xDHCPSocket ); + + /* Make random number generation pass. */ + xApplicationGetRandomNumber_ExpectAndReturn( &( pxEndPoint_2->xDHCPData.ulTransactionId ), pdTRUE ); + + /* See if the timer is reloaded. */ + vDHCP_RATimerReload_Expect( &xEndPoint_2, dhcpINITIAL_TIMER_PERIOD ); + + vDHCPProcess( pdTRUE, pxEndPoint_2 ); + + TEST_ASSERT_EQUAL( 2, xDHCPSocketUserCount ); + TEST_ASSERT_EQUAL( &xTestSocket, xDHCPv4Socket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_1->xDHCPData.xDHCPSocket ); + TEST_ASSERT_EQUAL( &xTestSocket, pxEndPoint_2->xDHCPData.xDHCPSocket ); +} + void test_vDHCPStop( void ) { struct xSOCKET xTestSocket; From 65517deac6a4535394a534d3cadce0cbd4dd3173 Mon Sep 17 00:00:00 2001 From: tony-josi-aws Date: Tue, 10 Oct 2023 10:31:22 +0530 Subject: [PATCH 21/21] Fix DHCP CBMC memory proof --- .../DHCPProcessEndPoint_harness.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c b/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c index 10021d8c4a..db482595cd 100644 --- a/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c +++ b/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c @@ -46,6 +46,8 @@ #include "cbmc.h" +#include "../../utility/memory_assignments.c" + /* Static members defined in FreeRTOS_DHCP.c */ extern DHCPData_t xDHCPData; extern Socket_t xDHCPv4Socket; @@ -135,6 +137,15 @@ void FreeRTOS_ReleaseUDPPayloadBuffer( void * pvBuffer ) free( ( ( ( uint8_t * ) pvBuffer ) - ( ipUDP_PAYLOAD_OFFSET_IPv4 + ipIP_TYPE_OFFSET ) ) ); } +/* Abstraction of FreeRTOS_socket. Return NULL or valid socket handler. */ +Socket_t FreeRTOS_socket( BaseType_t xDomain, + BaseType_t xType, + BaseType_t xProtocol ) +{ + return ensure_FreeRTOS_Socket_t_is_allocated(); +} + + /**************************************************************** * The proof of vDHCPProcess ****************************************************************/ @@ -166,6 +177,7 @@ void harness() NetworkEndPoint_t * pxNetworkEndPoint_Temp = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoint_Temp != NULL ); pxNetworkEndPoint_Temp->pxNext = NULL; + pxNetworkEndPoint_Temp->xDHCPData.xDHCPSocket = NULL; /**************************************************************** * Initialize the counter used to bound the number of times @@ -176,6 +188,8 @@ void harness() GetNetworkBuffer_failure_count = 0; #endif + xDHCPv4Socket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP ); + /**************************************************************** * Assume a valid socket in most states of the DHCP state machine. * @@ -189,7 +203,5 @@ void harness() prvCreateDHCPSocket( pxNetworkEndPoint_Temp ); } - xDHCPv4Socket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP ); - __CPROVER_file_local_FreeRTOS_DHCP_c_vDHCPProcessEndPoint( xReset, xDoCheck, pxNetworkEndPoint_Temp ); }