– Kamailio SIP Server –

Table of Contents

OpenSER - Frequently Asked Questions

This wiki is in most of the cases valid for old versions of Kamailio, for newer versions check:

Q: What is OpenSER?

A: OpenSER is a project spawned from FhG FOKUS SIP Express Router (SER) v0.9.3.

The following text is from the old “about” page of openser.org:
“OpenSER is a project spawned from FhG FOKUS SIP Express Router (SER). The reason for this new venture is the lack of progressing and contributions to the SER project from the other SER team members as well as the reticience to new contributions from project's community members. We want to accelerate the integration of public contributions to the SER project.
OpenSER promotes a new management policy (OPEN) -for new code acceptance and code-through propagation- and development approach -design and architecture. We have decided to bring more dynamics into SIP world by creating this new project that can benefit of TLS and so many other contributions. We welcome your contributions to the success of this project.
The project is managed by three of SER developers. You all like SER so we will do our best to maintain our exiting work and help the users of our solutions. We will therefore maintain close contacts with our former colleagues and SER project.
Bogdan, Daniel and Ramona”

Note that this quote is rather old, and now the situation is to some degree different. This text is also not available any more on the openser webpage. It is here listed to provide some historical background for people that are new to this project.

Please visit this link to get more informations about the history of the project.

Q: Is my config from SER compatible with OpenSER?

A: Yes, the config from SER can be used with OpenSER, just change the paths accordingly. Note that the config file from OpenSER may not be compatible with SER since there are many extensions specific for OpenSER (like return() and exit()).

Q: Is the database structure used by SER 0.9.x the same as for OpenSER 0.9.x ?

A: There is a difference in the tables 'location' and 'aliases'. A new column must be added, having the following definition:

socket varchar(128) default NULL

Q: What is the stack OpenSER uses?

A: It does not use a standalone stack, it is a dedicated parser designed for speed.

Q: I use 'make all', but I can't get the mysql.so. How can I get this?

A: Use:

make modules include_modules=“mysql”

make install include_modules=“mysql”

mysql module is not compiled/installed by default because it depends on
an external library (libmysqlclient)

This is also the reason why openser_mysql.sh does not get installed.


I had the same issue. did the following, and the module was create:

make install include_modules=“db_mysql”

-Kareem Hamdy


Q: I get the following error: "new_connection: Can't connect to local MySQL server through socket '/.../mysql.sock'". What is wrong?

A: Your mysql client is using a different socket than the one the mysql server is listening to. You have to check mysql config file and make sure that the socket files are the same. For more about the mysql config, see:

http://dev.mysql.com/doc/refman/5.0/en/option-files.html

The “socket” in [client] section must be set to the same value as in [mysqld] section.

Q: I get the following error: ":mysql:db_mysql_new_connection: driver error: Access denied for user 'openser'@'localhost' to database 'openser_1_3'".

A: You need to have a look at the mysql database install script which builds an database called 'openser' or _better_ adjust all lines in openser.cfg from openser_1_3 to openser

Q: What are the modules that are not compiled by default?

A: You can see the list in 'Makefile', in the variable 'exclude_modules'. The list includes modules depending on external libraries or modules that are not stable yet.

Default excluded modules are: auth_radius avp_radius cpl-c group_radius jabber mysql pa postgres uri_radius.

Q: Who is responsible for releasing AVPs at the end of a transaction? My module is adding AVPs with string values and I don't know if the strings are being released or not.

A: TM modules takes care and will destroy all AVPs associated with the transaction. Everything is done automatically. If you want to destroy an AVP before transaction ends, use avp_delete().

Q: What are pseudo-variables?

A: A pseudo-variable is a special token that can be used inside the parameters of some functions and it is replaced with a value before the execution of that function. A pseudo-variable can refer to the value of an avp, body of a header, part of SIP message or other variables from system.

For more see: http://kamailio.org/docs/pseudo-variables.html

Q: How can I set permissions of the fifo or socket?

A: Use the sock_user, sock_group and sock_mode global configuration parameters.

Q: Is it possible to reload OpenSER's configuration file with a signal?

A: No. To reload the configuration file, OpenSER must be restarted.

Q: Are there Open Source Clients that support jabber and SIP?

