opensips脚本格式

脚本格式

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实现的。
有两种不同的路由:

  • top routes - 当某些事件(如sip请求,sip应答,事务失败等)发生时,路由由opensips直接触发。
  • sub-routes - 被其他routes在脚本中触发或者使用的routes
    什么是现有的top-routes,什么时候被触发,处理什么sip消息,什么sip操作被允许以及其他被记录在路由类型部分。
    sub-routes有自己的名字并且其他route(top or sub)在脚本中通过他们的名字调用sub-routes。sub-routes可能需要参数(调用时)或者返回一个数字代码(避免返回0-因为这会打断你的整个脚本。sub-routes类似于边冲中的函数或者过程。请参数route指令的说明)

全局参数

本节列出了opensips core为脚本使用而导出的所有参数(在opensips.cfg中使用的)

  • Core keywords
  • Core values
  • Core Parameters

Core keywords

关键字特指在sip消息中用到的主要用于’if’表达式。

af

收到的sip消息的地址族。如果通过ipv4获取消息是INET,如果通过ipv6获取消息则为INET6。
使用用例

    if(af==INET6) {
        log("Message received over IPv6 link\n");
    };

dst_ip

接收sip消息的本地接口ip。当代理监听很多网络接口时,可以检测是哪个地址接收数据包。
使用用例

   if(dst_ip==127.0.0.1) {
      log("message received on loopback interface\n");
   };

dst_port

接收sip消息的本地端口。当opensips正在监听多个端口时,可以检测到是哪个 端口接收数据包。
使用用例

  if(dst_port==5061)
   {
       log("message was received on port 5061\n");
   };

from_uri

这个脚本变量对应"from"头信息的URI引用。可用于测试“from”头URI。
使用用例

    if(is_method("INVITE") && from_uri=~".*@opensips.org")
    {
        log("the caller is from opensips.org\n");
    };

method

这个变量指消息的sip方法。
使用用例

    if(method=="REGISTER")
    {
       log("this SIP request is a REGISTER message\n");
    };

msg:len

这个变量是消息大小的引用。常用于’if’结构中以测试消息的大小。
使用用例

    if(msg:len>2048)
    {
        sl_send_reply("413", "message too large");
        exit;
    };

$retcode

指代最近执行的函数的返回值(类似于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);
   }

proto

该变量用于获取sip消息的传输协议。
使用用例

    if(proto==UDP)
    {
        log("SIP message received over UDP\n");
    };

status

如果在onreply_route中使用,这个变量指响应的状态码。如果是在一个标准的路由块中使用,该变量指当前发起的请求的最后一个相应的状态。
使用用例

    if(status=="200")
    {
        log("this is a 200 OK reply\n");
    };

src_ip

指代sip消息的源ip地址。
使用用例

    if(src_ip==127.0.0.1)
    {
        log("the message was sent from localhost!\n");
    };

src_port

指代sip消息的源端口(消息由上一跳送到哪个端口)
使用用例

    if(src_port==5061)
    {
        log("message sent from port 5061\n");
    }

to_uri

用于测试TO头的URI值。
使用用例

  if(to_uri=~"sip:[email protected]")
  {
      log("this is a request for opensips.org users\n");
  };

uri

用于测试请求URI的值
使用用例

    if(uri=~"sip:[email protected]")
    {
        log("this is a request for opensips.org users\n");
    };

Core Values

常用于“if”表达式,以检查core keywords。

INET

该keyword用于测试sip包是否可以通过IPV4连接接收。
使用用例

    if(af==INET)
    {
        log("the SIP message was received over IPv4\n");
    };

INET6

该keyword用于测试sip包是否可以通过IPV6连接接收。
使用用例

  if(af==INET6)
  {
      log("the SIP message was received over IPv6\n");
  };

TCP

该keyword用于测试传输协议。检查是否通过TCP接收sip包。
使用用例

  if(proto==TCP)
  {
      log("the SIP message was received over TCP\n");
  };

UDP

该keyword用于测试传输协议,检测是否通过UDP接收sip包
使用用例

  if(proto==UDP)
  {
      log("the SIP message was received over TCP\n");
  };

max_len

该keyword指代DUP包的大小上限。可以用于测试消息的大小。
使用用例

    if(msg:len>max_len)
    {
        sl_send_reply("413", "message too large to be forwarded over UDP without fragmentation");
        exit;
    }

myself

用于罗列本地ip地址,主机名以及在opensips配置文件中设置的别名。列表包含opensips提供的域。
该变量用于测试URI的host是否在列表中。用于决定消息是在本地处理还是发送到另外一台服务器。
请参阅“alias”以添加hostname,ip地址和alias到列表中。
使用用例

    if(uri==myself) {
        log("the request is for local processing\n");
    };

