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
whitequark
75ddbe9776
Add a bare-metal usage example.
2017-07-14 03:18:11 +00:00
whitequark
312ff93c86
Remove default impl for Device::limits().
...
We should not assume any default MTU.
2017-07-14 03:18:11 +00:00
whitequark
f3e54966fd
LoopbackInterface → Loopback.
2017-07-14 01:17:06 +00:00
whitequark
63ab7d4e7a
Implement loopback interfaces.
...
This also adds a default implementation of Device::limits.
2017-07-14 01:14:40 +00:00
whitequark
5556f09351
Annotate all simple getters with #[inline].
2017-07-04 18:46:36 +00:00
whitequark
3f9805b2c1
Remove *Socket::{process,dispatch} from public interface.
...
These no longer have to be public, since our required Rust version
has pub(crate).
2017-06-30 20:55:46 +00:00
whitequark
938fb99070
In {Tcp,Udp}Socket::process, make protocol check an assertion.
...
We filter sockets by type upstream of the process() calls.
2017-06-30 19:17:14 +00:00
whitequark
6cc2d494ca
Travis: require build on stable Rust to succeed.
2017-06-29 16:09:01 +00:00
whitequark
2c1e234b91
Remove Socket::{process,dispatch} from public interface.
...
These no longer have to be public, since our required Rust version
has pub(crate). In addition Socket::process is not used at all.
2017-06-29 15:56:03 +00:00
whitequark
6ad8fea31f
Fix a typo in 5c3fc493.
2017-06-27 21:51:56 +00:00