THE BLOG

CCIE Collaboration Lab Lessons – Part 1: Registering a Cisco 9971 IP Phone with CUCME

ccie collaboration Jul 26, 2015

For years, my main Cisco focus was voice. I taught the the CCNA Voice and CCNP Voice courses for over a decade and earned my Voice CCIE in 2012, and then migrated that to a Collaboration CCIE in 2014. However, since then I’ve mainly been focused on creating video courses and books for routing and switching technologies, and I’ve been aching to get back into the voice (now “collaboration”) world.

So, I’m thrilled to announce that I’m starting to develop some Collaboration training products, beginning with a Collaboration CCIE video course. It’s in production now, and will be coming out this Fall (2015). Along the way, I’m coming across some tricky or challenging topics that can bog down your study for days. This blog posting covers one such topic, and I’ll sprinkle in other Collaboration CCIE topics among my other blog postings over the next few months.

Specifically, there’s a new IP phone to contend with on the CCIE Collaboration lab that wasn’t there on the CCIE Voice lab. It’s the Cisco 9971 IP Phone, and it only speaks SIP as its signaling protocol. This means if you’re wanting to register a Cisco 9971 IP Phone with Cisco Communications Manager Express (CUCME), you need to configure your CUCME router to support SIP IP phones. In addition, you might also have a Cisco 7965 IP Phone at the same site. Even though the 7965 can speak SIP, perhaps there’s a lab requirement for the 7965 to use SCCP. Well, the good news is, you can configure a CUCME router to support both SIP and SCCP IP phones simultaneously. This creates a more complex CUCME configuration than you were likely to encounter on the CCIE Voice Lab.

To help you over this initial Cisco 9971 IP Phone configuration hurdle in your Collaboration CCIE studies, I wanted to share a configuration that’s working in my lab.

Create the VoIP Voice Service for the Cisco 9971 SIP phone

BR2#conf term
Enter configuration commands, one per line. End with CNTL/Z.
BR2(config)#voice service voip
BR2(conf-voi-serv)#allow-connections sip to sip
BR2(conf-voi-serv)#allow-connections sip to h323
BR2(conf-voi-serv)#allow-connections h323 to sip
BR2(conf-voi-serv)#sip
BR2(conf-serv-sip)#bind all source-interface lo0
BR2(conf-serv-sip)#registrar server
BR2(conf-serv-sip)#end
BR2#

The voice service voip command enters the VoIP Voice Service configuration mode. Then, I give a series of allow-connections commands to permit two VoIP call legs (where one or both of the call legs is a SIP call leg) to interconnect in a call (which technically turns this router into a Cisco Unified Border Element (CUBE)).

The sip command enters VoIP Voice Service SIP configuration mode, and from there I bind all SIP communication (both signaling and media) to the router’s Loopback 0 interface. The registrar server command is super important and allows a SIP IP phone to register with the router, which is now acting as a SIP registrar server.

Determine the Location of the IP Phone Firmware Files in Flash

Hopefully, the required firmware files for your 9971 are already loaded in your router’s flash. If not, you’ll need to download the files from Cisco’s website (assuming your account gives you access to that download). In this example, the 9971 firmware files are in flash (as we see in the output of the show flash command). However, these files are in the “/phones/9971” subdirectory.

BR2#show flash
-#- –length– —–date/time—— path
…OUTPUT OMITTED…
46 0 Jul 12 2015 04:17:54 +09:00 phones
47 0 Jul 12 2015 04:18:12 +09:00 phones/7945-7965
48 4639974 Jul 12 2015 04:19:46 +09:00 phones/7945-7965/apps45.9-2-1TH1-13.sbn
49 575590 Jul 12 2015 04:21:24 +09:00 phones/7945-7965/cnu45.9-2-1TH1-13.sbn
50 2211969 Jul 12 2015 04:22:06 +09:00 phones/7945-7965/cvm45sccp.9-2-1TH1-13.sbn
51 356907 Jul 12 2015 04:22:50 +09:00 phones/7945-7965/dsp45.9-2-1TH1-13.sbn
52 1886651 Jul 12 2015 04:23:34 +09:00 phones/7945-7965/jar45sccp.9-2-1TH1-13.sbn
53 656 Jul 12 2015 04:24:08 +09:00 phones/7945-7965/SCCP45.9-2-1S.loads
54 660 Jul 12 2015 04:25:10 +09:00 phones/7945-7965/term45.default.loads
55 660 Jul 12 2015 04:25:48 +09:00 phones/7945-7965/term65.default.loads
56 0 Jul 12 2015 04:18:18 +09:00 phones/9971
57 10728 Jul 12 2015 04:29:36 +09:00 phones/9971/dkern9971.100609R2-9-2-2SR1-9.sebn
58 1508080 Jul 12 2015 04:30:12 +09:00 phones/9971/kern9971.9-2-2SR1-9.sebn
59 36692736 Jul 12 2015 04:31:30 +09:00 phones/9971/rootfs9971.9-2-2SR1-9.sebn
60 145016 Jul 12 2015 04:32:18 +09:00 phones/9971/sboot9971.031610R1-9-2-2SR1-9.sebn
61 67000 Jul 12 2015 04:32:50 +09:00 phones/9971/skern9971.022809R2-9-2-2SR1-9.sebn
62 1297 Jul 12 2015 04:33:36 +09:00 phones/9971/sip9971.9-2-2SR1-9.loads
…OUTPUT OMITTED…

