whitequark
ee6c1f34b3
Build release testsuite binaries with complete debug information.
2017-12-22 19:38:17 +00:00
whitequark
436f4ef624
Correctly handle retransmission of lost-received-lost TCP segments.
...
Thanks @pothos for initial analysis of the issue.
2017-12-22 19:31:04 +00:00
whitequark
ae17151f2a
Fix a few documentation issues. NFC.
2017-12-22 13:13:43 +00:00
whitequark
a45b3d9eab
TcpSocket::recv_impl should have never been public, oops.
2017-12-22 13:11:11 +00:00
whitequark
85487bf3bc
EthernetInterface::set_ipv4_gateway should panic on non-unicast addrs.
2017-12-22 13:07:11 +00:00
whitequark
f1a7fbe973
Split `poll_at`/`poll_delay` out of `poll`.
...
The previous model was flawed. Consider the following case:
* The main loop looks as follows (pseudocode):
loop {
let _ = (tcp:1234).read_all()
wait(iface.poll())
}
* The remote end is continuously transmitting data and at some
point fills the window of (tcp:1234), stopping the transmission
afterwards.
* The local end processes the packets and, as a part of egress
routine, emits an ACK. That also updates the window, and
the socket's poll_at() routine returns None, since there is
nothing to transmit or retransmit.
* The local end now waits indefinitely even though it can start
processing the data in the socket buffers right now.
2017-12-22 12:59:52 +00:00
whitequark
fec3bb32eb
Make the log crate properly optional.
2017-12-22 09:57:38 +00:00
whitequark
5ea177e6ab
Add a stress test.
...
Run it without the `log` feature and in release mode:
$ cargo run --release \
--no-default-features \
--features std,phy-tap_interface,socket-tcp \
--example stress tap0 \
[reader|writer]
There are currently two bugs exposed by it:
* a crash in the reader mode,
* slow-down in the writer mode.
2017-12-22 09:43:00 +00:00
whitequark
6d6635a4a9
Oops, don't make examples depend on a nonexistent feature.
...
It's a Cargo bug that this is not an error (and thus went unnoticed).
2017-12-22 09:29:56 +00:00
whitequark
809cfd5ff2
Add a script to run every test Travis would run locally.
2017-12-22 09:07:57 +00:00
whitequark
8b6050f711
Clean up our feature story and more aggressively test features.
2017-12-22 08:54:58 +00:00
whitequark
3029341d5a
Panic on an attempt of subtracting sequence numbers with underflow.
...
This would result in results near usize::MAX, and is indicative of
a bug. A panic is always used instead of a debug_assert!() because
debug builds are easily slow enough so that the underlying bugs
are not tripped.
Related to #62 .
2017-12-21 12:35:15 +00:00
whitequark
bd40265d3a
Use a more specific log message for keep-alive or probe TCP packets.
2017-12-21 10:39:54 +00:00
whitequark
df65c0e6ae
Unbreak `cargo test --no-default-features --features default`.
...
I'm not sure why is this needed, but it broke CI.
2017-12-18 15:10:50 +00:00
whitequark
bf53b73e09
Fix accidental conversion of a slice to owned.
...
This broke #![no_std] builds.
2017-12-18 15:03:38 +00:00
whitequark
8863eb8db1
Add an HTTP client example.
2017-12-18 14:53:09 +00:00
whitequark
946376897e
Make EthernetInterfaceBuilder::ip_addrs optional.
...
It's perfectly reasonable to have an interface with no addresses
assigned to it.
2017-12-18 13:53:27 +00:00
Dan Robertson
c5c2264cdc
Use hop limit instead of ttl
...
Use hop limit instead of ttl for method and member names.
2017-12-18 13:47:34 +00:00
Dan Robertson
ee60efefd3
Add Ipv6Repr and Ipv6Packet to wire
...
- Add the Ipv6Repr and Ipv6Packet structures to the wire module
- Add basic tests for the new structures
- Update IpRepr to include the Ipv6 variant
2017-12-18 13:47:34 +00:00
Dan Robertson
4a98190f9b
Replace EthernetInterface::new with EthernetInterfaceBuilder.
2017-12-18 13:29:29 +00:00
whitequark
278bb4b2c9
Trace the TCP socket acknowledging incoming segment.
2017-12-18 12:47:42 +00:00
whitequark
05677dbd76
Fix 14185a16.
2017-12-18 11:42:55 +00:00
whitequark
19f52bd46c
Do not fill neighbor cache with IPs not on the same network as us.
...
This is pointless (`route` doesn't even check the cache in that case)
and wastes cache space.
2017-12-18 11:06:26 +00:00
whitequark
8dd9bdeaad
Trace neighbor discovery status on a per-socket basis.
...
This avoids delaying the first packets for new neighbors by
(at least) the ARP cache silence time, or potentially even
indefinitely.
2017-12-18 11:06:24 +00:00
whitequark
16b59eefad
Style. NFC.
2017-12-16 21:45:24 +00:00
whitequark
75e371d947
Rework the pretty printer to avoid superfluous trailing newlines.
2017-12-16 21:42:19 +00:00
whitequark
ec74e34239
Fix clocking code in the loopback example.
2017-12-15 10:20:06 +00:00
whitequark
c19bd1da7c
Make elaborated reasons for sending a TCP packet more precise.
2017-12-15 06:31:50 +00:00
whitequark
1c7ce85004
Log an elaborated reason for sending a TCP packet.
...
Otherwise, it is hard to debug e.g. ACK loops.
2017-12-15 05:24:17 +00:00
Dan Robertson
888b098dca
Process the Icmpv4Repr in IcmpSocket::process
...
- Use the Icmpv4Repr in IcmpSocket::process instead of the raw payload.
- Update the IcmpSocket tests.
2017-12-09 00:10:09 +00:00
whitequark
26b8052ee9
Make packet dumps emitted for broken packets more useful.
...
Before this commit, only the outermost frame (the Ethernet one)
would be shown, which is really no help at all.
2017-12-08 07:11:08 +00:00
Dan Robertson
be43f4067a
Minor doc improvements to wire::ipv6
...
- Add links to the Addressing Achitecture RFC where appropriate
- Add comments to functions where appropriate
2017-11-30 19:20:42 +00:00
Dan Robertson
b97c592671
Add IPv6 address and cidr to wire
...
- Add the ipv6 feature
- Ensure a travis build with the ipv6 feature enabled.
- Add the necessary infrastructure to wire for ipv6 support.
- Ipv6Address
- Ipv6Cidr
- Add Ipv6 Address and Cidr parsing to parsers
- Add basic tests.
2017-11-29 12:57:22 +00:00
Jeremy Soller
8604eaa8f9
Allow receiving broadcast packets via UDP sockets.
2017-11-23 07:01:35 +00:00
Dan Robertson
308afc5a25
Remove debug println in test_evict
...
The println's surrounding the final cache fill in test_evict that causes
PADDR_B to be evicted are not needed.
2017-11-22 08:03:39 +00:00
whitequark
ff530020dd
Style. NFC.
2017-11-22 07:44:03 +00:00
whitequark
98a3ec8c3a
Limit the rate at which sockets will request neighbor discovery.
...
The rate of emission of neighbor discovery packets is already
limited at the level of the entire neighbor cache, but poll()
would uselessly spin until the answer arrives (if ever).
2017-11-22 07:20:31 +00:00
whitequark
6c83936872
Extract socket handle into a new SocketMeta structure.
...
This paves way for adding more metadata apart from handles,
such as caches and so on.
This commit also removes SocketHandle::EMPTY in favor of
SocketHandle::default() since they are functionally identical.
2017-11-22 03:50:09 +00:00
whitequark
715aa4b217
Add a missing feature check.
2017-11-21 12:02:25 +00:00
whitequark
52a6e27206
Implement eviction in neighbor cache for fixed storage size.
2017-11-21 11:53:26 +00:00
whitequark
29a338228d
Fix a broken macro invocation.
2017-11-21 11:06:53 +00:00
whitequark
b70e9174c8
Don't build on stable for now.
2017-11-21 11:06:42 +00:00
whitequark
eaa50d0003
Rewrite the ARP cache to allow for flood protection and expiration.
2017-11-21 10:53:55 +00:00
Kai Lüke
2a52234d53
Don't panic on TCP sequence number wrapping in debug mode.
2017-11-13 18:03:36 +00:00
Egor Karavaev
1e809daf7a
Make `Error::Unaddressable` ignored for ICMP sockets as well.
2017-11-13 14:16:03 +00:00
Egor Karavaev
eb7d0e346e
ICMP sockets don't end ICMP packets processing.
2017-11-13 14:16:03 +00:00
Kai Lüke
3db035bbac
Preserve retransmission timer for Dup-ACKs
...
Duplicate ACKs should not replace the retransmission timer,
but if not in retransmission, still set the keep-alive timer
as normal ACKs do.
2017-11-13 06:26:26 +00:00
whitequark
959e4829a9
Fix ICMP socket documentation. NFC.
2017-11-13 04:54:49 +00:00
whitequark
cee79f30f3
Update README.
2017-11-10 02:02:17 +00:00
whitequark
19373c58c8
Style. NFCI.
2017-11-09 02:07:24 +00:00