Nov 18 2007
Tomato QoS on a Linksys WRT-54G v.2
Kudos to anyone who creates their own Linux based firmware and turns a $40 consumer router, into a high-end piece of kit. Truly, they all are awesome achievements. But I’ve got to say, DDR-WRT has nothing on the Tomato firmware. After hearing how happy SuperJason was with his flashed firmware, I decided to take the plunge myself and re-flash my router.
I’d first flashed my box over a year ago to the DDR-WRT firmware and was impressed, but it definitely had a few bugs. I wanted it for DHCP reservations and QoS. DHCP reservations worked, but internal name resolution did not. And the QoS implementation made my network flaky. Tomato changed everything.
First of all, the UI isn’t as nice as DDR-WRT — which does its best to duplicate the Linksys firmware. Tomato’s is a little uglier and a lot harder to find things until you get used to it. But its so much more powerful. After reading around the Internet, I think I’ve finally settled on these QoS classifications…

A note to newbs, before I launch into my explanation: make sure you turn off “Prioritize ACK” so that you don’t get flooded with BitTorrent ACK requests.
As you can see here, I place high priority on BitTorrent traffic. That’s because it drives our TV watching. Each of the things that gets higher priority than torrent downloading has a good reason:
DNS - Normal DNS requests are tiny and should get handled right away — even if the webpage itself loads slower, you don’t want to be hanging during name resolution wondering if your Internet is down.
SMTP - Outgoing mail should go when I hit send. Maybe this is odd of me, but I like hearing the “swoosh” sound in Mail.app as soon as I hit the button.
FTP - I rarely use FTP any more, unless I’m working on a website or uploading something important. On the occasion that I do need it, I want it out of the way as fast as possible.
VNC - If I need VNC its because I’m helping someone else with their computer, or I’m connecting into mine to troubleshoot a problem. In either case, I don’t want to wait for screen refreshes.
On par with BitTorrent traffic are small HTTP requests — loading the Google homepage, or even Digg, comes in at less than 50kb, so lets just get it out of the way.
Large HTTP requests — for a download, or streaming some Flash, can frankly wait a few seconds longer. Similarly, receiving mail isn’t that urgent — it only gets checked every 15 minutes, so if it takes 16 minutes instead, who’s going to notice?
Below this is essentially everything else. If a website isn’t tight enough to get in under 50kb, but not big enough that it might be interesting enough to warrant the higher priority, it gets tucked in with bulk traffic.
The effect is immediate when you turn QoS on. My WordPress admin page, with its IFrames, takes a little bit longer to load, but never looks like its hung. My homepage and Digg come up instantly. And none of our normal use has any significant impact on my BitTorrent downloads. I’m relatively new at this QoS stuff, but having watched the Chart view and studied the Detail view, I think I’ve already learned a lot. Any suggestions from anyone with more experience?