whitequark
7c9a072dd2
Fix a typo that broke ARP replies.
2017-08-22 07:44:43 +00:00
whitequark
f9c6c0249b
Listening TCP sockets should reject, not drop, ACKs.
2017-08-21 07:29:32 +00:00
whitequark
39f328b80f
Add TcpSocket::{peek,peek_slice}.
2017-08-21 07:28:38 +00:00
whitequark
925e13b61a
Simplify ARP handling code in EthernetInterface.
2017-08-21 07:28:38 +00:00
whitequark
15085bd8ba
Fix a file descriptor leak in TapInterfaceDesc::interface_mtu.
2017-08-21 07:28:32 +00:00
whitequark
699f5daa3e
utils::Dispose → io::Sink.
2017-08-21 07:28:32 +00:00
whitequark
66a6dde59c
README.md: cleanup.
2017-08-21 07:28:32 +00:00
whitequark
be1038f382
Assert that the transmit frame returned by driver has right length.
...
We checked for frames too short before, but frames too long are
troublesome too, since e.g. TCP and UDP do not carry an explicit
payload length in their headers.
2017-08-06 15:09:55 +00:00
David Coffill
55ac6737b2
Fix build on i686 by using libc::suseseconds_t instead of i64
2017-08-02 07:12:36 +00:00
whitequark
e0d8fcfb72
Emit exceptional events with the DEBUG log level, not TRACE.
2017-08-01 11:21:58 +00:00
whitequark
db5ecb353a
Only return Err(Rejected) from TcpSocket::process on endpoint mismatch.
...
Otherwise, a future SocketSet that tries to route packets by using
IP/port numbers instead of brute force would result in different
semantics.
2017-08-01 11:15:12 +00:00
whitequark
ffbb885586
Remove IpEndpoint::accepts.
...
Unclear purpose, one use, we don't need it.
2017-08-01 11:08:48 +00:00
whitequark
8724157b54
Fix warnings.
2017-07-31 07:59:01 +00:00
whitequark
7825bc6070
Implement fmt::Write for TcpSocket.
2017-07-30 06:59:01 +00:00
whitequark
a1f865f6d3
Rework and test raw sockets.
2017-07-30 02:02:41 +00:00
whitequark
ae903e8841
Add UdpSocket::is_open, similar to TcpSocket::is_open in function.
...
Fixes #31 .
2017-07-30 01:17:58 +00:00
whitequark
be0854127a
Remove unused imports.
2017-07-30 01:09:14 +00:00
whitequark
7b194c5d36
Update README.
...
Fixes #30 .
2017-07-30 00:56:56 +00:00
whitequark
f44c9a808a
Simplify signature of UdpSocket::send_slice.
...
UdpSocket::send_slice always returns Ok(data.len()) or an error,
so the result isn't meaningful.
2017-07-29 08:36:55 +00:00
whitequark
02f005a2bb
Put the debug_id field first in sockets.
...
This has been annoying me far too long.
2017-07-28 11:55:59 +00:00
whitequark
ad12573f62
Rework and test UDP sockets.
...
Before, errors such as packets not fitting into a buffer would have
resulted in panics, and errors such as unbound sockets were
simply ignored.
2017-07-27 22:30:01 +00:00
whitequark
8d8a4ea583
Get rid of Result<_, ()>.
...
The use of this type has several drawbacks:
* It does not allow distinguishing between different error
conditions. In fact, we wrongly conflated some of them
before this commit.
* It does not allow propagation via ? and requires manual use
of map_err, which is especially tiresome for downstream code.
* It prevents us from expanding the set of error conditions
even if right now we have only one.
* It prevents us from blanket using Result<T> everywhere
(a nitpick at most).
Instead, use Result<T, Error> everywhere, and differentiate error
conditions where applicable.
2017-07-27 13:55:47 +00:00
whitequark
7838434165
Remove useless redundant tests.
2017-07-27 13:38:31 +00:00
whitequark
8a2432dcd7
Rework error handling in TcpSocket::connect.
2017-07-27 12:27:33 +00:00
whitequark
a61c1a5d2e
Rearrange errors and clarify their semantics.
2017-07-27 12:10:04 +00:00
whitequark
24bb0eab9d
Update a stale docstring.
2017-07-27 11:26:39 +00:00
whitequark
a3423b35f4
as_unspecified → to_unspecified
2017-07-27 11:26:07 +00:00
whitequark
83c41fd760
Simplify impls of AsSocket.
2017-07-24 17:00:00 +00:00
whitequark
d35fd9940e
Fix ICMP error returned by EthernetInterface for unknown IP protocols.
2017-07-24 07:07:43 +00:00
whitequark
936bd44f8f
Clean up socket error handling in EthernetInterface.
2017-07-24 07:01:35 +00:00
whitequark
c8d714cd87
Reorganize EthernetInterface impl. NFC.
2017-07-24 06:56:06 +00:00
whitequark
776ca6eada
Rename RingBuffer::{dequeue_mut→dequeue}, remove RingBuffer::dequeue.
...
There's nothing dequeue can do that dequeue_mut cannot.
2017-07-24 05:30:22 +00:00
whitequark
38afc64f61
Accept TCP FIN packets in SYN-RECEIVED state.
2017-07-23 23:51:56 +00:00
whitequark
ab4593ea6c
Fix double tracing in the loopback example.
2017-07-23 23:18:37 +00:00
whitequark
1c41f2d7fa
Fix determination of local address from incoming packets.
...
We've advertised this capability before in examples, but it did not
actually work.
2017-07-23 23:07:55 +00:00
whitequark
bcd9be3d17
Update README.
2017-07-23 22:36:56 +00:00
whitequark
7ba49607bf
Update fault injector so that rate limiting works without std.
2017-07-23 15:10:57 +00:00
whitequark
a89e57b128
Add --pcap option to all our examples.
...
Also, generally reorganize and clean up option handling.
2017-07-23 14:57:04 +00:00
whitequark
250a84e513
Implement a Device that emits a stream in libpcap format.
2017-07-23 14:56:24 +00:00
whitequark
e381f6ec3f
Fix an off-by-three-orders-of-magnitude error.
2017-07-23 12:03:56 +00:00
whitequark
cf37a34443
Fix argument order in Tracer::new callbacks.
2017-07-23 12:01:53 +00:00
whitequark
a9e6b49aa6
Rename into_lower → into_inner.
2017-07-23 10:20:05 +00:00
whitequark
aeba4f9bc6
Clean up some type variable names and trait bounds. NFC.
2017-07-23 10:15:56 +00:00
whitequark
b97cacd521
Inject the current timestamp into Device::{transmit,receive}.
...
Various parts of smoltcp require an arrow of time; a monotonically
increasing timestamp. Most obviously this is TCP sockets, but
the tracer and the pcap writer devices also benefit from having
timestamps. There are a few ways this could be implemented:
1. using a static Cell, global for the entire smoltcp crate;
2. using a static method on Device;
3. using an instance method on Device;
4. passing the current timestamp into *Interface::poll.
The first two options are undesirable because they create a notion
of global clock, and interfere e.g. with mocking.
The third option is undesirable because not all devices are
inherently tied to a particular clock, e.g. a loopback device isn't.
Therefore, the timestamp is injected into both sockets and devices
through the *Interface::poll method.
2017-07-23 09:48:14 +00:00
whitequark
fe6fb087e5
Move macros into their own module.
...
This allows us to use `enum_with_unknown` in `phy`.
2017-07-23 07:54:36 +00:00
whitequark
eae7907f60
Add EthernetTracer, a specialization of Tracer for EthernetFrame.
...
This makes the loopback example much nicer, #[cfg]-wise.
2017-07-23 06:28:00 +00:00
whitequark
6dd833f1f7
Use proper clock mocking in the loopback example.
2017-07-23 06:08:13 +00:00
whitequark
bdfc47d633
Log correct delay when performing TCP retransmit.
...
Before, the delay was erroneously multiplied by 2 and also did not
take processing delay into account.
2017-07-23 05:09:38 +00:00
whitequark
051169a49d
Determine MTU in TapInterface instead of hardcoding 1536.
2017-07-23 04:40:35 +00:00
whitequark
94796a566b
Document the loopback.
2017-07-14 03:30:00 +00:00