whitequark
02abd7a983
In examples, print packet dumps with timestamps, too.
...
This helps debugging retransmit issues.
2017-06-26 08:01:00 +00:00
whitequark
2704a10dd8
Add missing #[derive]s on wire::IpVersion.
2017-06-26 06:06:18 +00:00
Egor Karavaev
4f2804e104
Don't reply to a TCP RST packet with another TCP RST packet.
2017-06-26 05:48:30 +00:00
Egor Karavaev
1e8cd1a65f
Refactor EthernetInterface::poll.
...
Also, after this commit, we stop iterating over TCP/UDP sockets after
finding one that accepts the packet.
2017-06-26 05:48:27 +00:00
whitequark
0f0c545755
Make sure representation emission covers every octet of the buffer.
...
Also fix a bug where TcpRepr::emit would not clear the urgent
pointer.
2017-06-26 03:44:36 +00:00
whitequark
050dd788c1
Set TCP PSH flag when sending the last buffered data.
2017-06-25 23:12:30 +00:00
whitequark
b86d22701d
Expose PSH flag in TcpRepr.
2017-06-25 08:20:25 +00:00
whitequark
db75f70fa3
Fix a few typos in TCP socket code (NFC).
2017-06-25 08:05:37 +00:00
whitequark
0a9c5d52dd
Remove an unnecessary length check.
2017-06-24 16:34:55 +00:00
whitequark
74823b0dff
try! → ?
2017-06-24 16:34:32 +00:00
whitequark
023d8deea5
Disable checksum validation on wire level when fuzzing.
2017-06-24 15:26:15 +00:00
whitequark
fce23593fc
Fix insufficient length validation in TCP packets.
...
Found via cargo-fuzz.
2017-06-24 12:29:39 +00:00
whitequark
c73af2b247
Fix insufficient length validation in UDP packets.
...
Found via cargo-fuzz.
2017-06-24 12:15:18 +00:00
whitequark
6790eac6d9
Fix a crash parsing a malformed IPv4 packet.
...
Found via cargo-fuzz.
2017-06-24 12:02:34 +00:00
whitequark
9f8db1d8f9
Factor out wire::tcp::field::OPTIONS.
2017-06-24 12:02:34 +00:00
whitequark
315b51d7da
Fix a crash parsing a truncated TCP packet with options.
...
Found via cargo-fuzz.
2017-06-24 11:48:17 +00:00
whitequark
6842d7013d
Fix a crash parsing malformed TCP options.
...
Found via cargo-fuzz.
2017-06-24 11:48:17 +00:00
whitequark
c09e96a657
Fix a crash printing a malformed TCP packet.
...
Found via cargo-fuzz.
2017-06-24 11:48:13 +00:00
whitequark
3eaa96957c
Add packet parser fuzzer.
2017-06-24 11:43:12 +00:00
whitequark
8b27330c8b
Do not attempt to validate length of packets being emitted.
...
This is a form of an uninitialized read bug; although safe it caused
panics. In short, transmit buffers received from the network stack
should be considered uninitialized (in practice they will often
contain previously transmitted packets or parts thereof). Wrapping
them with the only method we had (e.g. Ipv4Packet) treated the buffer
as if it contained a valid incoming packet, which can easily fail
with Error::Truncated.
This commit splits every `fn new(buffer: T) -> Result<Self, Error>`
method on a `Packet` into three smaller ones:
* `fn check_len(&self) -> Result<(), Error>`, purely a validator;
* `fn new(T) -> Self`, purely a wrapper;
* `fn new_checked(T) -> Result<Self, Error>`, a validating wrapper.
This makes it easy to process ingress packets (using `new_checked`),
egress packets (using `new`), and, if needed, maintain the invariants
at any point during packet construction (using `check_len`).
Fixes #17 .
2017-06-24 11:42:32 +00:00
whitequark
cc5fb0e5ef
Clean up a few doctests.
2017-06-24 09:02:12 +00:00
whitequark
be29789192
Fix an unimplemented!() invocation that should be unreachable!().
2017-06-22 00:38:45 +00:00
whitequark
83cf86f1d0
Unbreak parsing of ICMP unreachable messages.
...
Fixes #16 .
2017-06-21 04:08:33 +00:00
whitequark
adc51fab7f
Actually export socket::SocketSetItem publicly.
...
It was unintentionally left unnameable. Fixes #14 .
2017-06-21 03:57:13 +00:00
Egor Karavaev
8d7fa94a6d
Add the `ping` example.
2017-06-21 03:51:02 +00:00
Egor Karavaev
ca56baca65
Add `RawSocket`.
2017-06-21 03:29:31 +00:00
Egor Karavaev
e927b09ba8
`IpRepr::lower` replaces unspecified src_addr in Ipv4Repr as well.
2017-06-21 03:01:15 +00:00
Egor Karavaev
c1c4ed68c5
Factor out the `RingBuffer` container.
2017-06-21 02:50:10 +00:00
Egor Karavaev
59fc0c0358
Factor out the "raw_socket" and "tap_interface" features
...
This makes it possible to build smoltcp with the "std" feature on platforms
without libc, such as redox.
2017-06-15 10:12:11 +00:00
whitequark
f29b610801
Remove accidentally committed change.
2017-05-29 17:15:35 +00:00
whitequark
53be7a7747
Add a sinkhole to the server example.
2017-05-29 16:54:51 +00:00
whitequark
5bac3e5a02
Fix no-std build.
2017-05-29 11:04:49 +00:00
whitequark
91ef5c60c3
Add packet shaping to the fault injector.
2017-05-29 10:53:30 +00:00
whitequark
73bb4b8593
Implement TCP TIME-WAIT timeouts.
2017-04-21 16:01:49 +00:00
whitequark
8087bf3755
Fix a typo in documentation.
2017-04-21 15:59:55 +00:00
whitequark
555825e49e
Clamp TCP receive window to MSS multiplied by maximum burst size.
...
This is a conservative bound; if we don't have enough buffers
to receive more than four segments, clearly we shouldn't advertise
our ability to.
It however will only work reliably with exactly one TCP connection
continuously receiving; for two, another window adjustment mechanism
will be needed for reliable reception.
2017-03-07 11:21:49 +00:00
whitequark
1d46ccf432
fn Device::mtu() -> usize → Device::limits() -> DeviceLimits
2017-03-07 11:10:26 +00:00
whitequark
6ad8872e15
Bump version.
...
Really, this should be done immediately after release and not
immediately before, like I've been doing it.
2017-03-07 10:33:28 +00:00
whitequark
c73298f01e
Improve handling of TCP ACK packets in FIN-* states.
...
Previously, sockets could get stuck in the CLOSING state, after
the sequence described in the new test_mutual_close_with_data_2.
The root cause was that some state machine transitions got
folded into ACK handling.
Now, all transitions are handled in the same match statement,
and ACK handling is broken up around it.
2017-03-07 10:17:30 +00:00
whitequark
393ebbe682
Don't put non-unicast (IP or Ethernet) addresses into ARP cache.
...
Thanks @little-dude for pointing this out--it's probably a DoS bug.
2017-03-07 06:32:18 +00:00
whitequark
b305797cb4
Trace eviction and fill in SliceArpCache.
2017-03-07 06:25:47 +00:00
Corentin Henry
0f2b05ede7
arp: increment lru when inserting a new entry
2017-03-07 06:04:40 +00:00
Corentin Henry
40d3a3ada8
arp: use valid unicast ip addresses for tests
2017-03-07 05:20:28 +00:00
whitequark
06a019becf
Update README to mention lack of multicast support.
2017-03-06 04:01:06 +00:00
whitequark
5137608aed
Follow-up to b9e79d19; always process broadcast frames.
2017-03-06 04:00:13 +00:00
whitequark
d25eebc0ef
Ignore Ethernet frames for which we aren't a destination.
2017-03-06 03:58:19 +00:00
whitequark
c9a2ac7a40
Update README.
2017-03-05 06:18:50 +00:00
whitequark
ad91787c47
Bump version.
2017-03-05 06:16:18 +00:00
whitequark
ae89abe0a4
Update README to explain how the client example works.
2017-03-05 06:15:15 +00:00
whitequark
9ce66375c4
Add the "embedded" crate category.
2017-03-05 05:49:53 +00:00