null

用于赋值以便重置每个脚本变量的值或者删除一个avp.
使用用例

    $avp(i:12) = null;
    $var(x) = null;

Core parameters

可以在配置文件中设置全局变量。可接受的值有:基于实际参数的字符串,数字以及 “yes” 或者 “no”。如果你想"yes"和"no"作为字符串使用,请将其用双引号括起来。

abort_on_assert

默认值:false
只有启用assert才会生效。设置assert为true那么如果一个脚本断言失败,立即关闭opensips。
使用用例

abort_on_assert = true

advertised_address

它可以是一个字符串或者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")。当在每个接口中定义建议值时,

advertised_port

标识via头或者其他目标卷对应的地址。如果为空或者未设置(默认值),那么使用发送消息的端口。一些类似’advertised_address’的告警信息。
使用用例

advertised_port=5080

alias

用于为服务器设置主机别名。可以多次设置,每个值将会增加到一个列表:当检查’myself’时匹配主机名。
使用用例

alias=udp:other.domain.com:5060
alias=tcp:another.domain.com:5060

auto_aliases

这个参数控制在修复监听套接字期间是否自动发现并添加别名。自动发现的别名来自dns查询结果(如果监听是一个名字而不是ip)或者监听ip上的反向dns查询结果。
由于兼容性的问题,默认值为’on’.
使用用例

auto_aliases=no
auto_aliases=0

bin_listen(Removed in OpenSIPS 2.2)

替换为proto_bin模块的bin_port模块参数(因为将bin实现从核心迁移到单独模块)

bin_children(Removed in OpenSIPS 2.2)

已过时,直接删除即可。

cfg_file

返回相应的opensips配置文件(一般应用于包含了多个配置文件的情形)

cfg_line

返回OpenSIPS配置文件中的相应行

check_via

检查回复中最顶层的via地址是否为本地地址,默认值为0(禁用检查)。
使用用例

check_via=1

children

为每个udp或者sctp接口定义的创建工作进程数。默认值是8。
使用用例

children=16

注意:如果在某个接口定义一个不同的children,则可以覆盖全局设置(适用于所有udp/sctp接口)。因此你可以为每隔接口定义不同数量的children.

chroot

取值必须是系统的真实路径。如果设置,openSIPS将会据此设置根目录(chroot)。
使用用例

chroot=/other/fakeroot

debug_mode

开始debug_mode是debug openSIPS最快的方式。这个选项会自动强制如下选项使能:

  • 留在前台(不要离开控制台)
  • 设置logging level到4(debug)
  • 设置logging 为标准错误
  • 允许dump core
  • 设置UDP 进程数到2
  • 设置TCP进程数到2
    默认值是 false/0(禁用)。
    注意:该选项会覆盖其他单个选项,如 前台模式,日志级别,子进程数。这个选项是作为fork选项的替代引入的。

db_version_table

在DB API中使用的table version的名字,用于检查使用的tables的版本。
默认值是’version’。
使用用例

db_version_table="version_1_8"

db_default_url

如果没有在每隔模块中指定URL,那么将使用默认的DB URL。默认值是NULL(未定义)
使用用例

db_default_url="mysql://opensips:opensipsrw@localhost/opensips"

db_max_async_connections

从单个opensips工作模块针对每个独立的sql后端可以打开的tcp连接最大值。默认值是10。
各个终端由如下元素决定DB URL

[ scheme, user, pass, host, port, database ]

使用用例

db_max_async_connections=220

debug(Removed in OpenSIPS 2.2)

由log_level参数取代。

disable_503_translation

如果设置为’yes’,opensips将不会将加收的503响应转化为500响应。(RFC 3261明确指出代理不应该响应一个503响应,而是必须将其转化为500)
默认值是’no’(转化)

disable_core_dump

可以设置为’yes’或者’no’。默认情况下,core dump没有限制或者设置为一个足够高的值。将此配置变量设置为’yes’以禁用core dump-ing(设置core限制为0)。
默认值是’no’。
使用用例

disable_core_dump=yes

disable_dns_blacklist

当配置failover时,dns解析器可以自动将故障目标存储在临时黑名单中。这将阻止openSIPS发送请求到已知会失败的目标。因此黑名单可以用于dns解析器的内存。
DNS解析器创建的临时黑名单为“dns”,并且会默认选择使用(不需要使用use_blacklist())。该列表的时间规则为4分钟-你可以在编译阶段通过修改resolve.c解决。

disable_dns_failover

