James Carlson wrote:

>> Two things are different for externally visible behavior:
>>   - when the route is added the kernel does not require that the gateway 
>> is directly reachable. If RTF_INDIRECT is not set the gateway must be 
>> directly reachable as is the case in Solaris today.
>>   - when we lookup a route and first find an indirect route, we iterate 
>> to lookup the gateway in that route. (Today if we first find an 
>> offlink/offsubnet route i.e., one with RTF_GATEWAY set, we iterate by 
>> looking up its gateway. The indirect route in essence adds one more step 
>> in this iterative process.)
> 
> Got it.  So this is a flag that I-BGP should use when adding routes
> that depend on an IGP.  Right?

Yep.

>>  From an implementation perspective there is logic to ensure that the 
>> caching we do for performance proves the above visible behavior as 
>> routes are added and deleted; just ensuring that the caching stays 
>> consistent with the collection of forwarding table entries.
>>
>> Do you think we should document this somewhere? If so, where? route(1m)?
> 
> By definition, to be a public interface, it must be documented.
> 
> I'd suggest both route(1M) and route(7P).  The latter is what routing
> protocol authors are supposed to be reading.

OK.
Do you want to see draft man pages? (It would essenntially be my "two 
things" text above.)


> Yep; that's how BSD works.
> 
> It has RTF_CLONING for the former route, to indicate that when you
> match it, you need to create a cloned route, and RTF_CLONED to mark
> the entries that were created by the cloning process.
> 
>   http://www.daemon-systems.org/man/route.8.html

And I think RTF_CLONED maps to 'W' if I don't misremember. Would it make 
sense to use 'W' instead of 'C' for Solaris in this context?


> The multiple A/n case is the one I was interested in.  By "do not do
> anything special" do you mean this?
> 
>       Forwarding always just picks one of these routes (in some
>       unspecified way) and uses it; there is no load spreading.  The
>       fact that you have multiple routes gives you no benefit -- other
>       than, perhaps, some robustness if one were deleted.  Local
>       connections, on the other hand, are able to use all of the A/n
>       routes, and each connection will be assigned to one route in a
>       round-robin when connecting (or otherwise when establishing or
>       using the remote address).

Yep.

Note that right now the refactor-gate implementation for local 
connections doesn't have visibility to the port numbers when it does the 
ECMP behavior. We'd to fix that to get better spreading.

> What other code (besides the TCP/IP stack) sends M_MULTIDATA?  It was
> a private interface, and I don't know of any other users.
> 
> If we're disabling multidata, then why not start the process of
> removing this old stuff?  We could at least start the notification
> process on the MDT contracts.

Not enough hours in a day, and I don't want to spend those few hours on 
debating whether or not Cassini is the best Ethernet driver ever.
(As far as I know Cassini is the only driver that uses multidata.)

    Erik




Reply via email to