[SR-Users] Kamailio and Asterisk integration

Alex Balashov abalashov at evaristesys.com
Sun Nov 13 10:26:34 CET 2011


Roman,

On 11/12/2011 11:18 PM, roman dmytriv wrote:

> Using it to deliver IP voice from one person to the other.
>
> What can be accomplished using these two scenarios and what are
> fundamental differences?

The reason I am giving you nebulous, seemingly intractable responses 
to your questions, in this thread and the other, is because I am 
encouraging you to habituate your mind to a slightly different mode of 
thinking that is more appropriate to the sort of thing that Kamailio is.

In this case, you should really decide what it is that you want to 
provide and then reason backward to the appropriate tools for it.  It 
is true that to do that, you must first know what it is that can be 
provided, in principle, but the way to do that is to learn how VoIP 
networks and application services are built in general, conceptually. 
  Kamailio does have some highly specific features appropriate to 
certain situations, but fundamentally, it is a particular kind of 
building block, but a very amorphous one.

What I can tell you with great certainty is that combining elements 
like Asterisk as an end in itself--that is, purely for the sake of 
doing so--is a pointless waste of time, and you should first decide 
what you want to provide and then determine if it is appropriate to do 
that, not decide to combine them and think about what can be done with 
that.  Integration is a task full of specific details tailored to the 
intended result;  you can't (usefully) generically integrate, in an 
undifferentiated, unspecialised sort of way.

Kamailio is a SIP proxy at its core, though it has some SIP server 
features of which it is the logical endpoint, such as the registrar 
and presence server.  It has also acquired some light UAC 
functionality of late, such as handling registrations and digest 
authentication, etc.  In addition, it is well-suited for translation 
between various SIP transports, and as a gateway to some other 
protocols such as XMPP.

You may have noticed by now that Kamailio is driven by a programmatic 
route script, and that rather SIP message handling is presented within 
this script in a rather low-level way that requires an understanding 
of the fundamentals of SIP protocol mechanics, as well as its various 
state machines.

This aspect of Kamailio makes it rather like an SDK or a framework in 
many ways.  Yes, it's driven by a proxy and UAS core, but the user 
really scripts their desired SIP outcomes in a detailed way for 
virtually every type of message, though some are more automatically 
handled than others.  In this sense, Kamailio is not like Asterisk at 
all;  Asterisk is an application with a great deal of pre-determined, 
built-in functionality, and you can turn it on with just a few 
configuration file changes.  Kamailio's not really like that, although 
the packaged, stock config file has been getting more and more 
user-friendly I suppose.  Even then, Asterisk has a myriad of 
integration paths and scriptable possibilities (dial plan, AGI, AMI, 
etc.) that leave the question of what can be done with it somewhat 
open, but it is definitely an easier question to answer than for Kamailio.

So, the question of what can be done with Kamailio, or even the ways 
in which a Kamailio server can accessorise or enhance an Asterisk 
element, really is a very open-ended one.  It is a challenge of 
imagination; there are literally at least thousands of logically 
possible ways to combine these two things, just as there are lots of 
ways that Asterisk+a2billing and Kamailio can interact.  What you need 
to ask yourself is: why do I want to combine them?  Where did you get 
this idea?  Did someone tell you?  Did you find a page about 
integration on the web?  If so, what were you searching for?  Why? 
What is the problem you are trying to solve?  What do you want to 
accomplish?

Perhaps the answers to these questions can flesh out some sort of 
broad underlying purpose, some thematic continuity.

Certainly, there are some "typical" ways in which Asterisk and 
Kamailio are often combined:

- Load balancer: with judicious use of a database or IPC mechanism, 
applications delivered on Asterisk can be horizontally scaled across N 
nodes by putting a round-robin load balancer in front of them--a task 
for which Kamailio's "dispatcher" module is very well-suited.

- Centralised registrar: large numbers of endpoints can be 
concentrated in one server and serviced by multiple Asterisk servers.

