Tuesday, 24 April 2012

Testing Cisco CallManager Express (CME)


The Cisco Voice software has changed names.


Old Name New Name
Cisco CallManager (CCM) Cisco Unified Communications Manager (CUCM)
Cisco CallManager Express (CME) Cisco Unified Communications Manager Express (CME)


CUCM is the complete version of the call manager software and support all the bell and whistles. It will be disucssed in a later post. This post in concentrates on CME which is a cut-down version of CUCM built right into the IOS.

You will need any IOS train that supports the VoIP feature set. From the diagram below you can see that either of the following images will work:
  • IP Voice
  • SP Services
  • Advanced IP Services
  • Enterprise Services
  • Advanced Enterprise Services



 

 To test CME I chose to use Advanced Enterprise Services image. The network diagram I'm simulating is



The software required to get this running is:

Dynamips/Dynagen
VMWare
Win7
Software (IP Blue VTGO MultiLab from here)

The install of this software isn't covered in this post, but if you need a hand drop me a comment.

The dynamips configuration file is based on the IPS post and is shown below.

autostart = false
ghostios = true
sparsemem = true

[localhost]
    console = 3000
    workingdir = C:\Users\xxx\Desktop\IOSips\WD
        [[3725]]
            image = C:\Users\xxx\Desktop\IOSips\c3725-adventerprisek9-mz.124-15.T14.bin
            ram = 160
      
[[ROUTER CME]]
        model = 3725
        disk0 = 64
        FA0/0 = SW1 FA1/2
        # Attached to physical network 10.0.0.x/24
        FA0/1 = NIO_gen_eth:\Device\NPF_{7A4202C3-2058-40C4-9124-6BF616599DB9}

The most important configuration details of the CME router are shown below:

Specify that you will like to attach (ie register) a maximum of 10 phones (ephones) with 2 extensions (directory numbers) each.
!
telephony-service
 max-ephones 10
 max-dn 20
 ip source-address 10.0.0.230
!






Specify the list of extensions that are available


!
ephone-dn  1
 number 1000
!
!
ephone-dn  2
 number 1001
!
!
ephone-dn  3
 number 1002
!
!
ephone-dn  4
 number 1003
!




Specify the list of phones and their MAC addresses. Also assign the buttons 1 & 2 on the phone to a extension number. 
!
ephone  1
 device-security-mode none
 mac-address 0000.0000.0001
 button  1:1 2:2
!
!
!
ephone  2
 device-security-mode none
 mac-address 0000.0000.0002
 button  1:3 2:4
!


An IP phone when it boots up gets its configuration as follows:

1. The phone receives Power over Ethernet (PoE) from the switch.

2. The phone receives VLAN information from switch via CDP. Does this only work with Cisco phones and all other phones need to be told the vlan information?

3. The phone requests an DHCP ip address and the server responds with the IP information (including Option 150). Option 150 in the DHCP response points the phone to a TFTP server where it can download the base configuration and any firmware updates.

4. The phone downloads its configuration file from the TFTP server. This configuration provides the ip address of the CME enabled router

5. The phone registers with the CME router.

As we are using the IP Blue softphone we can skip steps 1 & 2. My DHCP server at this point does not send option 150 so I manually configure the softphone setting with ip address of the TFTP server as shown below. To make life easier I also change the MAC address 000000000001 and 000000000002.

 

When the softphone starts up it requests configuration file in the following order:

  1. VTGOPC.xml
  2. VTGO.cfg.xml
  3. VTGOPC.xml
  4. VTGO.cfg.xml
  5. SEP000000000001.cnf.xml (Repeating)

You can easily create the VTGOPC.xml file as follows

