Tomato/MLPPP v1.21-mp3alpha4
http://fixppp.org
Copyright 2008 by Anik Mishra and Adam Zey
Based on Tomato, Copyright 2008 by Jonathan Zarate

ABOUT

Tomato/MLPPP is a fork of the popular Tomato firmware (http://www.polarcloud.com/tomato) for consumer broadband routers. The primary goal is to enable users to bond multiple DSL connections using MultiLink PPP (MLPPP), and/or to circumvent Bell Canada's DPI-based throttling by using MLPPP on a single DSL line.

This documentation will only cover differences between this fork and the original Tomato firmware. For information on things not covered here, please consult the Tomato website (linked above).

Obviously, your ISP must support MLPPP in order for this firmware to be of any use. Currently, only TekSavvy (http://teksavvy.com) and Velcom (http://www.velcom.ca) are known to support this. Acanac (http://www.acanac.ca) and Electronic Box (http://www.electronicbox.net) are currently working on enabling MLPPP support, to various degrees. If your ISP supports MLPPP and you can confirm that you have it working, please contact us and we'll add it to this list.

DISCLAIMER

This firmware is provided as-is without any warranty. We will NOT be held responsible  for damages that occur due to the use of this firmware. USE AT YOUR OWN RISK.

PLEASE NOTE that this firmware has only officially been tested on the WRT54GL v1.1 router. It SHOULD run fine on any other router compatible with Tomato, but such scenarios have not necessarily been tested by the developers.

INSTRUCTIONS

Please note that it is required that you reset your router to factory default settings (including NVRAM) when installing Tomato/MLPPP (even if upgrading from a previous release of Tomato/MLPPP). Saving your configuration and restoring it after resetting NVRAM simply reverts the reset, and should NOT be done! Your router will not connect to the Internet after installing Tomato/MLPPP unless you do so. It is still possible to manually configure Tomato/MLPPP correctly without resetting the NVRAM. To do so, you must do the following:

1) In Advanced->Misc change dropdowns to Automatic, and the LCP options to 30, 2, and 12 respectively, then save
2) In Basic->Networking, set the retry delay to 5
3) In Basic->Networking, change the "Multilink PPP" dropdown back to the correct value, save.

Circumventing Bell Canada's throttling with one DSL line

1) Install Tomato/MLPPP on your router just as you would install the normal Tomato firmware (refer to the Tomato documentation).

2) On the Administration/Configuration page, reset your router to factory default settings, including NVRAM

3) Set up your router just as you would with the normal Tomato firmware.

4) On the Basic/Network page, set the "MultiLink PPP" option to "Single Link"

Your router should now use MLPPP on your single DSL line, circumventing Bell Canada's throttling.

Bonding two DSL lines for double the speed

This will also circumvent Bell's throttling. It will behave as if you only have one single DSL line with one single IP address. You should contact your ISP to enquire about any differences this may cause with your billing or accounts. With TekSavvy, they will give you one single account with double the normal monthly transfer cap for use with your MLPPP setup.

1) Install Tomato/MLPPP on your router just as you would install the normal Tomato firmware (refer to the Tomato documentation).

2) On the Administration/Configuration page, reset your router to factory default settings, including NVRAM

3) Set up your router just as you would with the normal Tomato firmware. Plug one modem into your router's "WAN" port, and the other modem into any of your router's switch ports.

4) On the Basic/Network page, set the "MultiLink PPP" option to "Multiple Links"

Your router should now provide you with roughly double the performance of the slowest of the two links. It may take a minute or two to establish the second link.

Bonding three or more DSL lines

It is theoretically possible to bond up to five DSL lines with Tomato/MLPPP. However, it is unlikely that the router will be able to handle much more than ~15-16 aggregate megabits per second of throughput. This will, of course, depend on the capabilities of your specific router, as some have faster CPUs than others; three 5mbit lines on a WRT54GL (200MHz) is probably cutting it a bit close without overclocking, but the WRTSL54GL (260MHz) should handle it much better.