可以设置为’yes’或者’no’,默认基于dns的failover是开启的。设置该参数为‘yes’会禁用基于DNS的failover。这是一个全局配置,影响核心以及其他模块。
默认值是’no’。
使用用例

disable_dns_failover=yes

disable_stateless_fwd

可以设置为’yes’或者’no’。这个参数控制无状态应答的处理

  • yes - 如果stateless fwd函数(如forward)在脚本中没有使用,则删除无状态回复。
  • no - 转发无状态回复
    默认值是’yes’。

dns

此参数控制SIP服务器是否应尝试在dns中查找自己的域名。如果此参数设置为yes且域名不在dns中,将打印一个warning并且’received='域添加到via header。
默认值是no。

dns_retr_time

重试dns请求的时间间隔。默认值是系统指定的,依赖于配置文件’/etc/resolv.conf’的内容(通常是4s)。
使用用例

dns_retr_no=3

dns_servers_no

使用’/etc/resolv.conf’中定义的dns服务器的数目。默认值是使用配置文件中定义的所以dns服务器。
使用用例

dns_servers_no=2

dns_try_ipv6

可以设置为’yes’或者’no’。如果设置为’yes’并且dns查询失败,那么将使用ipv6(AAAA record)重试。默认值是’no’。
使用用例

dns_try_ipv6=yes

dns_try_napt

当为sip请求做基于DNS的路由时禁用NAPTR(Naming Authority Pointer名称权威指针)查询。如果禁用,DNS查找将从SRV查询开始。可以设置为’yes’或者’no’。默认情况下是开启的,值为’yes’。
使用用例

dns_try_naptr=no

dns_use_search_list

可以设置为’yes’或者’no’,如果设置为’no’,’/etc/resolv.conf’的查询列表将被忽略(=》最少查找=》放弃最快)。默认值为’yes’。
提示:即便你没有定义查询列表,设置该选项为’no’,仍然"faster",因为一个空的查询列表实际上就是查询""(因此即使搜索列表为空/缺失,仍然有两个dns查询,例如foo+’.‘和foo+""+’.’ )。
使用用例

dns_use_search_list=no

dst_blacklist

定义一个静态的(仅可读)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 , "" )}

每个规则定义如下

  • protocol:TCP,UDP,TLS或者所有协议即"any"
  • 端口: 数字0标识所有端口
  • ip/mark
  • test pattr - 满足(查看"man 3 fnmatch")应用于传出请求缓存(first_line+hdrs+body)。

enable_asserts

默认值:false
如果需要弃用assert脚本语句,设置为‘true’
使用用例

enable_asserts = true

event_pkg_threshold

E_CORE_PKG_THRESHOLD 事件引入的线程百分比阈值, 警告可用内存减少. 接受0到100的整数。
默认值是0(禁用事件)
使用用例

event_pkg_threshold = 90

event_shm_threshold

E_CORE_SHM_THRESHOLD事件引入的线程百分比阈值,讲稿可用内存减少。家饿瘦0到100的整数值
默认值是0(禁用事件)
使用用例

event_shm_threshold = 90

exec_dns_threshold

一个dns查询将持续的最大微秒数。超过设置值的任何查询将触发告警并记录到日志工具。
默认值是0(日志禁用)
使用用例

exec_dns_threshold = 60000

exec_msg_threshold

处理sip消息持续的最大微秒数。超过设定值的任何消息将触发告警并记录到日志工具上。除了消息和处理事件,最耗时的函数的事件也会记录。
默认值是0(禁用日志)
使用用例

exec_msg_threshold = 60000

fork(Removed in OpenSIPS 2.2)

被参数debug_mode取代。

group gid(Removed in OpenSIPS 2.2)

使用 -u 命令行参数替代。

include_file

可以从外部路由块调用其他的routes/blocks 或者简单的执行更多的函数。文件可以是绝对路径或者相对路径。如果不是绝对路径,首先在当前目录阐释去定位它。如果本地定位失败,第二次尝试包含该文件的目录。如果定位失败将抛出异常。
使用用例

include_file "proxy_regs.cfg"

import_file

类似于"include_file",但是如果文件未找到不抛出异常。
使用用例

import_file "proxy_regs.cfg"

listen

