Phoning it in – CUCME SCCP Basics


This blog series is going to over aspects of Cisco UC and probably a bit of Skype for Business as well for variety.

This first entry will go over registering some phones to a CUCME router with SCCP.



Branch01-RTR01(config)#do sh ip int br | ex unass|0/0
Interface                  IP-Address      OK? Method Status                Protocol
Ethernet0/1              YES manual up                    up      
Ethernet0/2            YES manual up                    up      
Loopback0              YES manual up                    up

Branch02-RTR(config)#do sh ip int br | ex unass|0/0
Interface                  IP-Address      OK? Method Status                Protocol
Ethernet0/1              YES manual up                    up      
Ethernet0/2            YES manual up                    up      
Loopback0              YES manual up                    up 


We don’t especially care about routing at this point in time so I’m just going to enable EIGRP everywhere on both routers

Branch01-RTR01(config)#router eigrp 100


Phones need DHCP in order to get their IP addresses and also requires option 150 so the phones can learn where the CME TFTP server is so it can download its configuration/firmware.

Branch01-RTR01(config)#ip dhcp pool VOICE
Branch01-RTR01(dhcp-config)#option 150 ip
Branch01-RTR01(config)#ip dhcp excluded-address

Branch02-RTR(config)#ip dhcp pool VOICE
Branch02-RTR(dhcp-config)#option 150 ip
Branch02-RTR(config)#ip dhcp excluded-add


Of course pointing phones to a tftp server won’t do any good if we don’t have any TFTP setup!

First things first we’ll make a new directory on the router to put the phone files so we don’t clutter up the flash directory.

Branch01-RTR01#mkdir flash0:loads
Create directory filename [loads]? 
Created dir flash0:/loads

Next we need to copy the phone load files to the CME router via TFTP. I’m using Cisco 7960s phones in my lab at the moment so I downloaded the 7940-7960 files from Cisco. I’ll just show Branch01 but Branch02 is also being done.

Branch01-RTR01#copy tftp:// flash0:loads/
Destination filename [loads/P0030801SR02.loads]? 
Accessing tftp://
Loading loads/P0030801SR02.loads from (via Ethernet0/0): !
[OK - 458 bytes]

458 bytes copied in 0.106 secs (4321 bytes/sec)

Branch01-RTR01#copy tftp:// flash0:loads/ 
Destination filename [loads/P0030801SR02.sb2]? 
Accessing tftp://
Loading loads/P0030801SR02.sb2 from (via Ethernet0/0): !!!
[OK - 708460 bytes]

708460 bytes copied in 0.761 secs (930959 bytes/sec)

Branch01-RTR01#copy tftp:// flash0:loads/
Destination filename [loads/P0030801SR02.sbn]? 
Accessing tftp://
Loading loads/P0030801SR02.sbn from (via Ethernet0/0): !
[OK - 130956 bytes]

130956 bytes copied in 0.174 secs (752621 bytes/sec)

Branch01-RTR01#copy tftp:// flash0:loads/
Destination filename [loads/P0030801SR02.bin]? 
Accessing tftp://
Loading loads/P0030801SR02.bin from (via Ethernet0/0): !
[OK - 130552 bytes]

130552 bytes copied in 0.176 secs (741773 bytes/sec)

Now the files are loaded we need to enable a TFTP server on the router so it can serve the files to the registering phones.

Note: The alias keyword causes the tftp server to think the files are in the root directory.

Branch01-RTR01(config)# tftp-server flash0:loads/P0030801SR02.bin alias P0030801SR02.bin
Branch01-RTR01(config)# tftp-server flash0:loads/P0030801SR02.sb2 alias P0030801SR02.sb2
Branch01-RTR01(config)# tftp-server  flash0:loads/P0030801SR02.sbn alias P0030801SR02.sbn
Branch01-RTR01(config)# tftp-server flash0:loads/P0030801SR02.loads alias P0030801SR02.loads

CME Setup

The SCCP protocol is configured on the router under telephony-service

For now all we want under here is the source-address which is the CME address, I’m using the loopback. The load for the phone model and max-ephone and max-dn to specifiy how many phones we can put on our router.

Branch01-RTR01(config-telephony)#ip source-address
Updating CNF files
CNF files updating complete

Branch01-RTR01(config-telephony)#max-dn 30
Branch01-RTR01(config-telephony)#max-ephone 10

The load command matches the phone model with the phone load we uploaded earlier.

Note: You enter the firstpart of the load name before the period

Branch01-RTR01(config-telephony)#do dir flash0:loads
Directory of flash0:/loads/