Make Each of the Firmware Files Available via TFTP, Using an Alias for Each File

Since the Cisco 9971 IP Phone’s firmware files are located in a subdirectory, we need to create an alias for each of these files, which allows our 9971 to request a specific file name via TFTP, and the router will serve it up from the appropriate location. Here’s how we do it:

Use a Microsoft Notepad document to create the configuration to paste into the router.

tftp-server flash:phones/7945-7965/apps45.9-2-1TH1-13.sbn alias apps45.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/cnu45.9-2-1TH1-13.sbn alias cnu45.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/cvm45sccp.9-2-1TH1-13.sbn alias cvm45sccp.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/dsp45.9-2-1TH1-13.sbn alias dsp45.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/jar45sccp.9-2-1TH1-13.sbn alias jar45sccp.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/SCCP45.9-2-1S.loads alias SCCP45.9-2-1S.loads
tftp-server flash:phones/7945-7965/term45.default.loads alias term45.default.loads
tftp-server flash:phones/7945-7965/term65.default.loads alias term65.default.loads
tftp-server flash:phones/9971/dkern9971.100609R2-9-2-2SR1-9.sebn alias dkern9971.100609R2-9-2-2SR1-9.sebn
tftp-server flash:phones/9971/kern9971.9-2-2SR1-9.sebn alias kern9971.9-2-2SR1-9.sebn
tftp-server flash:phones/9971/rootfs9971.9-2-2SR1-9.sebn alias rootfs9971.9-2-2SR1-9.sebn
tftp-server flash:phones/9971/sboot9971.031610R1-9-2-2SR1-9.sebn alias sboot9971.031610R1-9-2-2SR1-9.sebn
tftp-server flash:phones/9971/skern9971.022809R2-9-2-2SR1-9.sebn alias skern9971.022809R2-9-2-2SR1-9.sebn
tftp-server flash:phones/9971/sip9971.9-2-2SR1-9.loads alias sip9971.9-2-2SR1-9.loads

Globally Configure CUCME to Register SIP IP Phones

Now, it’s time to create the global CUCME configuration for any SIP IP phones. If you’re already familiar with the Telephony Service configuration mode used by CUCME to register SCCP IP phones, think of the Voice Register Global configuration mode as being the SIP equivalent to the Telephony Service configuration mode in the SCCP world.

BR2#conf t
BR2(config)#voice register global
BR2(config-register-global)#mode cme
BR2(config-register-global)#source-address 10.10.32.3
BR2(config-register-global)#bandwidth video tias-modifier 512000 negotiate end-to-end
BR2(config-register-global)#max-dn 20
BR2(config-register-global)#max-pool 10
BR2(config-register-global)#ntp 10.10.32.1
BR2(config-register-global)#timezone 44
BR2(config-register-global)#load 9971 sip9971.9-2-2SR1-9.loads
BR2(config-register-global)#tftp-path flash:
BR2(config-register-global)#time-format 24
BR2(config-register-global)#camera
BR2(config-register-global)#video
BR2(config-register-global)#create profile
BR2(config-register-global)#end
BR2#

While most of the commands in the above configuration should be straightforward, please note the load command. Notice that we’re specifying that the Cisco 9971 IP Phone should reference the sip9971.9-2-2SR1-9.loads file in flash, and the filename includes the .loads extension.

Create a Directory Number for the Cisco 9971 IP Phone

Now that we have our CUCME router globally configured to support SIP-speaking IP phones, it’s time to specify one ore more directory numbers for our phone(s). In the following example, we’re creating a Voice Register Directory Number (analogous to an ephone-dn in the SCCP world) with a tag of 1. The specific directory number (DN) is 4001, and we’ve given this DN a name of BR2 Phone 1. This name is included with the IP phone’s caller ID information.

BR2#conf term
Enter configuration commands, one per line. End with CNTL/Z.
BR2(config)#voice register dn 1
BR2(config-register-dn)#number 4001
BR2(config-register-dn)#name BR2 Phone 1

Define the Cisco 9971 IP Phone

Finally, here’s the connective tissue that brings it all together. We’re creating a Voice Register Pool (analogous to an ephone in the SCCP world). We’re specifying the MAC address of the 9971, and the number 1 dn 1 command associates the first button on this phone with voice register dn 1.

