Dan Robertson
82f822930c
Move more iface tests to test ipv6
...
Closes : #249
Approved by: whitequark
2018-06-24 15:24:37 +08:00
jD91mZM2
3d141489a2
Fix impossible lifetime bounds
...
Using Routes<'static> used to make these functions impossible because it created a reference that needed to be valid for the static lifetime
Closes : #243
Approved by: dlrobertson
2018-06-19 21:14:20 +08:00
Valentin Lorentz
728ae3fbb5
Add support for arbitrarily many routes instead of only gateways.
...
Closes : #219
Approved by: whitequark
2018-06-10 05:31:08 +08:00
Dan Robertson
7462664954
iface: Begin parsing Hop-By-Hop extension headers
...
Begin add support for parsing extension headers.
Closes : #212
Approved by: whitequark
2018-05-27 16:14:29 +08:00
Ole Martin Ruud
0c59e3f5f9
Implement new type for `poll_at`
...
Change return-type for `poll_at` for sockets to be a `PollAt` instead of
the former `Option<Instant>`.
Closes : #216
Approved by: whitequark
2018-05-17 06:17:47 +08:00
Valentin Lorentz
2d716883b6
Add support for IPv6 gateways.
...
Closes : #207
Approved by: dlrobertson
2018-05-14 09:39:39 +08:00
Valentin Lorentz
2afc538fd9
Add support for IPv6 to ICMP sockets.
...
Closes : #205
Approved by: whitequark
2018-05-10 07:12:33 +08:00
Dan Robertson
bed3d8bd4b
Add Address Resolution for IPv6
...
Add Address Resolution via NDISC for IPv6.
Closes : #196
Approved by: whitequark
2018-05-07 23:49:56 +08:00
Dan Robertson
010e55beed
Fix ICMPv6 checksum function
...
The ICMPv6 checksum calculation requires the pseudo header.
Closes : #196
Approved by: whitequark
2018-05-07 23:49:56 +08:00
whitequark
485b46a5e6
fn PacketMetadata::empty() → const PacketMetadata::EMPTY.
...
Fixes #181 .
2018-03-24 03:23:37 +00:00
Dan Robertson
826ba29b72
Add has_solicited_node to EthernetInterface
...
- Add a function to EthernetInterface useful for determining if a
received packet with the source address being a solicited node
address is the solicited node address for an IPv6 address assigned
to the interface.
- Add SOLICITED_NODES_PREFIX to Ipv6Cidr
- Fix some nits
Closes : #175
Approved by: whitequark
2018-03-04 03:23:12 +08:00
Astro
e3e9d9d4c5
Allow broadcast/multicast traffic to UDP sockets
...
Closes : #173
Approved by: whitequark
2018-03-03 06:16:40 +08:00
Astro
cd00d63c51
Add multicast capability to lookup_hardware_addr()
...
Closes : #172
Approved by: whitequark
2018-03-02 08:33:37 +08:00
whitequark
3d12690009
Use storage::PacketBuffer for implementing socket::IcmpSocket.
...
This substantially increases its space efficiency.
2018-02-22 12:23:35 +00:00
whitequark
c474d0c32e
Factor out storage::PacketBuffer from socket::UdpSocket.
2018-02-22 11:34:58 +00:00
Philipp Oppermann
ed2dcaaff9
Use separate metadata and payload buffers for UDP sockets.
...
Co-authored-by: Dan Robertson <danlrobertson89@gmail.com>
2018-02-22 06:33:11 +00:00
Dan Robertson
9747733dd7
Use time types in socket
...
Use the time types (Instant and Duration) in the socket modules instead
of a simple u64.
Closes : #141
Approved by: whitequark
2018-02-16 10:44:03 +08:00
Dan Robertson
e0b48caca3
Update phy mod to use new time types
...
Update everything but the socket types to use the new time types instead
of a basic u64
Closes : #141
Approved by: whitequark
2018-02-16 10:44:03 +08:00
Dan Robertson
1f9e14de71
Update iface and phy_wait to use new time types
...
Update the EthernetInterface poll functions to use Instant and Duration
instead of a simple u64 value.
Closes : #141
Approved by: whitequark
2018-02-16 10:44:02 +08:00
Dan Robertson
e09e20df95
Add basic ICMPv6 reply
...
Add basic ICMPv6 handling
- ICMPv6
- Handle ICMPv6 echo requests
- Send ICMPv6 error messages
- When know listening UDP socket is found in process_udp
- When the next header is not known
- Update icmpv6 test to be more useful
- ICMPv4
- Handle one more case where we are sending too much data
2018-02-05 16:24:25 +00:00
whitequark
0ddd4c9001
Route broadcast packets directly.
...
Closes #120 .
2018-01-15 11:56:14 +00:00
Dan Robertson
4a78b02fcf
Add process_ipv6 to EthernetInterface
...
- Add `process_ipv6` to `EthernetInterface`
- Add basic test for `process_ipv6`
- Add `deny(unused)` if either proto-ipv4 or proto-ipv6 is enabled
- Add `cfg`s where needed to avoid compile time errors due to the above
2018-01-15 11:54:26 +00:00
Dan Robertson
22b048c225
Ensure ICMPv4 error replies comply with size requirements
...
- Add MIN_MTU constants to the IP version modules.
- Ensure that ICMPv4 error replies comply with the size requirements
specified in RFC 1812 § 4.3.2.3.
2018-01-05 19:21:45 +00:00
whitequark
7c0bae7d36
Simplify. NFC.
2017-12-27 00:09:50 +00:00
Dan Robertson
439e0a2cc1
Add the proto-ipv4 feature.
2017-12-24 13:28:59 +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
8b6050f711
Clean up our feature story and more aggressively test features.
2017-12-22 08:54:58 +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
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
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
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
Jeremy Soller
8604eaa8f9
Allow receiving broadcast packets via UDP sockets.
2017-11-23 07:01:35 +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
eaa50d0003
Rewrite the ARP cache to allow for flood protection and expiration.
2017-11-21 10:53:55 +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
whitequark
19373c58c8
Style. NFCI.
2017-11-09 02:07:24 +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
7039ec8b04
Rename a few tests. NFC.
2017-11-04 02:42:51 +00:00
Philipp Oppermann
6a8e21cec0
Redesign the phy::Device trait to avoid Drop impls.
2017-11-03 23:15:07 +00:00