pub enum TransportMode {
Netstack,
Tun(TunConfig),
}Expand description
How the node’s application overlay data path is realized.
Defaults to Netstack, the userspace smoltcp netstack that needs no
privileges and is the right choice for the fork’s primary deployment (a privacy proxy / cloud
exit node running unprivileged in a container). Tun instead hands the
node’s overlay packets to a real kernel TUN interface, for embedders that want the host OS
networking stack (routes, sockets, DNS) to see the tailnet directly — closer to tailscaled’s
model than to Go tsnet’s in-process netstack.
Like the other dataplane fields this is not read inside ts_control: it is carried for
transport only and converted to a ts_transport_tun config by the runtime at the ts_runtime
boundary (ts_control must not depend on ts_transport_tun). The mode governs only the
application data path; it never changes the exit-node / forwarder egress path, which stays its
own IPv4-only userspace netstack regardless.
Variants§
Netstack
Userspace smoltcp netstack (default). No privileges required.
Tun(TunConfig)
Real kernel TUN interface. Requires privileges (root / CAP_NET_ADMIN on Linux) and a
platform that supports TUN (Linux /dev/net/tun, macOS utun).
Trait Implementations§
Source§impl Clone for TransportMode
impl Clone for TransportMode
Source§fn clone(&self) -> TransportMode
fn clone(&self) -> TransportMode
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TransportMode
impl Debug for TransportMode
Source§impl Default for TransportMode
impl Default for TransportMode
Source§fn default() -> TransportMode
fn default() -> TransportMode
Source§impl<'de> Deserialize<'de> for TransportMode
impl<'de> Deserialize<'de> for TransportMode
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<TransportMode, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<TransportMode, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
impl Eq for TransportMode
Source§impl PartialEq for TransportMode
impl PartialEq for TransportMode
Source§fn eq(&self, other: &TransportMode) -> bool
fn eq(&self, other: &TransportMode) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for TransportMode
impl Serialize for TransportMode
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for TransportMode
Auto Trait Implementations§
impl Freeze for TransportMode
impl RefUnwindSafe for TransportMode
impl Send for TransportMode
impl Sync for TransportMode
impl Unpin for TransportMode
impl UnsafeUnpin for TransportMode
impl UnwindSafe for TransportMode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<A, T> DynMessage<A> for T
impl<A, T> DynMessage<A> for T
Source§fn handle_dyn<'a>(
self: Box<T>,
state: &'a mut A,
actor_ref: ActorRef<A>,
tx: Option<Sender<Result<Box<dyn Any + Send>, SendError<Box<dyn Any + Send>, Box<dyn Any + Send>>>>>,
stop: &'a mut bool,
) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn ReplyError>>> + Send + 'a>>
fn handle_dyn<'a>( self: Box<T>, state: &'a mut A, actor_ref: ActorRef<A>, tx: Option<Sender<Result<Box<dyn Any + Send>, SendError<Box<dyn Any + Send>, Box<dyn Any + Send>>>>>, stop: &'a mut bool, ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn ReplyError>>> + Send + 'a>>
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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