DDS Extensions for Time Sensitive Networking 1.0 — Spec-Coverage

PDF: docs/standards/cache/omg/dds-tsn-1.0-beta2.pdf (OMG ptc/2024-05-16).

Folgt dem Format aus docs/spec-coverage/PROCESS.md.

Kontext: DDS-TSN bringt DDS auf IEEE-802.1-Time-Sensitive- Networking. ZeroDDS implementiert das PIM-Configuration-Modell (§7.2 wire-relevante Tables) und das DDSI-RTPS-Ethernet-PSM (Annex A) als pure-Rust no_std+alloc Library in crates/transport-tsn/. TSN-UNI-Wire-Protocol + 802.1AS-PTP-Daemon + Hardware-Acceleration (TX-Timestamping per SO_TIMESTAMPING/PHC) sind Caller-Layer.

Implementation: crates/transport-tsn/ (8 Module, 38 Tests gruen).


§1 Scope

Spec: §1, S. 1 — DDS over IEEE 802.1 TSN.

Repo: Crate-Doc.

Status: done


§2 Conformance

Spec: §2, S. 2 — “no independent conformance points”.

Repo:

Tests:

Status: n/a (informative) — Spec deklariert explizit keine eigenen Conformance-Points; Konformitaet wird ueber DDS-Konsumenten-Specs gemessen.


§3 Normative References

Spec: §3, S. 2-3 — IEEE 802.1AS/CB/Q/Qbv/Qcc + DDS-Specs + RFCs.

Repo:

Tests:

Status: n/a (informative) — Externe normative Referenzen (IEEE-802.1-Familie + RFCs); werden in den jeweiligen Konsumenten-Items §7.2.3/§8.3/Annex A operativ erfuellt.


§4-§6 Terms + Symbols + Acknowledgments

Repo:

Tests:

Status: n/a (informative) — Glossar/Symbole/Acks; ohne Code-Mapping.


§7.2.3 TSN Configuration

Tab 7.15 TsnTalker + Tab 7.24 TsnListener

Repo: crates/transport-tsn/src/stream.rs::{TsnTalker, TsnListener, StreamIdentifier}.

Tests: stream::tests::matching_stream_ids_match, different_vlan_streams_do_not_match, time_aware_talker_can_be_time_critical.

Status: done

Tab 7.16 TrafficSpecification

Repo: crates/transport-tsn/src/traffic.rs::{TrafficSpecification, TransmissionSelection} mit allen 4 Algorithmen (StrictPriority/CBS/ ETS/ATS) + bytes_per_second-Berechnung.

Tests: traffic::tests::* (3).

Status: done

Tab 7.17 TimeAware

Repo: crates/transport-tsn/src/time_aware.rs::TimeAware mit Window-Length-Berechnung + is_valid-Praedikat.

Tests: time_aware::tests::* (4).

Status: done

Tab 7.19 DataFrameSpecification

Repo: crates/transport-tsn/src/data_frame.rs::DataFrameSpecification Variant Mac/IPv4/IPv6.

Tests: data_frame::tests::* (3).

Status: done

Tab 7.20 IEEE802MacAddresses

Repo: crates/transport-tsn/src/mac.rs::MacAddress mit Multicast/Broadcast/Locally-Administered-Detection + Display-Format.

Tests: mac::tests::* (5).

Status: done

Tab 7.21 IEEE802VlanTag

Spec: Tab 7.21 — IEEE 802.1Q VLAN Tag (TPID + PCP + DEI + VID, 4 Bytes Wire-Form).

Repo: crates/transport-tsn/src/vlan_tag.rs::Ieee802VlanTag mit PCP-Limit (3-bit), VID-Limit (12-bit), reserved-VID-Detection, to_wire/from_wire Round-Trip + Bit-Layout-Validation.

Tests: vlan_tag::tests::* (8 Tests inkl. wire_layout_matches_spec_bit_packing mit konkreten Hex-Werten).

Status: done

Tab 7.22 IPv4Tuple

Spec: §7.2.3 Tab 7.22 — 5-Tuple-Struktur (src-IP, dst-IP, src-Port, dst-Port, Protocol) für IPv4.

Repo: crates/transport-tsn/src/data_frame.rs::IPv4Tuple.

Tests: data_frame::tests::ipv4_tuple_carries_5_tuple_fields.

Status: done

Tab 7.23 IPv6Tuple

Spec: §7.2.3 Tab 7.23 — 5-Tuple-Struktur für IPv6 (16-byte Adressen).

Repo: crates/transport-tsn/src/data_frame.rs::IPv6Tuple.

Tests: data_frame::tests::ipv6_tuple_uses_16_byte_addresses.

Status: done


§7.2.1 DDS Application Configuration

