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
whitequark
65c8aea921
Remove impl Ord/PartialOrd for Cidr.
...
It's not obvious that CIDRs are ordered in any particular meaningful
way.
2017-11-09 01:50:34 +00:00
Dan Robertson
adb5014780
Add ICMP sockets
...
- Add support for ICMP sockets
- Add tests for ICMP sockets
- Rename proto-<type> features to socket-<type>
- Update documentation
2017-11-09 00:08:24 +00:00
Philipp Oppermann
c3e07dad9a
Store plain DeviceT instead of Managed<_> in EthernetInterface
2017-11-08 09:34:35 +00:00
whitequark
d9fa7f6bc6
Rename proto-* features back to socket-*.
...
A proto-* feature does not make sense for ICMP, where the protocol
is always enabled, but sockets, not.
2017-11-06 09:51:03 +00:00
whitequark
c2994b9757
Reimplement {RawSocket,TapInterface}::receive correctly.
2017-11-06 09:38:44 +00:00
whitequark
7039ec8b04
Rename a few tests. NFC.
2017-11-04 02:42:51 +00:00
whitequark
9e783cb570
Add CODE_STYLE.md.
2017-11-03 23:34:12 +00:00
Philipp Oppermann
6a8e21cec0
Redesign the phy::Device trait to avoid Drop impls.
2017-11-03 23:15:07 +00:00
Dan Robertson
b64257812b
Do not send ICMPv4 responses to broadcasts
...
- Do not send ICMPv4 responses for packets with a broadcast destination
address.
- Do not send DstUnreachable with ProtoUnreachable on receipt of a
packet with an unknown protocol with a non-unicast destination
address.
- Do not send DstUnreachable with PortUnreachable on receipt of a
UDP packet when no sockets are listening on the destination port
and the destination address is a non-unicast address.
- Send the correct amount of the original datagram when sending Destination
Unreachable error responses.
- Do not assume that a ip datagram has a payload when sending a proto
unreachable ICMPv4 error response.
- Add tests to iface tests.
- Ensure ICMP error responses are correctly formed when the
datagram has no payload.
- Ensure ICMP error responses are correctly handled for UDP packets
when no socket is listening on the destination port.
- Ensure the correct amount of the original payload is returned in
Destination Unreachable responses.
2017-11-01 06:34:10 +00:00
whitequark
fe6b04a29a
Rework TcpSocket::{send,recv} to remove need for precomputing size.
...
Now, these functions give you the largest contiguous slice they can
grab, and you return however much you took from it.
2017-10-31 19:24:54 +00:00
whitequark
0b22943ddd
Fix Cidr::contains_addr for zero length prefixes.
2017-10-30 08:25:32 +00:00
whitequark
33fa859665
Do not parse an empty string as an IpAddress.
...
This is more likely to result in downstream confusion than not.
Let downstream code decide exactly what it wants to do with
an empty string; be conservative here.
2017-10-30 07:20:55 +00:00
Dan Robertson
1cafcfc19f
Tests: Add basic interface tests
...
- Add tests for the following
- ICMP error responses are not sent in response to broadcast requests
- ARP requests are responded to and inserted into the cache
- ARP requests for someone else are not responded to, but the sender
is still inserted in the cache
2017-10-28 19:33:01 +00:00
whitequark
d37f4ef254
Use a much more sensible method naming for SocketRef.
2017-10-25 02:16:23 +00:00
whitequark
103fff9233
Expose wrapping and unwrapping of SocketRefs.
2017-10-25 01:28:59 +00:00
whitequark
5c2deb5dd2
Update README.
2017-10-25 00:30:57 +00:00
whitequark
a9a00baa49
Rename Cargo features: socket-* → proto-*.
2017-10-25 00:20:40 +00:00
whitequark
e495544a85
Fix a naming mishap. NFCI.
2017-10-24 23:55:58 +00:00
whitequark
a7e6a1b5ae
Simplify. NFC.
2017-10-24 23:12:55 +00:00