202450254  -rw-         458  Sep 12 2016 19:25:22 -06:00  P0030801SR02.loads
202450257  -rw-      708460  Sep 12 2016 19:25:36 -06:00  P0030801SR02.sb2
202450258  -rw-      130956  Sep 12 2016 19:25:45 -06:00  P0030801SR02.sbn
202450259  -rw-      130552  Sep 12 2016 19:25:51 -06:00  P0030801SR02.bin

53660876800 bytes total (48195928064 bytes free)

Branch01-RTR01(config-telephony)#load ?
  12SP       12SP+ and 30VIP phones
  6901       Cisco IP Phone 6901
  6911       Cisco IP Phone 6911
  6921       Cisco IP Phone 6921
  6941       Cisco IP Phone 6941
  6945       Cisco IP Phone 6945
  6961       Cisco IP Phone 6961
  7902       Cisco IP Phone 7902
  7905       Cisco IP Phone 7905
  7906       Cisco IP Phone 7906
  7910       Cisco IP Phone 7910
  7911       Cisco IP Phone 7911
  7912       Cisco IP Phone 7912
  7914       Cisco IP Phone 7914 14-Button Line Expansion Module
  7915-12    Cisco IP Phone 7915 12-Button Line Expansion Module
  7915-24    Cisco IP Phone 7915 24-Button Line Expansion Module
  7916-12    Cisco IP Phone 7916 12-Button Line Expansion Module
  7916-24    Cisco IP Phone 7916 24-Button Line Expansion Module
  7920       Cisco IP Phone 7920
  7921       Cisco IP Phone 7921
  7925       Cisco IP Phone 7925
  7926       Cisco IP Phone 7926
  7931       Cisco IP Phone 7931
  7935       Cisco IP Conference Station 7935
  7936       Cisco IP Phone 7936
  7937       Cisco IP Conference Station 7937
  7941       Cisco IP Phone 7941
  7941GE     Cisco IP Phone 7941GE
  7942       Cisco IP Phone 7942
  7945       Cisco IP Phone 7945
  7960-7940  Cisco IP Phone 7940/7960
  7961       Cisco IP Phone 7961
  7961GE     Cisco IP Phone 7961GE
  7962       Cisco IP Phone 7962
  7965       Cisco IP Phone 7965
  7970       Cisco IP Phone 7970
  7971       Cisco IP Phone 7971
  7975       Cisco IP Phone 7975
  7985       Cisco IP Phone 7985
  8941       Cisco IP Phone 8941
  8945       Cisco IP Phone 8945
  ata        ATA  phone emulation for analog phone

Branch01-RTR01(config-telephony)#load 7960-7940 P0030801SR02
Updating CNF files
CNF files update complete for phonetype(7940)
CNF files update complete for phonetype(7960)

When we are done all that, use the create cnf-files to create the phone configs.

Branch01-RTR01(config-telephony)#create cnf-files 
Creating CNF files

Phone Config

By default the phones will auto register to the CME and can be seen by using the show ephone command. This command is handy because it will give the mac address for the next step. I have also started up a Cisco IP Communicator on a computer in this vlan as well.

ephone-1[0] Mac:000C.29EF.9810 TCP socket:[4] activeLine:0 whisperLine:0 REGISTERED in SCCP ver 20/17 max_streams=5
mediaActive:0 whisper_mediaActive:0 startMedia:0 offhook:0 ringing:0 reset:0 reset_sent:0 paging 0 debug:0 caps:11 
IP: * 53033 CIPC  keepalive 4 max_line 8 available_line 8
Preferred Codec: g711ulaw 
Lpcor Type: none 

ephone-3[2] Mac:0002.FD65.925C TCP socket:[3] activeLine:0 whisperLine:0 REGISTERED in SCCP ver 11/9 max_streams=0
mediaActive:0 whisper_mediaActive:0 startMedia:0 offhook:0 ringing:0 reset:0 reset_sent:0 paging 0 debug:0 caps:8 
IP: * 50603 Telecaster 7960  keepalive 10 max_line 6 available_line 6
Preferred Codec: g711ulaw 
Lpcor Type: none 

ephone-4[3] Mac:0007.85FF.7A45 TCP socket:[2] activeLine:0 whisperLine:0 REGISTERED in SCCP ver 6/5 max_streams=0
mediaActive:0 whisper_mediaActive:0 startMedia:0 offhook:0 ringing:0 reset:0 reset_sent:0 paging 0 debug:0 caps:7 
IP: * 50266 Telecaster 7960  keepalive 5 max_line 6 available_line 6
Preferred Codec: g711ulaw 
Lpcor Type: none 

