netstack smoltcp
v0.1.3
一個網路堆疊,用於將來自/到 TUN 介面的封包轉換為 TCP 流和 UDP 封包。它使用 smoltcp-rs 作為後端網路堆疊。
該板條箱為 Linux、iOS、macOS、Android 和 Windows 提供輕量級 netstack 支援。目前,它適用於大多數目標,但主要測試了流行的平台,其中包括:
// let device = tun2::create_as_async(&cfg)?;
// let framed = device.into_framed();
let ( stack , runner , udp_socket , tcp_listener ) = netstack_smoltcp :: StackBuilder :: default ( )
. stack_buffer_size ( 512 )
. tcp_buffer_size ( 4096 )
. enable_udp ( true )
. enable_tcp ( true )
. enable_icmp ( true )
. build ( )
. unwrap ( ) ;
let mut udp_socket = udp_socket . unwrap ( ) ; // udp enabled
let mut tcp_listener = tcp_listener . unwrap ( ) ; // tcp/icmp enabled
if let Some ( runner ) = runner {
tokio :: spawn ( runner ) ;
}
let ( mut stack_sink , mut stack_stream ) = stack . split ( ) ;
let ( mut tun_sink , mut tun_stream ) = framed . split ( ) ;
// Reads packet from stack and sends to TUN.
tokio :: spawn ( async move {
while let Some ( pkt ) = stack_stream . next ( ) . await {
if let Ok ( pkt ) = pkt {
tun_sink . send ( pkt ) . await . unwrap ( ) ;
}
}
} ) ;
// Reads packet from TUN and sends to stack.
tokio :: spawn ( async move {
while let Some ( pkt ) = tun_stream . next ( ) . await {
if let Ok ( pkt ) = pkt {
stack_sink . send ( pkt ) . await . unwrap ( ) ;
}
}
} ) ;
// Extracts TCP connections from stack and sends them to the dispatcher.
tokio :: spawn ( async move {
handle_inbound_stream ( tcp_listener ) . await ;
} ) ;
// Receive and send UDP packets between netstack and NAT manager. The NAT
// manager would maintain UDP sessions and send them to the dispatcher.
tokio :: spawn ( async move {
handle_inbound_datagram ( udp_socket ) . await ;
} ) ;
該項目已獲得以下任一許可
由您選擇。
除非您另有明確說明,否則您有意提交的包含在 netstack-smoltcp 中的任何貢獻(如 Apache-2.0 許可證中所定義)均應如上所述獲得雙重許可,無需任何附加條款或條件。
特別感謝這些激發了 netstack-smoltcp 靈感的令人驚嘆的項目(排名不分先後):