RTM_LOSING: Kernel Suspects Partitioning

Brad du Plessis bradd at cat.co.za
Wed Jan 21 05:56:51 PST 2004


Hi,

I've tried a NetBSD mailing list to no avail and was hoping that someone here 
could help me.

I have the following setup:

A ----- B ====== C

Box A and Box B are on a LAN both on the same subnet. Now from box B I make a 
pppd modem dialup to box C. Manual routes are setup on A and C to allow a 
connection between A and C. It appears that if while a connection is active 
and access to C is momentarily lost, but the ppp interface remains up, 
packets that were being sent to B from A are redirected to B's default 
gateway.  

If that dialup is closed and then reopened a connection to C from A will fail 
because all packets to C through B are being routed to B's default gateway. 
In fact, the only way I'm able to get the connection to work again is either 
to delete the default gateway on B, do a ping from C to A, or to reboot box 
B.

Now I've looked through the kernel and it appears that in netinet/in_pcb.c the 
function "in_losing(inp)" is called when this happens. I've put printouts in 
the kernel and found that the route to redirect the packets (which I presume 
was setup by the kernel) from A to the default gateway has been setup as a 
static route. (rt->rt_flags & RTF_DYNAMIC == 0)

I would've thought that this route should be dynamic, my reasoning being that 
the route would then be deleted in in_losing(inp) and packets could then be 
redirected through a valid route if one were available.

Has anyone come across this before, is this a bug in the kernel? (I assume it 
does the same thing in FreeBSD)

Any help would be most appreciated!

Thanks,
Brad


More information about the freebsd-net mailing list