Skip to main content

NetworkPolicy

Struct NetworkPolicy 

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

Outbound-address policy. The default (enforce == false) permits every address — the interpreter library and submilli run stay unrestricted. The submilli-server binary opts into NetworkPolicy::deny_private.

Implementations§

Source§

impl NetworkPolicy

Source

pub fn with_denial_observer( self, observer: Arc<dyn Fn(&str) + Send + Sync>, ) -> Self

Observe refused destinations without changing the network policy.

Source

pub fn allow_all() -> Self

Permit every address. The library/CLI default.

Source

pub fn client_builder(self: &Arc<Self>) -> ClientBuilder

A reqwest client builder whose DNS resolution is filtered by this policy: a name resolving only to forbidden addresses fails to resolve. Every outbound client the runtime builds — submilli:http, model providers, MCP servers — starts from this, so one policy governs them all. Literal IP hosts never reach a resolver; refuse those with Self::check_literal_host before sending.

Source

pub fn check_literal_host(&self, url: &str) -> Result<(), String>

Refuse a URL whose host is a literal IP the policy forbids. Host names pass here and are judged at resolution.

Source

pub fn deny_private() -> Self

Block private, loopback, link-local and other special-purpose IP space. The secure base the server layers opt-outs onto.

Source

pub fn allow_localhost(self, yes: bool) -> Self

Allow IPv4 + IPv6 loopback (127.0.0.0/8, ::1).

Source

pub fn allow_private(self, yes: bool) -> Self

Allow all RFC1918 / CGNAT / IPv6-ULA private ranges.

Source

pub fn allow_cidr(self, net: IpNet) -> Self

Allow a specific address or CIDR range, overriding every block.

Source

pub fn permits(&self, ip: IpAddr) -> bool

Whether a request may connect to ip.

Source§

impl NetworkPolicy

Source

pub async fn resolve_permitted( &self, host: &str, ) -> Result<Vec<SocketAddr>, ResolveFailure>

Resolve host and keep the addresses the policy permits. The resolver installed on every outbound client runs this; a caller whose transport hides the resolver’s error (rmcp wraps it as text) runs it first via Self::check_url so the refusal is reported in its own words.

Source

pub async fn check_url(&self, url: &str) -> Result<(), String>

Refuse a URL the policy forbids, whether its host is a literal IP or a name that resolves only to forbidden addresses. A name that fails to resolve at all passes: that failure belongs to the connection attempt, which reports it in its own terms. Skips DNS entirely when the policy permits everything.

Trait Implementations§

Source§

impl Clone for NetworkPolicy

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

impl Debug for NetworkPolicy

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for NetworkPolicy

Source§

fn default() -> Self

Returns the “default value” for a type. 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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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> 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<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