DDS Extensions for Time Sensitive Networking 1.0 — Spec Coverage
Source: docs/standards/cache/omg/dds-tsn-1.0-beta2.pdf (OMG DDS-TSN 1.0,
ptc/2024-05-16; not tracked in the repo for IP/copyright reasons). Public spec
page: https://www.omg.org/spec/DDS-TSN/.
Repo: crates/transport-tsn/ — PIM configuration model (§7.2) + XML/JSON/YANG PSM (§7.3) + DDSI-RTPS Ethernet PSM (Annex A), pure-Rust no_std+alloc. Live AF_PACKET transport under feature live. 93 lib tests green (default), 105 with --features live (+12 platform-neutral live_frame tests) + veth roundtrip integration test (CI, root).
Context: DDS-TSN brings DDS onto IEEE 802.1 Time-Sensitive Networking.
ZeroDDS implements the PIM configuration model (§7.2 wire-relevant
tables), all three configuration PSMs (§7.3: XML, JSON and the
normative YANG group transformation §7.3.3) and the DDSI-RTPS
Ethernet PSM (Annex A) as a pure-Rust no_std+alloc library — including
an optional live AF_PACKET transport (feature live, Linux). The TSN-UNI
wire protocol (transport of the YANG groups over the concrete UNI
protocol) + the 802.1AS PTP daemon + hardware acceleration (TX
timestamping via SO_TIMESTAMPING/PHC) are caller-layer.
§3 normative references (IEEE 802.1Qbu frame preemption / 802.1CB
FRER): the spec lists these in §3 as external IEEE references; §2
explicitly declares no independent conformance points for them. They
are therefore not standalone DDS-TSN mappings — 802.1CB surfaces as
num_seamless_trees (NetworkRequirements, Tab 7.18/7.25) and in the YANG
interface-capabilities (cb-*-list), 802.1Qbv as TimeAware
(Tab 7.17). No open gap.
§1 Scope
Spec: §1, p. 1 — DDS over IEEE 802.1 TSN.
Repo: crate doc.
Status: done
§2 Conformance
Spec: §2, p. 2 — “no independent conformance points”.
Repo: —
Tests: —
Status: n/a (informative) — the spec explicitly declares no own conformance points; conformance is measured via the DDS consumer specs.
§3 Normative references
Spec: §3, p. 2-3 — IEEE 802.1AS/CB/Q/Qbv/Qcc + DDS specs + RFCs.
Repo: —
Tests: —
Status: n/a (informative) — external normative references (the IEEE 802.1 family + RFCs); fulfilled operationally in the respective consumer items §7.2.3/§8.3/Annex A.
§4-§6 Terms + symbols + acknowledgments
Repo: —
Tests: —
Status: n/a (informative) — glossary/symbols/acks; without a code mapping.
§7.2.3 TSN configuration
Tab 7.15 TsnTalker + Tab 7.24 TsnListener + Figure 7.3 TsnConfiguration
Repo: crates/transport-tsn/src/stream.rs::{TsnTalker, TsnListener, StreamIdentifier, TsnConfiguration}.
TsnTalker covers all Tab 7.15 fields: name, stream_name,
traffic_specification, network_requirements (0..1),
data_frame_specification (0..1, Option), datawriter_ref,
time_aware (0..1). TsnListener (Tab 7.24): name, stream_name,
network_requirements (0..1), datareader_ref. TsnConfiguration
(Figure 7.3) aggregates tsn_talker/tsn_listener (0..* each).
Tests: stream::tests::matching_stream_ids_match,
different_vlan_streams_do_not_match,
time_aware_talker_can_be_time_critical,
talker_carries_optional_network_requirements_per_tab_7_15,
listener_carries_optional_network_requirements_per_tab_7_24,
tsn_configuration_aggregates_talkers_and_listeners.
Status: done
Tab 7.18/7.25 NetworkRequirements
Spec: §7.2.3.1.2 Tab 7.18 (Talker) + §7.2.3.2.1 Tab 7.25 (Listener)
— num_seamless_trees (UInt8, IEEE 802.1CB FRER redundancy) +
max_latency (Talker UInt32, Listener String8; both nanoseconds,
unified to u32).
Repo: crates/transport-tsn/src/network_requirements.rs::NetworkRequirements.
Tests: network_requirements::tests::* (4).
Status: done
Tab 7.16 TrafficSpecification
Repo: crates/transport-tsn/src/traffic.rs::{TrafficSpecification, TransmissionSelection} with all 4 algorithms (StrictPriority/CBS/ETS/ATS)
+ a bytes_per_second computation.
Tests: traffic::tests::* (3).
Status: done
Tab 7.17 TimeAware
Repo: crates/transport-tsn/src/time_aware.rs::TimeAware with a
window-length computation + an is_valid predicate.
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 with
multicast/broadcast/locally-administered detection + a display format.
Tests: mac::tests::* (5).
Status: done
Tab 7.21 IEEE802VlanTag
Spec: Tab 7.21 — the IEEE 802.1Q VLAN tag (TPID + PCP + DEI + VID, 4 bytes wire form).
Repo: crates/transport-tsn/src/vlan_tag.rs::Ieee802VlanTag with a
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 incl.
wire_layout_matches_spec_bit_packing with concrete hex values).
Status: done
Tab 7.22 IPv4Tuple
Spec: §7.2.3 Tab 7.22 — source_ip, destination_ip, dscp
(RFC 2474, 64=ignore), protocol, source_port, destination_port
for IPv4.
Repo: crates/transport-tsn/src/data_frame.rs::IPv4Tuple (incl.
the dscp field).
Tests: data_frame::tests::ipv4_tuple_carries_5_tuple_fields.
Status: done
Tab 7.23 IPv6Tuple
Spec: §7.2.3 Tab 7.23 — as Tab 7.22 for IPv6 (16-byte addresses),
incl. dscp.
Repo: crates/transport-tsn/src/data_frame.rs::IPv6Tuple (incl.
the dscp field).
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) — the application library with QosLibrary, DomainLibrary, ApplicationLibrary, ApplicationFactory, ApplicationFactoryRequester, ApplicationInstance, ApplicationInstanceRequester.
Repo: crates/transport-tsn/src/pim/application.rs (schema models for
the application library + factory).
Tests: inline.
Status: done
§7.2.2 DDS Deployment Configuration
Spec: §7.2.2, Tab 7.8-7.14 (PDF) — the deployment library with DeploymentTalker, DeploymentListener, BridgeNode, etc.
Repo: crates/transport-tsn/src/pim/deployment.rs.
Tests: inline.
Status: done
§7.3 Configuration Representation (PSM)
All three normative PSMs are covered.
§7.3.1 XML PSM
Repo: crates/transport-tsn/src/pim/xml.rs::parse_dds_tsn_xml — loader
for <dds_tsn> per the spec XSD (Tab 7.1-7.14).
Tests: pim::xml::tests::* (11).
Status: done
§7.3.2 JSON PSM
Repo: crates/transport-tsn/src/pim/json.rs::render_dds_tsn_json —
renderer in the spec JSON schema.
Tests: pim::json::tests::* (4).
Status: done
§7.3.3 YANG PSM
Spec: §7.3.3, p. 23-27 — transformation of the configuration model into
the YANG data-module definitions from IEEE 802.1Q §46.3 (Talker/Listener
groups for the UNI exchange CUC↔︎CNC). Normative and NOT covered by the JSON
PSM — it is a distinct mapping (stream-id-type, group-talker/group-listener
with the 802.1Q/802.1CB interface-capabilities).
Repo: crates/transport-tsn/src/pim/yang.rs — the §7.3.3 transformation
rules 1:1:
StreamId(stream-id-type): 6-octet node MAC + 16-bit DataWriter ID, YANG stringAA-BB-CC-DD-EE-FF-NN-NN(IEEE 802.1Qcc).GroupTalker::from_talker:stream-rank=1,end-station-interfaces, optionaldata-frame-specification(Ethernet MAC+VLAN / IPv4 / IPv6 incl.dscp),traffic-specification(interval as numerator/denominator,max-frames-per-interval,max-frame-size,transmission-selection,time-awarewith zero when unspecified), optionaluser-to-network-requirements,interface-capabilities.GroupListener::from_listener:end-station-interfaces,user-to-network-requirements,interface-capabilities.talker_listener_groups: a wholeTsnConfiguration→ groups, with sequential DataWriter IDs (§7.3.3.1).- RFC 7951 YANG-JSON renderer (
to_yang_json).
RFC 7950 YANG source parsing (reading textual .yang modules) is
caller-layer; the spec requires producing the YANG group representation,
not parsing foreign .yang files.
Tests: pim::yang::tests::* (17, incl. stream-id construction,
data-frame branches, interval fraction, time-aware zero rule, UNR
present/absent, YANG-JSON well-formedness).
Status: done
§8 DDSI-RTPS wire protocol over TSN
§8.1 DDSI-RTPS PIM unchanged
Spec: §8.1, p. 29 — “DDSI-RTPS PIM is unchanged from DDSI-RTPS 2.5.” TSN-specific changes only in the PSM (§8.3+§8.4).
Repo: cross-ref crates/rtps/ + crates/discovery/ (see
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, p. 30-31 — conformance rules for RTPS-over-TSN (latency-bounded path, frame-size limits).
Repo: cross-ref crates/rtps/ (frame size via the 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 with
DEFAULT/EF/AF11/AF21/AF31/AF41 constants + 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 (refers to 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, p. 33-36 — RTPS directly in the Ethernet frame payload.
Repo: crates/transport-tsn/src/ethernet_psm.rs::{EthernetFrameHeader, ETHERTYPE_RTPS}. Header with/without VLAN tag (14 vs 18 bytes),
round-trip, truncation detection, IPv4-EtherType non-VLAN branch.
Live transport (feature live, Linux):
crates/transport-tsn/src/socket.rs::TsnTransport sends/receives RTPS
directly in the Ethernet frame over an AF_PACKET/SOCK_RAW socket; the
platform-neutral frame logic (VLAN selection, frame build + min-frame
padding, sysfs MAC parsing) lives in live_frame.rs.
Tests: ethernet_psm::tests::* (7); live_frame::tests::* (12,
platform-neutral); tests/veth_loopback.rs — real RTPS roundtrip over a
veth pair (root, CI tsn-live job, see docs/ci/tsn-live.md).
Status: done
Annex B — Integration Examples
Spec: Annex B, p. 37-51 — informational.
Repo: —
Tests: —
Status: n/a (informative) — Annex B explicitly marked “informational”; examples for integration topologies.
Audit status
20 done / 0 partial / 0 open / 4 n/a (informative) / 0 n/a (rejected).
Test run: cargo test -p zerodds-transport-tsn — 93 lib tests green,
0 failed; with --features live 105 (+12 live_frame). Modules with
tests: config, data_frame, dscp, ethernet_psm, live_frame
(live), mac, network_requirements, pim::application,
pim::deployment, pim::json, pim::xml, pim::yang, stream,
time_aware, traffic, vlan_tag. Plus tests/veth_loopback.rs
(live, root, CI).
No open items: §7.2 PIM full, §7.3 all three PSMs (XML/JSON/YANG) done, Annex A incl. live transport.
DDS Extensions for Time Sensitive Networking 1.0 — Spec-Coverage
Quelle: docs/standards/cache/omg/dds-tsn-1.0-beta2.pdf (OMG DDS-TSN 1.0,
ptc/2024-05-16; aus IP-/Copyright-Gründen nicht im Repo getrackt). Öffentliche
Spec-Seite: https://www.omg.org/spec/DDS-TSN/.
Repo: crates/transport-tsn/ — PIM-Configuration-Modell (§7.2) + XML/JSON/YANG-PSM (§7.3) + DDSI-RTPS-Ethernet-PSM (Annex A), pure-Rust no_std+alloc. Live-AF_PACKET-Transport unter Feature live. 93 lib-Tests grün (Default), 105 mit --features live (+12 plattformneutrale live_frame-Tests) + veth-Roundtrip-Integrationstest (CI, root).
Kontext: DDS-TSN bringt DDS auf IEEE-802.1-Time-Sensitive-
Networking. ZeroDDS implementiert das PIM-Configuration-Modell
(§7.2 wire-relevante Tables), alle drei Configuration-PSM (§7.3:
XML, JSON und die normative YANG-Group-Transformation §7.3.3) und
das DDSI-RTPS-Ethernet-PSM (Annex A) als pure-Rust no_std+alloc
Library — inkl. optionalem Live-AF_PACKET-Transport (Feature live,
Linux). TSN-UNI-Wire-Protocol (Transport der YANG-Groups über das
konkrete UNI-Protokoll) + 802.1AS-PTP-Daemon + Hardware-Acceleration
(TX-Timestamping per SO_TIMESTAMPING/PHC) sind Caller-Layer.
§3 normative Referenzen (IEEE 802.1Qbu Frame-Preemption / 802.1CB
FRER): Die Spec listet diese in §3 als externe IEEE-Referenzen; §2
deklariert explizit keine eigenen Conformance-Points dafür. Sie sind
also keine eigenständigen DDS-TSN-Mappings — 802.1CB taucht als
num_seamless_trees (NetworkRequirements, Tab 7.18/7.25) und in den
YANG-interface-capabilities (cb-*-list) auf, 802.1Qbv als
TimeAware (Tab 7.17). Kein offenes Loch.
§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; Konformität wird über 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 erfüllt.
§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 + Figure 7.3 TsnConfiguration
Repo: crates/transport-tsn/src/stream.rs::{TsnTalker, TsnListener, StreamIdentifier, TsnConfiguration}.
TsnTalker deckt alle Tab-7.15-Felder ab: name, stream_name,
traffic_specification, network_requirements (0..1),
data_frame_specification (0..1, Option), datawriter_ref,
time_aware (0..1). TsnListener (Tab 7.24): name, stream_name,
network_requirements (0..1), datareader_ref. TsnConfiguration
(Figure 7.3) aggregiert tsn_talker/tsn_listener (je 0..*).
Tests: stream::tests::matching_stream_ids_match,
different_vlan_streams_do_not_match,
time_aware_talker_can_be_time_critical,
talker_carries_optional_network_requirements_per_tab_7_15,
listener_carries_optional_network_requirements_per_tab_7_24,
tsn_configuration_aggregates_talkers_and_listeners.
Status: done
Tab 7.18/7.25 NetworkRequirements
Spec: §7.2.3.1.2 Tab 7.18 (Talker) + §7.2.3.2.1 Tab 7.25 (Listener)
— num_seamless_trees (UInt8, IEEE 802.1CB FRER-Redundanz) +
max_latency (Talker UInt32, Listener String8; beide Nanosekunden,
vereinheitlicht auf u32).
Repo: crates/transport-tsn/src/network_requirements.rs::NetworkRequirements.
Tests: network_requirements::tests::* (4).
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-Prädikat.
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 — source_ip, destination_ip, dscp
(RFC 2474, 64=ignore), protocol, source_port, destination_port
für IPv4.
Repo: crates/transport-tsn/src/data_frame.rs::IPv4Tuple (inkl.
dscp-Feld).
Tests: data_frame::tests::ipv4_tuple_carries_5_tuple_fields.
Status: done
Tab 7.23 IPv6Tuple
Spec: §7.2.3 Tab 7.23 — wie Tab 7.22 für IPv6 (16-byte Adressen),
inkl. dscp.
Repo: crates/transport-tsn/src/data_frame.rs::IPv6Tuple (inkl.
dscp-Feld).
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)
Alle drei normativen PSM sind abgedeckt.
§7.3.1 XML PSM
Repo: crates/transport-tsn/src/pim/xml.rs::parse_dds_tsn_xml —
Loader für <dds_tsn> nach Spec-XSD (Tab 7.1-7.14).
Tests: pim::xml::tests::* (11).
Status: done
§7.3.2 JSON PSM
Repo: crates/transport-tsn/src/pim/json.rs::render_dds_tsn_json —
Renderer im Spec-JSON-Schema.
Tests: pim::json::tests::* (4).
Status: done
§7.3.3 YANG PSM
Spec: §7.3.3, S. 23-27 — Transformation des Konfigurationsmodells in
die YANG-Datenmodul-Definitionen aus IEEE 802.1Q §46.3
(Talker-/Listener-Groups für den UNI-Austausch CUC↔︎CNC). Normativ und
NICHT durch das JSON-PSM abgedeckt — es ist ein eigenes Mapping
(stream-id-type, group-talker/group-listener mit den 802.1Q/802.1CB-
interface-capabilities).
Repo: crates/transport-tsn/src/pim/yang.rs — die §7.3.3-
Transformregeln 1:1:
StreamId(stream-id-type): 6-Oktett-Node-MAC + 16-bit-DataWriter- ID, YANG-StringAA-BB-CC-DD-EE-FF-NN-NN(IEEE 802.1Qcc).GroupTalker::from_talker:stream-rank=1,end-station-interfaces, optionaledata-frame-specification(Ethernet-MAC+VLAN / IPv4 / IPv6 inkl.dscp),traffic-specification(Intervall als numerator/denominator,max-frames-per-interval,max-frame-size,transmission-selection,time-awaremit Null bei unspezifiziert), optionaleuser-to-network-requirements,interface-capabilities.GroupListener::from_listener:end-station-interfaces,user-to-network-requirements,interface-capabilities.talker_listener_groups: ganzeTsnConfiguration→ Groups, mit sequentiellen DataWriter-IDs (§7.3.3.1).- RFC-7951-YANG-JSON-Renderer (
to_yang_json).
RFC 7950 YANG-Source-Parsing (textuelle .yang-Module einlesen) ist
Caller-Layer; die Spec verlangt die Erzeugung der YANG-Group-
Repräsentation, nicht das Parsen fremder .yang-Dateien.
Tests: pim::yang::tests::* (17, inkl. stream-id-Bildung,
data-frame-Branches, interval-Bruch, time-aware-Null-Regel,
UNR present/absent, YANG-JSON-Wohlgeformtheit).
Status: done
§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.
Live-Transport (Feature live, Linux):
crates/transport-tsn/src/socket.rs::TsnTransport sendet/empfängt RTPS
direkt im Ethernet-Frame über einen AF_PACKET/SOCK_RAW-Socket; die
plattformneutrale Frame-Logik (VLAN-Wahl, Frame-Bau + Min-Frame-Padding,
sysfs-MAC-Parsing) liegt in live_frame.rs.
Tests: ethernet_psm::tests::* (7); live_frame::tests::* (12,
plattformneutral); tests/veth_loopback.rs — echter RTPS-Roundtrip
über ein veth-Paar (root, CI-tsn-live-Job, siehe
docs/ci/tsn-live.md).
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 für Integrations-Topologien.
Audit-Status
20 done / 0 partial / 0 open / 4 n/a (informative) / 0 n/a (rejected).
Test-Lauf: cargo test -p zerodds-transport-tsn — 93 lib-Tests grün,
0 failed; mit --features live 105 (+12 live_frame). Module mit
Tests: config, data_frame, dscp, ethernet_psm, live_frame
(live), mac, network_requirements, pim::application,
pim::deployment, pim::json, pim::xml, pim::yang, stream,
time_aware, traffic, vlan_tag. Plus tests/veth_loopback.rs
(live, root, CI).
Keine offenen Punkte: §7.2 PIM voll, §7.3 alle drei PSM (XML/JSON/YANG) done, Annex A inkl. Live-Transport.