A: Absolutely. Ekiga (http://ekiga.org), Twinkle (http://www.twinklephone.com), KPhone and many others are available for SIP support. Gaim and psi support Jabber, as do many other open-source clients.

Q: How do I generate the phplib_id/ha1 for subscribers?

A: There are a couple of methods:

  1. openser_gen_ha1 username realm password
  2. create an MD5 hash as “username:realm:password”
  3. openser_gen_ha1 is deprecated, you can use instead: echo -n 'user:realm:password' | md5sum | awk '{ print $1 }'

Q: How about the ha1b?

A: You will need to create an MD5 hash as:

   "username@realm:realm:password"

Q: How do I avoid Reverse-DNS-Lookups?

A: Simply not use src_ip = “11.22.33.44” and use instead src_ip = 11.22.33.44! We had in our installation some serious trouble with requests coming from systems, where the hostname could not be reverse resolved (the DNS-Server responsible for this IP-Range was poorly configured and would not answer at all).

Q: What does "ERROR: sip_msg_cloner: cannot allocate memory" and "ERROR: new_t: out of mem:" mean? ...and how do I fix them?

A: Those error messages pop up when you run out of shared memory.
The easiest way to “fix” the problem is to increase the shared memory that openser is allowed to use.
By default, I believe openser uses 32 megs of shared memory. You need to pass the “-m MEGS” flag to openser.

   Using OpenserCtl: 
   Edit your openserctl script and add "-m 128" ( or however much ram you wish to allocate, 
   this example is 128 MEGABYTES of ram ) to the line that contains "STARTOPTIONS="... this example would be:
        STARTOPTIONS="-m 128"

Q: It is possible to change the log level of certain messages, e.g. only for RADIUS?

A: No, unfortunately not, if the module don't provide this ability.
The only way to change this at the moment is to go to the source. But you can change the log level of the server with some fifo commands during runtime, and also for certain operations in the config script. Take a look at the core cookbook for further informations.

Q: Is OpenSER a B2BUA? Can you tell me a B2BUA for OpenSER?

A: OpenSER is not a B2BUA, only a flexible SIP Router.
Either use Asterisk, Callweaver or OpenSER with SEMS (writing your own B2BUA application within SEMS).

You could also try WeSIP, Yate or FreeSWITCH.

Q: I can add exactly one user to the db. Also, trying to delete that one user with openserctl hangs.

A: Check if you have installed the serweb tables. If yes, you have to set HAS_SERWEB=“yes” in your openserctlrc. This should fix the problem.

Q: ERROR:core:bind_dbmod: module XXXX does not export db_use_table function?

A: This means that you've spelled the driver string wrong and the driver module could not be loaded. Valid driver strings are “mysql”, “postgres”, “unixodbc”, “berkeley” and “text” for the respective database modules.

Q: ERROR: Invalid table version of XXXX table error?

A: This means that the module the version of your database scheme don't match to the version of openser. Reinstall the database tables with the setup provided script.

Q: ERROR:acc:init_acc_rad: failed to open radius config file: /usr/local/etc/radiusclient-ng/radiusclient.conf when starting

A: OpenSER could not find the radius configuration for the acc module. If you don't need this then just disable the radius support in the module. Add the line modparam(“acc”, “radius_config”, “”) to your configuration.

Q: ERROR: Error opening OpenSER's FIFO /tmp/openser_fifo when using openserctl

ERROR: Error opening OpenSER's FIFO /tmp/openser_fifo
ERROR: Make sure you have the line 'modparam(“mi_fifo”, “fifo_name”, “/tmp/openser_fifo”)' in your config
ERROR: and also have loaded the mi_fifo module.

A: The OpenSER control tools could not connect to the FIFO interface. Check if your configuration loads the mi_fifo module and configures a fifo name. Example for the configuration syntax:
loadmodule “mi_fifo.so” modparam(“mi_fifo”, “fifo_name”, “/tmp/openser_fifo”)

Q: SIP requests are replied with "483 Too Many Hops" or "513 Message Too Large"

A: In both cases, the reason is probably an error in request routing script which caused an infinite loop. You can easily verify whether this happens by watching SIP traffic on loopback interface. A typical reason for misrouting is a failure to match local domain correctly. If a server fails to recognize a request for itself, it will try to forward it to current URI in believe it would forward them to a foreign domain. Alas, it forwards the request to itself again. This continues to happen until value of the max_forwards header field reaches zero or the request grows too big. The solutions is easy: make sure that domain matching is correctly configured. A quick way to achieve that is to introduce a config option to kamailio.cfg: alias=domainname, where domainname shall be replaced with name of domain, which you wish to server and which appears in request-URIs.

Troubleshooting Stuff