@@ -90,18 +90,12 @@ void harness()
9090 NetworkBufferDescriptor_t * pxNetworkBuffer ;
9191 IPPacket_t * pxIPPacket ;
9292
93- /* IPv4/IPv6 header size are different. To make sure buffer size is enough,
94- * determine the test case is for IPv4 or IPv6 at the beginning. */
95- xIsIPv6 = nondet_bool ();
93+ const IPPacket_t * pxIPPacket ;
94+ const IPHeader_t * pxIPHeader ;
9695
97- if ( xIsIPv6 )
98- {
99- __CPROVER_assume ( ( xBufferLength >= sizeof ( IPPacket_IPv6_t ) ) && ( xBufferLength < ipconfigNETWORK_MTU ) );
100- }
101- else
102- {
103- __CPROVER_assume ( ( xBufferLength >= sizeof ( IPPacket_t ) ) && ( xBufferLength < ipconfigNETWORK_MTU ) );
104- }
96+ /* Make sure buffer size is enough, xCheckRequiresARPResolution is only called for
97+ IPv4 packets hence the minimum size should be sizeof( IPPacket_t ) */
98+ __CPROVER_assume ( ( xBufferLength >= sizeof ( IPPacket_t ) ) && ( xBufferLength < ipconfigNETWORK_MTU ) );
10599
106100 pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) safeMalloc ( sizeof ( NetworkBufferDescriptor_t ) );
107101 __CPROVER_assume ( pxNetworkBuffer != NULL );
@@ -111,6 +105,13 @@ void harness()
111105 pxNetworkBuffer -> pucEthernetBuffer = safeMalloc ( xBufferLength );
112106 __CPROVER_assume ( pxNetworkBuffer -> pucEthernetBuffer != NULL );
113107
108+ /* Its asserted in the code that xCheckRequiresARPResolution is only called on IPv4 frame types */
109+ /* See assertion: configASSERT( ( pxIPPacket->xEthernetHeader.usFrameType == ipIPv4_FRAME_TYPE ) || ( pxIPPacket->xEthernetHeader.usFrameType == ipARP_FRAME_TYPE ) );
110+ in xCheckRequiresARPResolution() */
111+ pxIPPacket = ( ( const IPPacket_t * ) pxNetworkBuffer -> pucEthernetBuffer );
112+ pxIPHeader = & ( pxIPPacket -> xIPHeader );
113+ __CPROVER_assume (pxIPPacket -> xEthernetHeader .usFrameType == ipIPv4_FRAME_TYPE );
114+
114115 pxNetworkBuffer -> pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc ( sizeof ( NetworkEndPoint_t ) );
115116 __CPROVER_assume ( pxNetworkBuffer -> pxEndPoint != NULL );
116117
0 commit comments