DR-009-ddsgw: Introduce DDS communication for mw::com#
Date: 2026-09-17
Introduce DDS communication for mw::com
|
status: accepted
|
||||
Context / Problem#
S-CORE applications use mw::com as their service-oriented communication API.
The LoLa binding provides high-performance shared-memory communication on the
same ECU, and SOME/IP support provides service-oriented communication across
networked ECUs.
DDS adds a different and complementary communication model. It is an OMG-standardized, data-centric publish/subscribe technology designed for distributed systems. DDS is relevant to S-CORE because it provides:
Automatic discovery of publishers and subscribers.
One-to-one, one-to-many, and many-to-many data distribution.
Configurable Quality of Service for reliability, durability, history, deadline, liveliness, lifespan, ownership, and resource limits.
Efficient distribution of high-rate and large data where supported by the selected DDS implementation and deployment.
Late-joiner access to retained state through durability and history.
Separation of communication environments through DDS domains.
Standardized DDS-XTypes and XCDR1/XCDR2 data representations.
These capabilities make DDS suitable where several consumers need the same data, different data streams require different delivery behavior, high-rate or large data must be distributed, or a system must interoperate with DDS-native components.
DDS does not replace LoLa or SOME/IP. LoLa remains appropriate for efficient local shared-memory communication. SOME/IP remains appropriate where its service-oriented protocol and ecosystem are required. DDS provides an additional deployment choice for data-centric distributed communication.
S-CORE currently has no standardized DDS integration for mw::com. Without
one:
Applications must use DDS-specific APIs directly and lose the common
mw::comfront end.Projects create incompatible adapters for mapping, types, serialization, discovery, QoS, E2E protection, and recovery.
Existing LoLa-based services cannot connect to DDS domains without a project-specific gateway.
Native DDS applications cannot expose their data through a consistent local
mw::comservice.Safety-related application logic can become coupled to a DDS stack integrated as a QM component.
S-CORE therefore needs both:
A DDS communication binding underneath the
mw::comfront end for applications deployed directly with DDS communication.A DDS Gateway for bridging existing
mw::com/LoLa deployments with DDS domains and native DDS applications.
The originating feature material is available in:
This Decision Record establishes the feature and its architectural boundaries. Detailed APIs, configuration schemas, IPC messages, concurrency, serialization algorithms, and source-code structure belong to downstream requirements and implementation-design documents.
Decision#
S-CORE shall add DDS communication for mw::com through two complementary
deployment options.
Option A: DDS Gateway#
A deployable DDS Gateway shall consume and provide existing mw::com services,
normally through LoLa, and bridge them to configured DDS domains.
This option is intended when:
Existing
mw::comapplications shall remain unchanged.DDS is introduced at a deployment boundary.
An
mw::comservice shall interoperate with a native DDS application.Two S-CORE systems shall exchange
mw::comservices over DDS.Routing between configured DDS domains is required.
Option B: DDS binding beneath mw::com#
An application shall continue to use the existing mw::com Skeleton and Proxy
interfaces. Deployment configuration shall select the DDS binding instead of,
or in addition to, another communication binding.
The DDS binding shall map configured mw::com service elements to DDS entities
and provide the required type transformation, availability mapping, DDS QoS,
and E2E handling.
This option is intended for applications whose configured communication path is
DDS while retaining the common mw::com application API.
Both options shall use common architectural principles for service mapping, type descriptions, serialized DDS data, QoS, availability, E2E protection, safety separation, and DDS implementation independence.
Logical architecture#
For gateway-to-gateway communication, the complete path is:
S-CORE App A ↔ mw::com/LoLa ↔ Gateway A ↔ DDS Daemon A
↔ DDS Domain ↔ DDS Daemon B ↔ Gateway B
↔ mw::com/LoLa ↔ S-CORE App B
A native DDS application participates directly in the DDS domain and does not require an S-CORE Gateway Daemon.
Common service mapping#
Both deployment options shall support bidirectional mapping.
|
DDS communication responsibility |
|---|---|
Event |
Map publication and subscription to configured DDS data communication |
Field |
Preserve notification, current-value, getter, setter, and error semantics |
Method |
Preserve request, response, error, timeout, and correlation semantics |
Service instance |
Map provider, service, and instance identity |
Offer/StopOffer |
Propagate service availability or unavailability |
Proxy discovery |
Report availability only when configured DDS conditions are satisfied |
The downstream interface specification shall define exact DDS entities, Topic naming, request/response correlation, and message formats.
Configuration#
Deployment configuration shall define:
Selected integration option and communication direction.
mw::comservice and service-element identifiers.DDS Domain ID, Topic name, and type name.
DDS type description and XCDR representation.
DDS QoS.
mw::comQuality Type and DDS-domain mapping.Explicit or endpoint-based availability.
E2E configuration.
Type, sample, entity, instance, and route limits.
Only configured routes shall be active. Discovery of an arbitrary DDS Topic shall not automatically create a route.
DDS types and serialized data#
Applications shall not be required to include DDS-vendor-specific or IDL-generated APIs. Type descriptions shall be supplied as deployment input or generated artifacts and used to create DDS Dynamic Types or equivalent runtime types.
The DDS binding or Gateway Daemon shall transform native mw::com data to and
from the configured XCDR1 or XCDR2 representation. Native C++ padding shall not
be transferred as DDS application data.
The type model shall support the constructs required by the mapped interfaces, including DDS keys and RTPS KeyHash calculation.
Serialized payloads shall be given to the DDS integration through a serialized- data interface. DDS discovery, matching, history, reliability, liveliness, instance management, and network transport remain DDS stack responsibilities.
DDS QoS and data rates#
Deployment configuration shall expose the DDS QoS required by a route, including reliability, durability, history, resource limits, deadline, liveliness, lifespan, ownership, destination order, partition, and data representation.
The DDS stack shall evaluate compatibility and perform the configured DDS behavior.
The design shall support different payload sizes and rates, including high-rate and large-data communication when supported by the selected DDS stack and deployment. It shall avoid unnecessary transformations and copies and permit zero-copy optimization where all interfaces support it.
The feature does not define an additional gateway-owned worker pool, QoS-lane
scheduler, or per-route queue. Buffering and delivery behavior are provided by
the applicable mw::com/SoCom, IPC, and DDS mechanisms.
Availability#
Cooperating gateways shall exchange explicit service-instance state through a keyed DDS administration Topic. The identity shall distinguish provider, service, and instance. QoS shall retain the current state per configured instance.
For native DDS applications without explicit service state, availability may be
derived from configured endpoint matching and liveliness. All mandatory
endpoints shall be available before the corresponding local mw::com service
is offered.
Safety, E2E, and recovery#
The architecture shall permit the DDS stack and DDS Communication Daemon to remain QM while safety-related mapping, E2E processing, and availability control remain on the safety-related side.
Where required, E2E protection shall be generated or validated above the DDS integration interface. DDS reliability does not replace safety E2E protection.
The feature shall reconcile complete configured and observed state after a Gateway Daemon, DDS Communication Daemon, DDS participant, IPC connection, or remote endpoint restarts. Stale DDS-derived services shall not remain offered.
DDS implementation independence#
A reference implementation may use Eclipse Cyclone DDS. Vendor-specific APIs
shall remain contained in the DDS integration. Another suitable DDS stack shall
be integrable without changing the mw::com application interface or the
behavior established by this decision.
Limitations and out of scope#
DDS content-filtered Topics and gateway-configured content filtering are not part of this decision. Filtering inside the QM DDS integration would decide which application samples cross toward the safety-related component. The required semantics, safety responsibility, configuration authority, and failure behavior have not been defined.
Samples received for a configured active route shall be forwarded subject to configured DDS QoS and resource limits. Application-level sample selection remains outside DDS content filtering. Adding DDS content filtering requires a follow-up architectural decision.
Also outside scope are:
Automatic bridging of arbitrary discovered Topics.
Selection of a mandatory DDS vendor.
Internal classes, threads, and IPC wire formats.
Implementation phases or delivery order.
Backwards Compatibility#
The feature is use-case dependent. Existing mw::com, LoLa, and SOME/IP applications and
deployments require no changes unless DDS communication is selected.
No stable mw::com application API is removed. Any later breaking API change
shall follow the Breaking Change FEP process.
Alternatives Considered#
Use DDS APIs directly in applications#
Applications could use DDS APIs directly, including their type, discovery, QoS, and lifecycle interfaces.
However, this would introduce DDS-specific dependencies into application code
and require each project to define its own integration with mw::com services.
This alternative is not selected because the proposal preserves mw::com
as the common application-facing interface. Native DDS applications remain
supported as communication peers.
Require DDS-generated type support and serialization#
The integration could use IDL-generated DDS interfaces and their associated DDS-provided serialization and deserialization support.
This provides compile-time interfaces and reuses the DDS implementation’s type support. However, it introduces dependencies on deployment-specific generated artifacts and vendor-specific serialization support.
Where generated artifacts participate in safety-related processing, their verification and the required confidence in the generation tools must be addressed. Depending on tool usage and output-verification measures, this may require tool qualification or additional verification evidence.
Delegating application-data transformation to the QM DDS daemon would also place that responsibility outside the intended safety-related boundary.
This alternative is not selected as the required integration model. The selected approach keeps application-data transformation in the Gateway or DDS binding and passes serialized payloads to the DDS integration.
IDL and generated type-description artifacts remain permitted as configuration inputs, provided their correctness is established.
Rely entirely on DDS discovery for service availability#
DDS discovery could be used directly as the source of availability exposed
to mw::com applications.
However, discovering compatible communication endpoints does not necessarily
mean that the corresponding application service is ready or offered.
DDS discovery and mw::com service availability therefore cannot always
be treated as equivalent.
This alternative is not selected as the complete availability model.
The integration must preserve mw::com service availability while also
supporting native DDS applications. The detailed mapping shall be defined
in the downstream architecture.
Rationale#
The selected approach integrates DDS through the common mw::com interface
while preserving service behavior, deployment flexibility, and the required
safety boundary.
Preserve the application interface#
Applications continue to use mw::com Skeletons and Proxies.
DDS-specific types, Topics, Domains, QoS, and discovery configuration remain
within the communication integration and deployment configuration.
This avoids repeating DDS integration logic in applications and limits their dependency on a particular DDS implementation.
Preserve service semantics#
The integration provides a common mapping for mw::com events, fields,
methods, and service-instance availability.
This is necessary because DDS communication entities do not directly represent
all mw::com service semantics. A shared contract prevents projects from
introducing incompatible behavior across the DDS boundary.
Availability handling must account for both cooperating S-CORE integrations and native DDS peers without requiring every native DDS application to implement an S-CORE-specific service-state protocol.
Keep application-data transformation under S-CORE control#
The Gateway or DDS binding transforms between native mw::com data and
the configured DDS representation. The DDS integration handles the resulting
serialized application payloads.
This keeps transformation behavior and its verification within the safety-related communication component, without requiring deployment-specific DDS-generated executable type support.
The serializer, deserializer, type descriptions, and any tools generating those descriptions still require the applicable validation, verification, and tool-confidence measures.
Enable configurable and reusable integration#
Deployment-provided type descriptions and route configuration allow the integration to support different service interfaces without embedding their DDS details in application code.
Containing vendor-specific APIs within the DDS integration permits another suitable DDS stack to be used while preserving the application-facing contract.
Reuse DDS middleware functionality#
Discovery, endpoint matching, reliability, history, liveliness, and transport remain responsibilities of the DDS stack.
S-CORE provides the service adaptation, data transformation, E2E processing,
and availability mapping required by mw::com. This avoids duplicating DDS
middleware functionality while establishing consistent integration behavior.
Consequences#
Acceptance establishes DDS communication as an additional S-CORE capability and approves both architectural options. Implementation remains tracked separately during Phase 4 of the FEP process.
Work product |
Required follow-up |
|---|---|
Feature description |
Align PR #2997 with this decision |
Requirements |
Define verifiable binding and gateway behavior |
Logical architecture |
Detail both deployment options and safety boundaries |
Interfaces |
Define binding, IPC, serialized-data, and DDS contracts |
Service mapping |
Define event, field, and method mappings |
Configuration |
Define routes, types, Domains, Topics, QoS, E2E, availability, and limits |
Discovery and lifecycle |
Define availability, failure, restart, and reconciliation |
Safety and security |
Analyze the QM boundary, E2E, interference, and allowed routes |
Verification |
Cover interoperability, QoS, data rates, recovery, and fault injection |
If implementation reveals that this accepted architecture must materially change, it shall be handled through an amendment or follow-up FEP rather than silent implementation divergence.
Rejected Ideas#
No additional idea has yet been formally rejected during the Final Comment Period. This section shall be updated when an alternative is explicitly rejected during FCP.