Reject all TCP packets in the CLOSED state.
This commit is contained in:
parent
4da2598ea7
commit
a75f7d4bf0
|
@ -542,6 +542,8 @@ impl<'a> TcpSocket<'a> {
|
||||||
/// See [Socket::process](enum.Socket.html#method.process).
|
/// See [Socket::process](enum.Socket.html#method.process).
|
||||||
pub fn process(&mut self, _timestamp: u64, ip_repr: &IpRepr,
|
pub fn process(&mut self, _timestamp: u64, ip_repr: &IpRepr,
|
||||||
payload: &[u8]) -> Result<(), Error> {
|
payload: &[u8]) -> Result<(), Error> {
|
||||||
|
if self.state == State::Closed { return Err(Error::Rejected) }
|
||||||
|
|
||||||
if ip_repr.protocol() != IpProtocol::Tcp { return Err(Error::Rejected) }
|
if ip_repr.protocol() != IpProtocol::Tcp { return Err(Error::Rejected) }
|
||||||
|
|
||||||
let packet = try!(TcpPacket::new(&payload[..ip_repr.payload_len()]));
|
let packet = try!(TcpPacket::new(&payload[..ip_repr.payload_len()]));
|
||||||
|
@ -1122,6 +1124,18 @@ mod test {
|
||||||
}, Err(Error::Rejected));
|
}, Err(Error::Rejected));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_closed_reject_after_listen() {
|
||||||
|
let mut s = socket();
|
||||||
|
s.listen(LOCAL_END).unwrap();
|
||||||
|
s.close();
|
||||||
|
|
||||||
|
send!(s, TcpRepr {
|
||||||
|
control: TcpControl::Syn,
|
||||||
|
..SEND_TEMPL
|
||||||
|
}, Err(Error::Rejected));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_closed_close() {
|
fn test_closed_close() {
|
||||||
let mut s = socket();
|
let mut s = socket();
|
||||||
|
|
Loading…
Reference in New Issue