diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c index daa8f950b7..d960088e08 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c @@ -210,13 +210,16 @@ static size_t prvSingleStepTCPHeaderOptions( const uint8_t * const pucPtr, FreeRTOS_Socket_t * const pxSocket, BaseType_t xHasSYNFlag ); -/* - * Skip past TCP header options when doing Selective ACK, until there are no - * more options left. - */ -static void prvReadSackOption( const uint8_t * const pucPtr, - size_t uxIndex, - FreeRTOS_Socket_t * const pxSocket ); +#if( ipconfigUSE_TCP_WIN == 1 ) + /* + * Skip past TCP header options when doing Selective ACK, until there are no + * more options left. + */ + static void prvReadSackOption( const uint8_t * const pucPtr, + size_t uxIndex, + FreeRTOS_Socket_t * const pxSocket ); +#endif/* ( ipconfigUSE_TCP_WIN == 1 ) */ + /* * Set the initial properties in the options fields, like the preferred @@ -1327,47 +1330,50 @@ TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow ); } /*-----------------------------------------------------------*/ -static void prvReadSackOption( const uint8_t * const pucPtr, - size_t uxIndex, - FreeRTOS_Socket_t * const pxSocket ) -{ -uint32_t ulFirst = ulChar2u32( &( pucPtr[ uxIndex ] ) ); -uint32_t ulLast = ulChar2u32( &( pucPtr[ uxIndex + 4U ] ) ); -uint32_t ulCount = ulTCPWindowTxSack( &( pxSocket->u.xTCP.xTCPWindow ), ulFirst, ulLast );; - - /* ulTCPWindowTxSack( ) returns the number of bytes which have been acked - * starting from the head position. Advance the tail pointer in txStream. - */ - if( ( pxSocket->u.xTCP.txStream != NULL ) && ( ulCount > 0U ) ) +#if( ipconfigUSE_TCP_WIN == 1 ) + static void prvReadSackOption( const uint8_t * const pucPtr, + size_t uxIndex, + FreeRTOS_Socket_t * const pxSocket ) { - /* Just advancing the tail index, 'ulCount' bytes have been confirmed. */ - ( void ) uxStreamBufferGet( pxSocket->u.xTCP.txStream, 0, NULL, ( size_t ) ulCount, pdFALSE ); - pxSocket->xEventBits |= ( EventBits_t ) eSOCKET_SEND; + uint32_t ulFirst = ulChar2u32( &( pucPtr[ uxIndex ] ) ); + uint32_t ulLast = ulChar2u32( &( pucPtr[ uxIndex + 4U ] ) ); + uint32_t ulCount = ulTCPWindowTxSack( &( pxSocket->u.xTCP.xTCPWindow ), ulFirst, ulLast );; - #if ipconfigSUPPORT_SELECT_FUNCTION == 1 + /* ulTCPWindowTxSack( ) returns the number of bytes which have been acked + * starting from the head position. Advance the tail pointer in txStream. + */ + if( ( pxSocket->u.xTCP.txStream != NULL ) && ( ulCount > 0U ) ) { - if( ( pxSocket->xSelectBits & ( EventBits_t ) eSELECT_WRITE ) != 0U ) - { - /* The field 'xEventBits' is used to store regular socket events - * (at most 8), as well as 'select events', which will be left-shifted. - */ - pxSocket->xEventBits |= ( ( EventBits_t ) eSELECT_WRITE ) << SOCKET_EVENT_BIT_COUNT; - } - } - #endif + /* Just advancing the tail index, 'ulCount' bytes have been confirmed. */ + ( void ) uxStreamBufferGet( pxSocket->u.xTCP.txStream, 0, NULL, ( size_t ) ulCount, pdFALSE ); + pxSocket->xEventBits |= ( EventBits_t ) eSOCKET_SEND; - /* In case the socket owner has installed an OnSent handler, - call it now. */ - #if( ipconfigUSE_CALLBACKS == 1 ) - { - if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleSent ) ) + #if ipconfigSUPPORT_SELECT_FUNCTION == 1 { - pxSocket->u.xTCP.pxHandleSent( pxSocket, ulCount ); + if( ( pxSocket->xSelectBits & ( EventBits_t ) eSELECT_WRITE ) != 0U ) + { + /* The field 'xEventBits' is used to store regular socket events + * (at most 8), as well as 'select events', which will be left-shifted. + */ + pxSocket->xEventBits |= ( ( EventBits_t ) eSELECT_WRITE ) << SOCKET_EVENT_BIT_COUNT; + } } + #endif + + /* In case the socket owner has installed an OnSent handler, + call it now. */ + #if( ipconfigUSE_CALLBACKS == 1 ) + { + if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleSent ) ) + { + pxSocket->u.xTCP.pxHandleSent( pxSocket, ulCount ); + } + } + #endif /* ipconfigUSE_CALLBACKS == 1 */ } - #endif /* ipconfigUSE_CALLBACKS == 1 */ } -} + +#endif /* ( ipconfigUSE_TCP_WIN != 0 ) */ /*-----------------------------------------------------------*/ #if( ipconfigUSE_TCP_WIN != 0 ) @@ -1994,7 +2000,6 @@ int32_t lCount, lLength; /* A txStream has been created already, see if the socket has new data for the sliding window. - uxStreamBufferMidSpace() returns the distance between rxHead and rxMid. It contains new Tx data which has not been passed to the sliding window yet. The oldest data not-yet-confirmed can be found at rxTail. */ @@ -2004,7 +2009,6 @@ int32_t lCount, lLength; { /* All data between txMid and rxHead will now be passed to the sliding window manager, so it can start transmitting them. - Hand over the new data to the sliding window handler. It will be split-up in chunks of 1460 bytes each (or less, depending on ipconfigTCP_MSS). */ @@ -2137,7 +2141,6 @@ uint16_t usLength; /* Determine the length and the offset of the user-data sent to this node. - The size of the TCP header is given in a multiple of 4-byte words (single byte, needs no ntoh() translation). A shift-right 2: is the same as (offset >> 4) * 4. */ @@ -2213,7 +2216,6 @@ BaseType_t xResult = 0; { /* See if way may accept the data contents and forward it to the socket owner. - If it can't be "accept"ed it may have to be stored and send a selective ack (SACK) option to confirm it. In that case, lTCPAddRxdata() will be called later to store an out-of-order packet (in case lOffset is @@ -3502,4 +3504,3 @@ const ListItem_t *pxEndTCP = ipPOINTER_CAST( const ListItem_t *, listGET_END_MAR #ifdef FREERTOS_TCP_ENABLE_VERIFICATION #include "aws_freertos_tcp_verification_access_tcp_define.h" #endif - diff --git a/FreeRTOS-Plus/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch b/FreeRTOS-Plus/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch index 512b0bc319..689ccd7bc7 100644 --- a/FreeRTOS-Plus/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch +++ b/FreeRTOS-Plus/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch @@ -1,6 +1,5 @@ -From afc01793c4531cfbe9f92e7ca2ce9364983d987e Mon Sep 17 00:00:00 2001 -From: Mark R Tuttle -Date: Tue, 12 May 2020 15:57:56 +0000 +From: Aniruddha R Kanhere +Date: Wed, 03 June 2020 09:51:25 +0000 Subject: [PATCH] modified lib --- @@ -8,7 +7,7 @@ Subject: [PATCH] modified lib 1 file changed, 24 insertions(+) diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c -index dc58621..963b576 100644 +index 7a2c00c68..cb537b347 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c @@ -198,14 +198,22 @@ static BaseType_t prvTCPPrepareConnect( FreeRTOS_Socket_t *pxSocket ); @@ -34,18 +33,18 @@ index dc58621..963b576 100644 size_t uxTotalLength, FreeRTOS_Socket_t * const pxSocket, BaseType_t xHasSYNFlag ); -@@ -214,7 +222,11 @@ static size_t prvSingleStepTCPHeaderOptions( const uint8_t * const pucPtr, - * Skip past TCP header options when doing Selective ACK, until there are no - * more options left. - */ -+#ifdef CBMC -+void prvReadSackOption( const uint8_t * const pucPtr, -+#else - static void prvReadSackOption( const uint8_t * const pucPtr, -+#endif - size_t uxIndex, - FreeRTOS_Socket_t * const pxSocket ); - +@@ -215,7 +223,11 @@ static size_t prvSingleStepTCPHeaderOptions( const uint8_t * const pucPtr, + * Skip past TCP header options when doing Selective ACK, until there are no + * more options left. + */ ++ #ifdef CBMC ++ void prvReadSackOption( const uint8_t * const pucPtr, ++ #else + static void prvReadSackOption( const uint8_t * const pucPtr, ++ #endif + size_t uxIndex, + FreeRTOS_Socket_t * const pxSocket ); + #endif/* ( ipconfigUSE_TCP_WIN == 1 ) */ @@ -1137,7 +1149,11 @@ uint32_t ulInitialSequenceNumber = 0; * that: ((pxTCPHeader->ucTCPOffset & 0xf0) > 0x50), meaning that the TP header * is longer than the usual 20 (5 x 4) bytes. @@ -58,7 +57,7 @@ index dc58621..963b576 100644 { size_t uxTCPHeaderOffset = ipSIZE_OF_ETH_HEADER + xIPHeaderSize( pxNetworkBuffer ); const ProtocolHeaders_t *pxProtocolHeaders = ipPOINTER_CAST( ProtocolHeaders_t *, -@@ -1201,7 +1217,11 @@ uint8_t ucLength; +@@ -1199,7 +1215,11 @@ uint8_t ucLength; } /*-----------------------------------------------------------*/ @@ -70,18 +69,15 @@ index dc58621..963b576 100644 size_t uxTotalLength, FreeRTOS_Socket_t * const pxSocket, BaseType_t xHasSYNFlag ) -@@ -1346,7 +1366,11 @@ TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow ); - } +@@ -1331,7 +1351,11 @@ TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow ); /*-----------------------------------------------------------*/ -+#ifdef CBMC -+void prvReadSackOption( const uint8_t * const pucPtr, -+#else - static void prvReadSackOption( const uint8_t * const pucPtr, -+#endif - size_t uxIndex, - FreeRTOS_Socket_t * const pxSocket ) - { --- -2.7.4 - + #if( ipconfigUSE_TCP_WIN == 1 ) ++ #ifdef CBMC ++ void prvReadSackOption( const uint8_t * const pucPtr, ++ #else + static void prvReadSackOption( const uint8_t * const pucPtr, ++ #endif + size_t uxIndex, + FreeRTOS_Socket_t * const pxSocket ) + { diff --git a/FreeRTOS/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch b/FreeRTOS/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch index 512b0bc319..689ccd7bc7 100644 --- a/FreeRTOS/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch +++ b/FreeRTOS/Test/CBMC/patches/remove-static-in-freertos-tcp-ip.patch @@ -1,6 +1,5 @@ -From afc01793c4531cfbe9f92e7ca2ce9364983d987e Mon Sep 17 00:00:00 2001 -From: Mark R Tuttle -Date: Tue, 12 May 2020 15:57:56 +0000 +From: Aniruddha R Kanhere +Date: Wed, 03 June 2020 09:51:25 +0000 Subject: [PATCH] modified lib --- @@ -8,7 +7,7 @@ Subject: [PATCH] modified lib 1 file changed, 24 insertions(+) diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c -index dc58621..963b576 100644 +index 7a2c00c68..cb537b347 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c @@ -198,14 +198,22 @@ static BaseType_t prvTCPPrepareConnect( FreeRTOS_Socket_t *pxSocket ); @@ -34,18 +33,18 @@ index dc58621..963b576 100644 size_t uxTotalLength, FreeRTOS_Socket_t * const pxSocket, BaseType_t xHasSYNFlag ); -@@ -214,7 +222,11 @@ static size_t prvSingleStepTCPHeaderOptions( const uint8_t * const pucPtr, - * Skip past TCP header options when doing Selective ACK, until there are no - * more options left. - */ -+#ifdef CBMC -+void prvReadSackOption( const uint8_t * const pucPtr, -+#else - static void prvReadSackOption( const uint8_t * const pucPtr, -+#endif - size_t uxIndex, - FreeRTOS_Socket_t * const pxSocket ); - +@@ -215,7 +223,11 @@ static size_t prvSingleStepTCPHeaderOptions( const uint8_t * const pucPtr, + * Skip past TCP header options when doing Selective ACK, until there are no + * more options left. + */ ++ #ifdef CBMC ++ void prvReadSackOption( const uint8_t * const pucPtr, ++ #else + static void prvReadSackOption( const uint8_t * const pucPtr, ++ #endif + size_t uxIndex, + FreeRTOS_Socket_t * const pxSocket ); + #endif/* ( ipconfigUSE_TCP_WIN == 1 ) */ @@ -1137,7 +1149,11 @@ uint32_t ulInitialSequenceNumber = 0; * that: ((pxTCPHeader->ucTCPOffset & 0xf0) > 0x50), meaning that the TP header * is longer than the usual 20 (5 x 4) bytes. @@ -58,7 +57,7 @@ index dc58621..963b576 100644 { size_t uxTCPHeaderOffset = ipSIZE_OF_ETH_HEADER + xIPHeaderSize( pxNetworkBuffer ); const ProtocolHeaders_t *pxProtocolHeaders = ipPOINTER_CAST( ProtocolHeaders_t *, -@@ -1201,7 +1217,11 @@ uint8_t ucLength; +@@ -1199,7 +1215,11 @@ uint8_t ucLength; } /*-----------------------------------------------------------*/ @@ -70,18 +69,15 @@ index dc58621..963b576 100644 size_t uxTotalLength, FreeRTOS_Socket_t * const pxSocket, BaseType_t xHasSYNFlag ) -@@ -1346,7 +1366,11 @@ TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow ); - } +@@ -1331,7 +1351,11 @@ TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow ); /*-----------------------------------------------------------*/ -+#ifdef CBMC -+void prvReadSackOption( const uint8_t * const pucPtr, -+#else - static void prvReadSackOption( const uint8_t * const pucPtr, -+#endif - size_t uxIndex, - FreeRTOS_Socket_t * const pxSocket ) - { --- -2.7.4 - + #if( ipconfigUSE_TCP_WIN == 1 ) ++ #ifdef CBMC ++ void prvReadSackOption( const uint8_t * const pucPtr, ++ #else + static void prvReadSackOption( const uint8_t * const pucPtr, ++ #endif + size_t uxIndex, + FreeRTOS_Socket_t * const pxSocket ) + {