Skip to main content

PortPublisher

Struct PortPublisher 

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

Manages published port listeners and inbound connections.

Spawns tokio listeners for each published port. When connections arrive, they are queued for the poll loop to create smoltcp sockets and initiate connections to the guest.

Implementations§

Source§

impl PortPublisher

Source

pub fn new( ports: &[PublishedPort], guest_ipv4: Option<Ipv4Addr>, guest_ipv6: Option<Ipv6Addr>, gateway_ipv4: Option<Ipv4Addr>, gateway_ipv6: Option<Ipv6Addr>, gateway_mac: [u8; 6], guest_mac: [u8; 6], policy: Arc<NetworkPolicy>, shared: Arc<SharedState>, tokio_handle: &Handle, ) -> Self

Create a new publisher and spawn listeners for all published ports.

Listeners are only spawned when at least one of guest_ipv4 / guest_ipv6 is Some; published ports need a smoltcp dial target. Each TCP listener task gates accepted connections through the supplied NetworkPolicy’s evaluate_ingress before queuing them; rejected connections drop with TCP RST (zero-linger) so the peer observes ECONNRESET.

Source

pub fn accept_inbound( &mut self, iface: &mut Interface, sockets: &mut SocketSet<'_>, shared: &Arc<SharedState>, tokio_handle: &Handle, )

Accept queued inbound connections: create smoltcp sockets and initiate connections to the guest.

Must be called each poll iteration.

Source

pub fn relay_data(&mut self, sockets: &mut SocketSet<'_>)

Relay data between smoltcp sockets and host relay tasks.

Source

pub fn relay_udp_outbound( &self, frame: &[u8], src: SocketAddr, dst: SocketAddr, ) -> bool

Relay a guest UDP datagram to a host peer that recently sent traffic to a UDP published port.

Returns true when the frame belongs to a published-port flow and should be consumed by the caller.

Source

pub fn cleanup_closed(&mut self, sockets: &mut SocketSet<'_>)

Remove closed inbound connections.

Only removes sockets in Closed state. Sockets in TimeWait are left for smoltcp’s 2*MSL timer to handle naturally.

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_mut_any(&mut self) -> &mut (dyn Any + 'static)

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> 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> Same for T

Source§

type Output = T

Should always be Self
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.
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