Goal (short description)

H.323 (dimitris), SCCP (misi), IAX

The goal is connect hardphones to Asterisk PBX using SCCP http://en.wikipedia.org/wiki/Skinny_Client_Control_Protocol
Available Asterisk sccp channels:

This example is using chan_sccp

Applicability

Using Skinny Call Control Protocol and Cisco Hardphones 79XX. Phone with SCCP software image what are connected to Asterisk PBX.

Prerequisites (OS, dependencies on other software)

Configuration (OS agnostic)

download and untar and compile ftp://ftp.berlios.de/pub/chan-sccp/chan_sccp-20060408.tar.bz2

pbx:/tmp/chan_sccp-20060408# make
sh ./create_config.sh "/usr/include"
Checking Asterisk version...
Build PARK functions (y/n)[n]?y
Build PICKUP functions (y/n)[n]?y
 * found 'struct ast_channel_tech'
 * found 'ast_bridged_channel'
 * found 'struct ast_callerid'
 * found 'AST_MAX_CONTEXT'
 * found 'MAX_MUSICCLASS'
 * found 'AST_MAX_ACCOUNT_CODE'
 * found 'AST_CONTROL_HOLD'
 * found 'ast_config_load'
 * found 'ast_copy_string'
 * found 'AST_FLAG_MOH'
 * found endian.h
 * found strings.h
 * found new ast_app_has_voicemail
 * found new ast_get_hint
 * found new devicestate.h
 * found AST_DEVICE_RINGING
 * found 'ast_group_t'
 * found 'ast_app_separate_args'
 * found AST_EXTENSION_RINGING
config.h complete.
Now compiling .... chan_sccp.c          1507 lines
Now compiling .... sccp_actions.c       1427 lines
Now compiling .... sccp_channel.c       1050 lines
Now compiling .... sccp_device.c        875 lines
Now compiling .... sccp_line.c          112 lines
Now compiling .... sccp_utils.c         1486 lines
Now compiling .... sccp_pbx.c           824 lines
Now compiling .... sccp_cli.c           641 lines
Now compiling .... sccp_softkeys.c      306 lines
Now compiling .... sccp_socket.c        342 lines
Now compiling .... sccp_indicate.c      302 lines
Linking chan_sccp.so
pbx:/tmp/chan_sccp-20060408# make install
sh ./create_config.sh "/usr/include"
Linking chan_sccp.so
Now Installing chan_sccp.so
Chan_sccp is now installed
Remember to disable chan_skinny by adding the following
line to /etc/asterisk/modules.conf:
noload => chan_skinny.so
pbx:/tmp/chan_sccp-20060408#

Modify /etc/asterisk/modules.conf in section [modules] to unload Asterisk built in module chan_skinny and instead load module chan_sccp

modules.conf

[modules]
noload => chan_skinny.so
load => chan_sccp.so

Copy and Edit example configuration files

Copy configuration file sccp.conf what can be found in in directory conf

pbx:/tmp# ls -al chan_sccp-20060408/conf/
összesen 24
drw-r--r-- 2 root root 4096 2006-03-12 23:55 .
drwxr-xr-x 5 root root 4096 2007-05-12 13:05 ..
-rw-r--r-- 1 root root  894 2006-01-25 20:28 7960-tones.xml
-rw-r--r-- 1 root root 7684 2006-04-08 14:21 sccp.conf
-rw-r--r-- 1 root root  800 2006-01-25 20:28 XMLDefault.cnf.xml

Copy and edit 7960-tone.xml and XMLDefault.cnf.xml files to your tftp server root directory.
My example configuration file:

XMLDefault.cnf.xml