CME#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
CME(config)#telephony-service
CME(config-telephony)#create cnf-files
CNF file creation is already On
Creating CNF files
CME(config-telephony)#do show telephony tftp-bindings
tftp-server system:/its/united_states/7960-tones.xml alias United_States/7960-tones.xml
tftp-server system:/its/united_states/7960-font.xml alias English_United_States/7960-font.xml
tftp-server system:/its/united_states/7960-font.xml alias English_United_States/7920-font.xml
tftp-server system:/its/united_states/7960-dictionary.xml alias English_United_States/7960-dictionary.xml
tftp-server system:/its/united_states/7960-kate.xml alias English_United_States/7960-kate.xml
tftp-server system:/its/united_states/7960-kate.xml alias English_United_States/7920-kate.xml
tftp-server system:/its/united_states/SCCP-dictionary.xml alias English_United_States/SCCP-dictionary.xml
tftp-server system:/its/SEPDEFAULT.cnf
tftp-server system:/its/SEPDEFAULT.cnf alias SEPDefault.cnf
tftp-server system:/its/XMLDefault.cnf.xml alias XMLDefault.cnf.xml
tftp-server system:/its/ATADefault.cnf.xml


CME(config-telephony)#do copy system:/its/XMLDefault.cnf.xml flash:SEP000000000001.cnf.xml
Destination filename [SEP000000000001.cnf.xml]?

2213 bytes copied in 3.996 secs (554 bytes/sec)
CME(config-telephony)#no create cnf-files
CNF files deleted

CME(config-telephony)#exit
CME(config)#tftp-server flash:SEP000000000001.cnf.xml
CME(config)#^Z
CME#


Repeat the same process for SEP000000000002.cnf.xml. You should now be able get the softphones to download the tftp config and then register with CME

CME#
Apr 24 16:39:58.243: TFTP: Looking for VTGOPC.xml
Apr 24 16:39:58.279: TFTP: Looking for VTGO.cfg.xml
Apr 24 16:40:03.755: TFTP: Looking for VTGOPC.xml
Apr 24 16:40:03.799: TFTP: Looking for VTGO.cfg.xml
Apr 24 16:40:04.459: TFTP: Looking for SEP000000000001.cnf.xml
Apr 24 16:40:04.479: TFTP: Opened flash:SEP000000000001.cnf.xml, fd 0, size 2213 for process 275
Apr 24 16:40:04.751: TFTP: Finished flash:SEP000000000001.cnf.xml, time 00:00:00 for process 275
Apr 24 16:40:04.879: TFTP: Looking for English_United_States/SCCP-dictionary.xml
Apr 24 16:40:04.891: TFTP: Opened system:/its/united_states/SCCP-dictionary.xml, fd 0, size 2711 for process 275
Apr 24 16:40:05.083: TFTP: Finished system:/its/united_states/SCCP-dictionary.xml, time 00:00:00 for process 275
Apr 24 16:40:05.211: New Skinny socket accepted [2] (0 active)
Apr 24 16:40:05.215: sin_family 2, sin_port 49402, in_addr 10.0.0.13
Apr 24 16:40:05.219: skinny_add_socket 2 10.0.0.13 49402
Apr 24 16:40:05.355: New Skinny socket accepted [2] (1 active)
Apr 24 16:40:05.359: sin_family 2, sin_port 49403, in_addr 10.0.0.13
Apr 24 16:40:05.363: skinny_add_socket 2 10.0.0.13 49403
Apr 24 16:40:05.915: New Skinny socket accepted [2] (0 active)
Apr 24 16:40:05.915: sin_family 2, sin_port 49404, in_addr 10.0.0.13
Apr 24 16:40:05.919: skinny_add_socket 2 10.0.0.13 49404
Apr 24 16:40:06.155: New Skinny socket accepted [2] (1 active)
Apr 24 16:40:06.159: sin_family 2, sin_port 49405, in_addr 10.0.0.13
Apr 24 16:40:06.163: skinny_add_socket 2 10.0.0.13 49405
Apr 24 16:40:06.167:
Skinny StationAlarmMessage on socket [1] 10.0.0.13 SEP000000000001
Apr 24 16:40:06.171: severityInformational p1=0 [0x0] p2=0 [0x0]
Apr 24 16:40:06.171: IP blue softphone
Apr 24 16:40:06.371: ephone-(1)[1] StationRegisterMessage (0/0/10) from 10.0.0.13
Apr 24 16:40:06.371: ephone-(1)[1] Register StationIdentifier DeviceName SEP000000000001
Apr 24 16:40:06.375: ephone-(1)[1] StationIdentifier Instance 0    deviceType 7
Apr 24 16:40:06.375: ephone-1[-1]:stationIpAddr 10.0.0.13
Apr 24 16:40:06.379: ephone-1[-1][SEP000000000001]:maxStreams 5
Apr 24 16:40:06.379: ephone-1[-1][SEP000000000001]:From Phone raw protocol Ver 0x8560000C
Apr 24 16:40:06.383: ephone-1[-1][SEP000000000001]:protocol Ver 0x8560000C
Apr 24 16:40:06.383: ephone-1[-1][SEP000000000001]:phone-size 5480 dn-size 688
Apr 24 16:40:06.387: ephone-(1) Allow any Skinny Server IP address 10.0.0.230
Apr 24 16:40:06.387: ephone-1[-1][SEP000000000001]:Found entry 0 for 000000000001
Apr 24 16:40:06.391: ephone-1[-1][SEP000000000001]:socket change -1 to 1
Apr 24 16:40:06.391: ephone-1[-1][SEP000000000001]:FAILED: CLOSED old socket -1
Apr 24 16:40:06.395: ephone-1[1][SEP000000000001]:***Force device subtype to 0
Apr 24 16:40:06.395: ephone-1[1][SEP000000000001]:phone SEP000000000001 re-associate OK on socket [1]
Apr 24 16:40:06.399: %IPPHONE-6-REGISTER: ephone-1:SEP000000000001 IP:10.0.0.13 Socket:1 DeviceType:Phone has registered.
Apr 24 16:40:06.403: Phone 0 socket 1
Apr 24 16:40:06.403: Skinny Local IP address = 10.0.0.230 on port 2000

