Antler is a tool for network and congestion control testing. The name stands for Active Network Tester of Load & Response, where '&' == Et. :)
Antler can be used to set up and tear down test environments, coordinate traffic flows across multiple nodes, gather data using external tools like tcpdump, and generate reports and plots from the results. It grew out of testing needs for SCE, and related congestion control projects in the IETF.
The examples output is available online here, where you can view the HTML plots and log files. A few samples from that directory:
To run the examples yourself, install Antler, then in the examples
directory:
sudo antler run
All configuration is in the .cue
or .cue.tmpl
files, and the output is
written to the results
directory.
Documentation for Antler is available in the Wiki.
As of version 0.7.0, many of the core features are implemented, along with some basic tests and visualizations. More work on security is planned for 1.0.0, but Antler should be safe to use in controlled environments.
It is important to understand Antler's caveats. In particular, the use of CUE has been a mixed bag, and the visualizations in Google Charts could be more flexible than they are. Future versions of Antler may replace the configuration and/or visualization mechanisms.
- enhance stream server protocol to ensure streams have completed
- add runner duration and use that to implement timeouts
- add an antler init command to create a default project
- secure servers for use on the Internet
- write documentation (in markdown)
- add test traffic header encryption
- add netns support with minimal sudo requirements
- undergo security audit
The Inbox is a collection area for tasks that may (or may not) happen in the future.
- switch to a different configuration mechanism
- improve flexibility of visualizations (maybe allow custom Go templates)
- add plotting library alternative to Google Charts
- improve performance of linking prior results in incremental builds
- improve performance of low interval / UDP flood recording and plotting
- implement traffic generator in C (or rewrite node in Rust)
- merge system info and logs into plots
- add rm command to remove result and update latest symlink
- add ls command to list results
- add admin web UI to run a package of tests
- add node-side compression support for System runner FileData output
- handle tests both with and without node-synchronized time
- process pcaps to get retransmits, CE/SCE marks, TCP RTT or other stats
- add test progress bar
- add ability to save System Stdout directly to local file
- add ability to buffer System Stdout to a tmp file before sending as FileData
- add log command to emit LogEntry's to stdout
- implement flagForward optimization, and maybe invert it to flagProcess
- add support for simulating conversational stream protocols
- support FreeBSD
- support MacOS
- convert longer funcs/methods to use explicit return values
- consistently document config in config.cue, with minimal doc in structs
- replace use of chan any in conn
- improve semantics for System.Stdout and Stderr
- find a better way than unions to create interface implementations from CUE
- consider moving all FileData to gob, for consistency with encoding
- CUE: fix excessive memory usage (not yet fixed in CUE v0.10)
- CUE: improve poor error messages, especially under disjunctions
A kind thanks to sponsors:
- NLNet and NGI0 Core
- NGI Pointer
- RIPE NCC
and to Jonathan Morton and Rodney Grimes for advice.