Kernel 2.2 has advanced the routing capabilities of Linux quite a bit. Unfortunately, the documentation for using these new capabilities is almost impossible to find (even if it does exist).
I have put some time into it and have been able to do a little with it. I will add more as I have the time and the assistance to figure out what it all means.
In kernel 2.0 and below, Linux used the standard route command to place routes in a single routing table. If you were to type netstat -rn at the Linux prompt, you would see and example.
In the newer kernels (2.1 and above), you have another option. This option is rule based, and it allows you to have multiple routing tables. The new rules allow a great deal of flexibility in deciding how a packet is handled. You can choose between routes based not only on the destination address, but also on the source address, TOS, or incoming device.