Kamailio module

From 탱이의 잡동사니
Jump to navigation Jump to search

Overview

Kamailio module들 내용 설명

Dispatcher

Kamailio 에서 트래픽 로드 밸런싱을 수행할 수 있는 모듈이다.

ETC

Kamailio 4.4.7 버전에서 이슈가 있었다. 새롭게 Asteri

Dispatcher 모듈에 여러개의 Asterisk IP 가 설정되어 있는 상황에서, 어느 하나의 IP 가 flag 4(Disabled) 로 설정되게 되면 정상적으로 로드 밸런싱을 수행하지 않는 문제가 있었다.

HTABLE

This module adds a hash table container to the configuration language. The hash table is stored in shared memory and the access to it can be done via pseudo-variables: $sht(htname=>name). The module supports definition of many hash tables and can load values at startup from a database table.

RPC Commands

htable.get htable key

Lists one value in a hash table.

Parameters

  • htable: Name of the hash table to dump.
  • key: Key name of the hash table value to dump.

Example

...
# Dump $sht(students=>alice)
kamcmd htable.get students alice

# Dump first entry in array key course $sht(students=>source[0])
kamcmd htable.get students course[0]
...

htable.delete htable key

Delete one value in a hash table.

Parameters

  • htable: Name of the hash table to delete.
  • key: Key name of the hash table value to delete.

Example

...
# Delete $sht(student=>alice)
kamcmd htable.delete students alice

# Delete first entry in array key course $sht(students=>course[0])
kamcmd htable.delete students course[0]

htable.sets htable key value

Set an item in hash table to string value.

Parameters

  • htable: Name of the hash table.
  • key: Key name in the hash table.
  • value: String value for the item.

Example

...
# Set $sht(test->x) as string
kamcmd htable.sets test x abc

# Set first entry in array key x $sht(test=>x[0]) as string
kamcmd htable.sets
...

htable.seti htable key value

Set an item in hash table to integer value.

Parameters

  • htable: Name of the hash table.
  • key: Key name in the hash table.
  • value: Integer value for the item.

Example

...
# Set $sht(test=>x) as integer
kamcmd htable.seti test x 123

# Set first entry in array key x $sht(test=>x[0]) as integer
kamcmd htable.seti test x[0] 123

htable.dump htable

Lists all the values in a hash table.

Parameters

  • htable: Name of the hash table to dump.

Example

...
kamcmd htable.dump ipban
...

htable.reload htable

Reload hash table from database

Parameters

  • htable: Name of the hash table to reload.

Example

kamcmd htable.reload ipban

htable.flush htable

Empty the hash table.

Parameters

  • htable: Name of the hash table to flush.

Example

kamcmd htable.flush ipban

htable.listTables

Lists all defined tables.

Example

$ sudo kamcmd htable.listTables
{
	name: ipban
	dbtable: 
	dbmode: 0
	expire: 300
	updateexpire: 1
	size: 256
	dmqreplicate: 0
}

htables.stats

Get statistics for hash tables - name, number of slots, number of items, max number of items per slot, min number of items per slot.

Example

$ sudo kamcmd htable.stats
{
	name: ipban
	slots: 256
	all: 0
	min: 0
	max: 0
}

MAXFWD

Max-Forward SIP header 와 관련된 기능을 수행할 수 있는 모듈이다.

The SIP Max-Forward header is used to prevent loops in a SIP network. Every server that process and forward a SIP request lowers the Max-Forward value with one. When the value reaches zero, the request is not forwarded and an error response is sent to the UAC.

Parameters

max_limit(integer)

Set an upper limit for the max-forward value in the outgoing requests. If the header is present, the decremented value is not allowed this max_limits - if it does, the header value will by decreased to "max_limit". This check is done when calling the maxfwd_process() function.

The range of values stretches from 1 to 256, which is the maximum MAX-FORWARDS value allowed by RFC 3261. The value can be changed at runtime.

Default value is "70"

modparam("maxfwd", "max_limit", 32)

Functions

maxfwd_process(max_value)

If no Max-Forward header is present in the received request, a header will be added having the original value equal with "max_value". If a Max-Forward header is already present, its value will be decremented(if not 0). The parameter can be a variable.

This function can be used from REQUEST_ROUTE.

Variables

  • max_value: Value to be added if there is no Max-Forward header field in the message.

Return code

  • 2 (true): header was not found and a new header was successfully added.
  • 1 (true): header was found and its value was successfully decremented (had a non-0 value).
  • -1(false): the header was found and its value is 0(cannot be decremented).
  • -2(false): error during processing.

The return code may be extensivly tested via script variable "retcode" (or "$?").

...
# initial sanity checks --- messages with
# max_forwards==0, or excessively long requests
if (!maxfwd_process("10") && $retcode==-1) {
  sl_send_reply("483", "Too Many Hops");
  exit;
};
...

mf_process_maxfwd_header(max_value)

Same as maxfwd_process(max_value).

SANITY

This module aims to implement several sanity checks on incoming request which are suggested or even required by a RFC.

These checks are not required by Kamailio itself for its functionality. But on the other side it does not make much sense if a broken request traverses through a SIP network if it is rejected sooner or later by a SIP device any way. As every sanity check cost extra performance because of additional parsing and evaluation it is with this module now up to the Kamailio administrator what checks should be done on which request.

Functions

sanity_check([msg_checks [, uri_checks]])

This function makes a row of sanity checks over the given SIP request. The behavior of the function is also controlled by autodrop parameter. If autodrop=0, the function returns false (-1) if one of the checks failed. When autodrop=1, the function stops the execution of configuration file. In both cases, if one of checks fails the module sends a precise error reply via SL send_reply(). Thus there is no need to reply with a generic error message.

Optionally the function takes an integer argument which overwrites the global module parameter default_checks. This makes it possible to run certain tests from script region. The integer value is again the sum of the checks (like for the module parameter) which should be executed at this function call.

Optionally the function takes a second integer argument which overwrites the global module parameter uri_checks and thus determines which URIs will be checked if the parse uri test will be executed.

Example

if(!sanity_check("17895", "7")) {
  xlog("Malformed SIP message from $si:$sp\n");
  exit;
}

SL

SL 모듈을 이용하면 Kamailio 를 stateless UA server 로 사용할 수 있도록 해준다.

The SL module allows the SIP server to act as a stateless UA server and generate replies to SIP requests without keeping state. That is beneficial in many scenarios, in which you wish not to burden server's memory and scale well.

The SL module needs to filter ACKs sent after a local stateless reply to an INVITE was generated. To recognize such ACKs, Kamailio adds special "signature" in to-tags. This signature is sought for in incoming ACKs, and if included the ACKs are absorbed.

To speed up the filtering process, the module uses a timeout

Functions

sl_send_reply(code, reason)

For the current request, a reply is sent back having the given code and text reason. The reply is sent stateless, totally independent of the Transaction module and with no retransmission for the INVITE's replies.

If the code is in the range 300-399 (redirect reply), the current destination set is appended to the reply as Contact header. The destination set contains the request URI(R-URI), if it is modified compared to the received one, plus the branches added to the request(e.g., after an append_branch() or lookup("location")). If the R-URI was changed but it is not desired to be part of the destination set, it can be reverted using the function revert_uri().

Custom headers to the reply can be added using append_to_reply() function from textops module.

Parameters

  • code: Return code
  • reason: Reason phrase

Example

sl_send_reply("404", "Not found");