Asterisk libss7

  • libss7 works great if you have the right hardware and configuration setup. It has done millions of calls without a reset.
  • Digium offers proffesional support if you are having grief getting your setup to work.
  • The ss7 mailing list ( is a good way to discuss ss7 related issues. Sometimes chan_ss7 is also discussed and should not be confused with libss7.

Compiling and Configuring libss7

Current Stable libss7

  • svn co libss7
  • svn co asterisk-1.6.0
  • svn co dahditools
  • svn co dahdilinux

Compile all the above folders with the usual compile routines.

Configuration files

  • /etc/dahdi/system.conf
    • Define the bchan(bearer traffic channel) and the mtp2(ss7 channel) channels.

  • /etc/asterisk/chan_dahdi.conf
    • ss7type = ansi ; itu or ansi if you are using an ANSI link
    • signalling = ss7
    • ss7_called_nai=dynamic
    • ss7_calling_nai=dynamic
    • networkindicator=national
    • linkset = 1
    • pointcode = 1-1-1 (this is the * point code — what is SS7 Point Code see this. )
    • defaultdpc = 1-1-2 (this is the far side, what your cics will use to talk to)
    • adjpointcode = 1-1-3 (this is the itp or whatever you are directly connected too)
    • sigchan = 25 (this is the mtp2 channel you have defined above)
    • cicbeginswith=1 ( this is the number of the first cic/bearer channel. This will need to be agreed on by you and your carrier)
    • channel => 1-24 ( this is like a regular setup, just defining your channels)

Kernel Tuning

  • Its very important that your kernel is not moving the t1 card from processor to processor.
  • There is a performance gain since the kernel caches traffic.
    • To fix this, find which IRQ your card is on
"grep wct /proc/interrupts "
16: 11923180 763489610 11761379 12549716 12260535 11982239 12694876 12217119 IO-APIC-fasteoi uhci_hcd:usb4, wct4xxp
19: 530868665 259944923 14898428 13035053 13324170 13602958 12890203 13367733 IO-APIC-fasteoi uhci_hcd:usb2, ahci, wct4xxp
Notice that irq 16 and irq 19 both have digium t1 cards.
We will tell 16 to use processor 3 and 19 to use processor 4.
"echo "3" > /proc/irq/16/smp_affinity"
"echo "4" > /proc/irq/19/smp_affinity"
Add the echo commands to rc.local or some other file that gets run when the box is restarted.

SS7 Commands

  • help ss7 ( shows all the ss7 commands available )

SS7 tips

  • Make sure your cics line up
  • You may need to block and unblock all the channels to get them to come up in service.
  • On "Nortel" you may need to BSY then RTS the trunks to get them to come up.

Call Redirection

There is a way to redirect your call back to the calling switch instead of keeping the media in your path.
Here is a sample:

exten => _X.,1,Set(_SS7_LSPI_IDENT=ON)
exten => _X.,n,Set(_SS7_RLT_ON=YES)
exten => _X.,n,Answer()
exten => _X.,n,Playback(demo-congrats)

<Do your database lookup here and than redirect the call
back to the ss7 switch based on your lookup results
and drop out of the media path>

exten => _X.,n,Dial(DAHDI/r2/8005551212,30)
exten => _X.,n,Hangup()


  • Current Stable only supports one server per point code.
  • Many new ss7 commands and features are available in unstable but have not been fully tested. If you can help test please do so.
  • To get failover you will need multiple point codes and properly configured boxes.

Other Howto Documents


Alternate release of libss7 with additional features

  • svn co chan_dahdi
  • svn co libss7


  • One of the most wanted options is many boxes with one point code. This will provide redundant and lots more bearer traffic options.


Original Help File

[ Native asterisk ss7 support, like libpri.

I have received many requests lately for a more current document
describing how to setup Asterisk with SS7 support. The following email
will hopefully suffice. The contents of this are also contained in the
README file in libss7 as well as inside Asterisk-trunk in the
doc/ss7.txt file.

To Use:
In order to use libss7, you must get at least the following versions of
Zaptel, libss7, and Asterisk (you might also want to get libpri):
Zaptel: 1.4.x
Asterisk: trunk
libss7: trunk (currently, there *only* is a trunk release).

You must then do a `make; make install` in each of the directories that
you installed in the given order (Zaptel first, libss7 second, and
Asterisk last).

NOTE: In order to check out the code, you must have the subversion
client installed. This is how to check them out from the public
subversion server.

These are the commands you would type to install them:

svn co zaptel-1.4
cd zaptel-1.4
make; make install

svn co libss7-trunk
cd libss7-trunk
make; make install

svn co asterisk-trunk
cd asterisk-trunk
./configure; make; make install;

This should build Zaptel, libss7, and Asterisk with SS7 support.

In the past, there was a special asterisk-ss7 branch to use which
contained the SS7 code. That code has been merged back into the trunk
version of Asterisk, and the old asterisk-ss7 branch has been deprecated
and removed. If you are still using the asterisk-ss7 branch, it will
not work against the current version of libss7, and you should switch to
asterisk-trunk instead.

In zaptel.conf, your signalling channel(s) should be "mtp2" or "dchan" if you don't have a Digium card and your
bearers should be set as "bchan".

In the asterisk-ss7 branch, there is a sample zapata.conf that is
installed which contains sample configuration for setting up an E1 link.

In brief, here is a simple ss7 linkset setup:

signalling = ss7
ss7type = itu           ; or ansi if you are using an ANSI link

linkset = 1             ; Pick a number for your linkset identifier in
			; zapata.conf

pointcode = 28          ; The decimal form of your point code.  If you
			; are using an
                         ; ANSI linkset, you can use the xxx-xxx-xxx 
notation for
                         ; specifying your linkset pointcode.
adjpointcode = 2        ; The point code of the switch adjacent to your
			; linkset

defaultdpc = 3          ; The point code of the switch you want to send
			; your ISUP
                         ; traffic to.  A lot of the time, this is the
			; same as your
                         ; adjpointcode.

; Now we configure our Bearer channels (CICs)

cicbeginswith = 1       ; Number to start counting the CICs from.  So if
			; Zap/1 to Zap/15 are CICs 1-15, you would set
			; this to 1 before you
                         ; declare channel=1-15

channel=1-15            ; Use Zap/1-15 and assign them to CICs 1-15

cicbeginswith = 17      ; Now for Zap/17 to Zap/31, they are CICs 17-31
			; so we initialize
                         ; cicbeginswith to 17 before we declare those
			; channels

channel = 17-31         ; This assigns CICs 17-31 to channels 17-31

sigchan = 16           ; This is where you declare which Zap channel is
			; your signalling
                         ; channel.  In our case it is Zap/16.  You can
			; add redundant
                         ; signalling channels by adding additional
			; sigchan= lines.

; If we want an alternate redundant signalling channel add this

sigchan = 48            ; This would put two signalling channels 
in our 				; linkset, one at Zap/16 and one at Zap/48 which
			; both would be used to send/receive
                         ; ISUP traffic.

; End of zapata.conf

This is how a basic linkset is setup. For more detailed zapata.conf SS7
config information as well as other options available for that file, see
the default zapata.conf that comes with the samples in asterisk. If you
would like, you can do a `make samples` in your asterisk-trunk directory
and it will install a sample zapata.conf for you that contains more
information about SS7 setup.

Matthew Fredrickson
Software/Firmware Engineer
Digium, Inc.
Created by: cervajs, Last modification: Sat 06 of Nov, 2010 (01:14) by admin
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+