Date: Mon, 14 Jan 2008 21:32:45 -0500 From: Randall Stewart <rrs@cisco.com> To: Qing Li <qingli@speakeasy.net> Cc: qingli@freebsd.org, freebsd-arch@freebsd.org Subject: Re: Routing in the network :-) Message-ID: <478C1B4D.4070507@cisco.com> In-Reply-To: <001801c85555$8d3bd970$8d335140@SAINTS> References: <30834.1199989743@speakeasy.net> <4788F1AE.4030502@cisco.com> <001801c85555$8d3bd970$8d335140@SAINTS>
next in thread | previous in thread | raw e-mail | index | archive | help
Great.. I will await your email :-D R Qing Li wrote: > Okay, I will pull the branch and start the work on it. > Let me get all of my changes in place and after testing > the features out, I will ping you and you can let me > know if you require additional support, we'll just go > from there. > > -- Qing > > > >>-----Original Message----- >>From: owner-freebsd-arch@freebsd.org >>[mailto:owner-freebsd-arch@freebsd.org] On Behalf Of Randall Stewart >>Sent: Saturday, January 12, 2008 8:58 AM >>To: qingli@speakeasy.net >>Cc: qingli@freebsd.org; freebsd-arch@freebsd.org >>Subject: Re: Routing in the network :-) >> >>Qing Li: >> >>Ok, the branch is created :-) >> >>//depot/user/rrs/alt_route >> >>Please go ahead and pull a copy and add your changes.. unless >>you would like me to ressurect my old patches.. (let me know).. >> >>If you put your patches in ping me to tell me they are in .. >>and then I will ressurect my old alternate route lookup patch >>and the changes to SCTP to use it :-) >> >>Ping me either way >> >> >>R >> >>Qing Li wrote: >> >>> Interesting you are bringing this up ... I actually >> >>sent a similar email to freebsd-net@ >> >>> about 2 years ago and had one response back (it was a >> >>polite no). >> >>> I back ported and integrated the radix_mpath changes >> >>from KAME into FreeBSD 5.4 >> >>> and the changes are working good right now in >> >>production environment. Changes >> >>> were also necessary in quite a few place throughout the >> >>netinet/ files, e.g., >> >>> address initialization functions such as in_ifinit(). >>> >>> I actually discussed what I have done with itojun back >> >>in August of 2007. >> >>> >>>>On Thu Jan 10 6:55 , Randall Stewart sent: >>>> >>>>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... >>>> >>>>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. >>>> >>> >>> >>> This is done. >>> >>> >>> >>>>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? >>>> >>> >>> >>> There was a inp_route field in the in_pcb{} structure but >>> that field was later removed by Andre in 5.5. I never quite >>> understood why but I did find that field to be rather useful. >>> >>> union { >>> /* placeholder for routing entry */ >>> struct route inc4_route; >>>#if 1 /* def NEW_STRUCT_ROUTE */ >>> struct route inc6_route; >>>#else >>> struct route_in6 inc6_route; >>>#endif >>> } inc_dependroute; >>> >>> I used this field for caching and it gets flushed when >>> there is a routing table change. Works out good. >>> >>> >>> >>>>Now I admit for TCP these API's would have limited use.. >>>> >>> >>> >>> That depends ... :-) >>> >>> >>> >>>>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. >>>> >>>> >>>>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 >>>>running across your carpet to AT&T's DSL and it thinks >> >>chewing on it >> >>>>would be fun :-) >>>> >>>>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. >>>> >>> >>> >>> The rtrequest1() function needed a bit of work but not so huge. >>> >>> >>> >>>>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... >>>> >>> >>> >>> I have been enhancing the code for some time now ... >>> >>> I can do both route delete and even route modification (I added >>> route preferences in addition to ECMP). >>> >>> I have 7 fundamental test cases to perform on the >> >>implementation to ensure >> >>> both correctness and compatibility. >>> >>> >>> >>>>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 would like to get these changes made into 8.0. >>> >>> If there is enough interest out there, I'd be happy to >> >>share my implementation >> >>> and we probabaly can collaborate on this effort if that >> >>works for you. >> >>> -- Qing >>> >>> >>> >>>R >> >> >>-- >>Randall Stewart >>NSSTG - Cisco Systems Inc. >>803-345-0369 <or> 803-317-4952 (cell) >>_______________________________________________ >>freebsd-arch@freebsd.org mailing list >>http://lists.freebsd.org/mailman/listinfo/freebsd-arch >>To unsubscribe, send any mail to >>"freebsd-arch-unsubscribe@freebsd.org" >> >> > > > -- Randall Stewart NSSTG - Cisco Systems Inc. 803-345-0369 <or> 803-317-4952 (cell)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?478C1B4D.4070507>