- Carrier interface: business layer of outbound dialing from Asterisk 
servers (e.g. LCR) can be handled by Kamailio.

- Core platform router: a Kamailio proxy can route calls to 
application-specific Asterisk feature servers like voicemail, 
conferencing, etc.

And many others.

But really, none of those represent essential or rigourous answers to 
your question.  They just impose certain premeditated scenarios that 
may or may not be appropriate to what you want to accomplish, and 
simply answering with a few examples under the heading of "here's what 
you can do" would do you a disservice by limiting the paradigms in 
which you are thinking.

Kamailio does have some very specific features useful to meet very 
concrete requirements, once you've decided what you want to do 
broadly.  You can get an overview here:

    http://www.kamailio.org/w/features/

And you can take a look at the various available modules here:

    http://www.kamailio.org/docs/modules/3.2.x/

Some of these modules are de facto "core", in the sense that while 
they are not formally part of the server core, they are likely to be 
essential dependencies of any practical or commonplace use of 
Kamailio.  These include 'tm', 'sl', 'rr', 'pv', 'xlog, etc.  Some of 
these modules primarily exist to export APIs or generic mechanisms to 
other modules that use them in specific ways that expose functionality 
to the end-user, such as 'usrloc' and 'pua'.  And some others of these 
modules provide very concrete features.  For instance:

- dispatcher: Various kinds of load balancing/distribution.
- pipelimit: Rate limiting.
- drouting & lcr: Some dynamic routing structures.
- nathelper & rtpproxy: Far-end NAT traversal fixups and dynamic 
control of external third-party RTP relays.
- memcached & ndb_redis: Support for Memcached and Redis key-value stores.
- db_mysql/postgres/unixodbc/oracle & sqlops: Support for SQL 
interaction with various relational databases.
- dialog: Make the proxy statefully aware of dialogs, not just 
transactions, which is useful in limiting number of concurrent calls, etc.
- geoip: Integration with Max Mind GeoIP database for regional 
identification of IP addresses.
- xhttp: Integrated HTTP server.

... and a whole lot more.

You really need to decide what it is you want to do.  These modules 
provide interesting possibilities, but they are, for the most part, 
implementation details subsumed under larger architectural and service 
delivery objectives.  In other words, as a methodological matter it 
would be quite uncommon to say: "Oh, Kamailio has a GeoIP module, so 
now I've figured out what I want to provide!"  You could have 
implemented "geo IP" in some other way if you wanted, even if the 
module didn't exist;  Kamailio's route script is very flexible and 
quite evolved at this point, and offers many types of connectors, 
integration paths, API hooks, management interfaces, etc.

You have to have some idea of what you want to do first.  I suggest 
educating yourself about the basic principles of VoIP networks and how 
services are built.  I would learn about:

- The purpose of the SIP protocol, in the context of the history of 
telephony and signaling.

- SIP protocol structure, syntax, etc.

- Types of SIP network elements: UACs, UASs, proxies, registrars, 
B2BUAs, SBCs, and what they all do.

- RTP, media and codecs.

- PSTN interworking, billing, rating, etc.

- Various types of application backends, i.e. open-source like 
Asterisk, FreeSWITCH, SEMS (SIP Express Media Server), etc., and some 
proprietary approaches like VoiceXML and ccXML -- you should be aware 
of them, at least.

Then, I would come back to Kamailio with a greater understanding of 
the "big picture" of what it is and ask: what can it do for me 
generally and specifically?  Generally in terms of being a proxy+UAS, 
and specifically in terms of the modules and higher-level features it 
offers.

-- Alex

-- 
Alex Balashov - Principal
Evariste Systems LLC
260 Peachtree Street NW
Suite 2200
Atlanta, GA 30303
Tel: +1-678-954-0670
Fax: +1-404-961-1892
Web: http://www.evaristesys.com/



More information about the sr-users mailing list