Skip to main content

Module data_tagging

Module data_tagging 

Source
Expand description

Builtin DataTagging-Plugin (OMG DDS-Security 1.2 §12).

Implementiert das zerodds_security::DataTaggingPlugin-SPI als produktiven Builtin. Tags sind Application-Level-Labels (Classification-Marker, Sensitivity, etc.), die per Endpoint-GUID verwaltet, ueber SEDP via PID_PROPERTY_LIST propagiert und Subscriber-seitig auf Match geprueft werden.

§Wire-Pfad

Tags werden als WireProperty-Eintraege mit Namespace-Prefix dds.sec.data_tags. in die existierende WirePropertyList eingebettet — d.h. wir reuten den bereits in SPDP/SEDP propagierten PID_PROPERTY_LIST-Parameter, anstatt einen neuen PID einzufuehren. Das passt zu Cyclones/RTI-Verhalten, das Tags ebenfalls via PID_PROPERTY_LIST traegt (Cyclone DDS Security §8 doc).

§Match-Predicate

Default-Predicate ist Subset-Match:

  • Subscriber ohne Tags → akzeptiert jeden Publisher (Wildcard).
  • Subscriber mit Tags → jeder Tag (name+value) muss exakt im Publisher-Tag-Set vorkommen.
  • Unknown Tag-Name auf Subscriber-Seite, der nicht beim Publisher existiert → Reject.

Spec-konform und einfach genug fuer NGVA/FACE-Pilot-Setups; komplexe Predicates (range/regex) werden via Custom-DataTaggingPlugin abgedeckt.

§Beispiel

use zerodds_security::data_tagging::{DataTag, DataTaggingPlugin};
use zerodds_security_runtime::data_tagging::BuiltinDataTaggingPlugin;

let mut plugin = BuiltinDataTaggingPlugin::new();
let pub_guid = [0xAA; 16];
plugin.set_tags(
    pub_guid,
    vec![DataTag { name: "classification".into(), value: "secret".into() }],
);

let sub_tags = vec![DataTag { name: "classification".into(), value: "secret".into() }];
assert!(BuiltinDataTaggingPlugin::tags_match(&plugin.get_tags(pub_guid), &sub_tags));

zerodds-lint: allow no_dyn_in_safe (Plugin-Trait-Object via Box<dyn DataTaggingPlugin>.)

Structs§

BuiltinDataTaggingPlugin
Builtin DataTagging-Plugin fuer Spec §12.

Constants§

TAG_PROPERTY_PREFIX
Property-Namespace fuer Tag-Wire-Encoding. Jeder Tag erscheint als ein WireProperty mit name = TAG_PROPERTY_PREFIX + tag.name, value = tag.value. Andere Properties (auth-class, suite-list, …) bleiben unangetastet.