opensips配置脚本主要有三个逻辑部分:
通常,在第一部分定义全局变量-这些全局或者核心参数影响opendips核心和某些模块。
这些全局参数提供了:配置网络监听,可用的传输协议,forking(和线程数),日志记录和其他全局的内容
例如:
disable_tcp = yes
listen = udp:192.268.2.20:5060
listen = udp:192.268.2.20:5070
fork = yes
children = 4
log_stderror = no
对于opensips模块,要加载的模块通过使用特定的loadModule加载。模块由名称和路径(到.so文件)共同决定。如果没有提供路径(仅仅提供模块的名字),将使用默认路径(如果不是在编译时配置其他路径,那么默认路径是/usr/lib/opensips/modules)。如果使用不同的路径,要么路径和名字结合起来使用(以获取每个模块的控制),要么可以通过全局参数mpath全局配置(对于所有模块生效)。
加载模块后,可以用modparam指令设置模块的参数-罗列每个模块的可用参数列表,参数的类型(integer或者string)可以在文档中找到。
例如
loadmodule "modules/mi_datagram/mi_datagram.so"
modparam("mi_datagram", "socket_name", "udp:127.0.0.1:4343")
modparam("mi_datagram", "children_count", 3)
或者
mpath="/usr/local/opensips_proxy/lib/modules"
loadmodule "mi_datagram.so"
modparam("mi_datagram", "socket_name", "udp:127.0.0.1:4343")
modparam("mi_datagram", "children_count", 3)
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
路由逻辑实际上是路由(script routes:包含opensips路由sip流量的逻辑)的总称。和sip路由相关的opensips行为的描述是通过这些routes实现的。
有两种不同的路由:
本节列出了opensips core为脚本使用而导出的所有参数(在opensips.cfg中使用的)
关键字特指在sip消息中用到的主要用于’if’表达式。
收到的sip消息的地址族。如果通过ipv4获取消息是INET,如果通过ipv6获取消息则为INET6。
使用用例
if(af==INET6) {
log("Message received over IPv6 link\n");
};
接收sip消息的本地接口ip。当代理监听很多网络接口时,可以检测是哪个地址接收数据包。
使用用例
if(dst_ip==127.0.0.1) {
log("message received on loopback interface\n");
};
接收sip消息的本地端口。当opensips正在监听多个端口时,可以检测到是哪个 端口接收数据包。
使用用例
if(dst_port==5061)
{
log("message was received on port 5061\n");
};
这个脚本变量对应"from"头信息的URI引用。可用于测试“from”头URI。
使用用例
if(is_method("INVITE") && from_uri=~".*@opensips.org")
{
log("the caller is from opensips.org\n");
};
这个变量指消息的sip方法。
使用用例
if(method=="REGISTER")
{
log("this SIP request is a REGISTER message\n");
};
这个变量是消息大小的引用。常用于’if’结构中以测试消息的大小。
使用用例
if(msg:len>2048)
{
sl_send_reply("413", "message too large");
exit;
};
指代最近执行的函数的返回值(类似于bash的 ? − − 如 果 你 愿 意 也 可 以 用 ?--如果你愿意也可以用 ?−−如果你愿意也可以用? 在opensips中 ‘ r e t c o d e ’ 和 ′ retcode’和' retcode’和′?'均支持)。如果在呼叫路由后进行测试,它就是路由返回的值。
使用用例
route {
route(1);
if($retcode==1)
{
log("The request is an INVITE\n");
};
}
route[1] {
if(is_method("INVITE"))
return(1);
return(2);
}
该变量用于获取sip消息的传输协议。
使用用例
if(proto==UDP)
{
log("SIP message received over UDP\n");
};
如果在onreply_route中使用,这个变量指响应的状态码。如果是在一个标准的路由块中使用,该变量指当前发起的请求的最后一个相应的状态。
使用用例
if(status=="200")
{
log("this is a 200 OK reply\n");
};
指代sip消息的源ip地址。
使用用例
if(src_ip==127.0.0.1)
{
log("the message was sent from localhost!\n");
};
指代sip消息的源端口(消息由上一跳送到哪个端口)
使用用例
if(src_port==5061)
{
log("message sent from port 5061\n");
}
用于测试TO头的URI值。
使用用例
if(to_uri=~"sip:[email protected]")
{
log("this is a request for opensips.org users\n");
};
用于测试请求URI的值
使用用例
if(uri=~"sip:[email protected]")
{
log("this is a request for opensips.org users\n");
};
常用于“if”表达式,以检查core keywords。
该keyword用于测试sip包是否可以通过IPV4连接接收。
使用用例
if(af==INET)
{
log("the SIP message was received over IPv4\n");
};
该keyword用于测试sip包是否可以通过IPV6连接接收。
使用用例
if(af==INET6)
{
log("the SIP message was received over IPv6\n");
};
该keyword用于测试传输协议。检查是否通过TCP接收sip包。
使用用例
if(proto==TCP)
{
log("the SIP message was received over TCP\n");
};
该keyword用于测试传输协议,检测是否通过UDP接收sip包
使用用例
if(proto==UDP)
{
log("the SIP message was received over TCP\n");
};
该keyword指代DUP包的大小上限。可以用于测试消息的大小。
使用用例
if(msg:len>max_len)
{
sl_send_reply("413", "message too large to be forwarded over UDP without fragmentation");
exit;
}
用于罗列本地ip地址,主机名以及在opensips配置文件中设置的别名。列表包含opensips提供的域。
该变量用于测试URI的host是否在列表中。用于决定消息是在本地处理还是发送到另外一台服务器。
请参阅“alias”以添加hostname,ip地址和alias到列表中。
使用用例
if(uri==myself) {
log("the request is for local processing\n");
};
用于赋值以便重置每个脚本变量的值或者删除一个avp.
使用用例
$avp(i:12) = null;
$var(x) = null;
可以在配置文件中设置全局变量。可接受的值有:基于实际参数的字符串,数字以及 “yes” 或者 “no”。如果你想"yes"和"no"作为字符串使用,请将其用双引号括起来。
默认值:false
只有启用assert才会生效。设置assert为true那么如果一个脚本断言失败,立即关闭opensips。
使用用例
abort_on_assert = true
它可以是一个字符串或者IP地址,表示via头或者其他目标卷对应的地址。如果为空或者未设置(默认值),那么使用发送请求的套接字地址。
WARNING:
- don't set it unless you know what you are doing (e.g. nat traversal)
- you can set anything here, no check is made (e.g. foo.bar will be
accepted even if foo.bar doesn't exist)
使用用例
advertised_address="opensips.org"
注意:除了这种全局方法,你也可以在每一个接口方法中定义一个建议IP和端口(参阅"listen")。当在每个接口中定义建议值时,
标识via头或者其他目标卷对应的地址。如果为空或者未设置(默认值),那么使用发送消息的端口。一些类似’advertised_address’的告警信息。
使用用例
advertised_port=5080
用于为服务器设置主机别名。可以多次设置,每个值将会增加到一个列表:当检查’myself’时匹配主机名。
使用用例
alias=udp:other.domain.com:5060
alias=tcp:another.domain.com:5060
这个参数控制在修复监听套接字期间是否自动发现并添加别名。自动发现的别名来自dns查询结果(如果监听是一个名字而不是ip)或者监听ip上的反向dns查询结果。
由于兼容性的问题,默认值为’on’.
使用用例
auto_aliases=no
auto_aliases=0
替换为proto_bin模块的bin_port模块参数(因为将bin实现从核心迁移到单独模块)
已过时,直接删除即可。
返回相应的opensips配置文件(一般应用于包含了多个配置文件的情形)
返回OpenSIPS配置文件中的相应行
检查回复中最顶层的via地址是否为本地地址,默认值为0(禁用检查)。
使用用例
check_via=1
为每个udp或者sctp接口定义的创建工作进程数。默认值是8。
使用用例
children=16
注意:如果在某个接口定义一个不同的children,则可以覆盖全局设置(适用于所有udp/sctp接口)。因此你可以为每隔接口定义不同数量的children.
取值必须是系统的真实路径。如果设置,openSIPS将会据此设置根目录(chroot)。
使用用例
chroot=/other/fakeroot
开始debug_mode是debug openSIPS最快的方式。这个选项会自动强制如下选项使能:
在DB API中使用的table version的名字,用于检查使用的tables的版本。
默认值是’version’。
使用用例
db_version_table="version_1_8"
如果没有在每隔模块中指定URL,那么将使用默认的DB URL。默认值是NULL(未定义)
使用用例
db_default_url="mysql://opensips:opensipsrw@localhost/opensips"
从单个opensips工作模块针对每个独立的sql后端可以打开的tcp连接最大值。默认值是10。
各个终端由如下元素决定DB URL
[ scheme, user, pass, host, port, database ]
使用用例
db_max_async_connections=220
由log_level参数取代。
如果设置为’yes’,opensips将不会将加收的503响应转化为500响应。(RFC 3261明确指出代理不应该响应一个503响应,而是必须将其转化为500)
默认值是’no’(转化)
可以设置为’yes’或者’no’。默认情况下,core dump没有限制或者设置为一个足够高的值。将此配置变量设置为’yes’以禁用core dump-ing(设置core限制为0)。
默认值是’no’。
使用用例
disable_core_dump=yes
当配置failover时,dns解析器可以自动将故障目标存储在临时黑名单中。这将阻止openSIPS发送请求到已知会失败的目标。因此黑名单可以用于dns解析器的内存。
DNS解析器创建的临时黑名单为“dns”,并且会默认选择使用(不需要使用use_blacklist())。该列表的时间规则为4分钟-你可以在编译阶段通过修改resolve.c解决。
可以设置为’yes’或者’no’,默认基于dns的failover是开启的。设置该参数为‘yes’会禁用基于DNS的failover。这是一个全局配置,影响核心以及其他模块。
默认值是’no’。
使用用例
disable_dns_failover=yes
可以设置为’yes’或者’no’。这个参数控制无状态应答的处理
此参数控制SIP服务器是否应尝试在dns中查找自己的域名。如果此参数设置为yes且域名不在dns中,将打印一个warning并且’received='域添加到via header。
默认值是no。
重试dns请求的时间间隔。默认值是系统指定的,依赖于配置文件’/etc/resolv.conf’的内容(通常是4s)。
使用用例
dns_retr_no=3
使用’/etc/resolv.conf’中定义的dns服务器的数目。默认值是使用配置文件中定义的所以dns服务器。
使用用例
dns_servers_no=2
可以设置为’yes’或者’no’。如果设置为’yes’并且dns查询失败,那么将使用ipv6(AAAA record)重试。默认值是’no’。
使用用例
dns_try_ipv6=yes
当为sip请求做基于DNS的路由时禁用NAPTR(Naming Authority Pointer名称权威指针)查询。如果禁用,DNS查找将从SRV查询开始。可以设置为’yes’或者’no’。默认情况下是开启的,值为’yes’。
使用用例
dns_try_naptr=no
可以设置为’yes’或者’no’,如果设置为’no’,’/etc/resolv.conf’的查询列表将被忽略(=》最少查找=》放弃最快)。默认值为’yes’。
提示:即便你没有定义查询列表,设置该选项为’no’,仍然"faster",因为一个空的查询列表实际上就是查询""(因此即使搜索列表为空/缺失,仍然有两个dns查询,例如foo+’.‘和foo+""+’.’ )。
使用用例
dns_use_search_list=no
定义一个静态的(仅可读)ip/目标 黑名单。脚本可以在运行时选择这些列表基于ip,协议,端口等过滤传出请求。
主要目的为阻止发送请求到关键ip(如GW),或者避免发送到已知不可用的目标(临时或者永久的)。
使用用例
# filter out requests going to ips of my gws
dst_blacklist = gw:{( tcp , 192.168.2.200 , 5060 , "" ),( any , 192.168.2.201 , 0 , "" )}
# block requests going to "evil" networks
dst_blacklist = net_filter:{ ( any , 192.168.1.120/255.255.255.0 , 0 , "" )}
# block message requests with nasty words
dst_blacklist = msg_filter:{ ( any , 192.168.20.0/255.255.255.0 , 0 , "MESSAGE*ugly_word" )}
# block requests not going to a specific subnet
dst_blacklist = net_filter2:{ !( any , 192.268.30.0/255.255.255.0 , 0 , "" )}
每个规则定义如下
默认值:false
如果需要弃用assert脚本语句,设置为‘true’
使用用例
enable_asserts = true
E_CORE_PKG_THRESHOLD 事件引入的线程百分比阈值, 警告可用内存减少. 接受0到100的整数。
默认值是0(禁用事件)
使用用例
event_pkg_threshold = 90
E_CORE_SHM_THRESHOLD事件引入的线程百分比阈值,讲稿可用内存减少。家饿瘦0到100的整数值
默认值是0(禁用事件)
使用用例
event_shm_threshold = 90
一个dns查询将持续的最大微秒数。超过设置值的任何查询将触发告警并记录到日志工具。
默认值是0(日志禁用)
使用用例
exec_dns_threshold = 60000
处理sip消息持续的最大微秒数。超过设定值的任何消息将触发告警并记录到日志工具上。除了消息和处理事件,最耗时的函数的事件也会记录。
默认值是0(禁用日志)
使用用例
exec_msg_threshold = 60000
被参数debug_mode取代。
使用 -u 命令行参数替代。
可以从外部路由块调用其他的routes/blocks 或者简单的执行更多的函数。文件可以是绝对路径或者相对路径。如果不是绝对路径,首先在当前目录阐释去定位它。如果本地定位失败,第二次尝试包含该文件的目录。如果定位失败将抛出异常。
使用用例
include_file "proxy_regs.cfg"
类似于"include_file",但是如果文件未找到不抛出异常。
使用用例
import_file "proxy_regs.cfg"
设置sip服务器应该监听的网络地址。它的语法是 protocol: address[:port]。详解如下
listen = udp:*
listen = udp:eth1
listen = tcp:eth1:5062
listen = tls:localhost:5061
listen = hep_udp:10.10.10.10:5064
listen = ws:127.0.0.1:5060 use_children 5
listen = sctp:127.0.0.1:5060 as 99.88.44.33:5060 use_children 3
在启动时,openSIPS会报道它正在监听的所有接口。即便你仅仅指定了UDP接口,TCP引擎进程也会创建。
如果opensips记录日志到syslog,你可以使用facility记录日志。当你想记录日志到不通文件时,非常有效。更多详情可以查看man syslog
默认值是 LOG_DAEMON
使用用例
log_facility=LOG_LOCAL0
设置日志等级。值越高opensips打印越多的信息。
使用用例
log_level=1 -- print only important messages (like errors or more critical situations)
- recommended for running proxy as daemon
log_level=4 -- print a lot of debug messages - use it only when doing debugging sessions
取值如下
- -3 - Alert level
- -2 - Critical level
- -1 - Error level
- 1 - Warning level
- 2 - Notice level
- 3 - Info level
- 4 - Debug level
参数’log_level’经常结合参数’log_stderror’一起使用。
'log_level’的值也可以通过log_level core函数或者$log_level脚本变量进行动态获取设置。
设置打印在日志中的id。取值必须是字符串并且仅仅在daemon模式下才会生效(fork=yes)。默认值是argv[0]。
使用用例
log_name="osips-5070"
使用该参数你可以使opensips将日志写入标准错误。可能的取值如下:
log_stderror=yes
while循环的最大循环次数。作为避免配置文件执行死循环的一个保护措施。默认值是100
自动探测过程中接收的udp消息缓冲区大小最大值。默认值是262144。
使用用例
maxbuffer=65536
定义一组模块(根据名字)以获取内存统计信息。opensips将提供每组内存信息-分配的片段数,已使用内存和实际使用的内存(包括内存管理的开销)。如果你想监控某个模块(或者模块组)的内存使用情况会非常有效。
为了使用该功能项你需要运行’make generate-mem-stats’并定义变量’SHM_EXTRA_STATS’进行编译。
使用用例
mem-group = "interest": "core" "tm"
mem-group = "runtime": "dialog" "usrloc" "tm"
对于上面的实例,生成的统计信息将命名为:shmem_group_interest:fragments, shmem_group_interest:memory_used, shmem_group_interest:real_used.
可以定义多个组,但是组名不能重名。
如果你想生成默认组的统计信息(某个模块以外的所有模块),则必须定义变量SHM_SHOW_DEFAULT_GROUP进行编译。
What is memory fragmentation? Memory fragmentation is when the sum of the available space is a memory heap is large enough to satisfy a memory allocation request but the size of any individual fragment (or contiguous fragments) is too small to satisfy that memory allocation request.
默认值:off
仅仅在编译时启用HP_MALLOC时才生效。如果设置为"on",每次启动时,opensips会尝试恢复停止/重启之前的memory fragmentation模式。如果没有找到先前运行的pattern_file,则跳过内存告警,并且内存分配器像其他所有分配器一样初始分宜一块内存。
在处理大量流量时(多核机器上的数千cps-核数越多,越有用) memory warming 非常有效。当在初始化的内存块上分配内存时,进程必须相互锁定。通过在启动时执行 fragmentation,opensip在重启后的最初几分钟表现良好。碎片整理通常执行几秒 (e.g. ~5 seconds on an 8GB shm pool and 2.4Ghz CPU),-在此期间不会处理流量。
使用用例
mem_warming = on
默认值:75
在重启时如果在编译时使能mem_warming,opensips fragmentation的百分比。如果使能mem_warming使能在启动时使用。
使用用例
mem_warming_percentage = 50
默认值:“CFG_DIR/mem_warming_pattern”
memory fragmentation pattern,如果使能mem_warming,那么在启动时使用。
使用用例
mem_warming_pattern_file = "/var/tmp/my_memory_pattern"
内存状态信息的日志级别(运行时以及关闭时)。如果你想记录内存信息,其取值必须必’log_level’小。默认值: memdump=L_DUB(4)
使用用例
memdump=2
注意:如果设置memlog也需要设置memdump.假如memlog和memdump要设置不同的值,那么需要先设置memlog后设置memdump.
内存debug信息的日志级别。如果想记录内存信息,其取值也必须小于参数’log_level’。默认值:=L_DBG(4)
使用用例
memlog=2
注意:如果设置了memlog那么memdump自动设置为相同的值。
可以设置为’yes’或者’no’。如果设置为’yes’,multicast datagram are sent over loopback。
使用用例
mcast_loopback=yes
Set the value for multicast ttl. Default value is OS specific (usually 1).
使用用例
mcast_ttl=32
Set the server to try to locate outbound interface on multihomed host. By default is not (0) - it is rather time consuming.
使用用例
mhomed=1
设置module查询路径。用于简化loadmodule参数
使用用例
mpath="/usr/local/lib/opensips/modules"
loadmodule "mysql.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "sl.so"
loadmodule "tm.so"
如果设置并且比当前打开文件限制高,那么opensips将尝试增加打开文件上限到指定值。注意:必须以root角色启动opensips才能增加限制超过系统限制(大多数系统,打开文件上限为1024)
使用用例
open_files_limit=2048
The poll method to be used by the I/O internal reactor - by default the best one for the current OS is selected. The available types are: poll, epoll_lt, sigio_rt, select, kqueue, /dev/poll.
Starting with version 2.2, epoll_et is deprecated and if it is used in the script, it will be automatically replaced by epoll_lt.
使用用例
poll_method=select
sip server监听的端口。默认值是5060
使用用例
port=5080
如果设置为大于1的值,数据库插入操作则不会逐个更新到数据库,要插入的行会保存在内存中,知道收集到多于query_buffer_size才会更新到数据库中。
使用 用例
query_buffer_size=5
如果设置’query_buffer_size’为大于1的值,每隔query_flush_time将触发一个trigger.保证内存中的插入行在内存中不会保持太长时间。
使用用例
query_flush_time=10
此参数控制sip server是否应尝试在dns中查找自己的地址。如果设置为yes并且ip地址不在dns中,会在syslog中打印一个警告信息并且添加字段"received=“到via header.
默认值是"no”。
当opensips作为UAS发送请求时,由opensips差生的server header的内容。默认为"OpenSips ( (/))"。
使用用例
server_header="Server: My Company SIP Proxy"
请注意你必须添加标题名称"Server:",否则 OpenSIPS将只写一个标题:
My Company SIP Proxy
此参数控制所有本地产生的消息的"Server" header。
使用用例
server_signature=no
加入启用server_signature 产生的header如下面所示
Server: OpenSIPS (0.9.5 (i386/linux))
仅在启用hp_malloc编译标志时才相关。该参数控制优化多少个memroy buckerts.(例如设置为2%,那么将优化前81个常用的buckets)。默认值是1.
尽在启用HP_MALLOC编译标志时才相关。该参数表示单个bucket的优化因子(e.g. setting it to 4 will cause the optimized buckets to be further split into 4)默认值为8。
可以为0或者1(默认值为0)。在opensips产生的每个回复上添加’warning’ header。The header contains several details that help troubleshooting using the network traffic dumps.
使用用例
sip_warning=0
Number of children processes to be created for reading from TCP connections. If no value is explicitly set, the same number of TCP children as UDP children (see “children” parameter) will be used.
使用用例
tcp_children=4
默认值是0(禁用)。如果启用,当检测到一个";alias" Via header时将强制执行RFC5923,并且在发送时重用为此类sip请求(source IP + Via prot + proto)打开的任意TCP连接(或者tl,ws,wss):如 发送sip请求到或发送请求回同一个源时(source ip + Via port + proto)。毕竟,RFC5923的最终目的是最小化SIP代码需要代开的TLS连接的数目,因为连接建立阶段的cpu开销很大。
RFC5923连接重用(aliasing)机制上,opensips在多个sip对话中的tcp连接也是持久的。这可以通过参数tcp_connection_lifttime进行控制。
Enabling the global tcp_accept_aliases parameter (RFC 5923) for end-user initiated connections (who are most likely grouped by one or more public IPs) is an open vector for call hijacking! In such platforms, we recommend using the force_tcp_alias() core function, in order to employ RFC 5923 behaviour only in conjunction with adjacent SIP proxies.
backlog参数定义tcp监听器挂起连接队列的最大长度。当队列满时,如果有连接请求到达,则客户端将受到带有ECONNREFUSED的错误,或者如果底层协议支持重传,则可以忽略改请求,以便稍后重连尝试成功。
默认值是10.
一个不间断的阻塞连接请求放弃的时间(单位毫秒)。默认值是100ms.
使用用例
tcp_connect_timeout = 5
一个tcp会话的生命周期(单位秒)。openSips将关闭持续tcp_connection_lifttime 闲置的tcp连接默认值在tcp_conn.h中定义: # define DEFAULT_TCP_TIMEOUT 120.设置该值为0,将快速关闭tcp连接。你还可以使用注册模块的tcp_persistent_flag参数将tcp的生命周期为注册的过期时间。
使用用例
tcp_connection_lifetime = 3600
可接受的收到的活跃tcp连接最大值(即由远端初始化的)。一旦达到限制,将拒绝任何新来的tcp连接。默认值是2018。对于outgoing tcp连接(opensips初始化的)目前不受限制。
sip消息通过tcp连接完毕所用的最大秒数。如果一个sip包如果指定时间任然没有传输完毕,那么该连接将被丢弃。( either the connection is very overloaded and this leads to high fragmentation - or we are the victim of an ongoing attack where the attacker is sending the traffic very fragmented in order to decrease our performance ). 默认值是4.
使用用例
tcp_max_msg_time = 8
一个branch flag 用于指示opensips传递请求是不要尝试建立新的tcp连接,而是仅仅复用现有的tcp连接(如果有的话)。如果没有可用的tcp连接,将发送一个一般发送错误。
该参数适用于NAT场景。在nat场景下创建tcp连接是没有意义的(如注册过程中创建的TCP连接丢失,那么在重新注册之前都没法连接该设备)。此外这也可以检测NATed 注册用于核实断开了tcp连接,以便opensips可以将其注册无效。
使用用例
tcp_no_new_conn_bflag = TCP_NO_CONNECT
...
route {
...
if (isflagset(DST_NATED) && $proto == "TCP")
setbflag(TCP_NO_CONNECT);
...
t_relay("0x02"); # no auto error reply
$var(retcode) = $rc;
if ($var(retcode) == -6) {
#send error
xlog("unable to send request to destination");
send_reply("404", "Not Found");
exit;
} else if ($var(retcode) < 0) {
sl_reply_error();
exit;
}
}
表示发送一个tcp请求预计会持续的最大微秒数。超过设定值时的任何tcp请求将触发在日志工具写入一条警告信息。
默认值是0(日志关闭)
使用用例
tcp_threshold = 60000
启用或者禁用tcp keepalive(OS level).
默认开启。
使用用例
tcp_keepalive = 1
关闭tcp连接前发送的keepalives的数目(仅限linux)。
默认值是0(不设置)。设置tcp_keepcount为任意值也会启用tcp_keepalive。
使用用例
tcp_keepcount = 5
如果连接空闲,opensips发哦送keepalive的时间间隔(仅限linux)。
默认值:0(不设置)。设置tcp_keepilde为任意值也会启用tcp_keepalive。
使用用例
tcp_keepidle = 30
如果前一个失败,keepalive探测的时间间隔(仅限linux)。
默认值:0(不设置)。设置tcp_keepinterval为任意值也会启用tcp_keepalive。
使用用例
tcp_keepinterval = 10
TOS (Type Of Service) 用于发送ip包(支持tcp和udp)。
使用用例
tos=IPTOS_LOWDELAY
tos=0x10
tos=IPTOS_RELIABILITY
使用-u 命令行参数替代
当opensips作为uac发送一个请求时产生的User-Agent header的内容。默认为"OpenSIPS( (/))"
使用用例
user_agent_header="User-Agent: My Company SIP Proxy"
因为opensips不添加 因此必须包含header名 “User-Agent:” 否则你将得到如下错误的header
My Company SIP Proxy
opensips运行时使用的工作目录。当产生核心文件时,非常有用。
使用用例
wdir="/usr/local/opensips"
or
wdir=/usr/opensips_wd
默认值: 4096
用于opensips日志打印的缓冲区大小。如果缓冲区太小,将打印溢出错误,并且跳过相关行。
默认值:false
仅在xlog_force_color时才相关。允许使用颜色转义序列,否则无效。
使用用例
xlog_force_color = true
默认值:-1
当没有设置log_level时,xlog函数的日志等级默认值。
使用用例
xlog_default_level = 2 #L_NOTICE