zerodds-opcua-pubsub

OPC-UA stack. OPC Foundation Part 14 (PubSub, UADP) with the Part 6 binary encoding, in pure Rust.

zerodds-opcua-pubsub adds the Part 14 publish/subscribe transport on top of zerodds-opcua-gateway, the OMG DDS-OPCUA 1.0 type-system and AddressSpace mapping, which has no wire I/O of its own. It encodes the gateway types (NodeId, Variant, DataValue, …) in the Part 6 binary encoding (little-endian, no alignment padding) and frames them as UADP NetworkMessages. DDS-OPCUA 1.0 bridges OPC-UA into the DDS data space; Part 14 is OPC-UA's own publish/subscribe protocol. The crate is an additional profile and does not change the gateway.

  • binary — UaEncode/UaDecode, UaReader/UaWriter; built-in types including NodeId, ExpandedNodeId, Guid, QualifiedName, LocalizedText, ExtensionObject, Variant, DataValue.
  • uadp — NetworkMessage (flag bytes UADPFlags, ExtendedFlags1, ExtendedFlags2, group and payload headers) and DataSetMessage (field encodings Variant, RawData, DataValue; KeyFrame, DeltaFrame, Event, KeepAlive); discovery requests and responses for DataSetMetaData, PublisherEndpoints and DataSetWriterConfiguration. Chunked NetworkMessages are rejected on decode.
  • config, writer, reader — configuration model (connection, writer and reader groups, DataSetWriter and DataSetReader configuration); PublishedDataSet, DataSetWriter with content mask and key-frame policy, WriterGroup; DataSetReader filters by PublisherId, WriterGroupId and DataSetWriterId and decodes with the DataSetMetaData; ReaderGroup.
  • dynamic — decoding of RawData fields of custom structured, enumerated or simple types into a DynamicValue tree driven by the metadata.
  • infomodel — the PubSub configuration as AddressSpace nodes under PublishSubscribe, with the management operations (AddConnection, AddWriterGroup, …, Remove…).
  • transport — PubSubTransport trait; UdpTransport and LoopbackTransport (std); MqttTransport, AmqpTransport and KafkaTransport over injected client traits; EthernetTransport over an injected EthernetInterface, so the raw socket stays in the caller's implementation. TSN timing guarantees are outside this crate.
  • security (feature) — PubSub-Aes128-CTR, PubSub-Aes256-CTR (AES-CTR with HMAC-SHA256 signature) and PubSub-Aes256-GCM; SecurityKeyService keyed by SecurityTokenId.
  • json (feature) — JSON message mapping (JsonNetworkMessage, MessageType "ua-data") on the reversible JSON encoding.
  • bridge, daemon — DataSet ↔ DDS sample mapping over the DdsPublisher/DdsSubscriber traits (no dependency on zerodds-dcps); Publisher::publish_cycle and Subscriber::poll drive the groups over a transport, with secured variants under security.

Spec anchors

  • OPC UA Part 6 §5.2 (binary encoding; §5.2.2.9–§5.2.2.17 built-in structured types), §5.4 (reversible JSON encoding).
  • OPC UA Part 14 §6.2 (configuration model; §6.2.4/§6.2.5 publishing, §6.2.6 PubSubConnection, §6.2.7/§6.2.8 subscribing), §7.2.2.2 (NetworkMessage), §7.2.2.3 (DataSetMessage), §7.2.2.4 (discovery), §7.2.3 (JSON mapping), §7.3.3 (Ethernet), §7.3.4 (MQTT), §7.3.5 (UDP), Annex B.2 (Kafka), Annex B.3 (AMQP), §8 (security; §8.2.1 policies), §9 (information model).
  • Coverage: opcua-pubsub-1.05.

Consumers

  • zerodds-opcua-uacp (reuses the binary codec).
  • zerodds-opcua-server.
  • zerodds-opcua-bridge (its feature pubsub-security enables security here).

Features

  • std (default) — enables alloc and zerodds-opcua-gateway/std; adds UdpTransport, LoopbackTransport and std::error::Error implementations.
  • alloc — enables zerodds-opcua-gateway/alloc.
  • security — pulls in aes, ctr, hmac, sha2, aes-gcm (RustCrypto); compiles the security module and publish_cycle_secured/poll_secured. Does not require std.
  • json — enables std, serde_json and base64; compiles the json module.

Status

  • no_std with alloc unless std is enabled.
  • forbid(unsafe_code).
  • Library only, no binaries. Examples: open62541_uadp_probe, open62541_uadp_publisher. The script proofs/open62541_uadp.sh runs both directions of the UADP wire against open62541 and exits with 77 when no open62541 build is present.
  • 121 test functions in the source (src/).

zerodds-opcua-pubsub

OPC-UA-Stack. OPC Foundation Part 14 (PubSub, UADP) mit der binären Kodierung aus Part 6, in reinem Rust.

