Overview of the CeroWrt Project¶
Bufferbloat is the undesirable latency that comes from a router or other network equipment buffering too much data. It is a huge drag on Internet performance created, ironically, by previous attempts to make it work better. Eric Raymond wrote this one-sentence summary of the problem: "Bloated buffers lead to network-crippling latency spikes." You can read more about this problem at the main Bufferbloat site.
CeroWrt was a project built upon the OpenWrt firmware to resolve these endemic problems in home networking today, and to push the state of the art of edge networks and routers forward. Projects include proper IPv6 support, tighter integration with DNSSEC, and most importantly, reducing bufferbloat in both the wired and wireless components of the stack.
The code was 100% open source, top to bottom. No binary blobs whatsoever. Every aspect of the code and hardware can be inspected and/or modified. As a project, most of the results have been pushed up into mainline linux, OpenWrt "Chaos Calmer" and "Barrier Breaker" releases, many firewall and router distributions and it is beginning to appear in commercial firmware. Active research (due to lack of funding, and succeeding in the primary goals) has ceased, with the exception of ongoing work into standardization efforts, and into something even better than fq_codel, called cake, which is not ready for prime time yet.
CeroWrt 3.10.50-1 Works! This build has been very stable since it was released on 28 July 2014. We strongly recommend replacing all earlier builds with this build. Read the News item for the update. See the CeroWrt 3.10 Release Notes and the mailing list for more details.
Note: All the important features of the CeroWrt software are now available in mainline OpenWrt Barrier Breaker and Chaos Calmer builds. You may be better served by installing one of those supported builds that are available on a much wider range of router hardware.
Our plan has always been to produce a stable build that can be used as both a production router, and as a platform for further research into algorithms for solving state of the art problems in networking. The CeroWrt 3.10 series of builds include the following features and capabilities
- Linux 3.10 kernel. Most of the fixes for bufferbloat are being implemented in this 3.10 kernel, so we are tracking these developments carefully. http://kernel.org
- We have included a version of the CoDel algorithm from Kathie Nicols and Van Jacobson, along with Eric Dumazet's flow queueing fq_codel. These in turn rely on the Byte Queue Limits for line rate networks and on htb for the SQM QoS system. These replace earlier Active Queue Management fixes for bufferbloat including: Stochastic Fair Queueing-Random Early Drop (SFQRED), and other queue disciplines.
- There are also two newer versions of fq_codel under test, as well as an implementation of the current ns2 model of codel itself.
- IPv6 support. Another major goal of CeroWrt is to make IPv6 networking in the home as simple as IPv4.
- Babel mesh routing protocol with source sensitive routing. RA, bgp, rip, ripng, and ospf are also supported via the Quagga optional package.
- DNSSEC - Secure extensions to the DNS system.
- OpenWrt features. Because we track the OpenWrt code base carefully, we incorporate most of the capabilities of that distribution. We actively push our changes/enhancements back toward the OpenWrt trunk. http://openwrt.org
- An attractive web GUI for configuration - LuCI
Sources of Information about the Bufferbloat Project¶
Glossary for Bufferbloat Topics: Glossary
General Bufferbloat list: https://lists.bufferbloat.net/listinfo/bloat
CeroWrt-devel list: https://lists.bufferbloat.net/listinfo/cerowrt-devel
CeroWrt-Commits list: https://lists.bufferbloat.net/pipermail/cerowrt-commits/
IRC: Find us on IRC on chat.freenode.net, #bufferbloat channel
Assorted Bufferbloat Videos
Try the Software¶
The current build is solid. We believe it solves virtually all the bufferbloat problem, and deserves wider use. Lots of people are using it as their production router. Download the current CeroWrt 3.10.50-1 build:
- CeroWrt 3.10.50-1 for WNDR3700v2
- CeroWrt 3.10.50-1 for WNDR3800
- All CeroWrt Builds (mirrored onsnapon)
To minimize the effects of hardware dependencies, we have chosen the Netgear WNDR3700v2 and WNDR3800 as the sole hardware for the experiments. Note: The WNDR3700v3 and v4 models do not work with CeroWrt; purchase the WNDR3800 if you want to be future-proof.
The open source support for these two models is extensive, they have a capable processor with 16MB of flash and 64MB of RAM, they support a USB flash stick, they are inexpensive (around $100). The WNDR3800 has more RAM (128MB instead of 64), but either of these models will be fine for these experiments. As of October 2015, both the target router models have become scarce. You can search for "WNDR3800" on amazon.com, frys.com, ebay.com, etc. but might be better served by looking at the OpenWrt software which is available for a wide variety of common routers.
There are ubnt builds available as well, but specialized for a specific deployment scenario. Ask if you want them.
As noted above, OpenWrt and DD-WRT support fq_codel now in their QoS systems, so you can adopt one of the 150+ platforms supported there and see what happens.... YMMV, but please report here: Hardware_Reports_on_FQ_CODEL
- Installation Guide
- Flashing Instructions
- Automated Configuration of CeroWrt
- Frequently Asked Questions
- How is CeroWrt different from OpenWrt?
Tech Notes for CeroWrt¶
The following give detailed descriptions of CeroWrt's operation.
- Setting up SQM
- Default interface naming scheme
- Default network numbering scheme
- Changing IP, DNS, and SSID
- Monitoring CeroWrt with SNMP and NetFlow
- Using Bonjour, mDNS, or ZeroConf with CeroWrt
- Getting an IPv6 address via Hurricane Electric Tunnelbroker.net
- Useful scripts to use with CeroWrt
The documents below describe the older Linux 3.7 and earlier builds.
- CeroWrt 3.7 Release Notes
- Building CeroWrt on your own machine (tested for CeroWrt 3.3, not with CeroWrt 3.7)
- Setting QoS If You Can't Use CoDel
The Historical Documents page links to many documents that describe the history and earlier releases of the project.