whitequark
591993014e
Reject, not accept, TCP RST packets in LISTEN state.
...
These packets may have been destined for a different socket.
2017-01-17 04:33:37 +00:00
whitequark
74d1eb86b6
Add TcpSocket::abort().
2017-01-17 01:24:51 +00:00
whitequark
a75f7d4bf0
Reject all TCP packets in the CLOSED state.
2017-01-17 00:24:47 +00:00
whitequark
4da2598ea7
Properly document TCP state machine query methods.
2017-01-17 00:21:07 +00:00
whitequark
f126eab193
Distinguish sockets by debug identifiers (socket set indexes).
2017-01-16 23:35:21 +00:00
whitequark
40716a348d
Do not send RST in response to invalid SEQ or ACK.
2017-01-16 16:58:45 +00:00
whitequark
bd01cdef78
Always display meaningful endpoint in trace messages.
2017-01-16 16:34:24 +00:00
whitequark
51d8afe579
Fix inverted meaning of TcpSocketBuffer::empty().
2017-01-15 11:00:04 +00:00
whitequark
c0697cf37d
Add lots of sanity checking to TCP test helpers.
2017-01-14 12:56:58 +00:00
whitequark
a864157feb
Do not try to retransmit SYN as if it was in data stream.
2017-01-14 12:18:00 +00:00
whitequark
578d7bce5f
Calculate IP payload length from the total length field.
...
Before this commit, IP payload length was calculated by subtracting
the IP header length from the total underlying buffer length, which
fails if the underlying buffer has padding, e.g. like Ethernet
does.
2017-01-14 11:07:06 +00:00
whitequark
8b04d8bebe
Try to get TCP state query methods into a saner state.
2017-01-14 09:13:25 +00:00
whitequark
f7bc7fe364
Do not use UTF-8 in net_trace!().
...
This may interact badly with other tooling.
2017-01-14 07:10:20 +00:00
whitequark
dc8809288f
Fix a bug that caused .send();.close(); to result in a lost FIN.
2017-01-14 06:59:58 +00:00
whitequark
cca835a45a
Update TcpSocket::{can,may}_{send,recv} APIs.
2017-01-14 06:59:58 +00:00
whitequark
67430aa589
Use the managed crate.
2017-01-10 11:04:00 +00:00
whitequark
27ccfc1bb0
Implement TCP retransmission.
2016-12-31 08:35:46 +00:00
whitequark
818e98f47a
TCP: retransmit ACK when receiving duplicate SEQ.
2016-12-31 01:33:46 +00:00
whitequark
be68066152
#[inline(always)] → #[inline]
2016-12-30 16:55:31 +00:00
whitequark
287affb447
Implement the TCP TIME-WAIT state.
2016-12-28 05:33:12 +00:00
whitequark
94963faf12
Implement the TCP CLOSING state.
2016-12-28 04:56:49 +00:00
whitequark
3e7a1ee575
Implement the TCP FIN-WAIT-2 state.
2016-12-28 04:10:17 +00:00
whitequark
9dc931dbe2
Implement the TCP FIN-WAIT-1 state.
2016-12-28 04:02:43 +00:00
whitequark
71268ace88
Get rid of the #![feature(const_fn)].
2016-12-28 00:08:51 +00:00
whitequark
df69303624
Fix state names in documentation.
2016-12-27 23:28:57 +00:00
whitequark
979cd4c1bf
Implement the TCP LAST-ACK state.
2016-12-27 23:27:33 +00:00
whitequark
874264503d
Implement the TCP close operation.
2016-12-27 22:43:16 +00:00
whitequark
feaef0d7c4
Fix TCP sequence number in multiple consecutive non-ACKed data packets.
2016-12-27 20:39:46 +00:00
whitequark
17f96ba929
Fix TcpSocket::can_recv().
2016-12-27 20:17:46 +00:00
whitequark
71d1b4061f
Fix ACK validation of TCP RST packets.
2016-12-27 20:17:35 +00:00
whitequark
867dda659d
Fix several TCP out-of-bounds reads from the transmit buffer.
2016-12-27 20:17:03 +00:00
whitequark
69427c9e2f
Add TcpSocket::is_connected().
2016-12-27 18:54:45 +00:00
whitequark
6b592742fd
Use the correct wrapping operations on TCP sequence numbers.
2016-12-27 18:34:13 +00:00
whitequark
bbff907e87
Fix examples.
2016-12-27 18:04:39 +00:00
whitequark
a8fc4fd832
Improve the user-facing TCP socket API.
2016-12-27 17:49:40 +00:00
whitequark
09040f3e91
Accept TCP ACK packets in CLOSE_WAIT state.
2016-12-27 14:13:42 +00:00
whitequark
d11016b138
Simplify TCP ACK handling.
2016-12-27 14:04:30 +00:00
whitequark
751a2269c3
Add support for TCP FIN in ESTABLISHED state.
2016-12-27 13:34:48 +00:00
whitequark
79553e81d4
Fix TCP incoming sequence number check.
2016-12-26 17:24:37 +00:00
whitequark
2d562c10fa
Add support for multiple outgoing in-flight TCP packets.
2016-12-26 16:59:39 +00:00
whitequark
3917ba5836
Shrink the buffers in examples for ease of testing.
2016-12-26 16:29:33 +00:00
whitequark
a8b4ed2deb
Implement the userspace side of TCP sockets.
2016-12-26 15:05:46 +00:00
whitequark
0e20ea9205
Implement TCP data transmission.
2016-12-26 14:24:17 +00:00
whitequark
0bf822c77e
Implement TCP RST handling.
2016-12-26 13:54:26 +00:00
whitequark
83f886826f
Validate ACK for TCP RST packets.
2016-12-26 13:10:39 +00:00
whitequark
f468f47959
Validate ACK even in TCP LISTEN state.
2016-12-26 13:00:39 +00:00
whitequark
2de98aea06
Add tests for TCP error conditions.
2016-12-26 12:44:41 +00:00
whitequark
25d453447f
Generalize the TCP tests to accept multiple packets.
2016-12-26 12:38:40 +00:00
whitequark
ea78053dc1
Factor out IpRepr into the wire module.
2016-12-26 11:20:20 +00:00
whitequark
ea07e79bdf
Group IP header parts in the socket layer as struct IpRepr.
2016-12-26 10:06:49 +00:00