Safe API Framework 0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
rte_dual_frames.h File Reference

Layer-2 (DualChannel-owned) frame kind/header definitions for ADR-020 - shared between rte_dual_channel.h and rte_dual_negotiator.h so both can refer to the same wire structs without either depending on the other (rte_dual_channel_t has no knowledge of rte_dual_negotiator_t at all; the negotiator is the one-directional dependent - see ADR-020 section 3 and this module's own README note on ownership direction). More...

#include <stdint.h>
#include "rte/redundancy/dual/rte_dual_types.h"
Include dependency graph for rte_dual_frames.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  rte_dual_frame_header_t
 Common 4-byte header prefixing every Layer-2 frame; kept a fixed 4 bytes (not just 1) so the fields that follow in rte_dual_ack_frame_t/rte_dual_state_frame_t stay naturally aligned. More...
struct  rte_dual_ack_frame_t
 RTE_DUAL_FRAME_KIND_ACK payload. More...
struct  rte_dual_state_frame_t
 RTE_DUAL_FRAME_KIND_STATE payload - rte_dual_negotiator_t's own periodic beacon. More...
struct  rte_dual_heartbeat_frame_t
 RTE_DUAL_FRAME_KIND_HEARTBEAT payload - connection maintenance heartbeat. More...

Enumerations

enum  rte_dual_frame_kind_t { RTE_DUAL_FRAME_KIND_DATA = 0 , RTE_DUAL_FRAME_KIND_ACK = 1 , RTE_DUAL_FRAME_KIND_STATE = 2 , RTE_DUAL_FRAME_KIND_HEARTBEAT = 3 }
 Which kind of Layer-2 frame a given Layer-1 payload holds. Stored as the first byte of every rte_dual_channel_t frame so DATA, ACK, and STATE traffic sharing the same redundant links can never be misinterpreted as each other. More...

Detailed Description

Layer-2 (DualChannel-owned) frame kind/header definitions for ADR-020 - shared between rte_dual_channel.h and rte_dual_negotiator.h so both can refer to the same wire structs without either depending on the other (rte_dual_channel_t has no knowledge of rte_dual_negotiator_t at all; the negotiator is the one-directional dependent - see ADR-020 section 3 and this module's own README note on ownership direction).

These structs travel inside a Layer-1 rte_vital_message_t's own 248-byte payload (rte_dual_msgchannel.h) - i.e. every field here is additional, application/protocol-meaning defense layered on top of Layer 1's transport-integrity defense (sequence/sender/timestamp/CRC), not a replacement for it. See ADR-020 section 1.

Definition in file rte_dual_frames.h.