Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Jul 2009 12:52:42 -0700
From:      Julian Elischer <julian@elischer.org>
To:        Oleg Sharoyko <os@sfedu.ru>
Cc:        freebsd-net@freebsd.org
Subject:   Re: Wrong outgoing interface with multiple routing tables
Message-ID:  <4A6E058A.6060004@elischer.org>
In-Reply-To: <4A6DFFA1.1010709@elischer.org>
References:  <1248704237.96833.127.camel@brain.cc.rsu.ru>	<4A6DE356.6040006@elischer.org> <4A6DEE30.6000108@sfedu.ru> <4A6DFFA1.1010709@elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
So there are two possible ways a daemon might assign a fib to a socket 
that it is accepting:

1/  the accept socket could take the FIB of the process.
2/  the accept socket could take the fib of the incoming SYN packet.

I chose #1, but it is possible something in changes between 6
and 7 broke the "chain of custody" for the fib.
This code is in production in 6.x based systems but was only 
introduced to FreeBSD in 7.x.

The process makes a socket which inherits the fib from it.
The socket includes an INET PCB (Protocol Control Block)
which gets a copy too..
when "listen() is called and a syn comes in, a new entry is made in 
the syncache code and this includes a new connection block which is 
supposed to inherrit the fib number from the originating listen socket.

Eventually a new socket is created and it is supposed to inherit teh
fibnum from the syncache entry, and to copy it to the inpcb attached 
to it.

It's possible that somewhere this has been broken by changes.
but I don't see it right at the moment.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A6E058A.6060004>