mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.4 KiB
162 lines
4.4 KiB
/*
|
|
* Copyright (C) 2007 iptelorg GmbH
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
/*! \file
|
|
* \brief tcp options
|
|
*
|
|
*/
|
|
|
|
#ifndef tcp_options_h
|
|
#define tcp_options_h
|
|
|
|
#ifdef USE_TCP
|
|
|
|
#include <netinet/in.h>
|
|
#include <netinet/tcp.h>
|
|
#ifndef NO_TCP_ASYNC
|
|
#define TCP_ASYNC /* enabled async mode */
|
|
#endif
|
|
|
|
#if !defined(NO_TCP_CONNECT_WAIT) && defined(TCP_ASYNC)
|
|
#define TCP_CONNECT_WAIT /* enable pending connects support */
|
|
#endif
|
|
|
|
#if defined(TCP_CONNECT_WAIT) && !defined(TCP_ASYNC)
|
|
/* check for impossible configuration: TCP_CONNECT_WAIT w/o TCP_ASYNC */
|
|
#warning "disabling TCP_CONNECT_WAIT because TCP_ASYNC is not defined"
|
|
#undef TCP_CONNECT_WAIT
|
|
#endif
|
|
|
|
#ifndef NO_TCP_FD_CACHE
|
|
#define TCP_FD_CACHE /* enable fd caching */
|
|
#endif
|
|
|
|
|
|
|
|
/* defer accept */
|
|
#ifndef NO_TCP_DEFER_ACCEPT
|
|
#ifdef __OS_linux
|
|
#define HAVE_TCP_DEFER_ACCEPT
|
|
#elif defined __OS_freebsd
|
|
#define HAVE_TCP_ACCEPT_FILTER
|
|
#endif /* __OS_ */
|
|
#endif /* NO_TCP_DEFER_ACCEPT */
|
|
|
|
|
|
/* syn count */
|
|
#ifndef NO_TCP_SYNCNT
|
|
#ifdef __OS_linux
|
|
#define HAVE_TCP_SYNCNT
|
|
#endif /* __OS_*/
|
|
#endif /* NO_TCP_SYNCNT */
|
|
|
|
/* tcp linger2 */
|
|
#ifndef NO_TCP_LINGER2
|
|
#ifdef __OS_linux
|
|
#define HAVE_TCP_LINGER2
|
|
#endif /* __OS_ */
|
|
#endif /* NO_TCP_LINGER2 */
|
|
|
|
/* keepalive */
|
|
#ifndef NO_TCP_KEEPALIVE
|
|
#define HAVE_SO_KEEPALIVE
|
|
#endif /* NO_TCP_KEEPALIVE */
|
|
|
|
/* keepintvl */
|
|
#ifndef NO_TCP_KEEPINTVL
|
|
#ifdef TCP_KEEPINTVL
|
|
#define HAVE_TCP_KEEPINTVL
|
|
#endif /* TCP_KEEPINTVL */
|
|
#endif /* NO_TCP_KEEPINTVL */
|
|
|
|
/* keepidle */
|
|
#ifndef NO_TCP_KEEPIDLE
|
|
#ifdef TCP_KEEPIDLE
|
|
#define HAVE_TCP_KEEPIDLE
|
|
#endif /* TCP_KEEPIDLE*/
|
|
#endif /* NO_TCP_KEEPIDLE */
|
|
|
|
|
|
/* keepcnt */
|
|
#ifndef NO_TCP_KEEPCNT
|
|
#ifdef TCP_KEEPCNT
|
|
#define HAVE_TCP_KEEPCNT
|
|
#endif /* TCP_KEEPCNT */
|
|
#endif /* NO_TCP_KEEPCNT */
|
|
|
|
|
|
/* delayed ack (quick_ack) */
|
|
#ifndef NO_TCP_QUICKACK
|
|
#ifdef __OS_linux
|
|
#define HAVE_TCP_QUICKACK
|
|
#endif /* __OS_ */
|
|
#endif /* NO_TCP_QUICKACK */
|
|
|
|
#endif /* USE_TCP */
|
|
|
|
struct cfg_group_tcp{
|
|
/* ser tcp options, low level */
|
|
int connect_timeout_s; /* in s */
|
|
int send_timeout; /* in ticks (s fixed to ticks) */
|
|
int con_lifetime; /* in ticks (s fixed to ticks) */
|
|
int max_connections; /* max tcp connections (includes tls connections) */
|
|
int max_tls_connections; /* max tls connections */
|
|
int no_connect; /* do not open any new tcp connection (but accept them) */
|
|
int fd_cache; /* on /off */
|
|
/* tcp async options */
|
|
int async; /* on / off */
|
|
int tcp_connect_wait; /* on / off, depends on async */
|
|
unsigned int tcpconn_wq_max; /* maximum queue len per connection */
|
|
unsigned int tcp_wq_max; /* maximum overall queued bytes */
|
|
|
|
/* tcp socket options */
|
|
int defer_accept; /* on / off */
|
|
int delayed_ack; /* delay ack on connect */
|
|
int syncnt; /* numbers of SYNs retrs. before giving up connecting */
|
|
int linger2; /* lifetime of orphaned FIN_WAIT2 state sockets */
|
|
int keepalive; /* on /off */
|
|
int keepidle; /* idle time (s) before tcp starts sending keepalives */
|
|
int keepintvl; /* interval between keep alives */
|
|
int keepcnt; /* maximum no. of keepalives before giving up */
|
|
|
|
/* other options */
|
|
int crlf_ping; /* on/off - reply to double CRLF keepalives */
|
|
int accept_aliases;
|
|
int alias_flags;
|
|
int new_conn_alias_flags;
|
|
int accept_no_cl; /* on/off - accept messages without content-length */
|
|
|
|
/* internal, "fixed" vars */
|
|
unsigned int rd_buf_size; /* read buffer size (should be > max. datagram)*/
|
|
unsigned int wq_blk_size; /* async write block size (debugging use) */
|
|
};
|
|
|
|
extern struct cfg_group_tcp tcp_default_cfg;
|
|
|
|
/* tcp config handle*/
|
|
extern void* tcp_cfg;
|
|
|
|
|
|
void init_tcp_options(void);
|
|
void tcp_options_check(void);
|
|
int tcp_register_cfg(void);
|
|
void tcp_options_get(struct cfg_group_tcp* t);
|
|
|
|
#ifdef USE_TCP
|
|
int tcp_set_clone_rcvbuf(int v);
|
|
#endif /* USE_TCP */
|
|
|
|
#endif /* tcp_options_h */
|