<Default>
 <callManagerGroup>
  <members>
   <member  priority="0">
    <callManager>
     <ports>
      <ethernetPhonePort>2000</ethernetPhonePort>
     </ports>
     <processNodeName>192.168.0.1</processNodeName>
    </callManager>
   </member>
  </members>
 </callManagerGroup>
 <loadInformation6  model="IP Phone 7910"></loadInformation6>
 <loadInformation124  model="Addon 7914">S00104000100</loadInformation124>
 <loadInformation9  model="IP Phone 7935"></loadInformation9>
 <loadInformation8  model="IP Phone 7940">P00307020400</loadInformation8>
 <loadInformation7  model="IP Phone 7960">P00307020400</loadInformation7>
 <loadInformation20000  model="IP Phone 7905"></loadInformation20000>
 <loadInformation30008  model="IP Phone 7902"></loadInformation30008>
 <loadInformation30007  model="IP Phone 7912"></loadInformation30007>
 <userLocale>
  <name>Hungarian_Hungary</name>
  <langCode>hu</langCode>
 </userLocale>
 <networkLocale>Hungary</networkLocale>
 <idleTimeout>0</idleTimeout>
 <authenticationURL></authenticationURL>
 <directoryURL>http://192.168.0.1/directory/cm.php</directoryURL>
 <idleURL></idleURL>
 <informationURL>http://195.111.159.1/GETTeleCasterHelpText.asp</informationURL>
 <messagesURL></messagesURL>
 <proxyServerURL></proxyServerURL>
 <servicesURL>http://195.111.159.1/CCMCIP/getservices.asp</servicesURL>
</Default>

Please change locale settings according your locality. (I am Hungarian.)

Useful Information

DirectoryURL: Application i am using is based on mysql. More info 79XX XML applications http://www.voip-info.org/wiki/view/Asterisk+Cisco+79XX+XML+Services

In this example my asterisk server IP address is 192.168.0.1  and phones are leasing ip addresses from dhcp pool 192.168.0.0/24.
I tested it with 3 type of phone Cisco 7910, 7960 and 7940 with 7914 addon panel.
You must set a phone type to 7914 and give the 7940 SEP MAC address which is connected to the panel, in case you want to use a 7914 addon panel. And create as many speeddial lines.

modules.conf

; (SCCP*)
;
; An implementation of Skinny Client Control Protocol (SCCP)
;
; Sergio Chersovani (mlists@c-net.it)
; http://chan-sccp.belios.de
;

[general]
servername = Asterisk                   ; show this name on the device registration
keepalive = 60                          ; phone keep alive message evey 60 secs. Used to check the voicemail
debug = 0                                       ; console debug level. 1 => 10
context = sccp
dateFormat = Y.M.D                      ; M-D-Y in any order. Use M/D/YA (for 12h format)
bindaddr = 192.168.0.1                  ; replace with the ip address of the asterisk server (RTP important param)
port = 2000                                     ; listen on port 2000 (Skinny, default)
disallow=all                            ; First disallow all codecs
allow=alaw                                      ; Allow codecs in order of preference
allow=ulaw                                      ;
firstdigittimeout = 16                  ; dialing timeout for the 1st digit
digittimeout = 8                                ; more digits
;digittimeoutchar = #                   ; you can force the channel to dial with this char in the dialing state
autoanswer_ring_time = 1                ; ringing time in seconds for the autoanswer, the default is 0
autoanswer_tone = 0x32                  ; autoanswer confirmation tone. For a complete list of tones: grep SKINNY_TONE sccp_protocol.h
                                                ; not all the tones can be played in a connected state, so you have to try.
remotehangup_tone = 0x32                ; passive hangup notification. 0 for none
transfer_tone = 0                               ; confirmation tone on transfer. Works only between SCCP devices
callwaiting_tone = 0x2d                 ; sets to 0 to disable the callwaiting tone
musicclass=default                      ; Sets the default music on hold class
language=hu                                     ; Default language setting
;accountcode=skinny                     ; accountcode to ease billing
deny=0.0.0.0/0.0.0.0                    ; Deny every address except for the only one allowed.
permit=192.168.0.0/255.255.255.0        ; Accept class C 192.168.1.0
                                                ; You may have multiple rules for masking traffic.
                                                ; Rules are processed from the first to the last.
                                                ; This General rule is valid for all incoming connections. It's the 1st filter.

