netstack smoltcp
v0.1.3
TUN 인터페이스에서/으로 패킷을 TCP 스트림 및 UDP 패킷으로 전환하는 특수 목적을 위한 넷스택입니다. 백엔드 넷스택으로 smoltcp-rs를 사용합니다.
이 상자는 Linux, iOS, macOS, Android 및 Windows에 대한 경량 넷스택 지원을 제공합니다. 현재 대부분의 대상에서 작동하지만 주로 다음을 포함하는 인기 있는 플랫폼을 테스트했습니다.
// 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 ;
} ) ;
이 프로젝트는 다음 중 하나에 따라 라이선스가 부여됩니다.
귀하의 선택에 따라.
달리 명시적으로 명시하지 않는 한, Apache-2.0 라이센스에 정의된 대로 귀하가 netstack-smoltcp에 포함하기 위해 의도적으로 제출한 기여는 추가 이용약관 없이 위와 같이 이중 라이센스가 부여됩니다.
netstack-smoltcp에 영감을 준 놀라운 프로젝트에 특별히 감사드립니다(특별한 순서 없음).