mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-10-15 01:07:47 -04:00
* Add Proof * Update * Update the proof * Update the proof * Clean-up * Clean-up v2 * Update freertos_api.c * update stub
88 lines
3 KiB
C
88 lines
3 KiB
C
/* Standard includes. */
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
|
|
/* FreeRTOS includes. */
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
#include "queue.h"
|
|
#include "list.h"
|
|
#include "semphr.h"
|
|
|
|
/* FreeRTOS+TCP includes. */
|
|
#include "FreeRTOS_IP.h"
|
|
#include "FreeRTOS_ARP.h"
|
|
#include "FreeRTOS_UDP_IP.h"
|
|
#include "FreeRTOS_IP_Private.h"
|
|
|
|
/* Include the stubs for APIs. */
|
|
#include "memory_assignments.c"
|
|
#include "freertos_api.c"
|
|
|
|
/* We do not need to calculate the actual checksum for the proof to be complete.
|
|
* Neither does the checksum matter for completeness. */
|
|
uint16_t usGenerateChecksum( uint16_t usSum, const uint8_t * pucNextData, size_t uxByteCount )
|
|
{
|
|
__CPROVER_assert( pucNextData != NULL, "Next data in GenerateChecksum cannot be NULL" );
|
|
|
|
uint16_t usChecksum;
|
|
|
|
/* Return any random value of checksum since it does not matter for CBMC checks. */
|
|
return usChecksum;
|
|
}
|
|
|
|
|
|
/* We do not need to calculate the actual checksum for the proof to be complete.
|
|
* Neither does the checksum matter for completeness. */
|
|
uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, size_t uxBufferLength, BaseType_t xOutgoingPacket )
|
|
{
|
|
__CPROVER_assert( pucEthernetBuffer != NULL, "The Ethernet buffer cannot be NULL while generating Protocol Checksum" );
|
|
uint16_t usProtocolChecksum;
|
|
|
|
/* Return random value of checksum since it does not matter for CBMC checks. */
|
|
return usProtocolChecksum;
|
|
}
|
|
|
|
|
|
/* This function has been tested separately. Therefore, we assume that the implementation is correct. */
|
|
void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress )
|
|
{
|
|
/* pxMACAddress can be NULL or Non-NULL, no need to assert. */
|
|
}
|
|
|
|
|
|
/* This function has been tested separately. Therefore, we assume that the implementation is correct. */
|
|
void vARPGenerateRequestPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )
|
|
{
|
|
__CPROVER_assert( pxNetworkBuffer != NULL, "The network buffer cannot be NULL." );
|
|
}
|
|
|
|
|
|
/* This function has been tested separately. Therefore, we assume that the implementation is correct. */
|
|
eARPLookupResult_t eARPGetCacheEntry( uint32_t *pulIPAddress, MACAddress_t * const pxMACAddress )
|
|
{
|
|
__CPROVER_assert( pulIPAddress != NULL, "pulIPAddress cannot be NULL" );
|
|
__CPROVER_assert( pxMACAddress != NULL, "pxMACAddress cannot be NULL" );
|
|
|
|
eARPLookupResult_t eResult;
|
|
return eResult;
|
|
}
|
|
|
|
|
|
void harness()
|
|
{
|
|
size_t xRequestedSizeBytes;
|
|
|
|
/* Assume that the size of packet must be greater than that of UDP-Packet and less than
|
|
* that of the Ethernet Frame Size. */
|
|
__CPROVER_assume( xRequestedSizeBytes >= sizeof(UDPPacket_t) && xRequestedSizeBytes <= ipTOTAL_ETHERNET_FRAME_SIZE );
|
|
|
|
/* Second parameter is not used from CBMC's perspective. */
|
|
NetworkBufferDescriptor_t * const pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( xRequestedSizeBytes, 0 );
|
|
|
|
/* The buffer cannot be NULL for the function call. */
|
|
__CPROVER_assume(pxNetworkBuffer != NULL);
|
|
__CPROVER_assume(pxNetworkBuffer->pucEthernetBuffer != NULL);
|
|
|
|
vProcessGeneratedUDPPacket( pxNetworkBuffer );
|
|
}
|