;localnet = 192.168.0.0/255.255.255.0 ; All RFC 1918 addresses are local networks
;externip = 1.2.3.4                      ; IP Address that we're going to notify in RTP media stream
;externhost = mydomain.dyndns.org   ; Hostname (if dynamic) that we're going to notify in RTP media stream
; externrefresh = 60                    ; expire time in seconds for the hostname (dns resolution)
dnd = on                                        ; turn on the dnd softkey for all devices. Valid values are "off", "on" (busy signal), "reject" (busy signal), "silent" (ringer = silent)
rtptos = 184                            ; sets the default rtp packets TOS
echocancel = on                         ; sets the phone echocancel for all devices
silencesuppression = off                ; sets the silence suppression for all devices
;callgroup=1,3-4                                ; We are in caller groups 1,3,4. Valid for all lines
;pickupgroup=1,3-5                      ; We can do call pick-p for call group 1,3,4,5. Valid for all lines
;amaflags =                             ; Sets the default AMA flag code stored in the CDR record
trustphoneip = no                               ; The phone has a ip address. It could be private, so if the phone is behind NAT
                                                ; we don't have to trust the phone ip address, but the ip address of the connection
tos = 0x68                                      ; call control packets tos (0x68 Assured forwarding)
;earlyrtp = none                                ; valid options: none, offhook, dial, ringout. default is none.
                                                ; The audio strem will be open in the progress and connected state.
private = on                            ; permit the private function softkey
;mwilamp = on                           ; Set the MWI lamp style when MWI active to on, off, wink, flash or blink
;mwioncall = off                                ; Set the MWI on call.
;blindtransferindication = ring ; moh or ring. the blind transfer should ring the caller or just play music on hold
;protocolversion = 3                    ; skinny version protocol. Just for testing. 2 to 6
;cfwdall = off                          ; activate the callforward ALL stuff and softkeys
;cfwdbusy = off                         ; activate the callforward BUSY stuff and softkeys




[devices]

type        = 7910                      ; device type (see below)
autologin   = 3084  ; lines list. You can add an empty line for an empty button (7960, 7970, 7940, 7920)
description = Phone7910                 ; internal description. Not important
;keepalive = 60                          ; set 0 to disable the keepalive check.
;tzoffset  = +1
transfer = on                           ; enable or disable the transfer capability. It does remove the transfer softkey
park = on                                       ; take a look to the compile howto. Park stuff is not compiled by default
;speeddial = 3082,testname1                     ; you can add an empty speedial if you want an empty button (7960, 7970, 7920)
;speeddial = 3077,testname2                  ; speeddial number and name
cfwdall = off                           ; activate the callforward stuff and softkeys
cfwdbusy = off
dtmfmode = inband                               ; inband or outofband. outofband is the native cisco dtmf tone play.
                                                ; Some phone model does not play dtmf tones while connected (bug?), so the default is inband
imageversion = P00405000700             ; useful to upgrade old firmwares (the ones that do not load *.xml from the tftp server)
;deny=0.0.0.0/0.0.0.0                   ; Same as general
permit=192.168.0.0/255.255.255.255      ; This device can register only using this ip address
dnd = on                                        ; turn on the dnd softkey for this device. Valid values are "off", "on" (busy signal), "reject" (busy signal), "silent" (ringer = silent)
trustphoneip = yes                              ; The phone has a ip address. It could be private, so if the phone is behind NAT
                                                ; we don't have to trust the phone ip address, but the ip address of the connection
;earlyrtp = none                                ; valid options: none, offhook, dial, ringout. default is none.
                                                ; The audio strem will be open in the progress and connected state.
private = on                            ; permit the private function softkey for this device
;mwilamp = on                           ; Set the MWI lamp style when MWI active to on, off, wink, flash or blink
;mwioncall = off                                ; Set the MWI on call.
device => SEP0007EB6A9F26               ; device name SEP<MAC>

