Skip to main content

GatewayBridge

Struct GatewayBridge 

Source
pub struct GatewayBridge { /* private fields */ }
Expand description

Gateway-Bridge-Helper.

Lifecycle:

  1. GatewayBridge::new mit GatewayBridgeConfig.
  2. Optional GatewayBridge::with_upstream um den eigenen Bridge in eine bestehende Chain (z.B. von Wanne-GW zum eigenen Turm-GW) einzuhaengen.
  3. Pro Edge: GatewayBridge::delegate_for um eine neue Delegation auszustellen.
  4. GatewayBridge::chain_for reicht die Chain als Output fuer SPDP/SEDP-Properties.
  5. GatewayBridge::revoke_delegation entfernt einen Edge.

Implementations§

Source§

impl GatewayBridge

Source

pub fn new(config: GatewayBridgeConfig) -> Self

Konstruktor.

Source

pub fn with_upstream(&mut self, upstream_chain: DelegationChain)

Setzt eine Upstream-Chain. Diese wird in Self::chain_for vor den Edge-Link gehaengt — Sub-Gateway-Chaining fuer Doppelstern (Turm-GW unter Wanne-GW).

Validation der Upstream-Chain ist NICHT Teil des Bridge — Caller muss vorher selbst validate_chain aufrufen, um Mismatch-Profile-Fehlern vorzubeugen.

Source

pub fn gateway_guid(&self) -> [u8; 16]

16-byte Gateway-GUID (Read-only).

Source

pub fn delegate_for( &mut self, edge_guid: [u8; 16], topic_patterns: Vec<String>, partition_patterns: Vec<String>, not_before: i64, not_after: i64, ) -> GatewayBridgeResult<&DelegationLink>

Stellt eine neue Delegation fuer einen Edge-Peer aus. Wenn der Edge bereits delegiert war, wird der alte Link ueberschrieben (typisch bei Ephemeral-Edge-Rotation, Plan §Stufe j-f).

not_before und not_after sind absolute Unix-Sekunden; topic_patterns/partition_patterns sind die Glob-Whitelist, die der Edge im engsten Scope haben darf.

§Errors

GatewayBridgeError::DelegationFailed wenn der PKI-Sign- Schritt fehlschlaegt (Cap-Verletzung, Key-Parse-Fehler).

Source

pub fn revoke_delegation( &mut self, edge_guid: [u8; 16], ) -> GatewayBridgeResult<()>

Widerruft die aktive Delegation fuer einen Edge. Der Edge wird in die Revocation-Liste aufgenommen und kann ueber Self::take_revocations dem Discovery-Layer mitgeteilt werden.

§Errors

GatewayBridgeError::UnknownEdge wenn der Edge nicht aktiv ist.

Source

pub fn chain_for(&self, edge_guid: &[u8; 16]) -> Option<DelegationChain>

Liefert die ausgehende Chain fuer einen Edge.

1-Hop-Bridge (kein Upstream): Chain = [Edge-Link], origin_guid = gateway_guid. n-Hop-Bridge (mit Upstream): Chain = upstream.links ++ [Edge-Link], origin_guid = upstream.origin_guid.

Returns None wenn der Edge nicht aktiv ist.

Source

pub fn active_count(&self) -> usize

Anzahl aktiver Edge-Delegations.

Source

pub fn has_edge(&self, edge_guid: &[u8; 16]) -> bool

True wenn ein Edge aktiv delegiert ist.

Source

pub fn iter_active(&self) -> impl Iterator<Item = (&[u8; 16], &DelegationLink)>

Iteriert ueber alle aktiven Edge-Delegations.

Source

pub fn take_revocations(&mut self) -> Vec<[u8; 16]>

Liest und leert die Revocation-Liste (Discovery-Layer ruft das pro SPDP-Beacon-Tick auf).

Source

pub fn upstream(&self) -> Option<&DelegationChain>

Lese-Zugriff auf den Upstream-Chain (nuetzlich fuer Logging / Metrics).

Source

pub fn rotate_ephemerals<F>( &mut self, identities: &[EdgeIdentityConfig], now: i64, topic_patterns: Vec<String>, partition_patterns: Vec<String>, prefix_generator: F, ) -> (Vec<String>, Vec<(String, GatewayBridgeError)>)
where F: FnMut(&str) -> [u8; 12],

Rotiert Ephemeral-Edge-Identities deren Lifetime abgelaufen ist.

Workflow pro Ephemeral-Edge:

  1. Wenn Edge nicht aktiv → ueberspringen (init kommt via delegate_for durch den Caller).
  2. Wenn now < link.not_after - lifetime/N (N=Renewal-Window) → noch zu frisch, ueberspringen.
  3. Sonst: neue GuidPrefix ziehen (prefix_generator(name)), alten Edge revoken, neuen delegate_for mit now-basierten Zeitfenster ausstellen.

prefix_generator ist ein Pluggable-Hook (z.B. ChaCha20-RNG oder system-RNG); der Bridge ist deterministic-testbar weil die Zufalls-Quelle vom Caller kommt.

Returns Liste der rotierten Edge-Namen.

§Errors

Propagiert GatewayBridgeError::DelegationFailed wenn ein neu-Sign fehlschlaegt — bricht aber NICHT die Loop-Schleife ab, fehlerhafte Edges werden im Err-Tail-Vec gesammelt und der Aufrufer kann entscheiden.

Trait Implementations§

Source§

impl Clone for GatewayBridge

Source§

fn clone(&self) -> GatewayBridge

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GatewayBridge

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.