Routing in the network :-)

Julian Elischer julian at elischer.org
Thu Jan 10 12:29:58 PST 2008


Randall Stewart wrote:
> Hi all:
> 
> A number of years ago, Itojun and I had played off and on
> with some modifications to both the routing table and to a
> "new" interfaces that could be used by transports to gain
> routing information.
> 
> I am contemplating digging back in my archives and building
> a p4 branch that would have the changes for folks to look at..
> But before I go to all that trouble I want to have a discussion
> about this here ;-)
> 
> This will be a longish email so if you get bored easily or just
> don't care about routing/networks and all that fun, you have
> been warned :-)
> 
> The basic concept:
> 
> So say I am at home and have purchased two DSL's. One from
> AT&T (don't you love the new ma-bell) and the other from
> SpeakEasy (Note I had this until I moved out to the country
> now I am lucky to have one DSL.. but many can do this if they
> want)... So my home looked like:
> 
> 
>                  IP-A        IP-S
>                      |          |
>                      |          |
>                      |          |
>                   ,__|__________|___
>                   |                 |
>                   |                 |
>                   | lakerest.net    |
>                   |                 |
>                   |_________________|
> 
> Now life is good, I have some degree of
> fault tolerance right?
> 
> So AT&T (IP-A) gives me the default route to IP-A1
> and Speak Easy gives me the default route to IP-S1.
> Life is not so good... how do I plumb these in the
> routing table?
> 
> I can say
> 
> route add default IP-A1
> or
> route add default IP-S1
> 
> But I cannot have both. And worse if I had a connection
> up to FreeBSD.net and AT&T's network went down.. and I
> happened to have put the first command in.. my network
> connection would stop...
> 

well you'd be hosed anyhow because the return packets
would STILL be routed to AT&T because you have an AT&T
address as a source address. Sending the packets out the
other way wouldn't help. SCTP ok, but UDP/TCP you're screwed
for that session.

For load sharing, I always use NAT of course so the
return packets come back to the right place,
and if I truely had two flaky providers I'd actually tunnel
to a common third point using Mpd.


> What would be nice if I had a way to add BOTH routes
> into the kernel.. and when Layer 4 realized there was some
> major problems going on it could "use" the alternate
> route (i.e. via IP-S1) and life would once again  be
> good..
> 
> Ok, yes, the observant person out there will say.. wait
> IP-S1 will NEVER allow your packets through since they
> probably do ingress filtering.. yes I am aware of this.. but
> this would *NOT* hold true for some device in the network
> talking to some other device in the network.. *OR* for
> speakeasy.. at least not circa 2004.. since speakeasy
> did *NOT* do ingress filtering and my way back former
> employer (AT&T) *DID* do ingress filtering..
> 
> So the idea is rather simple:
> 
> 1) Allow multiple routes on any level of the kernel
>    patricia trees.
> <and>
> 2) Add an additional interface to the routing code
>    so that a transport protocol could query the
>    routing table for additional support... i.e.
>    excuse me, the route that I had no longer seems
>    to be working, do you have an alternate gateway?
> 
> Now I admit for TCP these API's would have limited use..

yeah return packets would still not get back

> but for SCTP these are golden.. since both sides know
> about all addresses and thus you get a form of true
> network diversity out of this little software change.

I see no harm in this change in general but I think it should
be part of your SCTP capacity..as SCTP is the only
real user of this I think.

You MIGHT be able to use it in an organisation where you control both 
next hops..

> 
> Now yes, this does not help you if both your DSL's
> go out to the same pole outside your house, and a
> truck hits the pole... but it *DOES* help you if
> your network provider dies somewhere back in the CO
> *OR* if your cat decides it really likes the red cable
> running across your carpet to AT&T's DSL and it thinks
> chewing on it would be fun :-)

Cats have the ability to distinguish between blues and greens, but 
lack the ability to pick out shades of red
:-)

> 
> So what was required way back in 4.x when Itojun and
> I did this work.. (note that Itojun called his changes
> RADIX_MPATH which did NOT include my alternate
> routing lookup code).
> 
> a) For radix.c there were just a few simple changes that
>    removed the restriction that prevents duplicate routes
>    at any level of the tree.
> 
> b) For route.c a new method is added.. this is a bit
>    of code not huge but some.
> 
> c) One thing I added but took back out, was some changes to
>    the "route delete" api... can't remember exactly where.. but
>    basically the delete does not look at the destination ... i.e.
>    with the changes Itojun and I had cooked up if you said:
>    route add default IP-1
>    route add default IP-2
>    route add default IP-3
> 
>    and then when.. opps.. I don't want IP-2, you could NOT
>    say route delete default IP-2.. well you could but it did
>    no good.. it removed the first one (IP-1). I had a fix for
>    this but Itojun thought it was too radical since it changed
>    an interface to one of the routing routines... so we just settled
>    for the fact that if you did that you got to have the pleasure
>    of using:
>     route delete default
>    3 times.. and then starting again...
> 
> 
> So is it worth my time resurrecting these patches for 8.0? Objections
> (being in a routing company I know there will be a lot of them..
>  gee the routing system is supposed to do that.. etc etc).
> 
> Comments would be welcome before I dust off the patches..

I think that these patches are of interest.
I'd certainly put them in P4..

> 
> R



More information about the freebsd-arch mailing list