1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459 |
- Release notes for Kamailio/SIP Router (sr)
- ***********************************************
- Starting with release 3.2, release notes have
- been posted to the Kamailio website. Release
- notes for previous versions are posted below.
- For releases after 3.1, please visit:
- http://www.kamailio.org/wiki/features/new-in-4.4.x
- http://www.kamailio.org/wiki/features/new-in-4.3.x
- http://www.kamailio.org/wiki/features/new-in-4.2.x
- http://www.kamailio.org/wiki/features/new-in-4.1.x
- http://www.kamailio.org/wiki/features/new-in-4.0.x
- http://www.kamailio.org/wiki/features/new-in-3.3.x
- http://www.kamailio.org/wiki/features/new-in-3.2.x
- Earlier verisons are listed below.
- ===================================================
- sip-router 3.1 changes
- core:
- - Dragonfly BSD support
- - statistics / counters support for tcp and sctp (enable by default)
- - statistics / counters api
- - networks addresses support in ip comparisons (src_ip, dst_ip, to_ip)
- with strings or rvalue expressions.
- E.g.: $ip=10.0.0.0; if (src_ip == $ip +"/8") ....
- - lots of module functions automatically support now expressions or
- variables in function parameters. This applies to all the module
- functions declared without a fixup, with a fixup and the corresponding
- free_fixup function or with a compatible ser or kamailio style standard
- fixup (declared in sr_module.h or mod_fix.h).
- E.g.: f($a, "b = " + $b); t_set_fr($v + 2 + $x).
- t_set_fr($foo) (equivalent now with t_set_fr("$foo")).
- - all the module functions can now be called with any constant expression
- as parameters. E.g.: f("7 *" +" 6 = " + 7 * 6);
- - major performance increase on Linux multi-cpu machines that send a lot
- of UDP IPv4 packets (40-50% faster in stateless mode). For it to work
- udp4_raw must be enabled or set into auto mode in sr.cfg and sr must be
- started as root or with CAP_NET_RAW. Note that even if udp4_raw is
- off (default), if sr was started with enough privileges, it can be
- enabled at runtime.
- The support for using raw sockets is also available on FreeBSD (compiled
- by default but not tested for performance yet), NetBSD, OpenBSD and
- Darwin (not tested and not compiled by default, needs
- make cfg extra_defs=-DUSE_RAW_SOCKS). To check if the support is
- compiled, use ser -V |grep --color RAW_SOCKS or for a running
- ser: sercmd core.udp4_raw_info.
- See udp4_raw, udp4_raw_mtu and udp4_raw_ttl below.
- - asynchronous TLS support
- - onreply_route {...} is now equivalent with onreply_route[0] {...}
- - global, per protocol blacklist ignore masks (via extended send_flags).
- See dst_blacklist_udp_imask a.s.o (dst_blacklist_*_imask).
- - per message blacklist ignore masks
- - route() now supports rvalue expressions (e.g. route("test"+$i))
- - support for permanent entries in the DNS cache.
- new config variables:
- - udp4_raw - enables raw socket support for sending UDP IPv4 datagrams
- (40-50% performance increase on linux multi-cpu).
- Possible values: 0 - disabled (default), 1 - enabled, -1 auto.
- In "auto" mode it will be enabled if possible (sr started as root or
- with CAP_NET_RAW).
- udp4_raw can be used on Linux and FreeBSD. For other BSDs and Darwin
- one must compile with -DUSE_RAW_SOCKS.
- On Linux one should also set udp4_raw_mtu if the MTU on any network
- interface that could be used for sending is smaller then 1500.
- Can be set at runtime as long as sr was started with enough privileges
- (core.udp4_raw).
- - udp4_raw_mtu - MTU value used for UDP IPv4 packets when udp4_raw is
- enabled. It should be set to the minimum MTU of all the network
- interfaces that could be used for sending. The default value is 1500.
- Note that on BSDs it does not need to be set (if set it will be ignored,
- the proper MTU will be used automatically by the kernel). On Linux it
- should be set.
- Can be set at runtime (core.udp4_raw_mtu).
- - udp4_raw_ttl - TTL value used for UDP IPv4 packets when udp4_raw is
- enabled. By default it is set to auto mode (-1), meaning that the
- same TTL will be used as for normal UDP sockets.
- Can be set at runtime (core.udp4_raw_ttl).
- - dst_blacklist_udp_imask - global blacklist events ignore mask for udp
- (a blacklist event/reason set in this variable will be ignored when
- deciding whether or not to blacklist an udp destination). Can be set
- at runtime. Default: 0 (no blacklist reason is ignored).
- Possible values: 0 -disabled, 2 - send error; 4 - connect error,
- 8 - icmp (reserverd), 16 - transaction timeout,
- 32 - 503 received, 64 - administratively prohibited
- (manually set).
- - dst_blacklist_tcp_imask - like dst_blacklist_udp_imask, but for tcp.
- - dst_blacklist_tls_imask - like dst_blacklist_tls_imask, but for tcp.
- - dst_blacklist_sctp_imask -like dst_blacklist_sctp_imask, but for tcp.
- - dns_cache_rec_pref - DNS cache record preference:
- 0 - do not check duplicates (default)
- 1 - prefer old records
- 2 - prefer new records
- 3 - prefer records with longer lifetime
- modules:
- - counters: functions and RPCs for manipulating counters (statistics):
- modparam("counters", "script_counter", name)
- cnt_inc(name)
- cnt_add(name, val)
- cnt_reset(name)
- - blst: functions for ignoring blacklist events per message:
- blst_set_ignore(mask): set the events in mask in the per
- per message blacklist ignore mask for a request
- (see dst_blacklist_udp_imask for possible values).
- The basic operation is: msg_blst_ignore_mask|=mask.
- blst_clear_ignore(mask): like blst_set_ignore(mask), but instead
- of setting some events, it clears them
- (msg_blst_ignore_mask&=~mask).
- blst_rpl_set_ignore(mask): like blst_set_ignore(mask), but sets
- the mask for possible local replies to the current message.
- blst_rpl_clear_ignore(mask): like blst_rpl_ignore(mask), but
- clears instead of setting.
- - tls:
- certificate revocation list (CRL) support.
- asynchronous TLS support
- new TLS RPCs (tls.info, tls.options), tls.list more detailed.
- removed handshake_timeout and send_timeout module parameters /
- config variables. The values from tcp are used instead
- (tcp_connect_timeout and tcp_send_timeout).
- runtime config support
- more config options:
- crl - certificate revocation list file path (PEM format).
- send_close_notify - enables/disables sending close notify
- alerts prior to closing the corresponding TCP connection.
- Sending the close notify prior to tcp shutdown is "nicer"
- from a TLS point of view, but it has a measurable
- performance impact. Default: off. Can be set at runtime
- (tls.send_close_notify).
- con_ct_wq_max - per connection tls maximum clear text write
- queue size. The TLS clear-text write queues are used when a
- send attempt has to be delayed due to an on-going TLS level
- renegotiation. Can be set at runtime (tls.con_ct_wq_max).
- Default: 65536 (64 Kb).
- ct_wq_max - maximum total for all the tls clear text write
- queues (summed). Can be set at runtime (tls.ct_wq_max).
- Default: 10485760 (10 Mb).
- ct_wq_blk_size - internal TLS pre-write (clear-text) queue
- minimum block size (advance tunning or debugging).
- Can be set at runtime (tls.ct_wq_blk_size).
- Default: 4096 (4 Kb).
- verbose debug messages can be enable by re-compiling with
- -DTLS_RD_DEBUG (for the read path) and -DTLS_WR_DEBUG
- (for the write path).
- new options for better tuning memory usage for modern openssl
- versions: ssl_release_buffers (default 1), ssl_freelist_max_len
- (default 0), ssl_max_send_fragment, ssl_read_ahead (default 0).
- For more info see modules/doc/tls/README.
- compression is now disabled by default. To enable it set
- tls_disable_compression to 0, but note that memory usage will
- increase dramatically especially for large number of
- connections (>1000).
- tm:
- - reason header support (RFC3326) both for CANCELs generated due to a
- received final reply and for hop by hop CANCELs generated because of a
- received CANCEL.
- E.g.: reason header added for a CANCEL generated after a 200 reply was
- received on one of the branches "Reason: SIP;cause=200".
- The reason header support can be turned on/off using either tm
- module parameters or in the end to end CANCEL case also on a per
- transaction basis, using a script function:
- local_cancel_reason = 0 | 1 (default 1/on) - turns on adding reason
- headers for CANCELs generated due to a final reply. Can be changed
- at runtime.
- e2e_cancel_reason = 0 | 1 (default 1/on) - turns on copying reason
- headers from a received end to end CANCEL (the generated hop by hop
- CANCELs will have the same reason headers as the received CANCEL).
- Can be changed at runtime.
- t_set_no_e2e_cancel_reason(0|1) - enable/disable cancel reason
- header copying on a per transaction basis (0 - enable, 1 disable).
- - t_reply() can be used both from the main/core onreply_route{} and tm
- onreply_route[...]{}s.
- sip-router 3.0 changes
- core:
- - type casts operators: (int), (str).
- - new operators eq, ne for string compares and ieq, ine for interger
- compares. The names are not yet final (use them at your own risk).
- Future version might use ==/!= only for ints (ieq/ine) and eq/ne for
- strings (under debate).
- They are almost equivalent to == or !=, but they force the conversion
- of their operands (eq to string and ieq to int), allowing among other
- things better type checking on startup and more optimizations.
- Non equiv. examples: 0 == "" (true) is not equivalent to 0 eq ""
- (false: it evaluates to "0" eq ""). "a" ieq "b" (true: (int)"a" is 0
- and (int)"b" is 0) is not equivalent to "a" == "b" (false).
- Note: internally == and != are converted on startup to eq/ne/ieq/ine
- whenever possible (both operand types can be safely determined at
- start time and they are the same).
- - try to guess what the user wanted when operators that support multiple
- types are used on different typed operands. In general convert the
- the right operand to the type of the left operand and then perform the
- operation. Exception: the left operand is undef.
- This applies to the following operators: +, == and !=.
- Special case: undef as left operand:
- For +: undef + expr -> undef is converted to string => "" + expr.
- For == and !=: undef == expr -> undef is converted to type_of expr.
- If expr is undef, then undef == undef is true (internally is converted
- to string).
- - expression evaluation changes: auto-convert to interger or string
- in function of the operators:
- int(undef)==0, int("")==0, int("123")==123, int("abc")==0
- str(undef)=="", str(123)=="123".
- - new script operators: defined, strlen, strempty
- defined expr - returns true if expr is defined, and false if not.
- Note: only a standalone avp or pvar can be
- undefined, everything else is defined.
- strlen(expr) - returns the lenght of expr evaluated as string.
- strempty(expr) - returns true if expr evaluates to the empty
- string (equivalent to expr=="").
- e.g.: if (defined $v && !strempty($v)) $len=strlen($v);
- - msg:len max_len comparison obsoleted and removed (it did not make any
- sense, msg:len > max_len was always false, use something like
- 4096 or 16384 in its place).
- - module search path support: loadpath takes now a list of directories
- separated by ':'. The list is searched in-order. For each directory d
- $d/${module_name}.so and $d/${module_name}/${module_name}.so are tried.
- - dns TXT, EBL and PTR support (both cache and non-cached resolver)
- - support for dual module interfaces: ser and kamailio
- config script changes:
- - script mode can be switched between ser compatible, kamailio compatible
- and max compatibility (compatible with both as much as possible), using
- #!SER
- #!KAMAILIO
- #!OPENSER
- #!ALL
- #!MAXCOMPAT
- where #!KAMAILIO is equivalent with #!OPENSER and #!ALL with #!MAXCOMPAT
- - support for kamailio style pvars
- - C-like switch()/case (integer only)
- - while()
- - include file support: include_file "somefile"
- - event route support: event_route[module_name:eventid]
- - user and shm_force_alloc must now appear prior to any modparam() or route
- block.
- - per message send_flags support (see set_forward_no_connect(),
- set_forward_reply_no_connect(), set_forward_close() & set_reply_close())
- build system:
- - multiple modules directories are now supported (defined in Makefile.dirs)
- new config variables:
- - max_while_loops - maximum iterations allowed for a while (can be changed
- at runtime). Default 100.
- - log_name - set the application name used when printing to syslog.
- - mem_summary - memory debugging info logged on exit or on SIGUSR1.
- The value is a combination of flags: 0 - off,
- 1 - dump all used memory blocks and some statistics (lots of output),
- 2 - dump a summary of the used memory blocks (works only if
- compiled with DBG_QM_MALLOC or DBG_F_MALLOC).
- Default: 1.
- Can be changed at runtime.
- - shm = number or shm_mem = number - size of shared memory in MB. It's
- overwritten if a value is specified on the command line (-m val).
- Default: 32 Mb. Must appear prior to any modparam() or route block.
- new script commands:
- add_local_rport() - adds the rport parameter to the added via header
- (rfc3581).
- set_forward_no_connect() - the message will be forwarded only if there is
- already an existing connection to the destination (it applies only to
- connection oriented protocols like tcp, tls and in the future sctp).
- set_reply_no_connect() - like set_forward_no_connect(), but works for
- replies to the current message.
- set_forward_close() - try to close the connection after forwarding the
- current message (it applies only when the underlying protocol is
- connection oriented).
- set_reply_close() - like set_forward_close(), but it works for replies to
- the current message.
- tm:
- disable_6xx_block parameter - if set, will treat 6xx replies like normal
- replies (non rfc conformant). Default: off.
- See also t_set_disable_6xx().
- t_set_disable_6xx(0|1) - can be used to turn off/on the special 6xx handling
- on a per transaction basis.
- t_set_disable_failover(0|1) - can be used to turn off/on dns failover on a
- per transaction basis.
- 2.1.0 changes
- modules:
- - textops - functions:
- - remove_hf_re("regexp") -- filter message headers out
- by matching the header name field against a regular
- expression.
- - avp - export new selects table to allow dissecting the content of an
- attribute by interpreting it as a "name-addr" value
- - auth - experimental support for one-time nonces: when enabled a nonce
- will be accepted only for one response (each new request will
- be challenged). See one_time_nonce.
- - experimental support for nc checking when qop=auth
- (fast, non-locking implementation, see nonce_count,
- nc_array_size, nc_array_order and nid_pool_no)
- - switched to base64 nonces
- - record nonce generation time inside the nonce so that a
- received nonce can be checked against ser start time
- (if older => stale). This allows gracefully handling ser
- restarts with different auth configs.
- - added extra authentication checks support, to protect
- against various reply attacks.
- - params:
- - nonce_auth_max_drift - maximum difference in seconds
- from the current time, if a nonce appears to be
- created in the future (if exceeded the nonce is
- considered stale).
- - one_time_nonce - if enabled each nonce is allowed
- only once => each new request (including
- retransmissions!) will be challenged. It should be
- used only in stateful mode (so that tm deals with
- the retransmissions). The major disadvantage is that
- the UA won't be able to used any cached credentials
- (=> extra messages, extra round trips, more work for
- the proxy)
- - otn_in_flight_no - maximum number of in-flight nonces
- for one-time-nonces. It must be a number of the form
- 2^k (if not it will be automatically rounded down).
- The memory used will be otn_in_flight_no/8
- - otn_in_flight_order - like otn_in_flight_no, but
- instead of specifying the number as 2^k, it directly
- sets k (otn_in_flight_no=2^otn_in_flight_order)
- - nonce_count - if enabled and qop=auth or
- qop=auth-int, store and check received nc values
- (for details see rfc2617 and auth/doc). It should be
- used only in stateful mode (so that tm deals with
- the retransmissions which would otherwise be
- challenged). The major advantage is greatly
- enhanced security (extremely small probability of
- a succesfull replay attack) combine with support
- for cached credentials (if the UAs do support qop
- and auth)
- - nc_array_size - size of the array used for storing
- nc values, default 1Mb. It will be rounded down to
- a 2^k value. It represents the maximum number of
- in-flight nonces supported
- - nc_array_order - equivalent to nc_array_size, but
- instead of specifying the size in bytes, it can
- be used to directly set the power of 2 used
- (nc_array_size=2^nc_array_order)
- - nid_pool_no - number of nc and one-time-nonce array
- and index partitions, useful for increasing
- performance on multi-cpu systems (default 1,
- recommended 4)
- - auth_checks_register, auth_checks_no_dlg,
- auth_checks_in_dlg - flags specifying which extra
- message part/parts will be checked for change before
- allowing nonce reuse. See the auth module docs for
- for more information (modules/auth/README).
- - blst - new module containing script blacklist manipulations functions
- (the source of a message can be blacklisted, removed from the
- blacklist or checked for presence in the blacklist).
- - tm - added API function t_get_canceled_ident(): returns the hash
- coordinates (bucket/index) of the transaction the currently
- processed CANCEL is targeting. Requires AS support enabled.
- - added API function ack_local_uac(): allow generating the ACKs
- for 2xx'ed locally originated INVITEs - new headers and body can
- now also be appended to it. Requires AS support enabled.
- - matching of E2E ACKs no longer requires full From HF identity,
- but rather only tag equality (this behaviour can be changed by
- defining TM_E2E_ACK_CHECK_FROM_URI)
- - added t_reset_fr(), t_reset_retr(), t_reset_max_lifetime()
- - t_relay_to renamed to t_relay_to_avp (undocumented function)
- - t_relay() can now also take host and port parameters (e.g.
- t_relay(host, port)), behaving like a statefull
- forwad(host, port) version (forward to host:port using the same
- protocol on which the message was received)
- - t_relay_to_udp(), t_relay_to_tcp() and t_relay_to_tls() work
- now even with no parameters: in this case the message is
- forwarded using the request uri, but with the specified protocol
- (equivalent to a t_relay() with a forced protocol)
- - method for canceling unreplied branches can now be selected
- using the new cancel_b_method tm parameter.
- - support for adding a 503 reply source to the blacklist for
- the time specified in the Retry-After header (see the new tm
- parameters blst_503, blst_503_def_timeout, blst_503_min_timeout
- and blst_503_max_timeout).
- - different error replies for too many branches (500 but with
- different text), resolve error (478) or send error
- (477).
- - tm can be configured not to automatically send 100 replies
- for invites either globally (see the auto_inv_100 parameter)
- or on a per transaction basis (see t_set_auto_inv_100(...))
- - t_relay* error reply are delayed till the end of the script
- to allow the script writer to overwrite them
- - branches are always canceled hop by hop
- - cancels for silently canceled branches (no replies ever
- received) are automatically generated if later a provisional
- reply arrives on such a branch
- - noisy_ctimer is now 1 (on) by default
- - added maximum transaction lifetime - a transaction is not
- allowed to be active longer then this interval. See
- t_set_max_lifetime(), max_inv_lifetime and max_noninv_lifetime.
- - support for changing the retransmission intervals on the fly,
- on a per transaction basis (it is enabled if tm is compiled
- with -DTM_DIFF_RT_TIMEOUT -- default): t_set_retr(t1, t2).
- - transaction are deleted the moment they are not referenced
- anymore (removed the need for the delete timer) -- this
- should improve memory usage on very busy proxies.
- - lots of callbacks added
- - new onsend callbacks support (require defining TMCB_ONSEND prior
- to compiling tm)
- - behaviour when receiving a CANCEL which doesn't match any
- transaction can be selected using the unmatched_cancel param.
- - params:
- - cancel_b_method - selects one of the three methods
- for dealing with unreplied branches when the
- transaction must be canceled. The possible values
- are 0 (old behaviour) for stopping request
- retransmission on the branch and act as if
- the branch was immediately replied with a 487,
- 1 for continuing to retransmit the request until an
- answer is received or the timeout kicks in (default)
- and
- 2 for stopping the request retransmission and sending
- CANCEL on the branch (not rfc conforming).
- For more information see tm docs.
- - blst_503 - if set and if the blacklist is used
- (use_dst_blacklist=1), add the source of a 503 reply
- to the blacklist
- - blst_503_def_timeout - if the Retry-After header from
- a 503 reply is missing, use this value for the
- blacklist timeout (in s). Depends on blst_503.
- The default value is 0 ( do not blacklist if no
- Retry-After is present).
- - blst_503_min_timeot (in s) - if the 503 reply
- Retry-After header value is less, use this value
- for the blacklist timeout. Depends on blst_503.
- The default value is 0.
- - blst_503_max_timeout (in s) - if the 503 reply
- Retry-After header value is greater, use this value
- instead. Depends on blst_503.
- The default value is 3600 s.
- - auto_inv_100 - if set (default) tm will automatically
- send an 100 reply to INVITEs (see also
- t_set_auto_inv_100())
- - noisy_ctimer is now 1 by default
- - max_inv_lifetime & max_noninv_lifetime - default
- maximum lifetimes for an invite or non-invite
- transaction. After this interval has passed from
- the transaction creation the transaction will be
- either switched into the wait state or in the
- final response retransmission state => a transaction
- will be kept in memory for maximum:
- max_*inv_lifetime + fr_timer /*ack w.*/ +wait_timer.
- - unmatched_cancel - selects between forwarding cancels
- that do not match any transaction statefully (0,
- default value), statelessly (1) or dropping them
- (2). Note that the statefull forwarding has an
- additional hidden advantage: tm will be able to
- recognize INVITEs that arrive after their CANCEL.
- Note also that this feature could be used to try
- a memory exhaustion DOS attack against a proxy that
- authenticates all requests, by continuously flooding
- the victim with CANCELs to random destinations
- (since the CANCEL cannot be authenticated, each
- received bogus CANCEL will create a new transaction
- that will live by default 30s).
- - functions:
- - t_reset_fr() -- resets the current transaction
- fr_inv_timer and fr_timer to the default values
- (set via the tm modparams fr_inv_timer and fr_timer).
- - t_reset_retr() -- resets the current transaction
- retransmission intervals on the fly, to the default
- values (set via the tm modparams retr_timer1 and
- retr_timer2).
- - t_reset_max_lifetime() -- resets the current
- transaction maximum lifetime to the default value
- (set via the tm modparam max_inv_lifetime or
- max_noninv_lifetime).
- - t_grep_status("code") -- returns true if any branch
- received code as the final reply (or if no final
- reply was yet received, but a "code" provisional
- reply).
- - t_set_auto_inv_100(on/off) - switch automatically
- sending 100 replies to INVITEs on/off on a per
- transaction basis. It overrides the tm param.
- auto_inv_100.
- - t_set_max_lifetime(inv, noninv) - changes the
- maximum transaction lifetime on the fly, for the
- current or next to be created transaction.
- - t_set_retr(t1, t2) - changes the retransmissions
- intervals on the fly, on a per transaction basis.
- core:
- - most tcp config vars migrated to the dynamic config framework
- (can be changed at runtime, e.g.
- sercmd cfg.set_now_int tcp connection_lifetime 180 )
- - fallback to tcp or other congestion controlled transport
- protocol if a forwarded udp sip request is greater then
- udp_mtu (config). Default off. See udp_mtu and
- udp_mtu_try_proto.
- - sctp support (one-to-many, work in progress, for now linux
- and freebsd only)
- - partial cygwin (windows) support revived: core+static modules,
- no ipv6, no tcp, no dynamic modules
- - most of the config variables can now be changed on the fly,
- without ser restart (migration work in progress)
- - tcp improvements (better tcp timers, send fd cache, special
- options support)
- - dns naptr support (see dns_try_naptr and dns_<proto>_pref)
- - dns srv based load balancing support (see dns_srv_lb)
- - support for locking ser's pages in memory, pre-mapping
- all the shared memory on startup (fill it with 0)
- - real time options
- - devel: new PROC_INIT rank, init_child(PROC_INIT) called first
- - futex support on linux (better behaviour when waiting on
- long held locks, almost no performance impact otherwise)
- - when dns search list was used for resolution, store the "link"
- between the short name and long name in cache as CNAME record
- new config variables:
- tcp_rd_buf_size = buffer size used for tcp reads.
- A high buffer size increases performance on server with few
- connections and lot of traffic on them, but also increases
- memory consumption (so for lots of connection is better
- to use a low value). Note also that this value limits the
- maximum datagram size that can be received over tcp.
- Default: 4096, can be changed at runtime.
- tcp_wq_blk_size = block size used for tcp async writes. It should be big
- enough to hold a few datagrams. If it's smaller then a
- datagram (in fact a tcp write()) size, it will be rounded
- up. It has no influenced on the number of datagrams
- queued (for that see tcp_conn_wq_max or tcp_wq_max).
- It has mostly debugging and testing value (can be ignored).
- Default: 2100 (~ 2 INVITEs), can be changed at runtime.
- tcp_no_connect = yes/no - disable connects, ser will only accept new
- connections, it will never try to open new ones.
- Default: no, can be changed at runtime.
- udp_mtu = number - fallback to another protocol (udp_mtu_try_proto must be
- set also either globally or per packet) if the constructed
- request size is greater then udp_mtu.
- Recommended size: 1300. Default: 0 (off).
- udp_mtu_try_proto = TCP|TLS|SCTP|UDP - if udp_mtu !=0 and udp forwarded
- request size (after adding all the "local" headers) >
- udp_mtu, use this protocol instead of udp. Only the
- Via header will be updated (e.g. The Record-Route
- will be the one built for udp).
- Default: UDP (off). Recommended: TCP.
- force_rport =yes/no - like force_rport(), but works globally.
- disable_sctp = yes/no - disable sctp support (default auto, see enable_sctp)
- enable_sctp = 0/1/2 - disable (0)/enable (1)/auto (2) sctp support,
- default auto (2)
- sctp_children = number - sctp children no (similar to udp children)
- sctp_socket_rcvbuf = number - size for the sctp socket receive buffer
- sctp_socket_sndbuf = number - size for the sctp socket send buffer
- sctp_autoclose = seconds - number of seconds before autoclosing an idle
- association (default: 180 s).
- Can be changed at runtime, but it will affect only new
- associations. E.g.:
- $ sercmd cfg.set_now_int sctp autoclose 120
- sctp_send_ttl = milliseconds - number of milliseconds before an unsent
- message/chunk is dropped (default: 32000 ms or 32 s).
- Can be changed at runtime, e.g.:
- $ sercmd cfg.set_now_int sctp send_ttl 180000
- sctp_send_retries - how many times to attempt re-sending a message on a
- re-opened association, if the sctp stack did give up
- sending it (it's not related to sctp protocol level
- retransmission). Useful to improve reliability with
- peers that reboot/restart or fail over to another
- machine. WARNING: use with care and low values (e.g.
- 1-3) to avoid "multiplying" traffic to unresponding
- hosts (default: 0).
- Can be changed at runtime.
- sctp_assoc_tracking = yes/no - controls whether or not sctp associations
- are tracked inside ser/sip-router. Turning it off would result in
- less memory being used and slightly better performance, but it will also
- disable some other features that depend on it (e.g. sctp_assoc_reuse).
- Default: yes.
- Can be changed at runtime (sercmd sctp assoc_tracking 0), but changes
- will be allowed only if all the other features that depend on it are
- turned off (for example it can be turned off only if first
- sctp_assoc_reuse was turned off).
- Note: turning sctp_assoc_tracking on/off will delete all the tracking
- information for all the currently tracked associations and might introduce
- a small temporary delay in the sctp processing if lots of associations
- were tracked.
- Config options depending on sctp_assoc_tracking being on:
- sctp_assoc_reuse.
- sctp_assoc_reuse = yes/no - controls sctp association reuse. For now only
- association reuse for replies is affected by it. Default: yes.
- Depends on sctp_assoc_tracking being on.
- Note that even if turned off, if the port in via corresponds to the
- source port of the association the request was sent on or if rport is
- turned on (force_rport() or via containing a rport option), the
- association will be automatically reused by the sctp stack.
- Can be changed at runtime (sctp assoc_reuse), but it can be turned on
- only if sctp_assoc_tracking is on.
- sctp_max_assocs = number - maximum number of allowed open sctp associations.
- -1 means maximum allowed by the OS. Default: -1.
- Can be changed at runtime (e.g.:
- sercmd cfg.set_now_int sctp max_assocs 10 ).
- When the maximum associations number is exceeded and a new associations
- is opened by a remote host, the association will be immediately closed.
- However it is possible that some sip packets get through (especially if
- they are sent early, as part of the 4-way handshake).
- When ser/sip-router tries to open a new association and the max_assocs
- is exceeded the exact behaviour depends on whether or not
- sctp_assoc_tracking is on. If on, the send triggering the active open
- will gracefully fail, before actually opening the new association and no
- packet will be sent. However if sctp_assoc_tracking is off, the
- association will first be opened and then immediately closed. In general
- this means that the initial sip packet will be sent (as part of the 4-way
- handshake).
- sctp_srto_initial = milliseconds - initial value of the retr. timeout, used
- in RTO calculations (default: OS specific).
- Can be changed at runtime (sctp srto_initial) but it will affect only new
- associations.
- sctp_srto_max = milliseconds - maximum value of the retransmission timeout
- (RTO) (default: OS specific).
- WARNING: values lower then the sctp sack_delay will cause lots of
- retransmissions and connection instability (see sctp_srto_min for more
- details).
- Can be changed at runtime (sctp srto_max) but it will affect only new
- associations.
- sctp_srto_min = milliseconds - minimum value of the retransmission timeout
- (RTO) (default: OS specific).
- WARNING: values lower then the sctp sack_delay of any peer might cause
- retransmissions and possible interoperability problems. According to the
- standard the sack_delay should be between 200 and 500 ms, so avoid trying
- values lower then 500 ms unless you control all the possible sctp peers
- and you do make sure their sack_delay is higher or their sack_freq is 1.
- Can be changed at runtime (sctp srto_min) but it will affect only new
- associations.
- sctp_asocmaxrxt = number - maximum retransmissions attempts per association
- (default: OS specific). It should be set to sctp_pathmaxrxt * no. of
- expected paths.
- Can be changed at runtime (sctp asocmaxrxt) but it will affect only new
- associations.
- sctp_init_max_attempts = number - maximum INIT retransmission attempts
- (default: OS specific).
- Can be changed at runtime (sctp init_max_attempts).
- sctp_init_max_timeo = milliseconds - maximum INIT retransmission timeout (RTO
- max for INIT). Default: OS specific.
- Can be changed at runtime (sctp init_max_timeo).
- sctp_hbinterval = milliseconds - sctp heartbeat interval. Setting it to -1
- will disable the heartbeats. Default: OS specific.
- Can be changed at runtime (sctp hbinterval) but it will affect only new
- associations.
- sctp_pathmaxrxt = number - maximum retransmission attempts per path (see also
- sctp_asocmaxrxt). Default: OS specific.
- Can be changed at runtime (sctp pathmaxrxt) but it will affect only new
- associations.
- sctp_sack_delay = milliseconds - delay until an ACK is generated after
- receiving a packet. Default: OS specific.
- WARNING: a value higher then srto_min can cause a lot of retransmissions
- (and strange problems). A value higher then srto_max will result in very
- high connections instability. According to the standard the sack_delay
- value should be between 200 and 500 ms.
- Can be changed at runtime (sctp sack_delay) but it will affect only new
- associations.
- sctp_sack_freq = number - number of packets received before an ACK is sent
- (without waiting for the sack_delay to expire). Default: OS specific.
- Note: on linux with lksctp up to and including 1.0.9 is not possible to
- set this value (having it in the config will produce a warning on
- startup).
- Can be changed at runtime (sctp sack_freq) but it will affect only new
- associations.
- sctp_max_burst = number - maximum burst of packets that can be emitted by an
- association. Default: OS specific.
- Can be changed at runtime (sctp max_burst) but it will affect only new
- associations.
- server_id = number - A configurable unique server id that can be used to
- discriminate server instances within a cluster of
- servers when all other information, such as IP addresses
- are the same.
- loadpath = <modules path> - directory where to load the modules from (-L
- equivalent); modules can be loaded simply by specifying their name
- (loadmodule "maxfwd")
- tcp_fd_cache = yes | no (default yes) - if enabled FDs used for sending
- will be cached inside the process calling tcp_send (performance increase
- for sending over tcp at the cost of slightly slower connection closing and
- extra FDs kept open)
- tcp_async = yes | no (default yes) - if enabled all the tcp writes that
- would block / wait for connect to finish, will be queued and attempted
- latter (see also tcp_conn_wq_max and tcp_wq_max).
- tcp_buf_write = obsoleted synonim for tcp_async
- tcp_conn_wq_max = bytes (default 32 K) - maximum bytes queued for write
- allowed per connection. Attempting to queue more bytes would result
- in an error and in the connection being closed (too slow). If
- tcp_write_buf is not enabled, it has no effect.
- tcp_wq_max = bytes (default 10 Mb) - maximum bytes queued for write allowed
- globally. It has no effect if tcp_write_buf is not enabled.
- tcp_defer_accept = yes | no (default no) on freebsd / number of seconds
- before timeout on linux (default disabled) - tcp accepts will be
- delayed until some data is received (improves performance on proxies
- with lots of opened tcp connections). See linux tcp(7) TCP_DEFER_ACCEPT
- or freebsd ACCF_DATA(0). For now linux and freebsd only.
- WARNING: the linux TCP_DEFER_ACCEPT is buggy (<=2.6.23) and doesn't
- work exactly as expected (if no data is received it will retransmit
- syn acks for ~ 190 s, irrespective of the set timeout and then it will
- silently drop the connection without sending a RST or FIN). Try to
- use it together with tcp_syncnt (this way the number of retrans.
- SYNACKs can be limited => the timeout can be controlled in some way).
- tcp_delayed_ack = yes | no (default yes when supported) - initial ACK for
- opened connections will be delayed and sent with the first data
- segment (see linux tcp(7) TCP_QUICKACK). For now linux only.
- tcp_syncnt = number of syn retr. (default not set) - number of SYN
- retransmissions before aborting a connect attempt (see linux tcp(7)
- TCP_SYNCNT). Linux only.
- tcp_linger2 = seconds (not set by default) - lifetime of orphaned sockets
- in FIN_WAIT2 state (overrides tcp_fin_timeout on, see linux tcp(7)
- TCP_LINGER2). Linux only.
- tcp_keepalive = yes | no (default yes) - enables keepalive for tcp.
- tcp_keepidle = seconds (not set by default) - time before starting to send
- keepalives, if the connection is idle. Linux only.
- tcp_keepintvl = seconds (not set by default) - time interval between
- keepalive probes, when the previous probe failed. Linux only.
- tcp_keepcnt = number (not set by default) - number of keepalives sent before
- dropping the connection. Linux only.
- tcp_crlf_ping = yes | no (set by default) - enable CRLF keepalives aka
- SIP outbound.
- pmtu_discovery = 0 | 1 (default 0) - set DF bit in outbound IP if enabled
- dns_srv_lb = yes | no (default no) - enable dns srv weight based load
- balancing (see doc/dns.txt)
- dns_try_naptr = yes | no (default no) - enable naptr support
- (see doc/dns.txt for more info)
- dns_{udp,tcp,tls,sctp}_pref = number - ser preference for each protocol
- when doing naptr lookups. By default dns_udp_pref=30, dns_tcp_pref=20,
- dns_tls_pref=10 and dns_sctp_pref=20. To use the remote site preferences
- set all dns_*_pref to the same positive value (e.g. dns_udp_pref=1,
- dns_tcp_pref=1, dns_tls_pref=1, dns_sctp_pref=1). To completely ignore
- NAPTR records for a specific protocol, set the corresponding protocol
- preference to -1 (or any other negative number). (see doc/dns.txt for
- more info)
- dns_search_full_match = yes | no (default yes) - when name was resolved
- using dns search list, check the domain added in the answer matches with
- one from the search list (small performance hit, but more safe)
- mlock_pages = yes |no (default no) - locks all ser pages into memory making
- it unswappable (in general one doesn't want his sip proxy swapped out :-))
- shm_force_alloc = yes | no (default no) - tries to pre-fault all the
- shared memory, before starting. When on start time will increase, but
- combined with mlock_pages will guarantee ser will get all its memory from
- the beginning (no more kswapd slow downs)
- real_time = <int> (flags) (default off). - sets real time priority
- for all the ser processes, or the timers.
- Possible values: 0 - off
- 1 - the "fast" timer
- 2 - the "slow" timer
- 4 - all processes, except the timers
- Example: real_time= 7 => everything switched to real time priority.
- rt_prio = <int> (default 0) - real time priority used for everything except
- the timers, if real_time is enabled
- rt_policy= <0..3> (default 0)- real time scheduling policy, 0 = SCHED_OTHER,
- 1= SCHED_RR and 2=SCHED_FIFO
- rt_timer1_prio=<int> (default 0) - like rt_prio but for the "fast" timer
- process (if real_time & 1)
- rt_timer1_policy=<0..3> (default 0) - like rt_policy but for the "fast" timer
- rt_timer2_prio=<int> (default 0) - like rt_prio but for the "slow" timer
- rt_timer2_policy=<0..3> (default 0) - like rt_policy but for the "slow" timer
- tcp_source_ipv4 = IPv4 address
- tcp_source_ipv6 = IPv6 address
- Set the given source IP for all outbound TCP connections.
- If setting the IP fails the TCP connection will use the default.
- dns_cache_init = on | off (default on) - if off, the dns cache is not
- initialized at startup and cannot be enabled runtime, that saves some
- memory.
- dst_blacklist_init = on | off (default on) - if off, the blacklist
- is not initialized at startup and cannot be enabled runtime,
- that saves some memory.
- new script commands:
- udp_mtu_try_proto(TCP|TLS|SCTP|UDP) - same as udp_mtu_try_proto=... (see
- above), but works per packet and not globally.
- build system:
- - check defines and includes used at compile time and if different
- force rebuilding everything in the current dir (creates a new file:
- makecfg.lst that stores the compile defines & includes used at compile
- time)
- - make cfg / config support: store the build config in an autogenerated file
- (config.mak) and use it for future compiles (e.g.:
- make cfg include_modules=mysql skip_modules=print CPU=pentium-m; make all).
- Main advantages are easier usage and faster builds (e.g. make proper is
- +16 times faster, make clean ~9 times, make with previously generated
- config is 2.6 times faster and a make that has nothing to do is ~9 times
- faster).
- 2.0.0 changes
- new archs:
- modules:
- - tls - new module that enables tls support (set enable_tls=yes
- in the config file and load the tls module)
- - ctl - new fifo/unixsocket/xmlrpc like module, using a space
- efficient binary encoding for the requests.
- It supports multiple clients on tcp, udp, unix stream or
- unix datagram modes. By default (no modparams) it opens
- one unix stream control socket in /tmp/ser_ctl.
- It also includes extended fifo support: multiple fifos,
- fifo over tcp, udp and unix sockets (see ctl/ctl.cfg).
- Use utils/sercmd/sercmd to send commands to it.
- - dispatcher - added hashing after request uri and to uri
- - added a new flag parameter which can be used (for now) to
- select only the username or the username, host and port when
- hashing after an uri (to, from or request uri)
- - improved uri hashing (password is ignored, port is used only
- if != 5060 or 5061)
- - tm - aggregate challenges (WWW/Proxy-Authenticate) from all the
- 401 & 407 if the final reply is a 401/407. To turn this off
- and fall back to the old behaviour set tm aggregate_challenges
- parameter to 0.
- - if a relayed 503 is the final reply, replace it by a 500
- - if a 503 reply is received try the dns based failover
- (forward to another ip if the original destination uri
- resolved to several SRV, A or AAAA records)
- - on 6xx immediately cancel all the branches for which a
- provisional response was received and wait for all the
- branches to finish (either timeout, the 487 from the CANCEL
- or a final response still on the wire in the moment the
- CANCEL was sent)
- - better final reply selection: 6xx is preferred over other
- negative replies; from several 4xx prefer 401, 407, 415, 420,
- 484 (in this order). For all the other cases, return the lowest
- code (as before)
- - special functions for checking for timeout, if a reply was
- received or if the current transaction was canceled
- - dns failover and dst blacklist support
- - migrated to the new timers (tm timers completely rewritten)
- - improved speed and less memory usage
- - much more precise retransmissions timing
- - params: - retr_timer1p1, retr_timer1p2, retr_timer1p3 removed
- and replaced by retr_timer1 and retr_timer2
- - all timer values are now expressed in milliseconds
- (they were in seconds before).
- Affected params: fr_timer, fr_inv_timer, wt_timer,
- delete_timer, retr_timer1, retr_timer2
- - retr_timer1 (first retransmission) changed to 500 ms
- - delete_timer changed to 200 ms
- - unix_tx_timeout expressed now in milliseconds; default
- value changed to 500 ms
- - functions:
- - t_branch_timeout() -- returns true if the failure
- route is executed for a branch that did timeout
- (failure_route only).
- - t_branch_replied() -- returns true if the failure
- route is executed for a branch that did receive at
- least one reply in the past (the current reply
- is not taken into account). It can be used
- together with t_branch_timeout() to distinguish
- between a remote side that doesn't respond (some
- provisional reply received) and one that is completely
- dead. (failure_route only)
- - t_any_timeout() -- returns true if any of the current
- transaction branches did timeout.
- - t_any_replied() -- returns true if at least one branch
- of the current transaction received one reply in the
- past. If called from a failure_route or an
- onreply_route, the "current" reply is not taken into
- account.
- - t_is_canceled() -- returns true if the current
- transaction has been canceled.
- - new t_set_fr(timeout_fr_inv, timeout_fr) -- allows
- changing the transaction timer from script, even if
- the transaction was already created (see tm docs for
- more).
- - t_relay will not stop script execution anymore in case of
- send error
- - textops - search() can be used in the onsend_route where it will search
- on the "new" message (after applying all script changes, adding
- Vias a.s.o) and not on the original message
-
- core:
- - compiled by default with tls hooks support (so that no recompile is
- needed before loading the tls module and enabling the tls support)
- - enable_tls config option added (the reverse of disable_tls)
- - added STUN keep-alive functionality in accordance with
- draft-ietf-behave-rfc3489bis-04.txt
- - dns cache and dns failover support added (see doc/dns.txt)
- - destination blacklist added -- destinations to which forwarding fails
- (send error, tm timeout a.s.o) are temporarily added to a blacklist which
- is consulted before each send => faster send error detection
- in the near future (see doc/dst_blacklist.txt)
- - default log level switched to 0 (only messages < L_WARN will be printed
- by default)
- - separate memdbg log level which controls the memory/malloc related
- debug messages (to see them ser must be compiled with malloc debuging:
- -DDBG_QM_MALLOC or -DDBG_FM_MALLOC and memdbg must be <= debug )
- - added named routes: names can be used instead of numbers in all the
- route commads or route declarations. route(number) is equivalent to
- route("number").
- Example:
- route("test");
- route["test"]{
- ...
- }
- - added named flags, declared at the beginning of the config file with:
- flags flag1_name[:position], flag2_name ...
- Example:
- flags test, a:1, b:2 ;
- route{
- setflag(test);
- if (isflagset(a)){ # equiv. to isflagset(1)
- ....
- }
- resetflag(b); # equiv. to resetflag(2)
- - added return [val] which returns from a route. if no value is specified, or
- a route reaches its end without executing a return statement, it returns 1.
- If return is used in the top level route is equivalent with exit [val].
- - drop /exit [n] now will end the script execution
- exit n will exit with code n (usefull in onreply/onsend routes where
- if script code !=0 a reply is generated/the message is sent or to force
- script errors)
- - added $? which can be used to check the return code of the last executed
- route{} (e.g. route(1); if ($?==1){ /* ... */}else if ($?==2) ... )
- - onsend_route added: special route executed before a request is sent.
- Only a limited number of commands are allowed (drop, if
- + all the checks, msg flag manipulations, send(), log(),
- textops::search()). In this route the final destination
- of the message is available an can be checked (with
- snd_ip, snd_port, to_ip, to_port, snd_proto, snd_af).
- This route is executed only when forwarding requests.
- It's not executed for replies, retransmissions, or
- locally generated messages (e.g. via fifo uac).
- short example:
- onsend_route{ if(to_ip==1.2.3.4 && !isflagset(12)){
- log(1, "message blocked\n");
- drop;
- }
- }
- - onsend_route specific checks:
- - snd_ip, snd_port - behave like src_ip/src_port, but contain the
- ip/port ser will use to send the message
- - to_ip, to_port - like above, but contain the ip/port the message will
- be sent to (not to be confused with dst_ip/dst-port, which are the
- destination of the original message: ser's ip and port on which the
- message was received)
- - snd_proto, snd_af - behave like proto/af but contain the
- protocol/address family that ser will use to send the message
- - msg:len - when used in an onsend_route, msg:len will contain the length
- of the message on the wire (after all the changes in the script are
- applied, Vias are added a.s.o) and not the lentgh of the original
- message
- - timer: - improved performance/precision, new api, see doc/timers.txt
- - tcp: - improved performance (io event handling), using OS specific
- optimizations
- - 1024 connections limit removed (see tcp_max_connections)
- - resolver: - timeouts, retries a.s.o can now be set from ser.cfg
- (see below dns_* and man resolv.conf(6)).
- The maximum time a dns request can take (before failing) is:
- (dns_retr_time*dns_retr_no)*(search_list_domains)
- If dns_try_ipv6 is yes, mutliply it again by 2.
- The fastest possible dns config (max 1s):
- dns_try_ipv6=no
- dns_retr_time=1
- dns_retr_no=1
- dns_use_search_list=no
- - default on reply route added: onreply_route {.. } will add a default
- onreply route that will be executed for any reply (usefull to catch
- replies without using tm)
- - branch_routes added (tm triggered), only a very limited number of commands
- are available (see tm docs)
- - avps directly accessible from script with %avp_name (variable style)
- new config variables:
- enable_tls/disable_tls = enable/disable tls support, default disable.
- Note: a tls "engine" is still needed (e.g. the tls module must
- be loaded, enable_tls by itself is not enough).
- exit_timeout = seconds - how much time ser will wait for all the shutdown
- procedures to complete. If this time is exceeded, all the remaining
- processes are immediately killed and ser exits immediately (it might
- also generate a core dump if the cleanup part takes too long).
- Default: 60 s. Use 0 to disable.
- stun_refresh_interval = number in millisecond (default 0); value for
- attribute REFRESH INTERVAL
- stun_allow_stun = 0 | 1 (off | on - default 1); use STUN or not if compiled
- stun_allow_fp = 0 | 1 (off | on - default 1); use FINGERPRINT attribute
- use_dns_cache = on | off (default on)
- use_dns_failover = on | off (default off)
- dns_cache_flags = number (default 0)
- dns_cache_negative_ttl = number in seconds (default 60)
- dns_cache_min_ttl = time in seconds (default 0)
- dns_cache_max_ttl = time in seconds (default MAXINT)
- dns_cache_mem = maximum memory used for the dns cache in Kb (default 500 K)
- dns_cache_gc_interval = interval in seconds after which the dns cache is
- garbage collected (default: 120 s)
- use_dst_blacklist = on | off (default off)
- dst_blacklist_expire = time in s (default 60)
- dst_blacklist_mem = maximum memory used for the blacklist in Kb (default 250
- K)
- dst_blacklist_gc_interval = interval in seconds after which the destination
- blacklist is garbage collected (default 60)
- tos = number - ip type of service (TOS) value
- dns_try_ipv6 = yes/no - if yes and a dns lookup fails, it will retry it
- for ipv6 (AAAA record). Default: yes
- dns_retr_time = time - time in s before retrying a dns request.
- Default: system specific, depends also on the/etc/resolv.conf content
- (usually 5s).
- dns_retr_no = no. - number of dns retransmissions before giving up.
- Default: see above (usually 4)
- dns_servers_no = no. - how many dns servers from the ones defined in
- /etc/resolv.conf will be used. Default: all of them.
- dns_use_search_list= yes/no - if no, the search list in /etc/resolv.conf
- will be ignored (=> fewer lookups => gives up faster). Default: yes.
- HINT: even if you don't have a search list defined, setting this option
- to "no" will still be "faster", because an empty search list is in
- fact search "" (so even if the search list is empty/missing there will
- still be 2 dns queries, eg. foo+'.' and foo+""+'.')
- tcp_connection_lifetime = value (s) - how long the lifetime of a
- tcp connection will be exteneded after an IO event (accept, connect,
- read, write). Default: 120 s.
- tcp_poll_method = poll|select|sigio_rt|epoll_et|epoll-lt|kqueue|devpoll -
- poll method used (by default the best one for the current OS is selected)
- tcp_max_connections = no. - maximum number of tcp connections (if the number
- is exceeded no new tcp connections will be accepted). Default: 2048.
- tools:
- utils/sercmd - command line serctl like tool for interrogating ser ctl
- module (uses the binrpc encoding). Supports various
- connection methods (udp, tcp, unix stream & datagram sockets),
- reply formating (see -f, e.g. sercmd -f "pid:%v %v\n" core.ps)
- , interactive mode, command line completion (if compiled with
- libreadline) a.s.o.
- WARNING: - older 0.10.99-dev version (< 0.10.99-dev46) returned a 480 reply
- on invite transaction timeout, if a provisional reply was received. Newer
- versions reverted to returning 408 on all timeouts (one can use
- t_branch_timeout() and t_branch_replied() to distinguish between the two
- timeout types)
- 0.9.4 fixes/improvements (0.9.4 is a bug fix release for 0.9.3)
-
- general:
- - gcc 4.0 support
- - mutlicast options are set for all the sockets
- - mediaproxy: memory leak, unchecked memory allocations
- - postgress: some bugs and cleanups (compiles cleanly now)
- - tm: shm cloned lumps (SER-55)
- - tm: t_fifo: 64-bit fix
- - tm: dst_uri clone fix
- - tm: t_newtran/t_restransmit* races (!)
- - usloc: memory leak
- solaris:
- - serctl, better ISA detection, signals
- *bsd:
- - multicast options are properly set
- openbsd:
- - tcp 64 bit fix
- 0.9.3 changes
- new archs:
- - alpha experimental support
- - mips2/cobalt experimental support
- - x86_64 support
- - OS X (darwin) support
- - sparc32 single cpu highly experimental support
- - ppc64 support
- modules:
- - enum - support for more than one NAPTR
- - msilo - explicit multidomain support -- recipient's user ID is stored in
- the columns username and domain -- r_uri column kept for compatibility
- reasons (will be removed in future) but not filled by this version of
- module
- - mysql - implements a connection pool, all modules will use same connection
- to access the database
- - nathelper received port test (flag 16 for nat_uac_test): compares the
- source port of the message with sip port in the first Via and returns
- true if different.
- - permsions - support for multiple allow/deny files, allow_register function
- - TM has a new parameter: restart_fr_on_each_reply. If set (default)
- fr_inv timer will be restarted for each provisional reply, if not set
- it will be restarted only for the first reply and for replies >=180
- (but only if increasing, eg.: 180, 181 ...). Usefull when dealing with bad
- UAs that re-transmit 180s.
- - TM saves the avp list into transactions, and make it available into
- callbacks, failure and reply routes.
- - TM contains new command - t_write_unix("/tmp/sems.sock", "announcement")
- sends a message using unix socket interface instead of FIFO interface.
- - TM contains new config variable - unix_tx_timeout -- it specifies the
- transmit timeout of t_write_sock
- - VM functionality was transfered into TM module. Instead of fetching the
- email value from DB (as VM), TM looks for the "email" attribute to get the
- value.
- vm() function was replaced with t_write_req()
- vm_reply() fifo functions was replcated by TM with t_reply() fifo function
- NOTE!! because current version of SEMS/AA try to send reply via vm_reply,
- it will not work with the TM version.
- - xlog - printing the body of any header by specifying the name; new
- specifiers for user-agent, message buffer, message length, message's flags,
- message id.
- new modules:
- - avp / avp_db / avp_radius - load and check avps per caller or callee
- - avpops - flexible module for operations with avps and database, introducing
- a pseudo-varible support in SER configuration file
- - cpl-c - implementation of Call Processing Language
- - dispatcher - implements a dispatcher for incoming requests using hashes
- over parts of the request to select the destination
- - diversion - implements the Diversion extensions as per
- draft-levy-sip-diversion-08
- - flatstore - simple module that implements very fast inserts for accounting
- purposes
- - gflags - keeps a bitmap of flags in shared memory and may be used to change
- behaviour of server based on value of the flags
- - options - answer server options requests
- - speeddial - provides on-server speed dial facilities
- - uri_db - split from uri module, performs various checks related to SIP URI
- over database fields
- removed modules:
- - vm - the functionality was transfered to tm module (see t_write_req(...)
- method)
- core:
- - new parts:
- UNIX domain socket server implemented
- - changes:
- - command line: removed -p port and extended -l:
- -l [proto:]addr[:port] , where proto=udp|tcp and
- addr= host|ip_address|interface_name. The format is the same
- as for listen in the config file. ipv6 addresses must be enclosed in
- [].
- - added from_uri & to_uri: behave exactly like uri but use the
- "From:"/"To:" uris
- (e.g.: if (from_uri==myself) ..., if (to_uri=~"^sip:test@")... )
- - config: better escape support in strings (e.g. \", \<cr>, \x0a, \012)
- - bad network addresses are now automatically fixed
- (e.g. 192.168.1.80/27 => 192.168.1.64/27)
- - avp (Attribute-Value Pair) support added
- - avp alias support added
- - multicast support added (see mcast_loopback & mcast_ttl)
- - saving of procces group id enabled, if the -G option is specified
- (a safe way to quickly kill all ser processes)
- - core dump-ing is enabled by default, see also disable_core_dump
- - protocol and port can be specified in the alias and listen lines, e.g.:
- alias= tcp:foo.bar:* udp:test.bar:5080 foo.com
- listen= eth0 tcp:eth0:5065 udp:127.0.0.1 [3ffe::1]
- - multiple operator support: ==, != for special operations (e.g myself, ip)
- ==, !=, ~= for strings
- ==, !=, >, <, >=, <= for integers
- - database api changed to support usage of different drivers
- simultaneously. The database URL must start now with the name of the
- driver (module). Example: for mysql the DB URL
- 'sql://user:password@dbhost:port/database' must be specified now as
- 'mysql://user:password@dbhost:port/database'
- - new config variables:
- mcast_loopback = <yes/no> - loopback sent multicast datagram, default no.
- mcast_ttl = number - set multicast ttl, default OS specific (usually 1).
- sock_mode = <permissions> (e.g. sock_mode=0600: default value = 0660)
- ser unix sockets and fifo will be created with this permissions
- (old name fifo_mode is still supported, but deprecated)
- sock_user = username|"uid"
- sock_group = groupname|"gid"
- change the owner and/or group of the ser unix sockets or fifo
- Short example config snippet:
- sock_mode=0600 # ser socket/fifo mode
- sock_user="www-data" # ser socket/fifo owner
- sock_group=nogroup
- user=nobody # ser user (ser will suid to it)
- disable_core_dump= yes|no
- by default core dump limits are set to unlimited or a high enough
- value, set this config variable o yes to disable core dump-ing
- (will set core limits to 0)
- open_files_limit= number
- if set and bigger than the current open file limit, ser will try
- to increase its open file limit to this number. Note: ser must be
- started as root to be able to increase a limit past the hard limit
- (which, for open files, is 1024 on most systems)
- tcp_connect_timeout= seconds
- time before an ongoing connect will be aborted
- tcp_send_timeout= seconds
- time after a tcp connection will be closed if it is not available
- for writing in this interval (and ser wants to send something on it)
- tcp_accept_aliases= yes|no
- if a message received over a tcp connection has "alias" in its via
- a new tcp alias port will be created for the connection the message
- came from (the alias port will be set to the via one).
- Based on draft-ietf-sip-connect-reuse-00.txt, but using only the port
- (host aliases are too dangerous IMHO, involve extra DNS
- lookups and the need for them is questionable)
- See force_tcp_alias for more details.
- log_facility = LOG_LOCAL0
- if ser logs to syslog, you can control the facility for logging. Very
- useful when you want to divert all ser logs to a different log file.
- See man page syslog(3) for more detailes.
- unix_sock = "/tmp/ser.sock"
- The name of the socket the unixsock server should listen on.
- unix_sock_children = 1
- The number of children that will listen on the unix domain socket.
- unix_tx_timeout = 2000
- Timeout (in ms) used when sending replies through unix sockets.
- - new script commands:
- force_send_socket([proto:]address[:port])
- sends the message from the specified socket (it _must_ be one of the
- sockets ser listens on). If the protocol doesn't match (e.g. udp
- message "forced" to a tcp socket) the closest socket of the same
- protocol is used.
- force_tcp_alias()
- force_tcp_alias(port)
- adds a tcp port alias for the current connection (if tcp).
- Usefull if you want to send all the trafic to port_alias through
- the same connection this request came from [it could help
- for firewall or nat traversal].
- With no parameters adds the port from the message via as the alias.
- When the "aliased" connection is closed (e.g. it's idle for too
- much time), all the port aliases are removed.
- Note: by default ser closes idle connection after 3 minutes (stable)
- or 1 minute (unstable) so to take full advantage of tcp aliases for
- things like firewall and nat traversal, redefine TCP_CON_*TIMEOUT
- in tcp_conn.h and recompile. Also right now there can be maximum
- 3 port aliases to a connection (you shouldn't need more than one).
- To change this redefine TCP_CON_MAX_ALIASES in the same file
- (set it to you desired value + 1; 1 is needed for the real port).
- utilities:
- - ngrep patch for displaying new lines in captured SIP messages is no longer
- needed; use ngrep V 1.42 with the option "-W byline"
- ***********************************************
- * Changes/fixes introduced in 0.8.12
- ***********************************************
- +--------------------------------------------------------+
- | WARNING: if you want to use a 0.8.11 config script |
- | with 0.8.12, replace if ( len_gt(number) ) with: |
- | if ( msg:len > bumber ) |
- +--------------------------------------------------------+
- New Features
- ============
- texops:
- - subst('s/re/repl/flags') support
- core:
- - added switch to check the config file (-c)
- - changes: removed len_gt() and replaced with if (msg:len op number|max_len)
- - multiple operator support: ==, != for special operations (e.g myself, ip)
- ==, !=, ~= for strings
- ==, !=, >, <, >=, <= for integers
- - new config variables:
- advertised_address= ip | string
- address advertised in via and in the DST_* lumps (e.g RR)
- This is the default value, if empty (default) the socket
- address will be used.
- 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_port= no
- port advertised in via and in the DST_*lumps (e.g. RR)
- This is the default value, if empty (default) the socket
- port will be used.
- Same warnings as above.
- - new script commands:
- set_advertised_address(ip|string)
- same as advertised_address but it affects only the current message:
- Message host/lump address= the set_advertised one if
- present, else advertised_address else socket address.
- set_advertised_port(no)
- same as advertised_port but it affects only the current
- message; see set_advertised_address & s/address/port/g
- usrloc:
- - usernames are case insensitive
-
- registrar:
- - lookup function succeeds when appending of a branch failed
- auth_db:
- - support for rpid stored in database (thanks to Jakob Schlyter)
- Bug fixes
- =========
- - memory leak in digest credentials parser fixed
- - authenticathion ha1 didn't include domain if username was of the form
- user@domain and calculate_ha1 was set to yes (modules/auth_db)
- - tm reply processing race condition (modules/tm), special thanks go to
- Dong Liu
- - Many bugs in pa module fixed, works with registrar again.
-
- Security updates
- ================
-
- - fifo processing code will write responses only to other
- fifos and only if they are not hard-linked, also default
- ser fifo persmissions were changed to 0600.
-
- Performance improvements
- ========================
- - tuned internal malloc implementation parameters to better reflect the
- actual workload (malloc is a little bit faster now)
- ***********************************************
- * Changes introduced in 0.8.11
- ***********************************************
- +--------------------------------------------------------+
- | CAUTION: the 0.8.11 release include changes which |
- | are incompatible with scripts and databases used |
- | in previous versions. Care is advised when upgrading |
- | from previous releases to 0.8.11. |
- +--------------------------------------------------------+
- New features
- =============
- - RFC3261 support
- - TCP support and cross-transport forwarding [core]
- - loose routing support [rr module]
- - New modules
- - vm -- voicemail interface [vm]
- - ENUM support [enum]
- - presence agent [pa]
- - dynamic domain management -- allows to manipulate
- hosting of multiple domains in run-time [module]
- - flat-text-file database support [dbtext]
- - rich access control lists [permissions]
- - Feature Improvements
- - click-to-dial, which is based on improved tm/FIFO
- that better supports external applications [tm module]
- - web accounting -- acc module can report to serweb
- on placed calls [acc module]
- - improved exec module (header fields passed now
- as environment variables to scripts) [exec module]
- - Architectural Improvements
- - powerpc fast locking support
- - netbsd support
- - 64 bits arch. support (e.g. netbsd/sparc64).
- - New Experimental Features (not tested at all yet)
- - nathelper utility for Cisco/ATA NAT traversal [nathelper]
- - another NAT traversal utility [mangler]
- - postgress support [postgress]
- - fcp module [fcp]
- - pdt module (prefix2domain) [pdt]
- Changes to use of ser scripts
- =============================
- About Multiple Transport Support
- --------------------------------
- SER now suports multiple transport protocols: UDP and TCP. As there
- may be UAs which support only either protocol and cannot speak to
- each other directly, we recommend to alway record-route SIP requests,
- to keep the transport-translating SER in path. Also, if a destination
- transport is not known, stateful forwarding is recommended -- use of
- stateless forwarding for TCP2UDP would result in loss of reliability.
- core
- ----
- - reply_route has been renamed to failure_route -- the old name caused
- too much confusion
- - forward_tcp and forward_udp can force SER to forward via specific
- transport protocol
- acc module:
- -----------
- - radius and sql support integrated in this module; you need to
- recompile to enable it
- - acc_flag is now called log_flag to better reflect it relates
- to the syslog mode (as opposed to sql/radius); for the same
- reasons, the accounting action is now called "acc_log_request"
- and the option for missed calls "log_missed_calls"
- - log_fmt allows now to specify what will be printed to syslog
- auth module:
- ------------
- - auth module has been split in auth, auth_db, auth_radius, group
- group_radius, uri and uri_radius
- - all the parameters that were part of former auth module are now
- part of auth_db module
- - auth_db module contains all functions needed for database
- authentication
- - auth_radius contains functions needed for radius authentication
- - group module contains group membership checking functions
- - group_radius contains radius group membeship checking functions
- - is_in_group has been renamed to is_user_in and places to groups
- module
- - check_to and check_from have been moved to the uri module
-
- im module:
- ----------
- - im is no longer used and has been obsoleted by TM
- exec module:
- ------------
- - exec_uri and exec_user have been obsoleted by exec_dset;
- exec_dset is identical to exec_uri in capabilities; it
- additionaly passes content of request elements (header
- fields and URI parts) in environment variables; users of
- exec_user can use exec_dset now and use the "URI_USER"
- variable to learn user part of URI
- - exec_dset and exec_msg return false, if return value of
- script does not euqal zero
- - exec_dset takes an additional parameter, which enables
- validation of SIP URIs returned by external application
- jabber module:
- --------------
- - presence support for Jabber users is enabled loading the PA
- module and using handle_subscribe("jabber") for SUBSCRIBE
- requests to jabber user
- msilo module:
- -------------
- - m_store has now a parameter to set what should be considered
- for storing as destination uri. This enables support for saving
- the messages on negative replies.
- radius_acc module:
- ------------------
- - radius_acc module has been removed and radius accounting
- is now part of acc module
- registrar/usrloc modules:
- -------------------------
- - multi domain support, the modules user username@domain as AOR
- if enabled
- - descent modification time ordering of contacts
- - case sensitive/insensitive comparison of URI can be enabled
- rr module:
- ----------
- - addRecordRoute has been replaced with record_route
- - rewriteFromRoute has been replaced with loose_route()
- - a new option, "enable_full_lr" can be set to make life
- with misimplemented UAs easier and put LR in from "lr=on"
- - rr module can insert two Record-Route header fields when
- necesarry (disconnected networks, UDP->TCP and so on)
- tm module:
- ----------
- - t_reply_unsafe, used in former versions within reply_routes,
- is deprecated; now t_reply is used from any places in script
- - t_on_negative is renamed to t_on_failure -- the old name just
- caused too much confusion
- - FIFO t_uac used by some applications (like serweb) has been
- replaced with t_uac_dlg (which allows easier use by dialog-
- oriented applications, like click-to-dial)
- - if you wish to do forward to another destination from
- failure_route (reply_route formerly), you need to call t_relay
- or t_relay_to explicitely now
- - t_relay_to has been replaced with t_relay_to_udp and t_relay_to_tcp
|