type        = 7914                      ; device type (see below)
autologin   = 3084  ; lines list. You can add an empty line for an empty button (7960, 7970, 7940, 7920)
description = Phone7940 ; internal description. Not important
;keepalive = 60                          ; set 0 to disable the keepalive check.
;tzoffset  = +1
transfer = on                           ; enable or disable the transfer capability. It does remove the transfer softkey
park = on                                       ; take a look to the compile howto. Park stuff is not compiled by default
;speeddial =                            ; you can add an empty speedial if you want an empty button (7960, 7970, 7920)
speeddial = 3082,name                   ; speeddial number and name
speeddial = 3084,Misi                   ; speeddial number and name
speeddial = 3082,Andras                 ; speeddial number and name
speeddial = 3083,some1                    ; speeddial number and name
speeddial = 3084,12345678901234567890                   ; speeddial number and name (the longest name i can use on 7914 display)
speeddial = 3085,name1                   ; speeddial number and name
speeddial = 3086,name2                   ; speeddial number and name
speeddial = 3087,name3                   ; speeddial number and name
speeddial = 3088,name4                   ; speeddial number and name
speeddial = 3089,name5                   ; speeddial number and name
speeddial = 3080,name6                   ; speeddial number and name
cfwdall = off                           ; activate the callforward stuff and softkeys
cfwdbusy = off
dtmfmode = inband                               ; inband or outofband. outofband is the native cisco dtmf tone play.
                                                ; Some phone model does not play dtmf tones while connected (bug?), so the default is inband
;imageversion = P00405000700            ; useful to upgrade old firmwares (the ones that do not load *.xml from the tftp server)
;deny=0.0.0.0/0.0.0.0                   ; Same as general
permit=192.168.0.0/255.255.255.255      ; This device can register only using this ip address
dnd = on                                        ; turn on the dnd softkey for this device. Valid values are "off", "on" (busy signal), "reject" (busy signal), "silent" (ringer = silent)
trustphoneip = yes                              ; The phone has a ip address. It could be private, so if the phone is behind NAT
                                                ; we don't have to trust the phone ip address, but the ip address of the connection
;earlyrtp = none                                ; valid options: none, offhook, dial, ringout. default is none.
                                                ; The audio strem will be open in the progress and connected state.
private = on                            ; permit the private function softkey for this device
;mwilamp = on                           ; Set the MWI lamp style when MWI active to on, off, wink, flash or blink
;mwioncall = off                                ; Set the MWI on call.
device => SEP0007EB063C19               ; device name SEP<MAC>

type        = 7940                      ; device type (see below)
autologin   = 3077  ; lines list. You can add an empty line for an empty button (7960, 7970, 7940, 7920)
description = dox       ; internal description. Not important
;keepalive = 60                          ; set 0 to disable the keepalive check.
;tzoffset  = +1
transfer = on                           ; enable or disable the transfer capability. It does remove the transfer softkey
park = on                                       ; take a look to the compile howto. Park stuff is not compiled by default
;speeddial =                            ; you can add an empty speedial if you want an empty button (7960, 7970, 7920)
speeddial = 3093,istvan                 ; speeddial number and name
cfwdall = off                           ; activate the callforward stuff and softkeys
cfwdbusy = off
dtmfmode = inband                               ; inband or outofband. outofband is the native cisco dtmf tone play.
                                                ; Some phone model does not play dtmf tones while connected (bug?), so the default is inband
;imageversion = P00405000700            ; useful to upgrade old firmwares (the ones that do not load *.xml from the tftp server)
;deny=0.0.0.0/0.0.0.0                   ; Same as general
permit=192.168.0.0/255.255.255.255      ; This device can register only using this ip address
dnd = on                                        ; turn on the dnd softkey for this device. Valid values are "off", "on" (busy signal), "reject" (busy signal), "silent" (ringer = silent)
trustphoneip = yes                              ; The phone has a ip address. It could be private, so if the phone is behind NAT
                                                ; we don't have to trust the phone ip address, but the ip address of the connection
;earlyrtp = none                                ; valid options: none, offhook, dial, ringout. default is none.
                                                ; The audio strem will be open in the progress and connected state.
private = on                            ; permit the private function softkey for this device
;mwilamp = on                           ; Set the MWI lamp style when MWI active to on, off, wink, flash or blink
;mwioncall = off                                ; Set the MWI on call.
device => SEP001647A86118               ; device name SEP<MAC>

[lines]