The dtmf-relay sip-kpml command said that when we dial digits on the IP phone, those digits will be transmitted one-by-one using the Keypad Markup Language (KPML). While many examples you’ll see use sip-notify as the DTMF Relay mechanism, I’ve personally had issues with the sip-notify approach. In my testing, with the sip-notify approach, the far-end device hears an identical tone when any key is pressed. However, with the sip-kpml approach, the far-end device hears an actual DTMF tone (i.e. two simultaneous frequencies representing a specific key).

Also, notice the description command. This command specifies what is displayed on the IP phone. We’re also specifying that the IP phone should use a codec of G.711 u-law (other options include: G.711 A-law, G.722, G.729, and iLBC).

BR2(config)#voice register pool 1
BR2(config-register-pool)#id mac 0CD9.9690.26A3
BR2(config-register-pool)#type 9971
BR2(config-register-pool)#number 1 dn 1
BR2(config-register-pool)#dtmf-relay sip-kpml
BR2(config-register-pool)#description +8144444001
BR2(config-register-pool)#codec g711ulaw
BR2(config-register-pool)#no vad
BR2(config-register-pool)#end
BR2#

Summary


That’s it! We’ve now successfully configured a CUCME router to register a Cisco 9971 SIP-speaking IP Phone. Here’s a picture of what the 9971 screen looks like, and all of the previous configuration commands are consolidated below for your reference.

Complete Configuration

BR2#conf term
Enter configuration commands, one per line. End with CNTL/Z.
BR2(config)#voice service voip
BR2(conf-voi-serv)#allow-connections sip to sip
BR2(conf-voi-serv)#allow-connections sip to h323
BR2(conf-voi-serv)#allow-connections h323 to sip
BR2(conf-voi-serv)#sip
BR2(conf-serv-sip)#bind all source-interface lo0
BR2(conf-serv-sip)#registrar server
BR2(conf-serv-sip)#end
BR2#

tftp-server flash:phones/7945-7965/apps45.9-2-1TH1-13.sbn alias apps45.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/cnu45.9-2-1TH1-13.sbn alias cnu45.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/cvm45sccp.9-2-1TH1-13.sbn alias cvm45sccp.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/dsp45.9-2-1TH1-13.sbn alias dsp45.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/jar45sccp.9-2-1TH1-13.sbn alias jar45sccp.9-2-1TH1-13.sbn
tftp-server flash:phones/7945-7965/SCCP45.9-2-1S.loads alias SCCP45.9-2-1S.loads
tftp-server flash:phones/7945-7965/term45.default.loads alias term45.default.loads
tftp-server flash:phones/7945-7965/term65.default.loads alias term65.default.loads
tftp-server flash:phones/9971/dkern9971.100609R2-9-2-2SR1-9.sebn alias dkern9971.100609R2-9-2-2SR1-9.sebn
tftp-server flash:phones/9971/kern9971.9-2-2SR1-9.sebn alias kern9971.9-2-2SR1-9.sebn
tftp-server flash:phones/9971/rootfs9971.9-2-2SR1-9.sebn alias rootfs9971.9-2-2SR1-9.sebn
tftp-server flash:phones/9971/sboot9971.031610R1-9-2-2SR1-9.sebn alias sboot9971.031610R1-9-2-2SR1-9.sebn
tftp-server flash:phones/9971/skern9971.022809R2-9-2-2SR1-9.sebn alias skern9971.022809R2-9-2-2SR1-9.sebn
tftp-server flash:phones/9971/sip9971.9-2-2SR1-9.loads alias sip9971.9-2-2SR1-9.loads

BR2#conf t
BR2(config)#voice register global
BR2(config-register-global)#mode cme
BR2(config-register-global)#source-address 10.10.32.3
BR2(config-register-global)#bandwidth video tias-modifier 512000 negotiate end-to-end
BR2(config-register-global)#max-dn 20
BR2(config-register-global)#max-pool 10
BR2(config-register-global)#ntp 10.10.32.1
BR2(config-register-global)#timezone 44
BR2(config-register-global)#load 9971 sip9971.9-2-2SR1-9.loads
BR2(config-register-global)#tftp-path flash:
BR2(config-register-global)#time-format 24
BR2(config-register-global)#camera
BR2(config-register-global)#video
BR2(config-register-global)#create profile
BR2(config-register-global)#end

BR2#conf term
Enter configuration commands, one per line. End with CNTL/Z.
BR2(config)#voice register dn 1
BR2(config-register-dn)#number 4001
BR2(config-register-dn)#name BR2 Phone 1
BR2(config)#voice register pool 1
BR2(config-register-pool)#id mac 0CD9.9690.26A3
BR2(config-register-pool)#type 9971
BR2(config-register-pool)#number 1 dn 1
BR2(config-register-pool)#dtmf-relay sip-kpml
BR2(config-register-pool)#description +8144444001
BR2(config-register-pool)#codec g711ulaw
BR2(config-register-pool)#no vad
BR2(config-register-pool)#end
BR2#

Enjoy your studies!

Kevin Wallace, CCIEx2 (R/S and Collaboration) #7945, CCSI 20061