It should also be noted that some devices (such as the WRT54G v1.x) don't support 802.1Q VLANs, and so can't support three lines without further development effort.

Please see ask for help on DSLReports for more information.

HOW MLPPP BEHAVES

When MLPPP is disabled or in single link mode, it should behave very similarly to the regular Tomato firmware; it will establish a PPPoE link almost immediately.

When MLPPP is in multiple link mode, you will have a working Internet connection within a few seconds, and you should experience double the speed within a minute or two.

This is because the router will first establish the primary link on the WAN port, which should take no more than a few seconds). It will then begin attempting to establish a link on the secondary modem. As both links must connect to the same router at your ISP, the router may have to disconnect and reconnect the secondary link multiple times in order to get the same remote router. This is entirely automatic. The more routers your ISP uses, the longer it will take to establish the second link.

You can view the status of your multi-link connection on the Status/Overview page. A more detailed description is available in the NEW OPTIONS section.

NEW OPTIONS/FIELDS

Tomato/MLPPP makes numerous changes to the Tomato UI in order to support multilink setups.

Status/Overview page:

"Status" field: Displays the number of connected DSL lines versus the total number of DSL lines configured. This might be something like "1 of 1 Connected", "Connecting...", "Disconnected"

"MLPPP" field: Displays the current multilink status (Disabled, Failed, Single-link, Multi-link). To evade throttling, you should see Single-link. To bond multiple lines, you should see Multi-link.

Basic/Network page:

"Type" dropdown: The L2TP option was removed due to incompatibilities caused during development. It should not be terribly important in Tomato/MLPPP as most users will be using a PPPoE WAN connection.

"MTU" control: This field has been moved to the Advanced section. It is only included here due to the difference from the mainline Tomato firmware. It is highly recommended that you NOT adjust your MTU settings.

"Multi-link PPP" dropdown: This dropdown allows you to select the MLPPP mode. Options include "Off" (do not use MLPPP at all), "Single Link" (use MLPPP on a single modem, circumvents Bell Canada throttling), and "Multiple Links" (use MLPPP on two modems to double performance). Some ISPs might require you to set the "Reject non-MLPPP connections" on the Advanced/Miscellaneous page. Please see that option for a more detailed description.

"Route Modem IP" textbox: Enter the IP of the modem connected to the WAN port here in order to enable access to your modem from the LAN. Devices on your LAN should then be able to access the modem using its IP address. Useful for accessing the modem with DMT, telnet, or a web browser.

Advanced/Miscellaneous page:

"MTU" textbox: Sets the IP Maximum Transmit Unit setting. This setting is automatically managed for the optimal performance and compatibility. Changing this value can cause performance degradation or incompatibility with certain applications, and so it is highly recommended that you DO NOT change this setting unless you know exactly how ATM, PPPoE, IP, TCP, and UDP all work and interact together.

"MRU" textbox: Sets the IP Maximum Receive Unit setting. This setting is automatically managed for the optimal performance and compatibility. Changing this value can cause performance degradation or incompatibility with certain applications, and so it is highly recommended that you DO NOT change this setting unless you know exactly how ATM, PPPoE, IP, TCP, and UDP all work and interact together.

"MRRU" textbox: Sets the IP Maximum Reconstructed Receive Unit setting. This setting is automatically managed for the optimal performance and compatibility. Changing this value can cause performance degradation or incompatibility with certain applications, and so it is highly recommended that you DO NOT change this setting unless you know exactly how ATM, PPPoE, IP, TCP, and UDP all work and interact together.

"Incoming MSS" textbox: Sets the TCP Incoming Maximum Send Size setting. This setting is automatically managed for the optimal performance and compatibility. Changing this value can cause performance degradation or incompatibility with certain applications, and so it is highly recommended that you DO NOT change this setting unless you know exactly how ATM, PPPoE, IP, TCP, and UDP all work and interact together.

