netstack smoltcp
v0.1.3
netstack لغرض خاص هو تحويل الحزم من/إلى واجهة TUN إلى تدفقات TCP وحزم UDP. ويستخدم smoltcp-rs باعتباره netstack الخلفية.
يوفر هذا الصندوق دعم netstack خفيف الوزن لأنظمة 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 ;
} ) ;
هذا المشروع مرخص بموجب أي من
في خيارك.
ما لم تنص صراحةً على خلاف ذلك، فإن أي مساهمة يتم إرسالها عمدًا لتضمينها في netstack-smoltcp بواسطتك، كما هو محدد في ترخيص Apache-2.0، يجب أن تكون مرخصة بشكل مزدوج على النحو الوارد أعلاه، دون أي شروط أو أحكام إضافية.
شكر خاص لهذه المشاريع الرائعة التي ألهمت netstack-smoltcp (بدون ترتيب معين):