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); before the call to ip_output(), then SYN+ACK goes the right way. -- Oleg Sharoyko. Software and Network Engineer Computer Center of Rostov State University. _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"