设置sip服务器应该监听的网络地址。它的语法是 protocol: address[:port]。详解如下

  • protocol: 应该是配置文件记载的传输协议中的一种(如udp,tcp,tls)
  • address: 可以是ip地址, 主机名, 网络接口id,或者 '*'通配符(opensips可以监听协议所有可能的接口)
  • port: 可选的,用于监听的端口-如果不存在使用传输模块的默认端口。
    该参数可以在一个配置文件里设置多次,服务器将监听指定的所有地址。
    listen定义可以接受一下几个可选参数:
  • 仅仅为某个接口配置一个advertised ip和端口,语法"AS 11.22.33.44:5060"
  • 仅仅为某个接口设置一个不同的children(仅仅适用于UDP,SCTP,和HEP_UDP接口),这将覆盖全局的’children’参数。语法 “use_children 5”。
    注意上面的参数仅仅影响配置他们的接口;如果没有给定的接口中没有定义,那么将使用全局设置。
    使用用例
    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引擎进程也会创建。

log_facility

如果opensips记录日志到syslog,你可以使用facility记录日志。当你想记录日志到不通文件时,非常有效。更多详情可以查看man syslog
默认值是 LOG_DAEMON
使用用例

log_facility=LOG_LOCAL0

log_level

设置日志等级。值越高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脚本变量进行动态获取设置。

log_name

设置打印在日志中的id。取值必须是字符串并且仅仅在daemon模式下才会生效(fork=yes)。默认值是argv[0]。
使用用例

log_name="osips-5070"

log_stderror

使用该参数你可以使opensips将日志写入标准错误。可能的取值如下:

  • “yes” - write the messages to standard error
  • “no” - write the messages to syslog
    默认值是"no"。
    使用用例
log_stderror=yes

max_while_loops

while循环的最大循环次数。作为避免配置文件执行死循环的一个保护措施。默认值是100

maxbuffer

自动探测过程中接收的udp消息缓冲区大小最大值。默认值是262144。
使用用例

maxbuffer=65536

mem-group

定义一组模块(根据名字)以获取内存统计信息。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进行编译。

mem_warning

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

mem_warming_percentage

默认值:75
在重启时如果在编译时使能mem_warming,opensips fragmentation的百分比。如果使能mem_warming使能在启动时使用。
使用用例

mem_warming_percentage = 50

mem_warming_pattern_file

默认值:“CFG_DIR/mem_warming_pattern”
memory fragmentation pattern,如果使能mem_warming,那么在启动时使用。
使用用例

mem_warming_pattern_file = "/var/tmp/my_memory_pattern"

memdump | mem_dump

内存状态信息的日志级别(运行时以及关闭时)。如果你想记录内存信息,其取值必须必’log_level’小。默认值: memdump=L_DUB(4)
使用用例

memdump=2

注意:如果设置memlog也需要设置memdump.假如memlog和memdump要设置不同的值,那么需要先设置memlog后设置memdump.

memlog | mem_log

内存debug信息的日志级别。如果想记录内存信息,其取值也必须小于参数’log_level’。默认值:=L_DBG(4)
使用用例

memlog=2

注意:如果设置了memlog那么memdump自动设置为相同的值。

mcast_loopback

可以设置为’yes’或者’no’。如果设置为’yes’,multicast datagram are sent over loopback。
使用用例

mcast_loopback=yes

mcast_ttl

Set the value for multicast ttl. Default value is OS specific (usually 1).
使用用例

mcast_ttl=32

mhomed

Set the server to try to locate outbound interface on multihomed host. By default is not (0) - it is rather time consuming.
使用用例

mhomed=1

mpath

设置module查询路径。用于简化loadmodule参数
使用用例

    mpath="/usr/local/lib/opensips/modules"
    loadmodule "mysql.so"
    loadmodule "uri.so"
    loadmodule "uri_db.so"
    loadmodule "sl.so"
    loadmodule "tm.so"

open_file_limit

如果设置并且比当前打开文件限制高,那么opensips将尝试增加打开文件上限到指定值。注意:必须以root角色启动opensips才能增加限制超过系统限制(大多数系统,打开文件上限为1024)
使用用例

open_files_limit=2048

poll_method

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

port

sip server监听的端口。默认值是5060
使用用例

port=5080

query_buffer_size

如果设置为大于1的值,数据库插入操作则不会逐个更新到数据库,要插入的行会保存在内存中,知道收集到多于query_buffer_size才会更新到数据库中。
使用 用例

query_buffer_size=5

query_flush_time

如果设置’query_buffer_size’为大于1的值,每隔query_flush_time将触发一个trigger.保证内存中的插入行在内存中不会保持太长时间。
使用用例

query_flush_time=10

rev_dns

此参数控制sip server是否应尝试在dns中查找自己的地址。如果设置为yes并且ip地址不在dns中,会在syslog中打印一个警告信息并且添加字段"received=“到via header.
默认值是"no”。

server_header

