Envelope transport

The on-wire form of every message crossing the plugin↔gateway boundary, and the iceoryx2 service shape that carries it. This cluster :satisfies: Connector framework (FEAT_0030).

Feature: Envelope transport FEAT_0031
status: open
satisfies: FEAT_0030
is refined by: QG_0003

The on-wire form of every message crossing the plugin↔gateway boundary and the iceoryx2 service shape that carries it. Defines header fields, per-channel sizing, and the zero-copy publish path.

Requirement: ConnectorEnvelope is a POD type REQ_0200
status: open
satisfies: FEAT_0031
is refined by: IMPL_0020
is implemented by: BB_0002, BB_0010

The framework shall define ConnectorEnvelope as a #[repr(C)] plain-old-data type that derives ZeroCopySend (iceoryx2) and contains a fixed header (sequence number, timestamp, payload length, correlation id, reserved word) followed by an inline payload buffer.

Requirement: Per-channel max payload size REQ_0201
status: approved
satisfies: FEAT_0031
is refined by: IMPL_0010, ADR_0004
is implemented by: BB_0010
is verified by: TEST_0103, TEST_0124, TEST_0125

The framework shall allow each channel to declare its maximum payload size at service-creation time, carried in ChannelDescriptor. A channel’s envelope payload buffer shall be sized to that maximum; no universal payload ceiling is imposed across the framework.

Requirement: Sequence number monotonically increasing REQ_0202
status: implemented
satisfies: FEAT_0031
is refined by: IMPL_0020
is implemented by: BB_0010
is verified by: TEST_0121
links outgoing: BB_0010, TEST_0121

For each (publisher, channel) pair, the framework shall populate ConnectorEnvelope::sequence_number with a strictly monotonically increasing u64 so receivers can detect missed envelopes.

Requirement: Timestamp recorded at send REQ_0203
status: implemented
satisfies: FEAT_0031
is refined by: IMPL_0020
is implemented by: BB_0010
is verified by: TEST_0122
links outgoing: BB_0010, TEST_0122

The framework shall populate ConnectorEnvelope::timestamp_ns with nanoseconds since the UNIX epoch at the moment the envelope is loaned for send.

Requirement: Correlation id is a passive carrier REQ_0204
status: implemented
satisfies: FEAT_0031
is refined by: IMPL_0020
is implemented by: BB_0010
is verified by: TEST_0123
links outgoing: BB_0010, TEST_0123

The framework shall carry the 32-byte correlation_id field end-to-end from sender to receiver without inspecting it. Application layers may use this field for request/response matching; the framework itself shall not.

Requirement: Zero-copy publish via iceoryx2 loan REQ_0205
status: implemented
satisfies: FEAT_0031
is refined by: IMPL_0020, ARCH_0010, ARCH_0011
is implemented by: BB_0002
is verified by: TEST_0120
links outgoing: BB_0002, TEST_0120

The framework shall publish envelopes via Publisher::loan such that the codec writes the payload directly into shared memory. No envelope shall be copied between an intermediate user-side buffer and shared memory on the send path.

Requirement: One iceoryx2 service per channel direction REQ_0206
status: implemented
satisfies: FEAT_0031
is refined by: IMPL_0020
is implemented by: BB_0002, BB_0011
is verified by: TEST_0126
links outgoing: BB_0011, TEST_0126

For each logical channel direction (outbound app→gateway, inbound gateway→app), the framework shall create a separate iceoryx2 publish-subscribe service whose name is derived deterministically from ChannelDescriptor::name.