multiple routing tables review patch ready for simple testing.

Julian Elischer julian at elischer.org
Wed Apr 30 18:41:47 UTC 2008


Bruce M. Simpson wrote:
> Bakul Shah wrote:
>> 1) A packet arrives on an interface.  If this interface is
>>    associated with more than one FIB, which FIB does it get
>>    given to?
>>   
> 
> If you only have a single FIB, there is no issue here.
> If you have multiple FIBs, the decision gets made by the classifier.
> 
>> 2) If that decision is taken by a a packet 'classifier',
>>    isn't it in effect doing the job of a FIB (deciding the
>>    next hop, which happens to be a local FIB)?  Recall that
>>    basically a packet passes from a FIB to another FIB until
>>    it gets to its eventual destination.
>>   
> 
> Up until now, the BSD forwarding code always forwarded packets on the 
> basis of the destination address.
> 
> In an IP environment this is totally reasonable. Most implementations 
> work on this basis -- ultimately, there is a fan-out to a collection of 
> tries which hold the prefix information, and there has to be a decision 
> about which trie(s) to use for resolving the next-hop. Linux iproute2 
> works on this basis more or less.
> 
> So the classifier is NOT doing the job of the FIB.
> 
>> 3) When a local packets needs to be sent, which FIB gets it?
>>    Does setfib decides that?  If there a default FIB?
>>   
> 
> If you look at Julian's patch, he's added an option to the socket layer 
> to control this.
> There is a default FIB which is used when no FIB tag exists.

actually this ha changed in the latest code..
now all packets have a fib. as do all sockets and processes.
If you do nothing those values are all 0 meaning FIB 0.

> 
> 
>> I believe having to use pf/ipfw will slow things down a bit
>> so the question is what does associating an interface with
>> multiple FIBs buy you?
>>   
> 
> You only need to pass through pf/ipfw if you wish to source-route 
> packets, or need to apply a forwarding policy decision more complex than 
> the destination field, which is all rtalloc() has historically supported.
> 
> If there is any additional latency or slowdown, it's down to how good 
> your matching algorithms are as you enter the classifier.
> 
>>
>> Wouldn't it make sense to treat each alias as on a separate
>> logical interface?  Then each logical interface belongs to
>> exactly one FIB.  On input you decide which logical inteface
>> a packet arrived on by looking at its destination MAC
>> address.  That reduces confusion quite a bit, at least in my
>> mind!  What does doing more than this buy you?
>>   
> 
> It doesn't buy anything because there is still no 1:1 mapping -- the 
> link-layer destination address maps to an ifp, and multiple aliases 
> exist on the ifp.
> 
> You still need a classifier to look at other fields in the message and 
> decide, based on policy, which FIB is used for next-hop resolution.
> 
> Tag switching systems avoid the issue by prepending a tag, but of 
> course, what does a packet go through upon entry to an MPLS domain?
> 
> You guessed it: A classifier.
> 
> cheers
> BMS
> 



More information about the freebsd-net mailing list