@@ -13,7 +13,7 @@ use byte_string::ByteStr;
13
13
use ipnet:: IpNet ;
14
14
use log:: { debug, error, info, trace, warn} ;
15
15
use shadowsocks:: config:: Mode ;
16
- use smoltcp:: wire:: { Icmpv4Packet , Icmpv6Packet , IpProtocol , TcpPacket , UdpPacket } ;
16
+ use smoltcp:: wire:: { IpProtocol , TcpPacket , UdpPacket } ;
17
17
use tokio:: io:: AsyncReadExt ;
18
18
use tun:: { AsyncDevice , Configuration as TunConfiguration , Device as TunDevice , Error as TunError , Layer } ;
19
19
@@ -267,7 +267,9 @@ impl Tun {
267
267
}
268
268
}
269
269
IpProtocol :: Icmp | IpProtocol :: Icmpv6 => {
270
- self . handle_icmp_packet ( & packet) . await ?;
270
+ // ICMP is handled by TCP's Interface.
271
+ // smoltcp's interface will always send replies to EchoRequest
272
+ self . tcp . drive_interface_state ( frame) . await ;
271
273
}
272
274
_ => {
273
275
debug ! ( "IP packet ignored (protocol: {:?})" , packet. protocol( ) ) ;
@@ -277,25 +279,4 @@ impl Tun {
277
279
278
280
Ok ( ( ) )
279
281
}
280
-
281
- async fn handle_icmp_packet ( & self , packet : & IpPacket < & [ u8 ] > ) -> smoltcp:: Result < ( ) > {
282
- match * packet {
283
- IpPacket :: Ipv4 ( ref ipv4) => {
284
- let icmp = Icmpv4Packet :: new_checked ( ipv4. payload ( ) ) ?;
285
- trace ! ( "[TUN] received {}" , icmp) ;
286
- }
287
- IpPacket :: Ipv6 ( ref ipv6) => {
288
- let icmp = Icmpv6Packet :: new_checked ( ipv6. payload ( ) ) ?;
289
- trace ! (
290
- "[TUN] received ICMPv6 {:?} code={} echo_ident={} echo_seq_no={}" ,
291
- icmp. msg_type( ) ,
292
- icmp. msg_code( ) ,
293
- icmp. echo_ident( ) ,
294
- icmp. echo_seq_no( )
295
- ) ;
296
- }
297
- }
298
-
299
- Ok ( ( ) )
300
- }
301
282
}
0 commit comments