Expand description
HeaderExtension Submessage (DDSI-RTPS 2.5 §8.3.3.2 / §9.4.5.2 / §9.4.2.15).
Die HeaderExtension (HE) ist eine in DDSI-RTPS 2.5 neu eingefuehrte Submessage-Klasse, die einer RTPS-Nachricht optionale Header- Felder anhaengt:
messageLength: u32 — Gesamtlaenge der RTPS-Message ab dem ersten Submessage-Header. Erlaubt Reader-Pre-Allocation und ist Pflicht-Hint fuer non-UDP-Transporte ohne implizite Datagram- Grenze.rtpsSendTimestamp: 8 Byte (Time_t) — Sender-Wallclock zum Zeitpunkt dessend()-Calls. SpeistclockSkewDetectedim Receiver-State (§8.3.7.4).uextension4: 4 Byte vendor-spezifisch.wextension8: 8 Byte vendor-spezifisch (Spec §8.3.3.2).messageChecksum: CRC-32C (4 Byte), CRC-64-XZ (8 Byte) oder MD5-128 (16 Byte) ueber den Bereich[RtpsHeader || alle Submessages || HE-Submessage-Header || HE-Body bis vor dem Checksum-Feld]. C-Flag (2 Bit) selektiert die Variante.parameters: ParameterList (TLV) — bisher nur fuer Vendor-Erweiterungen reserviert;must_understanddarin loest ganzheitlichen Message-Reject aus (§9.4.2.11.2).
§SubmessageId und Flag-Layout (Auftrags-Spezifikation)
SubmessageId = 0x80— HE-Marker. Ausserhalb der “klassischen” Submessage-Range (≤ 0x7F) und damit forwards-kompatibel zu Pre-2.5- Implementierungen, dieoctets_to_next_headerzum Skippen nutzen.
Flag-Bits im Submessage-Header:
| Bit | Symbol | Bedeutung |
|---|---|---|
| 0 | E | Endianness (1 = LE) |
| 1 | L | messageLength vorhanden |
| 2 | W | rtpsSendTimestamp vorhanden |
| 3 | U | uextension4 vorhanden |
| 4 | V | wextension8 vorhanden |
| 5+6 | C | Checksum-Variante (0=keine, 1=CRC-32C, 2=CRC-64, 3=MD5) |
| 7 | P | parameters (ParameterList) vorhanden |
§Receiver-State-Update (§8.3.7.4)
Bei Empfang einer HE aktualisiert der Receiver:
Receiver.messageLengthaus dem L-Feld (falls vorhanden) → Cross-Check gegen tatsaechliche Datagram-Restlaenge. Mismatch =WireError::ValueOutOfRange.Receiver.haveTimestamp = true,Receiver.timestamp = …aus dem T-Feld (falls vorhanden).Receiver.messageChecksum = …aus dem C-Feld (falls Variante ≠ 0).Receiver.parameters = …aus dem P-Feld (falls vorhanden).clockSkewDetectedHeuristik: wenn|Receiver.timestamp - now|> Grenzwert. (Diese Heuristik verbleibt im Receiver-Code; das Decode-Modul liefert nur die Eingabe.)
§DoS-Cap
MAX_HE_LENGTH = 16 KiB: HE-Body darf nicht laenger als 16 KiB
sein (deckt typische ParameterList + alle Optional-Felder).
Verhindert Amplification ueber boesartig grosse parameters.
Structs§
- HeTimestamp
- 8-Byte Sender-Timestamp (Time_t = i32 sec + u32 nanosec, Big-Endian im RTPS-Wire-Sinn — wird im HE-Body in Submessage-Endianness geschrieben).
- Header
Extension - Geparste HeaderExtension-Submessage.
Enums§
- Checksum
Kind - Spec §9.4.2.15.2 — Auswahl der
messageChecksum-Variante. Wert liegt in den C-Bits (5+6) des Flag-Bytes. - Checksum
Value - Inhalt der
messageChecksum(variabel nachChecksumKind).
Constants§
- HE_
FLAG_ C0 - Lower-Bit der C-Maske (Bit 5).
- HE_
FLAG_ C1 - Higher-Bit der C-Maske (Bit 6).
- HE_
FLAG_ C_ MASK - Maske der beiden Checksum-Selector-Bits (Bits 5+6).
- HE_
FLAG_ E - E-Flag (Bit 0) — Endianness des Bodies (1 = LE).
- HE_
FLAG_ L - L-Flag (Bit 1) —
messageLengthvorhanden. - HE_
FLAG_ P - P-Flag (Bit 7) —
parameters(ParameterList) vorhanden. - HE_
FLAG_ U - U-Flag (Bit 3) —
uextension4vorhanden. - HE_
FLAG_ V - V-Flag (Bit 4) —
wextension8vorhanden. - HE_
FLAG_ W - W-Flag (Bit 2) —
rtpsSendTimestampvorhanden. - MAX_
HE_ LENGTH - Hard-Cap fuer HE-Body-Laenge (DoS-Schutz).
- PID_
MUST_ UNDERSTAND - Bit-Maske: gesetzt -> Reader MUSS diesen PID verstehen, sonst die gesamte Message (HE-Carrier) verwerfen.
- PID_
VENDOR_ SPECIFIC - Bit-Maske: gesetzt -> Vendor-spezifischer PID (Spec-Reservation 2.5
Tab 9.13). Reader die diesen PID nicht kennen, duerfen ihn skippen
wenn das
must_understand-Bit nicht gesetzt ist. - SUBMESSAGE_
ID_ HEADER_ EXTENSION - SubmessageId fuer HeaderExtension (DDSI-RTPS 2.5).
Functions§
- pid_
must_ understand - Liefert
true, wenn der gegebene PID das Must-Understand-Bit gesetzt hat. - pid_
strip - Roher PID ohne Must-Understand- und Vendor-Bits.