blst: global config variables for ignoring blacklist events
[sip-router] / cfg_core.c
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2007 iptelorg GmbH
5  *
6  * This file is part of ser, a free SIP server.
7  *
8  * ser is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * For a license to use the ser software under conditions
14  * other than those described here, or to purchase support for this
15  * software, please contact iptel.org by e-mail at the following addresses:
16  *    info@iptel.org
17  *
18  * ser is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26  *
27  * History
28  * -------
29  *  2007-12-03  Initial version (Miklos)
30  *  2008-01-31  added DNS resolver parameters (Miklos)
31  */
32
33 #include "dprint.h"
34 #ifdef USE_DST_BLACKLIST
35 #include "dst_blacklist.h"
36 #endif
37 #include "resolve.h"
38 #ifdef USE_DNS_CACHE
39 #include "dns_cache.h"
40 #endif
41 #if defined PKG_MALLOC || defined SHM_MEM
42 #include "pt.h"
43 #endif
44 #include "msg_translator.h" /* fix_global_req_flags() */
45 #include "cfg/cfg.h"
46 #include "cfg_core.h"
47
48 struct cfg_group_core default_core_cfg = {
49         L_WARN,         /*  print only msg. < L_WARN */
50         LOG_DAEMON,     /* log_facility -- see syslog(3) */
51         L_DBG,  /* memdbg */
52 #ifdef USE_DST_BLACKLIST
53         /* blacklist */
54         0, /* dst blacklist is disabled by default */
55         DEFAULT_BLST_TIMEOUT,
56         DEFAULT_BLST_MAX_MEM,
57         0, /* blst_udp_imask */
58         0, /* blst_tcp_imask */
59         0, /* blst_tls_imask */
60         0, /* blst_sctp_imask */
61 #endif
62         /* resolver */
63 #ifdef USE_IPV6
64         1,  /* dns_try_ipv6 -- on by default */
65 #else
66         0,  /* dns_try_ipv6 -- off, if no ipv6 support */
67 #endif
68         0,  /* dns_try_naptr -- off by default */
69         30,  /* udp transport preference (for naptr) */
70         20,  /* tcp transport preference (for naptr) */
71         10,  /* tls transport preference (for naptr) */
72         20,  /* sctp transport preference (for naptr) */
73         -1, /* dns_retr_time */
74         -1, /* dns_retr_no */
75         -1, /* dns_servers_no */
76         1,  /* dns_search_list */
77         1,  /* dns_search_fmatch */
78         0,  /* dns_reinit */
79         /* DNS cache */
80 #ifdef USE_DNS_CACHE
81         1,  /* use_dns_cache -- on by default */
82         0,  /* dns_cache_flags */
83         0,  /* use_dns_failover -- off by default */
84         0,  /* dns_srv_lb -- off by default */
85         DEFAULT_DNS_NEG_CACHE_TTL, /* neg. cache ttl */
86         DEFAULT_DNS_CACHE_MIN_TTL, /* minimum ttl */
87         DEFAULT_DNS_CACHE_MAX_TTL, /* maximum ttl */
88         DEFAULT_DNS_MAX_MEM, /* dns_cache_max_mem */
89         0, /* dns_cache_del_nonexp -- delete only expired entries by default */
90 #endif
91 #ifdef PKG_MALLOC
92         0, /* mem_dump_pkg */
93 #endif
94 #ifdef SHM_MEM
95         0, /* mem_dump_shm */
96 #endif
97         DEFAULT_MAX_WHILE_LOOPS, /* max_while_loops */
98         0, /* udp_mtu (disabled by default) */
99         0, /* udp_mtu_try_proto -> default disabled */
100         0,  /* force_rport */
101         L_DBG, /* memlog */
102         1 /* mem_summary -flags: 0 off, 1 shm/pkg_status, 2 shm/pkg_sums */
103 };
104
105 void    *core_cfg = &default_core_cfg;
106
107 cfg_def_t core_cfg_def[] = {
108         {"debug",               CFG_VAR_INT|CFG_ATOMIC, 0, 0, 0, 0,
109                 "debug level"},
110         {"log_facility",        CFG_VAR_INT|CFG_INPUT_STRING,   0, 0, log_facility_fixup, 0,
111                 "syslog facility, see \"man 3 syslog\""},
112         {"memdbg",              CFG_VAR_INT|CFG_ATOMIC, 0, 0, 0, 0,
113                 "log level for memory debugging messages"},
114 #ifdef USE_DST_BLACKLIST
115         /* blacklist */
116         {"use_dst_blacklist",   CFG_VAR_INT,    0, 1, use_dst_blacklist_fixup, 0,
117                 "enable/disable destination blacklisting"},
118         {"dst_blacklist_expire",        CFG_VAR_INT,    0, 0, 0, 0,
119                 "how much time (in s) a blacklisted destination is kept in the list"},
120         {"dst_blacklist_mem",   CFG_VAR_INT,    0, 0, blst_max_mem_fixup, 0,
121                 "maximum shared memory amount (in KB) used for keeping the blacklisted"
122                         " destinations"},
123         {"dst_blacklist_udp_imask", CFG_VAR_INT, 0, 0, 0, blst_reinit_ign_masks,
124                 "blacklist event ignore mask for UDP"},
125         {"dst_blacklist_tcp_imask", CFG_VAR_INT, 0, 0, 0, blst_reinit_ign_masks,
126                 "blacklist event ignore mask for TCP"},
127         {"dst_blacklist_tls_imask", CFG_VAR_INT, 0, 0, 0, blst_reinit_ign_masks,
128                 "blacklist event ignore mask for TLS"},
129         {"dst_blacklist_sctp_imask", CFG_VAR_INT, 0, 0, 0, blst_reinit_ign_masks,
130                 "blacklist event ignore mask for SCTP"},
131 #endif
132         /* resolver */
133 #ifdef USE_DNS_CACHE
134         {"dns_try_ipv6",        CFG_VAR_INT,    0, 1, dns_try_ipv6_fixup, fix_dns_flags,
135 #else
136         {"dns_try_ipv6",        CFG_VAR_INT,    0, 1, dns_try_ipv6_fixup, 0,
137 #endif
138                 "enable/disable IPv6 DNS lookups"},
139 #ifdef USE_DNS_CACHE
140         {"dns_try_naptr",       CFG_VAR_INT,    0, 1, 0, fix_dns_flags,
141 #else
142         {"dns_try_naptr",       CFG_VAR_INT,    0, 1, 0, 0,
143 #endif
144                 "enable/disable NAPTR DNS lookups"},
145         {"dns_udp_pref",        CFG_VAR_INT,    0, 0, 0, reinit_naptr_proto_prefs,
146                 "udp protocol preference when doing NAPTR lookups"},
147         {"dns_tcp_pref",        CFG_VAR_INT,    0, 0, 0, reinit_naptr_proto_prefs,
148                 "tcp protocol preference when doing NAPTR lookups"},
149         {"dns_tls_pref",        CFG_VAR_INT,    0, 0, 0, reinit_naptr_proto_prefs,
150                 "tls protocol preference when doing NAPTR lookups"},
151         {"dns_sctp_pref",       CFG_VAR_INT,    0, 0, 0, reinit_naptr_proto_prefs,
152                 "sctp protocol preference when doing NAPTR lookups"},
153         {"dns_retr_time",       CFG_VAR_INT,    0, 0, 0, resolv_reinit,
154                 "time in s before retrying a dns request"},
155         {"dns_retr_no",         CFG_VAR_INT,    0, 0, 0, resolv_reinit,
156                 "number of dns retransmissions before giving up"},
157         {"dns_servers_no",      CFG_VAR_INT,    0, 0, 0, resolv_reinit,
158                 "how many dns servers from the ones defined in "
159                 "/etc/resolv.conf will be used"},
160         {"dns_use_search_list", CFG_VAR_INT,    0, 1, 0, resolv_reinit,
161                 "if set to 0, the search list in /etc/resolv.conf is ignored"},
162         {"dns_search_full_match",       CFG_VAR_INT,    0, 1, 0, 0,
163                 "enable/disable domain name checks against the search list "
164                 "in DNS answers"},
165         {"dns_reinit",          CFG_VAR_INT|CFG_INPUT_INT,      1, 1, dns_reinit_fixup, resolv_reinit,
166                 "set to 1 in order to reinitialize the DNS resolver"},
167         /* DNS cache */
168 #ifdef USE_DNS_CACHE
169         {"use_dns_cache",       CFG_VAR_INT,    0, 1, use_dns_cache_fixup, 0,
170                 "enable/disable the dns cache"},
171         {"dns_cache_flags",     CFG_VAR_INT,    0, 4, 0, fix_dns_flags,
172                 "dns cache specific resolver flags "
173                 "(1=ipv4 only, 2=ipv6 only, 4=prefer ipv6"},
174         {"use_dns_failover",    CFG_VAR_INT,    0, 1, use_dns_failover_fixup, 0,
175                 "enable/disable dns failover in case the destination "
176                 "resolves to multiple ip addresses and/or multiple SRV records "
177                 "(depends on use_dns_cache)"},
178         {"dns_srv_lb",          CFG_VAR_INT,    0, 1, 0, fix_dns_flags,
179                 "enable/disable load balancing to different srv records "
180                 "of the same priority based on the srv records weights "
181                 "(depends on dns_failover)"},
182         {"dns_cache_negative_ttl",      CFG_VAR_INT,    0, 0, 0, 0,
183                 "time to live for negative results (\"not found\") "
184                 "in seconds. Use 0 to disable"},
185         {"dns_cache_min_ttl",   CFG_VAR_INT,    0, 0, 0, 0,
186                 "minimum accepted time to live for a record, in seconds"},
187         {"dns_cache_max_ttl",   CFG_VAR_INT,    0, 0, 0, 0,
188                 "maximum accepted time to live for a record, in seconds"},
189         {"dns_cache_mem",       CFG_VAR_INT,    0, 0, dns_cache_max_mem_fixup, 0,
190                 "maximum memory used for the dns cache in Kb"},
191         {"dns_cache_del_nonexp",        CFG_VAR_INT,    0, 1, 0, 0,
192                 "allow deletion of non-expired records from the cache when "
193                 "there is no more space left for new ones"},
194 #endif
195 #ifdef PKG_MALLOC
196         {"mem_dump_pkg",        CFG_VAR_INT,    0, 0, 0, mem_dump_pkg_cb,
197                 "dump process memory status, parameter: pid_number"},
198 #endif
199 #ifdef SHM_MEM
200         {"mem_dump_shm",        CFG_VAR_INT,    0, 0, mem_dump_shm_fixup, 0,
201                 "dump shared memory status"},
202 #endif
203         {"max_while_loops",     CFG_VAR_INT|CFG_ATOMIC, 0, 0, 0, 0,
204                 "maximum iterations allowed for a while loop" },
205         {"udp_mtu",     CFG_VAR_INT|CFG_ATOMIC, 0, 65535, 0, 0,
206                 "fallback to a congestion controlled protocol if send size"
207                         " exceeds udp_mtu"},
208         {"udp_mtu_try_proto", CFG_VAR_INT, 1, 4, 0, fix_global_req_flags,
209                 "if send size > udp_mtu use proto (1 udp, 2 tcp, 3 tls, 4 sctp)"},
210         {"force_rport",     CFG_VAR_INT, 0, 1,  0, fix_global_req_flags,
211                 "force rport for all the received messages" },
212         {"memlog",              CFG_VAR_INT|CFG_ATOMIC, 0, 0, 0, 0,
213                 "log level for memory status/summary information"},
214         {"mem_summary", CFG_VAR_INT|CFG_ATOMIC, 0, 3, 0, 0,
215                 "memory debugging information displayed on exit (flags): "
216                 " 0 - off, 1 - dump all the used blocks (status),"
217                 " 2 - summary of used blocks" },
218         {0, 0, 0, 0, 0, 0}
219 };