Safe API Framework
0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
rte_checksum.h
Go to the documentation of this file.
1
68
69
#ifndef RTE_CHECKSUM_H
70
#define RTE_CHECKSUM_H
71
72
#include <stdint.h>
73
#include <stddef.h>
74
#include "
rte/utils/status/rte_status.h
"
75
#include "
rte/utils/types/rte_types.h
"
76
77
#ifdef __cplusplus
78
extern
"C"
{
79
#endif
80
81
/* ============================================================================
82
* Types & Constants
83
* ========================================================================== */
84
90
typedef
enum
{
95
RTE_CRC64_ERTMS
,
96
101
RTE_CRC64_ISO
,
102
107
RTE_CRC64_XZ
108
}
rte_crc64_polynomial_t
;
109
113
typedef
uint64_t
rte_crc64_t
;
114
118
typedef
struct
{
119
rte_crc64_t
computed
;
120
rte_crc64_t
expected
;
121
uint8_t
match
;
122
}
rte_checksum_result_t
;
123
124
/* ============================================================================
125
* API: CRC-64 Computation
126
* ========================================================================== */
127
150
rte_status_t
rte_checksum_crc64_init
(
rte_crc64_polynomial_t
polynomial);
151
180
rte_crc64_t
rte_checksum_crc64
(
const
uint8_t *data,
size_t
size);
181
220
rte_status_t
rte_checksum_crc64_verify
(
const
uint8_t *data,
221
size_t
size,
222
rte_crc64_t
expected_crc,
223
rte_checksum_result_t
*result_out);
224
233
rte_crc64_polynomial_t
rte_checksum_crc64_get_polynomial
(
void
);
234
235
/* ============================================================================
236
* API: Vital Channel Data Wrapper
237
* ========================================================================== */
238
250
typedef
struct
{
251
uint32_t
sequence_number
;
252
uint32_t
sender_id
;
253
uint32_t
timestamp_ms
;
254
uint8_t
payload_size
;
255
uint8_t
padding
;
256
uint16_t
reserved
;
257
258
uint8_t
payload
[248];
259
rte_crc64_t
crc64
;
260
}
rte_vital_message_t
;
261
299
rte_status_t
rte_checksum_vital_message_create
(
300
rte_vital_message_t
*msg_out,
301
uint32_t sender_id,
302
uint32_t sequence,
303
const
uint8_t *payload,
304
size_t
payload_size
305
);
306
356
rte_status_t
rte_checksum_vital_message_verify
(
357
const
rte_vital_message_t
*msg,
358
uint32_t expected_sequence,
359
uint8_t *payload_out,
360
size_t
payload_max_size,
361
uint8_t *payload_size_out
362
);
363
364
/* ============================================================================
365
* API: Statistics & Diagnostics
366
* ========================================================================== */
367
371
typedef
struct
{
372
uint32_t
total_checksums
;
373
uint32_t
verification_passes
;
374
uint32_t
verification_failures
;
375
uint32_t
sequence_errors
;
376
uint32_t
payload_oversize
;
377
}
rte_checksum_stats_t
;
378
389
rte_status_t
rte_checksum_get_stats
(
rte_checksum_stats_t
*stats_out);
390
398
rte_status_t
rte_checksum_reset_stats
(
void
);
399
400
#ifdef __cplusplus
401
}
402
#endif
403
407
408
#endif
/* RTE_CHECKSUM_H */
rte_crc64_t
uint64_t rte_crc64_t
CRC-64 checksum value (64-bit).
Definition
rte_checksum.h:113
rte_checksum_crc64_get_polynomial
rte_crc64_polynomial_t rte_checksum_crc64_get_polynomial(void)
Get current CRC-64 polynomial in use.
Definition
rte_checksum.c:514
rte_checksum_reset_stats
rte_status_t rte_checksum_reset_stats(void)
Reset checksum statistics.
Definition
rte_checksum.c:657
rte_checksum_vital_message_verify
rte_status_t rte_checksum_vital_message_verify(const rte_vital_message_t *msg, uint32_t expected_sequence, uint8_t *payload_out, size_t payload_max_size, uint8_t *payload_size_out)
Verify vital channel message and extract payload.
Definition
rte_checksum.c:581
rte_checksum_vital_message_create
rte_status_t rte_checksum_vital_message_create(rte_vital_message_t *msg_out, uint32_t sender_id, uint32_t sequence, const uint8_t *payload, size_t payload_size)
Create vital channel message with CRC.
Definition
rte_checksum.c:523
rte_checksum_crc64_init
rte_status_t rte_checksum_crc64_init(rte_crc64_polynomial_t polynomial)
Initialize CRC-64 lookup tables for chosen polynomial.
Definition
rte_checksum.c:385
rte_checksum_crc64
rte_crc64_t rte_checksum_crc64(const uint8_t *data, size_t size)
Compute CRC-64 for data buffer.
Definition
rte_checksum.c:417
rte_crc64_polynomial_t
rte_crc64_polynomial_t
CRC-64 polynomial selection.
Definition
rte_checksum.h:90
rte_checksum_crc64_verify
rte_status_t rte_checksum_crc64_verify(const uint8_t *data, size_t size, rte_crc64_t expected_crc, rte_checksum_result_t *result_out)
Verify CRC-64 of data against stored value.
Definition
rte_checksum.c:470
rte_checksum_get_stats
rte_status_t rte_checksum_get_stats(rte_checksum_stats_t *stats_out)
Get checksum statistics.
Definition
rte_checksum.c:647
RTE_CRC64_ISO
@ RTE_CRC64_ISO
Definition
rte_checksum.h:101
RTE_CRC64_XZ
@ RTE_CRC64_XZ
Definition
rte_checksum.h:107
RTE_CRC64_ERTMS
@ RTE_CRC64_ERTMS
Definition
rte_checksum.h:95
rte_status_t
rte_status_t
Common result/status codes.
Definition
rte_status.h:27
rte_status.h
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
rte_types.h
Common fixed-width types and the caller-owned-storage handle pattern used by every OAL service (see A...
rte_checksum_result_t
Checksum result for validation.
Definition
rte_checksum.h:118
rte_checksum_result_t::match
uint8_t match
Definition
rte_checksum.h:121
rte_checksum_result_t::expected
rte_crc64_t expected
Definition
rte_checksum.h:120
rte_checksum_result_t::computed
rte_crc64_t computed
Definition
rte_checksum.h:119
rte_checksum_stats_t
Checksum statistics for monitoring.
Definition
rte_checksum.h:371
rte_checksum_stats_t::verification_passes
uint32_t verification_passes
Definition
rte_checksum.h:373
rte_checksum_stats_t::verification_failures
uint32_t verification_failures
Definition
rte_checksum.h:374
rte_checksum_stats_t::sequence_errors
uint32_t sequence_errors
Definition
rte_checksum.h:375
rte_checksum_stats_t::total_checksums
uint32_t total_checksums
Definition
rte_checksum.h:372
rte_checksum_stats_t::payload_oversize
uint32_t payload_oversize
Definition
rte_checksum.h:376
rte_vital_message_t
Vital channel message with integrated CRC-64.
Definition
rte_checksum.h:250
rte_vital_message_t::reserved
uint16_t reserved
Definition
rte_checksum.h:256
rte_vital_message_t::sequence_number
uint32_t sequence_number
Definition
rte_checksum.h:251
rte_vital_message_t::padding
uint8_t padding
Definition
rte_checksum.h:255
rte_vital_message_t::sender_id
uint32_t sender_id
Definition
rte_checksum.h:252
rte_vital_message_t::payload_size
uint8_t payload_size
Definition
rte_checksum.h:254
rte_vital_message_t::payload
uint8_t payload[248]
Definition
rte_checksum.h:258
rte_vital_message_t::timestamp_ms
uint32_t timestamp_ms
Definition
rte_checksum.h:253
rte_vital_message_t::crc64
rte_crc64_t crc64
Definition
rte_checksum.h:259
include
rte
redundancy
checksum
rte_checksum.h
Generated by
1.18.0