当opensips作为UAS发送请求时,由opensips差生的server header的内容。默认为"OpenSips ( (/))"。
使用用例

server_header="Server: My Company SIP Proxy"

请注意你必须添加标题名称"Server:",否则 OpenSIPS将只写一个标题:

My Company SIP Proxy

server_signature

此参数控制所有本地产生的消息的"Server" header。
使用用例

server_signature=no

加入启用server_signature 产生的header如下面所示

Server: OpenSIPS (0.9.5 (i386/linux))

shm_hash_split_percentage

仅在启用hp_malloc编译标志时才相关。该参数控制优化多少个memroy buckerts.(例如设置为2%,那么将优化前81个常用的buckets)。默认值是1.

shm_secondary_hash_size

尽在启用HP_MALLOC编译标志时才相关。该参数表示单个bucket的优化因子(e.g. setting it to 4 will cause the optimized buckets to be further split into 4)默认值为8。

sip_warning

可以为0或者1(默认值为0)。在opensips产生的每个回复上添加’warning’ header。The header contains several details that help troubleshooting using the network traffic dumps.
使用用例

sip_warning=0

tcp_children

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

tcp_accept_aliases

默认值是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.

tcp_listen_backlog

backlog参数定义tcp监听器挂起连接队列的最大长度。当队列满时,如果有连接请求到达,则客户端将受到带有ECONNREFUSED的错误,或者如果底层协议支持重传,则可以忽略改请求,以便稍后重连尝试成功。
默认值是10.

tcp_connect_timeout

一个不间断的阻塞连接请求放弃的时间(单位毫秒)。默认值是100ms.
使用用例

tcp_connect_timeout = 5

tcp_connection_lifetime

一个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_max_connections

可接受的收到的活跃tcp连接最大值(即由远端初始化的)。一旦达到限制,将拒绝任何新来的tcp连接。默认值是2018。对于outgoing tcp连接(opensips初始化的)目前不受限制。

tcp_max_msg_time

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

tcp_no_new_conn_bflag

一个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_threshold

表示发送一个tcp请求预计会持续的最大微秒数。超过设定值时的任何tcp请求将触发在日志工具写入一条警告信息。
默认值是0(日志关闭)
使用用例

tcp_threshold = 60000

tcp_keepalive

启用或者禁用tcp keepalive(OS level).
默认开启。
使用用例

tcp_keepalive = 1

tcp_keepcount

关闭tcp连接前发送的keepalives的数目(仅限linux)。
默认值是0(不设置)。设置tcp_keepcount为任意值也会启用tcp_keepalive。
使用用例

tcp_keepcount = 5

tcp_keepidle

如果连接空闲,opensips发哦送keepalive的时间间隔(仅限linux)。
默认值:0(不设置)。设置tcp_keepilde为任意值也会启用tcp_keepalive。
使用用例

tcp_keepidle = 30

tcp_keepinterval

如果前一个失败,keepalive探测的时间间隔(仅限linux)。
默认值:0(不设置)。设置tcp_keepinterval为任意值也会启用tcp_keepalive。
使用用例

tcp_keepinterval = 10

tls_ca_list

tls_certificate

tls_ciphers_list

tls_domain

tls_handshake_timeout

tls_log

tls_method

tls_port_no

tls_private_key

tls_require_certificate

tls_send_timeout

tls_verify

tos

TOS (Type Of Service) 用于发送ip包(支持tcp和udp)。
使用用例

    tos=IPTOS_LOWDELAY
    tos=0x10
    tos=IPTOS_RELIABILITY

user uid(在opensips 2.2弃用)

使用-u 命令行参数替代

user_agent_header

当opensips作为uac发送一个请求时产生的User-Agent header的内容。默认为"OpenSIPS( (/))"
使用用例

user_agent_header="User-Agent: My Company SIP Proxy"

因为opensips不添加 因此必须包含header名 “User-Agent:” 否则你将得到如下错误的header

My Company SIP Proxy

wdir

opensips运行时使用的工作目录。当产生核心文件时,非常有用。
使用用例

     wdir="/usr/local/opensips"
     or
     wdir=/usr/opensips_wd

xlog_buf_size

默认值: 4096
用于opensips日志打印的缓冲区大小。如果缓冲区太小,将打印溢出错误,并且跳过相关行。

xlog_force_color

默认值:false
仅在xlog_force_color时才相关。允许使用颜色转义序列,否则无效。
使用用例

xlog_force_color = true

xlog_default_level

默认值:-1
当没有设置log_level时,xlog函数的日志等级默认值。
使用用例

xlog_default_level = 2 #L_NOTICE

你可能感兴趣的:(opensips脚本格式)