@@ -228,24 +228,25 @@ impl<'a, 'b, 'c, DeviceT: Device + 'a> Interface<'a, 'b, 'c, DeviceT> {
228
228
229
229
if !handled && protocol == IpProtocol :: Tcp {
230
230
let tcp_packet = try!( TcpPacket :: new ( ipv4_packet. payload ( ) ) ) ;
231
-
232
- let tcp_reply_repr = TcpRepr {
233
- src_port : tcp_packet. dst_port ( ) ,
234
- dst_port : tcp_packet. src_port ( ) ,
235
- control : TcpControl :: Rst ,
236
- seq_number : tcp_packet. ack_number ( ) ,
237
- ack_number : Some ( tcp_packet. seq_number ( ) +
238
- tcp_packet. segment_len ( ) ) ,
239
- window_len : 0 ,
240
- payload : & [ ]
241
- } ;
242
- let ipv4_reply_repr = Ipv4Repr {
243
- src_addr : dst_addr,
244
- dst_addr : src_addr,
245
- protocol : IpProtocol :: Tcp ,
246
- payload_len : tcp_reply_repr. buffer_len ( )
247
- } ;
248
- response = Response :: Tcpv4 ( ipv4_reply_repr, tcp_reply_repr) ;
231
+ if !tcp_packet. rst ( ) {
232
+ let tcp_reply_repr = TcpRepr {
233
+ src_port : tcp_packet. dst_port ( ) ,
234
+ dst_port : tcp_packet. src_port ( ) ,
235
+ control : TcpControl :: Rst ,
236
+ seq_number : tcp_packet. ack_number ( ) ,
237
+ ack_number : Some ( tcp_packet. seq_number ( ) +
238
+ tcp_packet. segment_len ( ) ) ,
239
+ window_len : 0 ,
240
+ payload : & [ ]
241
+ } ;
242
+ let ipv4_reply_repr = Ipv4Repr {
243
+ src_addr : dst_addr,
244
+ dst_addr : src_addr,
245
+ protocol : IpProtocol :: Tcp ,
246
+ payload_len : tcp_reply_repr. buffer_len ( )
247
+ } ;
248
+ response = Response :: Tcpv4 ( ipv4_reply_repr, tcp_reply_repr) ;
249
+ }
249
250
} else if !handled {
250
251
let reason;
251
252
if protocol == IpProtocol :: Udp {
0 commit comments