This is an old revision of the document!
Table of Contents
SIP Router: Core Cookbook
This tutorial collects the functions and parameters exported by SIP Router core to configuration file.
Core Keywords
Keywords specific to SIP messages which can be used mainly in 'if
' expressions.
af
The address family of the received SIP message. It is INET if the message was received over IPv4 or INET6 if the message was received over IPv6.
Exampe of usage:
if (af==INET6) { log("Message received over IPv6 link\n"); }
dst_ip
The IP of the local interface where the SIP message was received. When the proxy listens on many network interfaces, makes possible to detect which was the one that received the packet.
Example of usage:
if(dst_ip==127.0.0.1) { log("message received on loopback interface\n"); };
dst_port
The local port where the SIP packet was received. When SIP-Router is listening on many ports, it is useful to learn which was the one that received the SIP packet.
Example of usage:
if(dst_port==5061) { log("message was received on port 5061\n"); };
from_uri
This script variable is a reference to the URI of 'From' header. It can be used to test 'From'- header URI value.
Example of usage:
if(is_method("INVITE") && from_uri=~".*@sip-router.org") { log("the caller is from sip-router.org\n"); };
method
The variable is a reference to the SIP method of the message.
Example of usage:
if(method=="REGISTER") { log("this SIP request is a REGISTER message\n"); };
msg:len
The variable is a reference to the size of the message. It can be used in 'if' constructs to test message's size.
Example of usage:
if(msg:len>2048) { sl_send_reply("413", "message too large"); exit; };
.
proto
This variable can be used to test the transport protocol of the SIP message.
Example of usage:
if(proto==UDP) { log("SIP message received over UDP\n"); };
status
If used in onreply_route, this variable is a referece to the status code of the reply. If it used in a standard route block, the variable is a reference to the status of the last reply sent out for the current request.
Example of usage:
if(status=="200") { log("this is a 200 OK reply\n"); };
src_ip
Reference to source IP address of the SIP message.
Example of usage:
if(src_ip==127.0.0.1) { log("the message was sent from localhost!\n"); };
src_port
Reference to source port of the SIP message (from which port the message was sent by previous hop).
Example of usage:
if(src_port==5061) { log("message sent from port 5061\n"); }
to_uri
This variable can be used to test the value of URI from To header.
Example of usage:
if(to_uri=~"sip:.+@sip-router.org") { log("this is a request for sip-router.org users\n"); };
uri
This variable can be used to test the value of the request URI.
Example of usage:
if(uri=~"sip:.+@sip-router.org") { log("this is a request for sip-router.org users\n"); };
Core Values
Values that can be used in 'if
' expressions to check against Core Keywords
INET
This keyword can be used to test whether the SIP packet was received over an IPv4 connection.
Example of usage:
if (af==INET) { log("the SIP message was received over IPv4\n"); }
INET6
This keyword can be used to test whether the SIP packet was received over an IPv6 connection.
Example of usage:
if(af==INET6) { log("the SIP message was received over IPv6\n"); };
TCP
This keyword can be used to test the value of 'proto' and check whether the SIP packet was received over TCP or not.
Example of usage:
if(proto==TCP) { log("the SIP message was received over TCP\n"); };
UDP
This keyword can be used to test the value of 'proto' and check whether the SIP packet was received over UDP or not.
Example of usage:
if(proto==UDP) { log("the SIP message was received over UDP\n"); };
max_len
This keyword is set to the maximum size of an UDP packet. It can be used to test message's size.
Example of usage:
if(msg:len>max_len) { sl_send_reply("413", "message too large to be forwarded over UDP without fragmentation"); exit; }
myself
It is a reference to the list of local IP addresses, hostnames and aliases that has been set in SIP-Router configuration file. This lists contain the domains served by SIP-Router.
The variable can be used to test if the host part of an URI is in the list. The usefulness of this test is to select the messages that has to be processed locally or has to be forwarded to another server.
See "alias" to add hostnames,IP addresses and aliases to the list.
Example of usage:
if(uri==myself) { log("the request is for local processing\n"); };
null
Can be used in assignment to reset the value of a per-script variable or to delete an avp.
Example of usage:
$avp(i:12) = null; $var(x) = null;
Core parameters
advertised_address
advertised_port
alias
check_via
children
chroot
debug
description|descr|desc
disable_core_dump
disable_sctp
disable_tcp
disable_tls|tls_disable
dns
dns_cache_del_nonexp|dns_cache_delete_nonexpired
dns_cache_flags
dns_cache_gc_interval
dns_cache_init
dns_cache_max_ttl
dns_cache_mem
dns_cache_min_ttl
dns_cache_negative_ttl
dns_retr_no
dns_retr_time
dns_sctp_pref|dns_sctp_preference
dns_search_full_match
dns_servers_no
dns_srv_lb|dns_srv_loadbalancing
dns_tcp_pref|dns_tcp_preference
dns_tls_pref|dns_tls_preference
dns_try_ipv6
dns_try_naptr
dns_udp_pref|dns_udp_preference
dns_use_search_list
dst_blacklist_expire|dst_blacklist_ttl
dst_blacklist_gc_interval
dst_blacklist_init
dst_blacklist_mem
enable_sctp
enable_tls|tls_enable
exit_timeout|ser_kill_timeout
fork
group|gid
listen
loadmodule
Loads a module for later usage in the configuration script. Example of usage:
loadmodule "/usr/local/lib/sip-router/modules/mysql.so" loadmodule "/usr/local/lib/sip-router/modules/usrloc.so"
loadpath
Set the module search path. This can be used to simplify the loadmodule parameter. Example of usage:
loadpath "/usr/local/lib/sip-router/modules" loadmodule "mysql" loadmodule "uri" loadmodule "uri_db" loadmodule "sl" loadmodule "tm"
log_facility
log_stderror
maxbuffer
max_while_loops
mcast_loopback
mcast_ttl
memdbg|mem_dbg
memlog|mem_log
mhomed
mlock_pages
modparam
open_files_limit
phone2tel
pmtu_discovery
port
real_time
reply_to_via
rev_dns
rt_policy
rt_prio
rt_timer1_policy|rt_ftimer_policy
rt_timer1_prio|rt_fast_timer_prio|rt_ftimer_prio
rt_timer2_policy|rt_stimer_policy
rt_timer2_prio|rt_stimer_prio
sctp_autoclose
sctp_children
sctp_send_retries
sctp_send_ttl
sctp_socket_rcvbuf|sctp_socket_receive_buffer
sctp_socket_sndbuf|sctp_socket_send_buffer
server_id
server_signature
shm_force_alloc
sip_warning
statistics
stun_allow_fp
stun_allow_stun
stun_refresh_interval
syn_branch
tcp_accept_aliases
tcp_buf_write|tcp_async
tcp_children
tcp_connection_lifetime
tcp_connect_timeout
tcp_conn_wq_max
tcp_crlf_ping
tcp_defer_accept
tcp_delayed_ack
tcp_fd_cache
tcp_keepalive
tcp_keepcnt
tcp_keepidle
tcp_keepintvl
tcp_linger2
tcp_max_connections
tcp_no_connect
tcp_poll_method
tcp_send_timeout
tcp_source_ipv4
tcp_source_ipv6
tcp_syncnt
tcp_wq_max
tls_ca_list
tls_certificate
tls_handshake_timeout
tlslog|tls_log
tls_method
tls_port_no
tls_private_key
tls_require_certificate
tls_send_timeout
tls_verify
tos
udp_mtu
Prototype:
udp_mtu=<number>
- number - size in bytes after which fallback to another protocol will be attempted. Default 0 (off), recommended 1300.
Example:
udp_mtu=1000
udp_mtu_try_proto
Prototype:
udp_mtu_try_proto=<proto>
- proto - TCP|TLS|SCTP|UDP - protocol to fallback to. Default: UDP (off).
Example:
udp_mtu_try_proto=TCP
use_dns_cache
use_dns_failover
use_dst_blacklist
user|uid
workdir|wdir
Core functions
udp_mtu_try_proto(proto)
- proto - TCP|TLS|SCTP|UDP - like udp_mtu_try_proto global parameter but works on a per packet basis and not globally.
Example:
if($rd=="10.10.10.10") udp_mtu_try_proto(SCTP);