id          = 1000                      ; future use
pin         = 1234                      ; future use
label       = 3084                      ; button line label (7960, 7970, 7940, 7920)
description = 3084              ; top diplay description
context     = default
incominglimit = 2                               ; more than 1 incoming call = call waiting.
transfer = on                           ; per line transfer capability. on, off, 1, 0
mailbox = 3084                          ; voicemail.conf (syntax: vmbox[@context][:folder])
vmnum = 7700                                    ; speeddial for voicemail administration, just a number to dial
cid_name = Misi                 ; caller id name
cid_num = 3084
trnsfvm = 7700                          ; extension to redirect the caller (e.g for voicemail)
secondary_dialtone_digits = 9           ; digits for the secondary dialtone (max 9 digits)
secondary_dialtone_tone = 0x22  ; outside dialtone
musicclass=default                      ; Sets the default music on hold class
language=hu                                     ; Default language setting
;accountcode=79501                      ; accountcode to ease billing
rtptos = 184                            ; sets the the rtp packets TOS for this line
echocancel = on                         ; sets the phone echocancel for this line
silencesuppression = off                ; sets the silence suppression for this line
;callgroup=1,3-4                                ; We are in caller groups 1,3,4. Valid for this line
;pickupgroup=1,3-5                      ; We can do call pick-p for call group 1,3,4,5. Valid for this line
;amaflags =                             ; Sets the default AMA flag code stored in the CDR record for this line
line => 3084

id          = 1001                      ; future use
pin         = 1234                      ; future use
label       = 3077                      ; button line label (7960, 7970, 7940, 7920)
description = 3077              ; top diplay description
context     = default
incominglimit = 2                               ; more than 1 incoming call = call waiting.
transfer = on                           ; per line transfer capability. on, off, 1, 0
mailbox = 3077                          ; voicemail.conf (syntax: vmbox[@context][:folder])
vmnum = 7700                                    ; speeddial for voicemail administration, just a number to dial
cid_name = Docs Istvan                  ; caller id name
cid_num = 3077
trnsfvm = 7700                          ; extension to redirect the caller (e.g for voicemail)
secondary_dialtone_digits = 9           ; digits for the secondary dialtone (max 9 digits)
secondary_dialtone_tone = 0x22  ; outside dialtone
musicclass=default                      ; Sets the default music on hold class
language=hu                                     ; Default language setting
;accountcode=79501                      ; accountcode to ease billing
rtptos = 184                            ; sets the the rtp packets TOS for this line
echocancel = on                         ; sets the phone echocancel for this line
silencesuppression = off                ; sets the silence suppression for this line
;callgroup=1,3-4                                ; We are in caller groups 1,3,4. Valid for this line
;pickupgroup=1,3-5                      ; We can do call pick-p for call group 1,3,4,5. Valid for this line
;amaflags =                             ; Sets the default AMA flag code stored in the CDR record for this line
line => 3077

; phone types
;    12 -- Cisco IP Phone 12SP+ (or other 12 variants)
;    30 -- Cisco IP Phone 30VIP (or other 30 variants)
;  7902 -- Cisco IP Phone 7902G
;  7905 -- Cisco IP Phone 7905G
;  7910 -- Cisco IP Phone 7910
;  7912 -- Cisco IP Phone 7912G
;  7935 -- Cisco IP Conference Station 7935
;  7936 -- Cisco IP Conference Station 7936
;  7920 -- Cisco IP Wireless Phone 7920
;  7940 -- Cisco IP Phone 7940
;  7960 -- Cisco IP Phone 7960
;  7970 -- Cisco IP Phone 7970
;  7914 -- Cisco IP Phone 7960 with a 7914 addon
;   ata -- Cisco ATA-186 or Cisco ATA-188
;  kirk -- Kirk telecom ip phones

Apply configuration

The module currently can not be reload the configuration file after you changed must unloaded and load again. So to reload the configuration file currently the only way is to unload and load again the chan_sccp.so module from asterisk console.

extensions.conf

You can reach SCCP line: SCCP/extension
add similar line to /etc/asterisk/extensions.conf

exten => 1,1,Dial(SCCP/3084)

OS specific help

Validation, confirmation tests

If everything went fine, you should be able to register cisco phones 7914, 7940, 7960 hard phone's into your asterisk PBX, You can bridge calls between sip and sccp. You can make test calls from skinny phones to already configured sip lines and reverse too you can reach sccp phones from sip lines.