zerodds-opcua-pubsub ergänzt den Publish/Subscribe-Transport aus Part 14 auf zerodds-opcua-gateway, der Abbildung von Typsystem und AddressSpace nach OMG DDS-OPCUA 1.0, die selbst nichts überträgt. Es kodiert die Typen des Gateways (NodeId, Variant, DataValue, …) in der binären Kodierung aus Part 6 (Little Endian, ohne Ausrichtungsfüllung) und rahmt sie als UADP-NetworkMessages. DDS-OPCUA 1.0 verbindet OPC-UA mit dem DDS-Datenraum; Part 14 ist das eigene Publish/Subscribe-Protokoll von OPC-UA. Das Crate ist ein zusätzliches Profil und ändert das Gateway nicht.

  • binary — UaEncode/UaDecode, UaReader/UaWriter; eingebaute Typen, darunter NodeId, ExpandedNodeId, Guid, QualifiedName, LocalizedText, ExtensionObject, Variant, DataValue.
  • uadp — NetworkMessage (Flag-Bytes UADPFlags, ExtendedFlags1, ExtendedFlags2, Gruppen- und Nutzdatenkopf) und DataSetMessage (Feldkodierungen Variant, RawData, DataValue; KeyFrame, DeltaFrame, Event, KeepAlive); Anfragen und Antworten der Discovery für DataSetMetaData, PublisherEndpoints und DataSetWriterConfiguration. Gestückelte (chunked) NetworkMessages werden beim Dekodieren abgewiesen.
  • config, writer, reader — Konfigurationsmodell (Verbindung, Gruppen für Writer und Reader, Konfiguration von DataSetWriter und DataSetReader); PublishedDataSet, DataSetWriter mit Inhaltsmaske und Regel für KeyFrames, WriterGroup; DataSetReader filtert nach PublisherId, WriterGroupId und DataSetWriterId und dekodiert mit den DataSetMetaData; ReaderGroup.
  • dynamic — Dekodierung von Feldern in der Kodierung RawData, deren Typ ein eigener strukturierter, Aufzählungs- oder einfacher Typ ist, in einen Baum aus DynamicValue anhand der Metadaten.
  • infomodel — die PubSub-Konfiguration als Knoten im AddressSpace unter PublishSubscribe, mit den Verwaltungsoperationen (AddConnection, AddWriterGroup, …, Remove…).
  • transport — Trait PubSubTransport; UdpTransport und LoopbackTransport (std); MqttTransport, AmqpTransport und KafkaTransport über injizierte Client-Traits; EthernetTransport über ein injiziertes EthernetInterface, sodass der Raw-Socket in der Implementierung des Aufrufers bleibt. Zeitgarantien von TSN liegen außerhalb dieses Crates.
  • security (Feature) — PubSub-Aes128-CTR, PubSub-Aes256-CTR (AES-CTR mit HMAC-SHA256-Signatur) und PubSub-Aes256-GCM; SecurityKeyService, adressiert über SecurityTokenId.
  • json (Feature) — JSON-Abbildung der Nachrichten (JsonNetworkMessage, MessageType "ua-data") auf Basis der umkehrbaren JSON-Kodierung.
  • bridge, daemon — Abbildung DataSet ↔ DDS-Sample über die Traits DdsPublisher/DdsSubscriber (keine Abhängigkeit von zerodds-dcps); Publisher::publish_cycle und Subscriber::poll betreiben die Gruppen über einen Transport, mit gesicherten Varianten unter security.

Spec-Anker

  • OPC UA Part 6 §5.2 (binäre Kodierung; §5.2.2.9–§5.2.2.17 eingebaute strukturierte Typen), §5.4 (umkehrbare JSON-Kodierung).
  • OPC UA Part 14 §6.2 (Konfigurationsmodell; §6.2.4/§6.2.5 Veröffentlichen, §6.2.6 PubSubConnection, §6.2.7/§6.2.8 Abonnieren), §7.2.2.2 (NetworkMessage), §7.2.2.3 (DataSetMessage), §7.2.2.4 (Discovery), §7.2.3 (JSON-Abbildung), §7.3.3 (Ethernet), §7.3.4 (MQTT), §7.3.5 (UDP), Annex B.2 (Kafka), Annex B.3 (AMQP), §8 (Sicherheit; §8.2.1 Policies), §9 (Informationsmodell).
  • Abdeckung: opcua-pubsub-1.05.

Konsumenten

  • zerodds-opcua-uacp (nutzt den binären Codec mit).
  • zerodds-opcua-server.
  • zerodds-opcua-bridge (dessen Feature pubsub-security aktiviert hier security).

Features

  • std (Standard) — aktiviert alloc und zerodds-opcua-gateway/std; ergänzt UdpTransport, LoopbackTransport und Implementierungen von std::error::Error.
  • alloc — aktiviert zerodds-opcua-gateway/alloc.
  • security — bindet aes, ctr, hmac, sha2, aes-gcm (RustCrypto) ein; kompiliert das Modul security sowie publish_cycle_secured/poll_secured. Setzt std nicht voraus.
  • json — aktiviert std, serde_json und base64; kompiliert das Modul json.

Status

  • no_std mit alloc, solange std nicht aktiviert ist.
  • forbid(unsafe_code).
  • Nur Bibliothek, keine Binaries. Beispiele: open62541_uadp_probe, open62541_uadp_publisher. Das Skript proofs/open62541_uadp.sh führt beide Richtungen des UADP-Verkehrs gegen open62541 aus und endet mit 77, wenn kein Build von open62541 vorhanden ist.
  • 121 Testfunktionen im Quelltext (src/).