Cut-Through Forwarding necessary on dd-wrt and tomato for throughput higer than 300Mbit

Cut-Through Forwarding necessary on dd-wrt and tomato for throughput higer than 300Mbit

Short: dd-wrt does not yet support Cut-Through Forwarding (CTF). Tomato does. If your internet connection is faster than 250Mbit, use Tomato and CTF.

Featured image

Note that in the release of Advanced Tomato that I tested (2.7 128 release) CTF will break NAT Loopback. If you are not sure what that is, have a look here.

It all started when I decided to upgrade my router at home. Since my setup is a bit different than most other people’s, I wanted a couple of routers that I could tweak in any way I liked. Therefore I wanted to find a fast router, which also work with dd-wrt or Tomato. I want to connect my home in Zürich with my vacation home in Sweden through openvpn as two subnets, so that I can stream music and video from my NAS in Switzerland to my TV in Sweden. I also have a couple of Raspberry Pi’s in the basement of my vacation home in Sweden, which I want to access directly over my home network.

ctf for dd-wrt - conceptual view

If you don’t see the beauty of this already, this blog post is not for you. =)

First I opted for the Linksys WRT1900AC, which I thought was intended to be the new open flagship for home grown router firmware. I was wrong. I gave up on the dd-wrt installation on this router, but kept on looking around for something else. Not that I couldn’t get my environment running the way I wanted with the Linksys. It is not a bad router, it is actually quite good. It just did not meet my expectations regarding dd-wrt.

After talking to a couple of friends of mine, I decided to give the Netgear R8000 a go. It had dd-wrt support (according to some websites), and looked impressive by the specs. I was too early. The first release of dd-wrt on the Netgear R8000 had just been released, and it was far from stable. Also, in my setup (where I put it between my computer and my internal network), I did not at all get the throughput I had expected. When copying a large file from my NAS, I got only ca 30 MB per second transfer rate, even when I was physically connected per ethernet cable. I reverted to the default firmware from Netgear, tested again, and… I could transfer the same file at almost 1Gbit per second.

I stumbled across a forum post, where someone complained about his LAN-WAN being throttled by his router at 300Mbit, in a setup where he had 1Gbit connection to the internet over a Netgear R8000 running dd-wrt (the forum where I read it have upgraded their software and all old posts seems to be gone, so I cannot reference this). At first, I thought that it was something I would not have to worry about until I get a much faster connection than I have now. But then, I just could not let go of it I thought that it was due to the new firmware; that somehow the drivers were not yet complete, or whatever.

So I did what any person in my situation would do. I solved the problem by throwing money at it. I bought a Netgear R7000. I was wrong. Again. The R7000 had the exact same issue. Since the highest priority was to replace an old router in Sweden and it was time to go there, I just had no time to investigate further. I accepted the fact, and brought the R7000 with me and set it up with dd-wrt (v24-sp2 (03/31/15) std (SVN revision 26622)).

When I got home I looked around even more, talked to some people about my experience with dd-wrt. Two of my friends recommended the ASUS RT-AC68U, and to put Tomato on it. Since a customer of mine needed a new router for his home office, I decided to order two.


With this extensive collection of wifi-routers it was time to get going. First I had some troubles getting the Tomato firmware onto the router, which I could resolve by using tftp[see 1]. In the end I opted for the AdvancedTomato firmware, mainly since I found the look and feel of the GUI appealing. I ended up with the 2.7 128 release. First I could not get the router to work at all. No web GUI, even though I could ping the router. Just by pure luck I figured out that I could connect to it per ssh. Then I found some weird entires related to httpd in /var/log/messages. In depair I tried to erase NVRAM and reboot, which worked for me, by issuing the command “nvram erase” from the command line when connected to the router.

Not that any of this made my life any better. Close to 1Gbit transfer speed when running the default stock firmware from ASUS, and I had really poor performance when running the AdvancedTomato firmware. The average was around 30-35MByte per second with peaks a bit higher. Still not happy.

ctf for tomato - throughput with ctf disabled

A very old forum discussion got me on track to figure this out, At least it wouldn’t hurt to try it. I turned on Cut-Through Forwarding, and volia! Problem solved!

ctf for tomato - gui

And now, when I copy files from my NAS, I get the expected throughput.

ctf for tomato - throughput with ctf enabled

There is of course a long discussion on firmware to use. There are differences between dd-wrt, Tomato, AdvancedTomato, and other open firmwares. As of now, dd-wrt does not offer the Cut-Through forwarding, crippling the throughput somewhat for people with very fast internet connections. Tomato and AdvancedTomato are built around closed-source Broadcom drivers, hence not as open as dd-wrt, but offer the CTF functionality. In the end it is your choice, and at the moment not too many people actually have an internet connection that is faster than 250Mbit.

Tested routers:

  • Linksys WRT1900AC
  • Netgear R7000
  • Netgear R8000