Multi-link TCP connections in user space
Hi!
I've written a crate that bundles multiple TCP connections into one logical connection. It supports adding and removing TCP connections on the fly and is thus quite useful if you need a connection that does not fail when the device switches network interfaces, for example from Ethernet to WiFi or LTE.
It is similar to Multipath TCP but works over the existing TCP protocol (or TLS, WebSockets, etc.) without any need for support from the operating system and is implemented in 100% safe, platform-independent Rust.
It also comes with an integrated speed test and interactive link monitor, shown below.
The crate is called Aggligator and by itself it is agnostic of the underlying transport protocol; anything that implements AsyncRead and AsyncWrite will do.
To make life easier when using TCP as the underlying transport, there is also Aggligator-Util which handles the management of the underlying TCP connections. It also comes with the agg-speed command line tool shown above and agg-tunnel which can forward any TCP port over such a multi-link connection.
Source code is available at my GitHub under the Apache 2.0 license.