Skip to main content

PathManager

Struct PathManager 

Source
pub struct PathManager(/* private fields */);
Expand description

Combines public and granted segments into paths.

Cheap to clone; all clones share the same state.

Implementations§

Source§

impl PathManager

Source

pub fn new(segments: SegmentManager, grant: GrantManager) -> Self

Creates a path manager on top of the given segment sources.

Source

pub async fn best_path( &self, client_ip: IpAddr, dst_sni: &WapSNI, src: IsdAsn, dst: IsdAsn, now: SystemTime, ) -> Result<Option<UsedPath>, BestPathError>

Returns the best path from the given source ISD-ASN to the destination ISD-ASN.

This combines public segments in the segment manager and the granted segments for the given client IP and destination SNI.

Returns the best path and the segments that make up the path. Returns None if no path could be found. Returns an error if something went wrong while fetching segments or computing the path.

§Parameters
  • client_ip: The IP address of the client requesting the path.
  • dst_sni: The destination SNI for which the path is requested.
  • src: The source ISD-ASN.
  • dst: The destination ISD-ASN.
Source

pub async fn refresh_path( &self, used: &UsedPath, now: SystemTime, ) -> Result<UsedPath>

Rebuilds used from the current copies of the exact segments it was built from.

Allows the caller to pick up a later expiration of the underlying segments.

Returns Ok(UsedPath) if the path could be rebuilt, or Err if it could not be rebuilt.

Source

pub async fn hold_segments( &self, used: &UsedPath, now: SystemTime, ) -> Result<PathSegmentsGuard>

Keeps the public segments used was built from available for as long as the returned guard is alive, so Self::refresh_path can still resolve them.

Anything that keeps a UsedPath around for longer than the segment manager’s idle_eviction_time has to hold on to the guard, otherwise the pair backing the path is evicted while the path is still in use.

Granted segments need no guard: they are held in place by their grant, not by use.

Source

pub fn watch_grants( &self, client_ip: IpAddr, customer_domain: CustomerDomainRef<'_>, used: &UsedPath, now: SystemTime, ) -> Result<GrantWatch>

Watches the grants that let client_ip use used towards dst_sni.

The returned watch resolves once any of the grants that authorize the path expires. It also guards the target and the private segments of the path from early eviction.

Returns an error if the client is not authorized for the path in the first place.

Trait Implementations§

Source§

impl Clone for PathManager

Source§

fn clone(&self) -> Self

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

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more