"Incoming MSS" textbox: Sets the TCP Outgoing Maximum Send Size setting. This setting is automatically managed for the optimal performance and compatibility. Changing this value can cause performance degradation or incompatibility with certain applications, and so it is highly recommended that you DO NOT change this setting unless you know exactly how ATM, PPPoE, IP, TCP, and UDP all work and interact together.

"LCP Echo Interval" textbox: The router will periodically send a message to your ISP to determine if you are still connected. This setting controls how many seconds the router will wait between sending messages. These messages are extremely small and will not be recorded by your ISP as bandwidth transfer. You probably shouldn't change this value.

"LCP Echo Fail" textbox: This field determines the number of consecutive LCP echos that must fail before the router will decide that you have been disconnected. Packet loss (caused by poor line quality or downloading/uploading very fast) can cause LCP echos to fail, which is why this value is normally set somewhat high. If you find that Tomato/MLPPP is disconnecting often, you may want to try raising this setting. You probably shouldn't lower it unless saturating your connection doesn't cause packet loss.

"MLPPP Interfaces" textbox: Automatically populated with the device identifier on which the router will look for your second DSL modem. Can be manually overridden to change the device, or add more devices (separated by commas) for 3+ link setups. As a warning, on a standard 200MHz router it requires about 6% CPU usage per megabit, and so bonding 3x5mbit links would require 90% CPU usage just for routing, with wireless and other services requiring more on top of that. If you do want to set up three or more links, you will need to create additional VLANs and bridges (pppd will segfault when connecting to a vlan device, so you need to create a bridge on the vlan) to isolate switch ports for additional modems. This can be done using Tomato's "Scripts" feature in the "Administration" section. Please see http://fixppp.org for more information on setting up 3+ links.

"Reject non-MLPPP connections" checkbox: Some ISPs such as Acanac only support MLPPP on some (but not all) of their gateways. In such cases, select this option to cause the router to reconnect until it finds a gateway that supports MLPPP. This option will not have any effect if MLPPP is disabled, or if all of your ISP's gateways support MLPPP. If none of your ISP's gateways support MLPPP (Bell Sympatico, for example) it will prevent you from connecting at all.

Port Forwarding/Basic:

If there is a 1:1 NAT rule for an internal IP, ports forwarded to that IP will only forward packets sent to the external IP in that 1:1 NAT rule.

Port Forwarding:1:1 NAT

This page behaves similar to other pages based on the same design (such as the "Basic" Port Forwarding page). There are five controls for each rule:

"On" checkbox: Enables or disables the given rule.

"Internal Address" textbox: The LAN IP that you wish to create a 1:1 NAT rule for. This is the IP address on your LAN that you want the 1:1 NAT rule to apply to. All traffic originating from this IP will be sent out via the specified external address.

"External Address" textbox: This is the external (Internet) IP that is assigned to you that you want packets to be sent out via. This will also cause any port forwarding rules that belong to an IP specified in a 1:1 NAT rule (as internal) to only forward that port on the external IP assigned to an internal IP.

"Destination Address" textbox: This optional field allows you to specify that 1:1 NAT should only be performed if the destination falls within the given range. This ONLY affects outgoing connections/packets, and does not affect port forwarding (which is the incoming side of things).

"Description" textbox: Allows you to enter an optional name for this rule.

KNOWN ISSUES

- UPnP does not work correctly with 1:1 NAT. This will be fixed by the final release of mp3.
- The PPP bundle will occasionaly stop accepting IP traffic when reconnecting a line to the bundle. We're planning to have a workaround for this at the very least.

CHANGELOG

v1.21-mp3alpha4
v1.21-mp3alpha3
v1.21-mp3alpha2
v1.19-mp2
v1.19-mp1:
FUTURE PLANS

v1.21-mp4:
v1.21-mp5:
SOURCE CODE AND LICENSES

Tomato is covered by various licenses, such as the GNU Public License, the BSD license, and Jonathan Zarate's license. A patch set should be available from http://fixppp.org that contains all changes made to software included in this binary release.

SPECIAL THANKS

We wish to thank the following people, without whom this release would not have been possible: