|
10 | 10 |
|
11 | 11 | /* FreeRTOS+TCP includes. */ |
12 | 12 | #include "FreeRTOS_IP.h" |
| 13 | +#include "FreeRTOS_IP_Private.h" |
13 | 14 | #include "FreeRTOS_DNS.h" |
14 | 15 | #include "FreeRTOS_DNS_Parser.h" |
15 | 16 | #include "NetworkBufferManagement.h" |
16 | 17 | #include "NetworkInterface.h" |
17 | 18 | #include "IPTraceMacroDefaults.h" |
18 | 19 |
|
19 | 20 | #include "cbmc.h" |
20 | | -#include "../../utility/memory_assignments.c" |
| 21 | + |
| 22 | +const BaseType_t xBufferAllocFixedSize = IS_BUFFER_ALLOCATE_FIXED; |
21 | 23 |
|
22 | 24 | /**************************************************************** |
23 | 25 | * Signature of function under test |
@@ -60,12 +62,16 @@ NetworkBufferDescriptor_t * pxUDPPayloadBuffer_to_NetworkBuffer( const void * pv |
60 | 62 |
|
61 | 63 | uint32_t ulChar2u32( const uint8_t * pucPtr ) |
62 | 64 | { |
| 65 | + uint32_t ret; |
63 | 66 | __CPROVER_assert( __CPROVER_r_ok( pucPtr, 4 ), "must be 4 bytes legal address to read" ); |
| 67 | + return ret; |
64 | 68 | } |
65 | 69 |
|
66 | 70 | uint16_t usChar2u16( const uint8_t * pucPtr ) |
67 | 71 | { |
| 72 | + uint16_t ret; |
68 | 73 | __CPROVER_assert( __CPROVER_r_ok( pucPtr, 2 ), "must be 2 bytes legal address to read" ); |
| 74 | + return ret; |
69 | 75 | } |
70 | 76 |
|
71 | 77 | const char * FreeRTOS_inet_ntop( BaseType_t xAddressFamily, |
@@ -131,11 +137,14 @@ NetworkBufferDescriptor_t * pxDuplicateNetworkBufferWithDescriptor( const Networ |
131 | 137 | { |
132 | 138 | NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); |
133 | 139 |
|
134 | | - if( ensure_memory_is_valid( pxNetworkBuffer, xNewLength ) ) |
| 140 | + if( pxNetworkBuffer != NULL ) |
135 | 141 | { |
136 | 142 | pxNetworkBuffer->pucEthernetBuffer = safeMalloc( xNewLength ); |
137 | | - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer ); |
| 143 | + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); |
138 | 144 | pxNetworkBuffer->xDataLength = xNewLength; |
| 145 | + |
| 146 | + pxNetworkBuffer->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); |
| 147 | + __CPROVER_assume( pxNetworkBuffer->pxEndPoint != NULL ); |
139 | 148 | } |
140 | 149 |
|
141 | 150 | return pxNetworkBuffer; |
@@ -176,23 +185,31 @@ void harness() |
176 | 185 | uint8_t * pPayloadBuffer; |
177 | 186 | size_t uxPayloadBufferLength; |
178 | 187 |
|
179 | | - __CPROVER_assert( TEST_PACKET_SIZE < CBMC_MAX_OBJECT_SIZE, |
180 | | - "TEST_PACKET_SIZE < CBMC_MAX_OBJECT_SIZE" ); |
181 | | - |
182 | | - __CPROVER_assume( uxBufferLength < CBMC_MAX_OBJECT_SIZE ); |
183 | | - __CPROVER_assume( uxBufferLength <= TEST_PACKET_SIZE ); |
| 188 | + __CPROVER_assume( uxBufferLength <= ipconfigNETWORK_MTU ); |
| 189 | + __CPROVER_assume( pxNetworkEndPoint_Temp != NULL ); |
184 | 190 |
|
185 | 191 | lIsIPv6Packet = IS_TESTING_IPV6; |
186 | 192 |
|
187 | | - xNetworkBuffer.pucEthernetBuffer = safeMalloc( uxBufferLength ); |
188 | | - xNetworkBuffer.xDataLength = uxBufferLength; |
189 | | - xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; |
| 193 | + if( xBufferAllocFixedSize != pdFALSE ) |
| 194 | + { |
| 195 | + /* When xBufferAllocFixedSize is true, buffers in all network descriptors |
| 196 | + * is big enough to allow all Ethernet packet. */ |
| 197 | + xNetworkBuffer.pucEthernetBuffer = safeMalloc( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ); |
| 198 | + xNetworkBuffer.xDataLength = uxBufferLength; |
| 199 | + xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; |
| 200 | + } |
| 201 | + else |
| 202 | + { |
| 203 | + xNetworkBuffer.pucEthernetBuffer = safeMalloc( uxBufferLength ); |
| 204 | + xNetworkBuffer.xDataLength = uxBufferLength; |
| 205 | + xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; |
| 206 | + } |
190 | 207 |
|
191 | 208 | __CPROVER_assume( xNetworkBuffer.pucEthernetBuffer != NULL ); |
192 | 209 |
|
193 | 210 | if( lIsIPv6Packet ) |
194 | 211 | { |
195 | | - __CPROVER_assume( uxBufferLength >= ulIpv6UdpOffset ); /* 62 is total size of IPv4 UDP header, including ethernet, IPv6, UDP headers. */ |
| 212 | + __CPROVER_assume( uxBufferLength >= ulIpv6UdpOffset ); /* 62 is total size of IPv6 UDP header, including ethernet, IPv6, UDP headers. */ |
196 | 213 | pPayloadBuffer = xNetworkBuffer.pucEthernetBuffer + ulIpv6UdpOffset; |
197 | 214 | uxPayloadBufferLength = uxBufferLength - ulIpv6UdpOffset; |
198 | 215 | } |
|
0 commit comments