- Add optional arguments for settings in ip v6 and v4 connects (#170, by @Drup)
- Expose
Ipv4.Routing.No_route_to_destination_address
(#166, by @yomimono)
- ARP now handles ARP frames, not Ethernet frames with ARP payload (#164, by @hannesm)
- Check length of received ethernet frame to avoid cstruct exceptions (#117, by @hannesm)
- Pull arpv4 module out of ipv4. Also add unit-tests for the newly created ARP library (#155, by @yomimono)
- Fix regression introduced in 2.5.0 where packet loss could lead to the connection to become very slow (#157, MagnusS, @talex5, @yomimono and @balrajsingh)
- Improve the tests: more logging, more tracing and compile to native code when available, etc (@MagnusS and @talex5)
- Do not raise
Invalid_argument("Lwt.wakeup_result")
everytime a connection is closed. Also now pass the raised exceptions toLwt.async_exception_hook
instead of ignoring them transparently, so the user can decide to shutdown its application if something wrong happens (#153, #156, @yomomino and @talex5) - The
channel
library now lives in a separate repository and is released separately (#159, @samoht)
- The test runs now produce
.pcap
files (#141, by @MagnusS) - Strip trailing bytes from network packets (#145, by @talex5)
- Add tests for uniform packet loss (#147, by @MagnusS)
- fixed bug where in case of out of order packets the ack and window were set incorrectly (#140, #146)
- Properly handle RST packets (#107, #148)
- Add a
Log
module to control at runtime the debug statements which are displayed (#142) - Writing in a PCB which does not have the right state now returns an error instead of blocking (#150)
- Fix infinite loop in
Channel.read_line
when the line does not contain a CRLF sequence (#131)
- Fix a memory leak in
Channel
(#119, by @yomimono) - Add basic unit-test for channels (#119, by @yomimono)
- Add alcotest testing templates
- Modernize Travis CI scripts
- Merge between 2.4.0 and 2.3.1
- ARP improvements (#118)
- Do not raise an assertion if an IP frame has extra trailing bytes (#221).
- Fix
STACKV4
for theDEVICE
signature which hasconnect
removed (in Mirage types 2.3+).
- Add ICMPv6 error reporting functions (#101)
- Add universal IP address converters (#108)
- Add
error_message
functions for human-readable errors (#98) - Improve debug logging for ICMP Destination Unreachable packets.
- Filter incoming frames by MAC address to stop sending unnecessary RSTs. (#114)
- Unhook unused modules
Sliding_window
andProfiler
from the build. (#112) - Add an explicit
connect
method to the signatures. (#100)
- Readded tracing and ARP fixes which got accidentally reverted in the IPv6 merge. (#96)
- Use
Bytes
instead ofString
to begin the-safe-string
migration in OCaml 4.02.0 (#93). - Remove dependency on
uint
to avoid the need for a C stub (#92).
Add IPv6 support. This changeset minimises interface changes to the existing
STACKV4
interfaces to faciliate a progressive merge. The only visible
interface changes are:
IPV4.set_ipv4_*
functions have been renamedIPV4.set_ip_*
because they are shared between IPV4 and IPV6.IPV4.get_ipv4
andget_ipv4_netmask
now return alist
ofIpaddr.V4.t
(again because this is the common semantics with IPV6.)- Several types that had
v4
in their names (likeIPV4.ipv4addr
) have lost that particle.
- Improve console printing for the DHCP client to output line breaks properly on Xen consoles.
- Build Xen stubs separately, with
CFLAGS
frommirage-xen
2.1.0+. This allows us to use the red zone under x86_64 Unix again. - Adding tracing labels and counters, which introduces a new dependency on the
mirage-profile
package.
- Fixed race waiting for ARP response (#86).
- Move the the code that configures IPv4 address, netmask and gateways
after receiving a successful lease out of the
Dhcp_clientv4
module and intoStackv4
(#87)
- Add IPv4 multicast to MAC address mapping in IPv4 output processing (#81 from Luke Dunstan).
- Improve formatting of DHCP console logging, including printing out options (#83).
- Build with -mno-red-zone on x86_64 to avoid stack corruption on Xen (#80).
- Fixed race condition in the signalling between the rx/tx threads under load.
- Experimentally switch to immediate ACKs in TCPv4 by default instead of delayed ones.
- Moved 1s complement checksum C code here from mirage-platform.
- Depend on
Console_unix
andConsole_xen
instead ofConsole
. - [socket] Do not return an
Eof
when writing 0-length buffer (#76). - [socket] Accept callbacks now run in async threads instead of being serialised (#75).
- Quieten down the stack logging rate by not announcing IPv6 packet discards.
- Raise exception
Bad_option
for unparseable or invalid TCPv4 options (#57). - Fix linking error with module
Tcp_checksum
by lifting it into top library (#60). - Add
opam
file to permit easier local pinning, and fix Travis to use this.
- Ensure that DHCP completes before the application is started, so that unikernels that establish outgoing connections can do so without a race. (fix from Mindy Preston in #53, followup in #55)
- Add
echo
,chargen
anddiscard
services into theexamples/
directory. (from Mindy Preston in #52).
- [tcp] Fully process the last
ACK
in a 3-way handshake for server connections. This ensures that aFIN
is correctly transmitted upon application-initiated connection close. (fix from Mindy Preston in #51).
- Expose IPV4 through the STACKV4 interface.
- Fix DHCP variable length option parsing for MTU responses, which in turns improves robustness on Amazon EC2 (fix from @yomimono via mirage/mirage-tcpip#48)
- Catch and ignore top-level socket exceptions (#219).
- Set
SO_REUSEADDR
on listening sockets for Unix (#218). - Adapt the Stack interfaces to the v1.1.1 mirage-types interface (see mirage/mirage#226 for details).
- Rewrite of the library as a set of functors that parameterize the
stack across the
V1_LWT
module types from Mirage 1.1.x. This removes the need to compile separate Xen and Unix versions of the stack.
- Build for either Xen or Unix, depending on the value of the
OS
envvar. - Shift to the
mirage-types
0.5.0+ interfaces, which breaks the socket backend (temporarily). - Port the direct stack to the new interfaces.
- Add Travis CI scripts.
- Use the
Ipaddr
external library and remove the Homebrew equivalents inNettypes
.
- Changes in module Manager: Removed some functions from the `.mli (plug/unplug) and added some modifications in the way the Manager interacts with the underlying module Netif. The Netif.create function does not take a callback anymore.
- Improve TCP state machine for connection teardown.
- Limit fragment number to 8, and coalesce buffers if it goes higher.
- Adapt to mirage-platform-0.9.2 API changes.
- Depend on mirage-platform-0.9.1 direct tuntap interfaces.
- Version bump to catch up with mirage-platform.
- Encourage scatter-gather I/O all the time, rather than playing tricks with packet header buffers. This simplifies the output path considerably and cuts minor heap allocations down.
- Install the packed
cmx
along with thecmxa
to ensure that the compiler can do cross-module optimization (this is not a fatal error, but will impact performance if thecmx
file is not present).
- Update socket stack to use Cstruct 0.6.0 API
- Update Cstruct API to 0.6.0
- [tcp] write now blocks if the write buffer and write window are full
- Add iperf self-test that creates two VIFs and transmits across them. This is a useful local test which stresses the bridge code using just one VM.
- Add support for attaching existing devices when initialising the
network manager, via an optional
attached
parameter. - Constrain TCP connect to be a
unit Lwt.t
instead of a polymorphic return value. - Expose IPv4 netmask function.
- Reduce ARP verbosity to the console.
- Fix TCP fast recovery to wait until all in-flight packets are acked, rather then exiting early.
- Require OCaml-4.00.0 or higher, and add relevant build fixes to deal with module packing.
- Fix the DHCP client marshalling for IPv4 addresses.
- Expose the interface MAC address in the Manager signature.
- Tweak TCP ISN calculation to be more friendly on a 32-bit host.
- Add Manager.create ?devs to control the number of Netif devices constructed by default.
- Add Ethif.set/disable_promiscuous to permit directly tapping a network interface.
- Initial public release.