aggligator

Crates.ioaggligator
lib.rsaggligator
version0.8.3
sourcesrc
created_at2022-12-08 17:46:10.224019
updated_at2023-11-03 12:28:49.417503
descriptionAggregates multiple links (TCP or similar) into one connection having their combined bandwidth and provides resiliency against failure of individual links.
homepage
repositoryhttps://github.com/surban/aggligator
max_upload_size
id732717
size293,002
Sebastian Urban (surban)

documentation

README

Aggligator — your friendly link aggregator

crates.io page docs.rs page Apache 2.0 license

Aggligator aggregates multiple links into one connection.

Aggligator takes multiple network links (for example TCP connections) between two endpoints and combines them into one connection that has the combined bandwidth of all links. Additionally it provides resiliency against failure of individual links and allows adding and removing of links on-the-fly.

It serves the same purpose as Multipath TCP and SCTP but works over existing, widely adopted protocols such as TCP, HTTPS, TLS, USB and WebSockets and is completely implemented in user space without the need for any support from the operating system.

Aggligator is written in 100% safe Rust and builds upon the Tokio asynchronous runtime.

Crate features

The following optional crate features are available:

  • dump — enables saving of analysis data to disk, mainly useful for debugging connection performance issues; also enables Serde support on some data types.

Working with TCP links, TLS encryption and examples

Useful functions for working with TCP-based links, encryption and authentication using TLS, a visualizing link monitor and a completely worked out example are provided in the aggligator-util crate.

Demo

Two machines are connected via Ethernet and Wi-Fi.

Machine A, called dino and acting as the speed test server, has two interfaces: enp8s0 (gigabit ethernet, IP address ending in ::b01) and wlp6s0 (Wi-Fi, IP address ending in ::83e). Both IP addresses are registered with the DNS server.

Machine B, acting as the speed test client, has four interfaces: enp0s25 (gigabit ethernet), enxf8eXXXXdd (gigabit ethernet via USB), enxf8eXXXXc5 (gigabit ethernet via USB) and wlp3s0 (Wi-Fi).

Running the agg-speed tool from the aggligator-util crate on Machine B shows the following.

Interactive monitor

Aggligator has created 8 links between the machines, one for each pair of machine A and machine B interfaces. The connection speed is about 100 MB/s in both directions which is expected from a full-duplex gigabit ethernet link.

Unplugging ethernet cables or disabling the Wi-Fi results in redistribution of the traffic over the remaining links, but has no effect on the connection. If the ethernet cable is plugged in again or Wi-Fi is re-enabled, the link is automatically re-established.

Minimum supported Rust version

The minimum supported Rust version (MSRV) is 1.65.

License

Aggligator is licensed under the Apache 2.0 license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Aggligator by you, shall be licensed as Apache 2.0, without any additional terms or conditions.

Commit count: 180

cargo fmt