Apr 24 16:40:06.407: Skinny Phone IP address = 10.0.0.13 49404
Apr 24 16:40:06.411: ephone-1[1][SEP000000000001]:Signal protocol ver 8 to phone with ver 12
Apr 24 16:40:06.411: ephone-1[1][SEP000000000001]:Date Format M/D/Y
Apr 24 16:40:06.415: ephone-1[1]:RegisterAck sent to sockettype ephone socket 1: keepalive period 30 use sccp-version 8
Apr 24 16:40:06.419: ephone-1[1]:CapabilitiesReq sent
Apr 24 16:40:06.443: ephone-1[1]:CapabilitiesRes received
Apr 24 16:40:06.447: ephone-1[1][SEP000000000001]:Caps list 6
G711Ulaw64k  40 ms
G711Alaw64k  40 ms
G729  60 ms
G729AnnexA  60 ms
G729AnnexB  60 ms
GSM-FR  60 ms

Apr 24 16:40:06.467: Bring up DN 1 by SkinnyCheckDnStatus

Apr 24 16:40:06.647: ephone-1[1]:ButtonTemplateReqMessage
Apr 24 16:40:06.651: ephone-1[1][SEP000000000001]:StationButtonTemplateReqMessage set max presentation to 6
Apr 24 16:40:06.651: ephone-1[1]:CheckAutoReg
Apr 24 16:40:06.655: ephone-1[1]:AutoReg is disabled
Apr 24 16:40:06.655: ephone-1[1][SEP000000000001]:Setting 6 lines 0 speed-dials on phone (max_line 6)
Apr 24 16:40:06.659: ephone-1[1][SEP000000000001]:First Speed Dial Button location is 0 (0)
Apr 24 16:40:06.659: ephone-1[1][SEP000000000001]:Configured 0 speed dial buttons
Apr 24 16:40:06.663: ephone-1[1]:ButtonTemplate lines=6 speed=0 buttons=6 offset=0
Apr 24 16:40:06.751: ephone-1[1]:StationSoftKeyTemplateReqMessage
Apr 24 16:40:06.755: ephone-1[1]:StationSoftKeyTemplateResMessage
Apr 24 16:40:06.903: ephone-1[1]:StationSoftKeySetReqMessage
Apr 24 16:40:06.907: ephone-1[1]:StationSoftKeySetResMessage
Apr 24 16:40:07.071: ephone-1[1]:StationConfigStatReqMessage
Apr 24 16:40:07.075: ephone-1[1][SEP000000000001]:StationConfigStatMessage sent for device SEP000000000001
Apr 24 16:40:07.227: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 1
Apr 24 16:40:07.227: ephone-1[1]:StationLineStatReqMessage ephone line 1 DN 1 = 1000 desc = 1000 label =
Apr 24 16:40:07.231: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (1 of 6)
Apr 24 16:40:07.363: ephone-1[1][SEP000000000001]:StationForwardStatReqMessage line 1 from ephone
Apr 24 16:40:07.367: Skinny StationForwardStatMessage line 1 sent on ephone socket [1] for ephone-1
Apr 24 16:40:07.371: activeForward 0 AllActive 0 BusyActive 0 NoAnswerActive 0
Apr 24 16:40:07.539: ephone-1[1][SEP000000000001]:Skinny Available Lines 6 set for socket [1]
Apr 24 16:40:07.759: ephone-1[1][SEP000000000001]:Skinny Available Lines 6 set for socket [1]
Apr 24 16:40:07.759: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 1
Apr 24 16:40:07.763: ephone-1[1]:StationLineStatReqMessage ephone line 1 DN 1 = 1000 desc = 1000 label =
Apr 24 16:40:07.767: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (2 of 6)
Apr 24 16:40:07.779: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 2
Apr 24 16:40:07.783: ephone-1[1]:StationLineStatReqMessage ephone line 2 DN 2 = 1001 desc = 1001 label =
Apr 24 16:40:07.783: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (3 of 6)
Apr 24 16:40:07.787: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 3
Apr 24 16:40:07.791: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 3 Invalid DN -1
Apr 24 16:40:07.795: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (4 of 6)
Apr 24 16:40:07.795: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 4
Apr 24 16:40:07.799: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 4 Invalid DN -1
Apr 24 16:40:07.803: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (5 of 6)
Apr 24 16:40:07.803: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 5
Apr 24 16:40:07.803: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 5 Invalid DN -1
Apr 24 16:40:07.803: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (6 of 6)
Apr 24 16:40:07.803: ephone-1[1]:SkinnyCompleteRegistration
Apr 24 16:40:07.815: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 6
Apr 24 16:40:07.819: ephone-1[1][SEP000000000001]:StationLineStatReqMessage from ephone line 6 Invalid DN -1
Apr 24 16:40:07.823: ephone-1[1][SEP000000000001]:StationLineStatResMessage sent to ephone (7 of 6)
Apr 24 16:40:07.823: ephone-1[1][SEP000000000001]:StationForwardStatReqMessage line 1 from ephone
Apr 24 16:40:07.827: Skinny StationForwardStatMessage line 1 sent on ephone socket [1] for ephone-1
Apr 24 16:40:07.831: activeForward 0 AllActive 0 BusyActive 0 NoAnswerActive 0
CME#