First we’ll setup some phone numbers that we will assign the ephones.

Branch01-RTR01(config)#ephone-dn 1
Branch01-RTR01(config-ephone-dn)#number 1001
Branch01-RTR01(config-ephone-dn)#label Batman - 1001

Branch01-RTR01(config)#ephone-dn 3        
Branch01-RTR01(config-ephone-dn)#number 1003
Branch01-RTR01(config-ephone-dn)# label Spiderman - 1003

Branch01-RTR01(config)#ephone-dn 3          
Branch01-RTR01(config-ephone-dn)#number 1003
Branch01-RTR01(config-ephone-dn)#label Superman - 1004

Grab the mac address and paste it into ephone configuration to bind the phone with configuration.

The button command maps the physical button with the directory number, there is a lot of options with this command but for now we are just mapping the first button with the proper ephone-dn

Branch01-RTR01(config)#ephone  1
Branch01-RTR01(config-ephone)# mac-address 000C.29EF.9810
Branch01-RTR01(config-ephone)# button  1:1
Branch01-RTR01(config-ephone)#ephone  3
Branch01-RTR01(config-ephone)# mac-address 0002.FD65.925C
Branch01-RTR01(config-ephone)# button  1:3
Branch01-RTR01(config-ephone)#ephone  4
Branch01-RTR01(config-ephone)# mac-address 0007.85FF.7A45
Branch01-RTR01(config-ephone)# button  1:4

And we’ll do the Branch2 side

Branch02-RTR(config)#ephone-dn  1
Branch02-RTR(config-ephone-dn)# number 2001
Branch02-RTR(config-ephone-dn)# label Oliver Queen
Branch02-RTR(config-ephone-dn)#ephone-dn  2
Branch02-RTR(config-ephone-dn)# number 2002
Branch02-RTR(config-ephone-dn)# label Wally West - 2002
Branch02-RTR(config-ephone-dn)#ephone  1
Branch02-RTR(config-ephone)# mac-address 0003.6BDD.3362
Branch02-RTR(config-ephone)# button  1:1
Branch02-RTR(config-ephone)#ephone  2
Branch02-RTR(config-ephone)# mac-address 000C.29A6.501E
Branch02-RTR(config-ephone)# button  1:2

At this point we can now call within our branches.

Doing a test call we can see it works


but there is no caller-id, we can use the name command under the ephone-dn config to make that change.

Branch01-RTR01(config)#ephone-dn 1  
Branch01-RTR01(config-ephone-dn)#name Batman
Branch01-RTR01(config-ephone-dn)#ephone-dn 3
Branch01-RTR01(config-ephone-dn)#name Spiderman
Branch01-RTR01(config-ephone-dn)#ephone-dn 4   
Branch01-RTR01(config-ephone-dn)#name Superman

Now we can see who is calling!


Lastly lets make a SIP trunk between the two branch routers so Batman can see what Wally is up to.

This is done by allowing SIP connections under voice service voip and then binding an interface to SIP.

Branch01-RTR01(config)#voice service voip
Branch01-RTR01(conf-voi-serv)# allow-connections sip to sip
Branch01-RTR01(conf-voi-serv)# sip
Branch01-RTR01(conf-serv-sip)#  bind all source-interface Loopback0

Branch02-RTR01(config)#voice service voip
Branch02-RTR01(conf-voi-serv)# allow-connections sip to sip
Branch02-RTR01(conf-voi-serv)# sip
Branch02-RTR01(conf-serv-sip)#  bind all source-interface Loopback0

To close up we need a dial-peer for the opposite ends phone number extensions. The . is a wildcard that means any single digit so 2…. means 2 and then any 3 digits will match the dial-peer. The session target is where the SIP traffic is sent and the codec just forces the voice codec being used.

Branch01-RTR01(conf-serv-sip)#dial-peer voice 2000 voip
Branch01-RTR01(config-dial-peer)# destination-pattern 2...
Branch01-RTR01(config-dial-peer)# session protocol sipv2
Branch01-RTR01(config-dial-peer)# session target ipv4:
Branch01-RTR01(config-dial-peer)# codec g711ulaw

Branch02-RTR(config)#dial-peer voice 1000 voip
Branch02-RTR(config-dial-peer)# destination-pattern 1...
Branch02-RTR(config-dial-peer)# session protocol sipv2
Branch02-RTR(config-dial-peer)# session target ipv4:
Branch02-RTR(config-dial-peer)# codec g711ulaw

Thats all for now!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s