1- pub use error:: { IpStackError , Result } ;
1+ use crate :: {
2+ packet:: IpStackPacketProtocol ,
3+ stream:: { IpStackStream , IpStackTcpStream , IpStackUdpStream , IpStackUnknownTransport } ,
4+ } ;
5+ use ahash:: AHashMap ;
6+ use log:: { error, trace} ;
27use packet:: { NetworkPacket , NetworkTuple } ;
38use std:: {
4- collections:: {
5- hash_map:: Entry :: { Occupied , Vacant } ,
6- HashMap ,
7- } ,
9+ collections:: hash_map:: Entry :: { Occupied , Vacant } ,
810 time:: Duration ,
911} ;
1012use tokio:: {
@@ -13,16 +15,12 @@ use tokio::{
1315 sync:: mpsc:: { self , UnboundedReceiver , UnboundedSender } ,
1416} ;
1517
16- use log:: { error, trace} ;
17-
18- use crate :: {
19- packet:: IpStackPacketProtocol ,
20- stream:: { IpStackStream , IpStackTcpStream , IpStackUdpStream , IpStackUnknownTransport } ,
21- } ;
2218mod error;
2319mod packet;
2420pub mod stream;
2521
22+ pub use self :: error:: { IpStackError , Result } ;
23+
2624const DROP_TTL : u8 = 0 ;
2725
2826#[ cfg( unix) ]
@@ -89,7 +87,8 @@ impl IpStack {
8987 let ( accept_sender, accept_receiver) = mpsc:: unbounded_channel :: < IpStackStream > ( ) ;
9088
9189 tokio:: spawn ( async move {
92- let mut streams: HashMap < NetworkTuple , UnboundedSender < NetworkPacket > > = HashMap :: new ( ) ;
90+ let mut streams: AHashMap < NetworkTuple , UnboundedSender < NetworkPacket > > =
91+ AHashMap :: new ( ) ;
9392 let mut buffer = [ 0u8 ; u16:: MAX as usize ] ;
9493
9594 let ( pkt_sender, mut pkt_receiver) = mpsc:: unbounded_channel :: < NetworkPacket > ( ) ;
@@ -102,7 +101,16 @@ impl IpStack {
102101 continue ;
103102 } ;
104103 if let IpStackPacketProtocol :: Unknown = packet. transport_protocol( ) {
105- accept_sender. send( IpStackStream :: UnknownTransport ( IpStackUnknownTransport :: new( packet. src_addr( ) . ip( ) , packet. dst_addr( ) . ip( ) , packet. payload, & packet. ip, config. mtu, pkt_sender. clone( ) ) ) ) ?;
104+ accept_sender. send(
105+ IpStackStream :: UnknownTransport ( IpStackUnknownTransport :: new(
106+ packet. src_addr( ) . ip( ) ,
107+ packet. dst_addr( ) . ip( ) ,
108+ packet. payload,
109+ & packet. ip,
110+ config. mtu,
111+ pkt_sender. clone( )
112+ ) )
113+ ) ?;
106114 continue ;
107115 }
108116
@@ -115,7 +123,14 @@ impl IpStack {
115123 Vacant ( entry) => {
116124 match packet. transport_protocol( ) {
117125 IpStackPacketProtocol :: Tcp ( h) => {
118- match IpStackTcpStream :: new( packet. src_addr( ) , packet. dst_addr( ) , h, pkt_sender. clone( ) , config. mtu, config. tcp_timeout) {
126+ match IpStackTcpStream :: new(
127+ packet. src_addr( ) ,
128+ packet. dst_addr( ) ,
129+ h,
130+ pkt_sender. clone( ) ,
131+ config. mtu,
132+ config. tcp_timeout
133+ ) {
119134 Ok ( stream) => {
120135 entry. insert( stream. stream_sender( ) ) ;
121136 accept_sender. send( IpStackStream :: Tcp ( stream) ) ?;
@@ -130,7 +145,14 @@ impl IpStack {
130145 }
131146 }
132147 IpStackPacketProtocol :: Udp => {
133- let stream = IpStackUdpStream :: new( packet. src_addr( ) , packet. dst_addr( ) , packet. payload, pkt_sender. clone( ) , config. mtu, config. udp_timeout) ;
148+ let stream = IpStackUdpStream :: new(
149+ packet. src_addr( ) ,
150+ packet. dst_addr( ) ,
151+ packet. payload,
152+ pkt_sender. clone( ) ,
153+ config. mtu,
154+ config. udp_timeout
155+ ) ;
134156 entry. insert( stream. stream_sender( ) ) ;
135157 accept_sender. send( IpStackStream :: Udp ( stream) ) ?;
136158 }
0 commit comments