@@ -13,7 +13,7 @@ use byte_string::ByteStr;
1313use ipnet:: IpNet ;
1414use log:: { debug, error, info, trace, warn} ;
1515use shadowsocks:: config:: Mode ;
16- use smoltcp:: wire:: { Icmpv4Packet , Icmpv6Packet , IpProtocol , TcpPacket , UdpPacket } ;
16+ use smoltcp:: wire:: { IpProtocol , TcpPacket , UdpPacket } ;
1717use tokio:: io:: AsyncReadExt ;
1818use tun:: { AsyncDevice , Configuration as TunConfiguration , Device as TunDevice , Error as TunError , Layer } ;
1919
@@ -267,7 +267,9 @@ impl Tun {
267267 }
268268 }
269269 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 ;
271273 }
272274 _ => {
273275 debug ! ( "IP packet ignored (protocol: {:?})" , packet. protocol( ) ) ;
@@ -277,25 +279,4 @@ impl Tun {
277279
278280 Ok ( ( ) )
279281 }
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- }
301282}
0 commit comments