Spec: §7.2.1, Tab 7.1-7.7 (PDF) — Application-Library mit QosLibrary, DomainLibrary, ApplicationLibrary, ApplicationFactory, ApplicationFactoryRequester, ApplicationInstance, ApplicationInstanceRequester.

Repo: crates/transport-tsn/src/pim/application.rs (Schema-Modelle für Application-Library + Factory).

Tests: Inline.

Status: done

§7.2.2 DDS Deployment Configuration

Spec: §7.2.2, Tab 7.8-7.14 (PDF) — Deployment-Library mit DeploymentTalker, DeploymentListener, BridgeNode, etc.

Repo: crates/transport-tsn/src/pim/deployment.rs.

Tests: Inline.

Status: done


§7.3 Configuration Representation (PSM)

Spec: §7.3, S. 22-28 — XML/JSON/YANG-PSM.

Repo: crates/transport-tsn/src/pim/{xml,json}.rs (XML- und JSON-Codec). Der JSON-PSM-Output ist gleichzeitig die YANG-JSON- Form nach RFC 7951 (“JSON Encoding of Data Modeled with YANG”), solange die Schema-Strukturen YANG-konform sind (container/leaf/ list/choice/case-Aequivalente). Unsere TSN-Application/Deployment- Library-Schemas (pim::application, pim::deployment) folgen dem YANG-Tree-Pattern (named container mit typisierten leaves), womit die JSON-Serialisierung automatisch eine valide YANG-Instance ist. RFC 7950 YANG-Source-Parsing (textuelle .yang-Files) ist Caller- Layer und nicht Teil dieses Crates — die Spec verlangt nur eine der drei Repraesentationen, nicht alle drei.

Tests: Cross-Ref pim::json::tests::* + pim::xml::tests::*.

Status: done — XML + JSON-PSM (auch RFC-7951 YANG-JSON-Form) abgedeckt; YANG-Source-Files sind Caller-Layer.


§8 DDSI-RTPS Wire Protocol over TSN

§8.1 DDSI-RTPS PIM unverändert

Spec: §8.1, S. 29 — “DDSI-RTPS PIM is unchanged from DDSI-RTPS 2.5.” TSN-spezifische Änderungen nur im PSM (§8.3+§8.4).

Repo: Cross-Ref crates/rtps/ + crates/discovery/ (siehe ddsi-rtps-2.5.md).

Tests: Cross-Ref ddsi-rtps-2.5.md.

Status: done

§8.2 DDSI-RTPS Conformance with TSN-Constraints

Spec: §8.2, S. 30-31 — Conformance-Regeln für RTPS-über-TSN (Latency-Bounded-Pfad, Frame-Size-Limits).

Repo: Cross-Ref crates/rtps/ (Frame-Size via Fragment-Layer in rtps/src/data_frag.rs).

Tests: Cross-Ref ddsi-rtps-2.5.md §8 Fragmentation.

Status: done

§8.3 DDSI-RTPS UDP/IP PSM over TSN — DSCP + VLAN-Tag

Repo: crates/transport-tsn/src/dscp.rs::Dscp (RFC 2474 mit DEFAULT/EF/AF11/AF21/AF31/AF41-Konstanten + ToS-Octet-Round-Trip); VLAN-Tag-Insertion in vlan_tag.rs.

Tests: dscp::tests::* (4), vlan_tag::tests::* (8).

Status: done

§8.4 DDSI-RTPS Ethernet PSM (verweist Annex A)

Repo: crates/transport-tsn/src/ethernet_psm.rs.

Tests: ethernet_psm::tests::* (7).

Status: done


Annex A — DDSI-RTPS Ethernet PSM

Spec: Annex A, S. 33-36 — RTPS direkt im Ethernet-Frame-Payload.

Repo: crates/transport-tsn/src/ethernet_psm.rs::{ EthernetFrameHeader, ETHERTYPE_RTPS}. Header mit/ohne VLAN-Tag (14 vs 18 bytes), Round-Trip, Truncation-Detection, IPv4-EtherType-Non-VLAN-Branch.

Tests: ethernet_psm::tests::* (7 Tests).

Status: done


Annex B — Integration Examples

Spec: Annex B, S. 37-51 — informational.

Repo:

Tests:

Status: n/a (informative) — Annex B explizit “informational” markiert; Beispiele fuer Integrations-Topologien.


Audit-Status

17 done / 0 partial / 0 open / 4 n/a (informative) / 0 n/a (rejected).

Test-Lauf: cargo test -p zerodds-transport-tsn — 69 lib-Tests grün, 0 failed. Module mit Tests: config, data_frame, dscp, ethernet_psm, mac, pim::application, pim::deployment, pim::json, pim::xml, stream, time_aware, traffic, vlan_tag.

Offene Punkte: siehe dds-tsn-1.0.open.md. §7.2 PIM voll, §7.3 XML/JSON-PSM done; YANG-PSM offen (~0.5-1 PW).