TCP_KEEPIDLE vs TCPTV_KEEP_IDLE

Richard Sharpe realrichardsharpe at gmail.com
Mon May 6 13:15:13 UTC 2013


On Mon, May 6, 2013 at 1:22 AM, Gleb Smirnoff <glebius at freebsd.org> wrote:
> On Sun, May 05, 2013 at 09:40:42AM -0700, Richard Sharpe wrote:
> R> Samba currently has a way to set socket parameters from the smb.conf.
> R>
> R> This works fine for things like SO_SNDBUF etc, but not so well for the
> R> TCP KeepAlive parameters.
> R>
> R> In this area Samba has a Linux bias.
> R>
> R> I am looking at adding support for this under FreeBSD.
> R>
> R> The simplest way, it seems to me, is to enhance configure to find the
> R> appropriate symbols under FreeBSD (and it might be extendable to
> R> NetBSD etc) and then map them to the Linux symbols:
> R>
> R> #ifdef THIS_IS_SOME_SORT_OF_BSD
> R> #define TCP_KEEPIDLE TCPTV_KEEP_IDLE
> R> #endif
> R>
> R> However, that does mean that *BSD types would have to know that this
> R> happening because the names you would use in the smb.conf file would
> R> be Linux-specific, and documentation is often woefully incomplete.
> R>
> R> Is there a better method?
>
> I don't see the problem you are describing. AFAIK, these socket options
> have same names in FreeBSD and Linux.
>
> For example in Samba 3.6.14 sources it just checks for value defined
> and if defined compiles support in. See source3/lib/util_sock.c:

Yes, I know that. However, when I do a find and grep over /usr/include
looking for files where TCP_KEEPIDLE is defined, I find nothing. When
I do the same for TCPTV_KEEP_IDLE I find
/usr/include/netinet/tcp_timer.h.

This seems to mean that the symbols Samba is using are not defined on FreeBSD.

These appear to be the symbols defined in FreeBSD 8,0:

 * connection is idle (no segments received) for TCPTV_KEEP_INIT amount of time,
 * is established, if the connection is idle for TCPTV_KEEP_IDLE time
#define	TCPTV_KEEP_INIT	( 75*hz)		/* initial connect keepalive */
#define	TCPTV_KEEP_IDLE	(120*60*hz)		/* dflt time before probing */
#define	TCPTV_KEEPINTVL	( 75*hz)		/* default probe interval */
#define	TCPTV_KEEPCNT	8			/* max probes before drop */

Then, a strings over the smbd produced in one of my recent builds
fails to turn up TCP_KEEP*, supporting my contention that the
TCP_KEEP* versions of the symbols are not defined.

So, at this stage I am terribly confused.

> #ifdef TCP_KEEPCNT
>   {"TCP_KEEPCNT", IPPROTO_TCP, TCP_KEEPCNT, 0, OPT_INT},
> #endif
> #ifdef TCP_KEEPIDLE
>   {"TCP_KEEPIDLE", IPPROTO_TCP, TCP_KEEPIDLE, 0, OPT_INT},
> #endif
> #ifdef TCP_KEEPINTVL
>   {"TCP_KEEPINTVL", IPPROTO_TCP, TCP_KEEPINTVL, 0, OPT_INT},
> #endif
>
> P.S.
> Since you mention TCPTV_KEEP_IDLE, I've tried to grep samba sources
> for this definition getting zero results.
>
> --
> Totus tuus, Glebius.



-- 
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)


More information about the freebsd-net mailing list