cdp_avp: added README file
[sip-router] / tcp_options.h
1 /* 
2  * $Id$
3  * 
4  * Copyright (C) 2007 iptelorg GmbH
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 /*
19  * tcp options
20  *
21  * History:
22  * --------
23  *  2007-11-28  created by andrei
24  */
25
26 #ifndef tcp_options_h
27 #define tcp_options_h
28
29 #ifdef USE_TCP
30
31 #ifndef NO_TCP_ASYNC
32 #define TCP_ASYNC /* enabled async mode */
33 #endif
34
35 #if !defined(NO_TCP_CONNECT_WAIT) && defined(TCP_ASYNC)
36 #define TCP_CONNECT_WAIT /* enable pending connects support */
37 #endif
38
39 #if defined(TCP_CONNECT_WAIT) && !defined(TCP_ASYNC)
40 /* check for impossible configuration: TCP_CONNECT_WAIT w/o TCP_ASYNC */
41 #warning "disabling TCP_CONNECT_WAIT because TCP_ASYNC is not defined"
42 #undef TCP_CONNECT_WAIT
43 #endif
44
45 #ifndef NO_TCP_FD_CACHE
46 #define TCP_FD_CACHE /* enable fd caching */
47 #endif
48
49
50
51 /* defer accept */
52 #ifndef  NO_TCP_DEFER_ACCEPT
53 #ifdef __OS_linux
54 #define HAVE_TCP_DEFER_ACCEPT
55 #elif defined __OS_freebsd
56 #define HAVE_TCP_ACCEPT_FILTER
57 #endif /* __OS_ */
58 #endif /* NO_TCP_DEFER_ACCEPT */
59
60
61 /* syn count */
62 #ifndef NO_TCP_SYNCNT
63 #ifdef __OS_linux
64 #define HAVE_TCP_SYNCNT
65 #endif /* __OS_*/
66 #endif /* NO_TCP_SYNCNT */
67
68 /* tcp linger2 */
69 #ifndef NO_TCP_LINGER2
70 #ifdef __OS_linux
71 #define HAVE_TCP_LINGER2
72 #endif /* __OS_ */
73 #endif /* NO_TCP_LINGER2 */
74
75 /* keepalive */
76 #ifndef NO_TCP_KEEPALIVE
77 #define HAVE_SO_KEEPALIVE
78 #endif /* NO_TCP_KEEPALIVE */
79
80 /* keepintvl */
81 #ifndef NO_TCP_KEEPINTVL
82 #ifdef __OS_linux
83 #define HAVE_TCP_KEEPINTVL
84 #endif /* __OS_ */
85 #endif /* NO_TCP_KEEPIDLE */
86
87 /* keepidle */
88 #ifndef NO_TCP_KEEPIDLE
89 #ifdef __OS_linux
90 #define HAVE_TCP_KEEPIDLE
91 #endif /* __OS_*/
92 #endif /* NO_TCP_KEEPIDLE */
93
94
95 /* keepcnt */
96 #ifndef NO_TCP_KEEPCNT
97 #ifdef __OS_linux
98 #define HAVE_TCP_KEEPCNT
99 #endif /* __OS_ */
100 #endif /* NO_TCP_KEEPCNT */
101
102
103 /* delayed ack (quick_ack) */
104 #ifndef NO_TCP_QUICKACK
105 #ifdef __OS_linux
106 #define HAVE_TCP_QUICKACK
107 #endif /* __OS_ */
108 #endif /* NO_TCP_QUICKACK */
109
110 #endif /* USE_TCP */
111
112 struct cfg_group_tcp{
113         /* ser tcp options, low level */
114         int connect_timeout_s; /* in s */
115         int send_timeout; /* in ticks (s fixed to ticks) */
116         int con_lifetime; /* in ticks (s fixed to ticks) */
117         int max_connections; /* max tcp connections (includes tls connections) */
118         int max_tls_connections; /* max tls connections */
119         int no_connect; /* do not open any new tcp connection (but accept them) */
120         int fd_cache; /* on /off */
121         /* tcp async options */
122         int async; /* on / off */
123         int tcp_connect_wait; /* on / off, depends on async */
124         unsigned int tcpconn_wq_max; /* maximum queue len per connection */
125         unsigned int tcp_wq_max; /* maximum overall queued bytes */
126
127         /* tcp socket options */
128         int defer_accept; /* on / off */
129         int delayed_ack; /* delay ack on connect */ 
130         int syncnt;     /* numbers of SYNs retrs. before giving up connecting */
131         int linger2;    /* lifetime of orphaned  FIN_WAIT2 state sockets */
132         int keepalive;  /* on /off */
133         int keepidle;   /* idle time (s) before tcp starts sending keepalives */
134         int keepintvl;  /* interval between keep alives */
135         int keepcnt;    /* maximum no. of keepalives before giving up */
136         
137         /* other options */
138         int crlf_ping;  /* on/off - reply to double CRLF keepalives */
139         int accept_aliases;
140         int alias_flags;
141         int new_conn_alias_flags;
142         int accept_no_cl;  /* on/off - accpet messages without content-lenght */
143
144         /* internal, "fixed" vars */
145         unsigned int rd_buf_size; /* read buffer size (should be > max. datagram)*/
146         unsigned int wq_blk_size; /* async write block size (debugging use) */
147 };
148
149 extern struct cfg_group_tcp tcp_default_cfg;
150
151 /* tcp config handle*/
152 extern void* tcp_cfg;
153
154
155 void init_tcp_options(void);
156 void tcp_options_check(void);
157 int tcp_register_cfg(void);
158 void tcp_options_get(struct cfg_group_tcp* t);
159
160 #ifdef USE_TCP
161 int tcp_set_clone_rcvbuf(int v);
162 #endif /* USE_TCP */
163
164 #endif /* tcp_options_h */