Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Jul 2009 08:47:02 -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:  <4A6F1D76.7040806@elischer.org>
In-Reply-To: <1248788292.71222.10.camel@brain.cc.rsu.ru>
References:  <1248704237.96833.127.camel@brain.cc.rsu.ru>	 <4A6DE356.6040006@elischer.org> <4A6DEE30.6000108@sfedu.ru>	 <4A6DFFA1.1010709@elischer.org> <4A6E0121.2020004@sfedu.ru>	 <4A6E05EC.8050401@elischer.org> <4A6E0A8B.5000103@sfedu.ru>	 <4A6E2666.2040906@elischer.org> <4A6E3743.7050708@elischer.org> <1248788292.71222.10.camel@brain.cc.rsu.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
Oleg Sharoyko wrote:
> On Mon, 2009-07-27 at 16:24 -0700, Julian Elischer wrote:
> 
>>> in addition to the patches already sent you might like to add the 
>>> following line to netinet/tcp_input.c
>>>
>>>                 }
>>>                 inc.inc_fport = th->th_sport;
>>>                 inc.inc_lport = th->th_dport;
>>>                 inc.inc_fibnum = so->so_fibnum; <-------------
>>>                 /*
>>>                  * Check for an existing connection attempt in syncache if
>>>                  * the flag is only ACK.  A successful lookup creates a new
>>>                  * socket appended to the listen queue in SYN_RECEIVED 
>>> state.
>>>                  */
>> in fact you might try just this on its own
> 
> With this patch alone all the packets but SYN+ACK are being sent out
> correctly. SYN+ACK still uses wrong interface.
> 
> ip_output() uses struct inpcb *inp argument to set fib. But when
> syncache_respond() sends SYN+ACK, ip_output() is being called without
> inp (from netinet/tcp_syncache.c, syncache_respond()):
> 
>  error = ip_output(m, sc->sc_ipopts, NULL, 0, NULL, NULL);
> 
> It I add
>  M_SETFIB(m, sc->sc_inc.inc_fibnum);


excellent!

I'll get that checked in!

> 
> before the call to ip_output(), then SYN+ACK goes the right way.
> 




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