Expand description
RTPS-Submessages — DDSI-RTPS 2.5 §8.3.7.
Implementierte Submessages:
- DATA (
DataSubmessage) — §8.3.7.2. - HEARTBEAT (
HeartbeatSubmessage) — §8.3.7.5. - ACKNACK (
AckNackSubmessage) — §8.3.7.1. - GAP (
GapSubmessage) — §8.3.7.4. - DATA_FRAG (
DataFragSubmessage) — §8.3.7.3. - HEARTBEAT_FRAG (
HeartbeatFragSubmessage) — §8.3.7.6. - NACK_FRAG (
NackFragSubmessage) — §8.3.7.10. - INFO_SRC (
InfoSourceSubmessage) — §8.3.7.9. - INFO_TS (
InfoTimestampSubmessage) — §8.3.7.5/§8.3.8.5. - INFO_REPLY (
InfoReplySubmessage) — §8.3.7.8.
ParameterList (Inline-QoS) lebt im separaten Modul
crate::parameter_list; SecuredPayload-Wrapping liegt im
zerodds-security-Crate (DDS-Security 1.2 §7.4).
§Endianness
Submessage-Bodies werden in der Endianness des Submessage-Headers
geschrieben (E-Flag). Die hier gegebenen to_bytes_*/from_bytes_*-
Funktionen nehmen explizite Endianness als Parameter — der Caller
muss sie konsistent zum Header waehlen.
Structs§
- AckNack
Submessage - ACKNACK-Submessage.
- Data
Frag Submessage - DATA_FRAG-Submessage. Traegt einen Ausschnitt (Fragmente) eines
Samples, dessen Gesamtgroesse in
sample_sizesteht. - Data
Submessage - DATA-Submessage. Phase 0 unterstuetzt nur D-Flag (Daten), kein Q (kein Inline-QoS), kein K, kein N.
- Fragment
Number Set - Bitset von
FragmentNumber-Werten abbitmap_base. Analog zuSequenceNumberSet, aber mitFragmentNumber(u32) als Base stattSequenceNumber. - GapGroup
Info - Optionaler Trailer einer GAP-Submessage mit GroupInfo (G-Flag, §8.3.8.4.2).
- GapSubmessage
- GAP-Submessage. Signalisiert Reader, dass Writer Sequence-Numbers
[gap_start, gap_list.bitmap_base)nie senden wird (alle vorgap_list.bitmap_baseLücken; die Bits ingap_listmarkieren individuelle weitere Lücken abbitmap_base). - Heartbeat
Frag Submessage - HEARTBEAT_FRAG-Submessage. Schickt der Writer, um den Reader zu
informieren, dass Fragmente bis
last_fragment_numfuerwriter_snverfuegbar sind. Writer sendet diese nicht; der Decoder wird dennoch bereitgehalten fuer Interop. - Heartbeat
Group Info - Optionaler GroupInfo-Trailer einer HEARTBEAT-Submessage (§8.3.8.6.2).
- Heartbeat
Submessage - HEARTBEAT-Submessage.
- Info
Reply Submessage - InfoReply-Submessage (§8.3.8.10.4). Setzt im ReceiverState
unicastReplyLocatorList(Pflicht) und ggf.multicastReplyLocatorList(wenn M-Flag). - Info
Source Submessage - InfoSource-Submessage (§8.3.8.9.4). Setzt im ReceiverState
sourceProtocolVersion,sourceVendorId,sourceGuidPrefixneu — alle nachfolgenden Submessages werden dieser Quelle zugeordnet (nicht dem Datagram-Header). - Info
Timestamp Submessage - InfoTimestamp-Submessage (§8.3.7.5 / §8.3.8.5). Setzt im
ReceiverState das
timestamp-Feld +haveTimestampFlag. Wird viaINFO_TIMESTAMP_FLAG_INVALIDATEinvertiert (I-Flag). - Nack
Frag Submessage - NACK_FRAG-Submessage. Reader meldet fehlende Fragmente fuer einen
bestimmten
writer_sn. Auf der Wire keine Flags ausser E. - Sequence
Number Set - Bitset von Sequence-Numbers ab
bitmap_base. Wird in HEARTBEAT/ ACKNACK/GAP genutzt, um Mengen verlorener oder bekannter Pakete zu signalisieren.
Constants§
- ACKNACK_
FLAG_ FINAL - ACKNACK Flag: F (Final).
- DATA_
FLAG_ DATA - DATA-Submessage Flag: D (data payload present).
- DATA_
FLAG_ INLINE_ QOS - DATA-Submessage Flag: Q (Inline-QoS present).
- DATA_
FLAG_ KEY - DATA-Submessage Flag: K (key payload present, Q-flag mutually exclusive with D).
- DATA_
FLAG_ NON_ STANDARD - DATA-Submessage Flag: N (non-standard payload).
- DATA_
FRAG_ FLAG_ HASH_ KEY - DATA_FRAG Flag: H (hash key).
- DATA_
FRAG_ FLAG_ INLINE_ QOS - DATA_FRAG Flag: Q (Inline-QoS present).
- DATA_
FRAG_ FLAG_ KEY - DATA_FRAG Flag: K (key flag — serialized_payload ist Key statt Data).
- DATA_
FRAG_ FLAG_ NON_ STANDARD - DATA_FRAG Flag: N (non-standard payload).
- GAP_
FLAG_ FILTERED_ COUNT - GAP Flag: K (FilteredCount present). Spec §8.3.8.4.2 fuehrt ein
optionales
Count_t filteredCount-Trailer-Feld ein, das dem Reader erlaubt, “via Content-Filter weggeworfen” von “echt removed” zu unterscheiden — Voraussetzung fuer korrekte Instance-State-Transitionen nach §8.7.4 (NOT_ALIVE_FILTERED vs. NOT_ALIVE_DISPOSED). - GAP_
FLAG_ GROUP_ INFO - GAP Flag: G (GroupInfo present —
gapStartGSN/gapEndGSNTrailer). Vendor-Extension fuer Group-Ordered-Access (§8.3.8.4.2). ZeroDDS-Encoder setzt das nicht; der Decoder akzeptiert es lesend. - HEARTBEAT_
FLAG_ FINAL - HEARTBEAT Flag: F (Final).
- HEARTBEAT_
FLAG_ GROUP_ INFO - HEARTBEAT Flag: G (GroupInfo present). Vendor-Extension fuer
Group-Ordered-Access (§8.3.8.6.2). Trailer enthaelt currentGSN,
firstGSN, lastGSN und einen
writerSet(Liste der GUID-Prefixe der Gruppen-Member). - HEARTBEAT_
FLAG_ LIVELINESS - HEARTBEAT Flag: L (Liveliness).
- INFO_
REPLY_ FLAG_ MULTICAST - InfoReply Flag: M (Multicast). Wenn gesetzt: zweite LocatorList (multicastReplyLocatorList) folgt im Body.
- INFO_
TIMESTAMP_ FLAG_ INVALIDATE - InfoTimestamp Flag: I (Invalidate). Wenn gesetzt: Body ist leer und
haveTimestampwird im ReceiverState auffalsegesetzt. - RTPS_
BITMAP_ MAX_ BITS - Hard-Cap fuer
numBitsinSequenceNumberSetundFragmentNumberSet. DDSI-RTPS gibt kein spezifisches Limit vor, aber sowohl Cyclone DDS (ddsi_radmin.c) als auch Fast-DDS (BitmapRange<..., 256>) capen auf 256. Wir folgen — verhindert DoS vianumBits=2^32-1-Bitmap-Alloc.