The softphone then shows you all the correct setting and is able to make a call.





2 comments:

  1. Hello

    I can't see in the process above were you create the VTGO.cfg.xml file. You recreate the SEPXXXXXXXX.cnf.xml, but not the other 2 files.

    In my case, your solution is not working for me. It keeps on searching for the VTGO.cfg.xml and VTGOPC.xml. What can I do?

    Aug 18 23:01:06.679: TFTP: Looking for SEP02004C4F4F50.cnf.xml
    Aug 18 23:01:06.695: TFTP: Opened flash:SEP02004C4F4F50.cnf.xml, fd 0, size 1978 for process 327
    Aug 18 23:01:07.355: TFTP: Finished flash:SEP02004C4F4F50.cnf.xml, time 00:00:00 for process 327
    Aug 18 23:01:07.527: New Skinny socket accepted [2] (1 active)
    Aug 18 23:01:07.527: sin_family 2, sin_port 52476, in_addr 10.10.0.76
    Aug 18 23:01:07.527: skinny_add_socket 2 10.10.0.76 52476
    Aug 18 23:01:07.543: TFTP: Looking for VTGOPC.xml
    PSTN-WAN#
    Aug 18 23:01:07.707: TFTP: Looking for VTGO.cfg.xml


    What could be the problem?

    Thanks in advance for your support on the topic.

    axolas

    ReplyDelete
  2. @axolas

    If you have the SEPxxx.cnf.xml file then you don't need the VTGO files. From your debug it has found SEP02004C4F4F50.cnf.xm, does this phone then register?

    ReplyDelete