Changing the name of “Cisco Unity Connection Messaging System”

If you deploy Cisco Unity Connection for single inbox or message relaying with Exchange, you might have run into some people wanting to change the name from “Cisco Unity Connection Messaging System” to something more specific to the environment or user-friendly.  Such as something like: “Company Voicemail”.

There is a way to accomplish this with modifying the database with TAC but there’s a much, much easier way to accomplish this by just creating a user with a mailbox in Exchange with that email address.

If you need help creating a user & mailbox, see this technet article.

This change assumes your Unity Connection system will share the same domain as your Exchange org.  Assuming that’s the case, simply make the name whatever you’d like, in our example we’ll call it “Company Voicemail” and the principal name of the new account “unityconnection” and your domain will propagate at the end, appropriately.

Continue to step through the creation process and on the completion page you should see your new account with the appropriate name – “Company Voicemail” with “unityconnection@<yourdomain>” as the account.

Any New Single Inbox messages will now appear with the new name!

Using Overlays to Emulate Max Calls and Busy Trigger

Working with Communications Manager Express means learning how to accommodate some of the features we are used to in the full Communications Manager release. Today I had a need to provide maximum calls and busy trigger capabilities on a CME box. If you aren’t familiar with max calls and busy trigger, it was a feature that came out in CCM 4. The feature allows us to say that a phone can have up to X active calls, but after Y calls we consider the user busy. Typically, we see these values set at 4 for maximum and 2 for busy. Some power users like to have 6 for maximum and 3 for busy. That means I can be on two separate calls, receive another call and still answer it. However, if I keep all of those three calls separate (I don’t conference them together), when the fourth call comes in it will either get a busy tone or go to my voicemail depending on how the number is configured. Here’s the best part though – I can still PLACE three more calls up to my maximum calls value of six. After six individual calls I am told I’ve reached my limit.

So in CME, our directory numbers can only have up to two channels. That means at first glance have more than two separate calls wouldn’t seem possible. But through a bit of magic with overlays, we certainly can.

Let’s first look at how an ephone-dn is configured and go over what each line means.


!
ephone-dn 1 dual-line
number 1000
!
ephone 1
mac-address 0010.abcd.abc0
button 1:1
!

1. ephone-dn is the command to enter configuration mode for a Directory Number (DN) followed by a number which is an index number. The index number identifies the Directory Number within the configuration; it has no bearing on the phone number itself. The dual-line statement says this directory number will have two channels assigned to it. If we do not use dual-line at the end of the command then the line will have a single channel available, meaning only one call can be active for that particular Directory Number index.
2. number 1000 assigns the extension ’1000′
3. ephone 1 tells the system to create an ephone, again our index number is just a ID.
4. mac-address codes the MAC address for the phone we’re adding
5. button 1:1 maps the first line appearance to the DN with an index number of 1. So we just mapped extension 1000 to the phone.

In this example, if a call is placed to 1000, it will ring on the phone and we can answer it. If a second person calls 1000, it will ring on our phone and we will receive the call waiting tone. We could answer that call as well and place the original caller on hold. At this point, if a third call comes in, it will ring busy (we haven’t set anything up for call forward busy).

So what if we wanted to be like CallManager and have a 4 max calls and 2 busy trigger? Create another ephone-dn index value with the same extension and assign it as an overlay extension on the same line appearance! Here’s the magic:


!
ephone-dn 1 dual-line
number 1000
huntstop channel
no huntstop
!
ephone-dn 2 dual-line
number 1000
huntstop channel
no huntstop
!
ephone 1
mac-address 0010.abcd.abc0
button 1c1,2
!

The huntstop channel says that if the DN is on an active call, then don’t ring the 2nd channel. By telling it not to ring the second channel we go to the next ephone-dn and enforce our busy trigger rule. If we didn’t do this, our max calls would be 4, and our busy trigger would be 4. That’s okay, if you want 4 & 4. The next part, no huntstop, is the piece that actually tells CME to keep looking for the next match since we skipped on ringing the 2nd channel. It will then find ephone-dn 2 and ring the first channel. If we had a call active on the 2nd channel, our huntstop channel command tells CME to stop searching and play the busy signal.

We tacked those two dn’s on the phone with a slight variation to the button command. Did you notice the 1c1,2? When using overlays we remove the : and place a code there to indicate what type of overlay it is. In this case we used the ‘c’ code to provide call waiting for the second incoming call. You can look at the Cisco docs included below for info regarding all the possible overlay codes.

That’s it folks, its just that easy!

Relevant Cisco docs:
CME Command Reference – ephone-dn command
CME Command Reference – Button command

Determining Last Login for Unity Subscriber

Some organizations don’t believe in deleting the accounts of employees who are no longer with the company. Perhaps you work at one of these organizations. Problems arise here if we’re not careful, particularly the fact that we end up with an awful lot of subscribers eating up licenses. Now, if you’re in a small company you probably already know who’s who and when they move on. If you’re in a larger company that hasn’t formalized the employment termination process though, you could have a bit more trouble keeping tabs on who should still be a subscriber in Unity, and who shouldn’t.

One way that you can keep tabs on this, even if your HR department isn’t telling you, is to watch last logins. Last logins provide you a quick way to determine the last time a subscriber logged in and checked their voicemail. If your report returns a last login of say, 30 days ago, you can verify the validity of the account. To create this report, we’re going to use a tool in the Unity Depot called Subscriber Information Dump (SID). SID allows us to run customized reports against our subscriber base to determine all kinds of things. Today, we’re just going to extract the user’s name and last login.

For our first report, we’re going to get on our Unity box (using VNC is recommended) and launch the tools depot located on the Desktop or in Start -> Programs. We’ll select All Subscribers from the top drop down and then select a path where we’ll save the data. You can save it directly in the default location on C:\ or you can specify a directory of your choice. Select commas as your separation value, this allows you to open up the data as a CSV file in Excel and massage any data you need to. The next part has to do with quoting. We want to make sure we always quote fields that have commas in them. This will insure that we won’t mess up the formatting of our CSV file.

Here’s the important part – select only the fields you are interested in. Sure, you can return all the fields if you want, but you’re not likely to use the information there if you’re just interested in last login! All you need is First Name, Last Name, Alias, and Last Login. It is important you get Alias in case you have two John Doe’s in your organization. You need to know which one to remove from Unity, and the alias will differentiate between the two. Go ahead and run the report by clicking on Start. After the report is completed, you can either copy it off your Unity Server, or view the CSV file (in Wordpad or Notepad) directly on the server.

So that’s it! If you want to make sure you’re running your reports with the latest version, hop over to Cisco Unity Tools and grab an updated copy if need be.

Written Blueprint: Codecs and Regions

In the first installment of the Written Blueprint Series, we’re going to go through what codecs and regions are. This installment series will walk through the entire written blueprint for the CCIE voice exam. I’ll try and feature the book that I think covers the topic the best along with each post.

Codec: A codec is a compressor/decompressor. When we talk about codecs in voice, we typically use the exact name of the codec, such as G.711 or G.729. G.711 is a codec traditionally used within a LAN environment because there is enough banwidth to support its bandwidth requirements (~80kb/s). G.729 is generally regarded as an excellent WAN codec because of its decent fidelity and low bandwidth requirements. Cisco phones are already preloaded with the software they need to use the codecs available within the CallManager system.

Region: A region within CallManager is a logical entity that defines the sections of your network, typically following a geographic naming convention. So, if you have an office in San Diego, you would create a Region for that office called San_Diego (or SD, SanDiego, etc.). As you add sites, you build a matrix within CallManager that identifies the codec to be used between locations.

For example, let’s say you have two sites: San Diego and Seattle. You want to use G.729 between the sites to save on WAN bandwidth but you want to use G.711 within the site because you have plenty of bandwidth within the LAN. You will configure your Region matrix as displayed in the table below.

From Region To Region Codec

Seattle San_Diego G.729

Seattle Seattle G.711

San_Diego Seattle G.729

San_Diego San_Diego G.711

Seems pretty easy eh? It is.

Here’s the most important thing to remember
though… Just because you specify a codec in the region matrix, does not mean that is the only codec that will be used. By selecting say, G.711, you are only telling CallManager to not use a codec that would exceed the bandwidth required by G.711. Which means a phone could use G.729 if necessary. Since G.729 (8kbps) is less than G.711 (80 kbps) it will go through as G.729. But Wideband which is ~280 kbps won’t.

Perfect example: say you have a dial-peer that was G.729 only on a gateway somewhere. The phone would back down to G.729 when it needed to use that dial-peer.

PRI Backhaul with MGCP to CCM

So CallManager PRI backhaul doesn’t want you to use application mgcp app according to the first part of this Cisco documentation. It clearly states do not use the application command on the POTS dial peer.

What’s great is, if you scroll down to the bottom of the document, it shows 3/0:0 as having application mgcpapp. What’s even better is that I’ve never seen a PRI use slot 0 for its D-channel. So a PRI would not be 3/0:0 but rather 3/0:23. I’ve already sent a note to cisco ;)

Best practice for PRI MGCP (not including the Global MGCP commands themselves) in my experience:

!
controller T1 1/0
framing esf
linecode b8zs
pri-group timeslots 1-24 service mgcp
!
interface Serial1/0:23
no ip address
encapsulation hdlc
isdn switch-type primary-ni
isdn incoming-voice voice
isdn bind-l3 ccm-manager
no cdp enable
!
voice-port 1/0:23
description PRI to Carrier XYZ
!

Troubleshooting OSPF Instability with hidden commands


Just recently I was working on a network that was experiencing route flapping within OSPF. I noticed it when I issued a show ip route on a couple boxes and saw that the routes were less than a minute old on all OSPF advertised paths. Something was broken and causing SPF to keep running every minute or so. This was a large network and it wasn’t mine. I did not have up to date network diagrams so there were a lot of unknown devices out there running OSPF that could be the source of the problem. I first started with show ip ospf neighbor on the box I was on, to see if I had any one that was bouncing directly connected to the box I was on. No luck. I kept trying this same command on a couple different boxes until I realized this was taking too long. I needed a fast way to determine what was causing the issue. Enter in a hidden IOS command to solve the problem…

Inside Cisco IOS, there are a lot of commands that are hidden for one reason or another. Some of them are harmful such as test crash and others are very helpful such as csim start. This time, I was using debug ip ospf monitor to solve my problem. I picked up the command from the Troubleshooting IP Routing Protocols book. This book is THE book you must have on your desk if you’re using dynamic routing protocols in your environment.

Essentially, the debug command is going to tell us what Link State Advertisement (LSA) is out there flapping. When I say flapping, I’m talking about routes with very low ages that consistently have their age reduced due to removal and reinsertion into the routing table. Here’s an example route that is flapping.

Incrementing since last flap:

Router#show ip route | i (Ten|00:)
O 1.1.1.0/24 [110/64] via 2.2.2.2, 00:00:32, TenGigabitEthernet2/1
Router#show ip route | i (Ten|00:)
O 1.1.1.0/24 [110/64] via 2.2.2.2, 00:00:49, TenGigabitEthernet2/1
Router#show ip route | i (Ten|00:)
O 1.1.1.0/24 [110/64] via 2.2.2.2, 00:01:23, TenGigabitEthernet2/1

And it just flapped, so route is back to 1 second old:

Router#show ip route | i (Ten|00:)
O 1.1.1.0/24 [110/64] via 2.2.2.2, 00:00:01, TenGigabitEthernet2/1

Using the show ip ospf command I was able to see SPF was going nuts:

Router#show ip ospf
Routing Process “ospf 100″ with ID 1.1.1.1
Supports only single TOS(TOS0) routes
It is an area border
SPF schedule delay 5 secs, Hold time between two SPFs 10 secs
Minimum LSA interval 5 secs. Minimum LSA arrival 1 secs
Number of external LSA 8. Checksum Sum 0x48A01
Number of DCbitless external LSA 0
Number of DoNotAge external LSA 0
Number of areas in this router is 18. 17 normal 1 stub 0 nssa
Area BACKBONE(0)
Number of interfaces in this area is 3
Area has no authentication
SPF algorithm executed 15378 times

I changed the IP’s to protect the innocent… But, have a look at that SPF counter. Over 15000 times! What’s worse was, this was not just one route flapping. Because of the link changes it was causing an entire SPF recalculation on all routes. Nowadays, we don’t care so much about full SPF versus incremental SPF because it isn’t 1996 anymore. Router processor for the most part on the big boxes, is up there and can handle it. Still though, its a bad thing because it means something in your network is broken.

So, I needed to see who it is that’s causing this and why that box is broken. First we issued a terminal monitor command to log output of the debug to my vty and then turned on the debug ip ospf monitor. The answer came within a few moments.

Router# debug ip ospf monitor
OSPF: Schedule SPF in area 0.0.0.0
Change in LS ID 3.3.3.3, LSA type R

There we go! We have a router LSA for 3.3.3.3 that we need to go check out. So I hopped on over to that device and saw that indeed, we had an unstable link that required a troubleticket with the vendor for investigation. Since we had a backup circuit, I used a passive-interface to take it out of service for the time being.

Pretty useful stuff!

CiscoIPPhoneError Number=”0″

Talk about an error that just doesn’t make any sense! The Cisco documentation discusses error numbers 1-4 but never talks about error 0. I was running into this problem a number of times when I was trying to get paging to work with an InformaCast paging server, Cisco 7941 and 7971 phones, and a multicast group that looked like it was broadcasting.

Everything pointed to an issue with the URL that was being posted to the phone. Something wasn’t authenticating right, or perhaps it wasn’t properly formed. I eventually discovered that I had a number of issues.

1. The InformaCast documentation shows two port numbers to be used – 8081 and 8084. You need to go into the Quick Page assistant to determine which port number you should use along with the proper URL. My best guess on the 8084 vs 8081 issue is that this is based somehow on the version of InformaCast. I’m no expert on IC and the documentation doesn’t really say (from what I can tell).

2. It seems that all of the parameters must be defined in the IP Phone Service. Even if you are not going to use them to form your page, the IP Phone Service must have them defined. I was working on a few things at once so I’m not 100% sure that this fixed the issue.

3. The username and password fields you put into the IC IP Phone Service are IC users, not CCM users! This was messing me up for a good five minutes.

4. Make sure you understand your dial codes, receipient groups, and member DNs. One thing that was messing me up was that I was trying to test paging my softphone. IP Communicator isn’t supported :)

Best of luck, and feel free to drop me a note if you’re running into error 0 and I’ll try to help!

Written Blueprint: CCM Redundancy – CallManager Groups & Device Pools

Cisco CallManager achieves redundancy through the combination of groups and device pools. The groups are usually one of the very first things you will configure when you begin configuring your new servers. When Cisco phones startup they download a configuration file from a server specified by DHCP options (150 or 66). This configuration file will contain information about which CallManager server they should be talking to. An IP Phone can be configured to use up to three CallManager servers, and an SRST reference, if so configured. In the event an IP Phone loses communication with its primary CallManager server, it will go to the next CallManager in its list. The CallManager servers are added to this list of CallManagers within the configuration file in two steps.

First, we create the CallManager server entries which specify the CallManager IP or hostname. We then must go to System -> CallManager Group and add the server entries to a group. The first CallManager listed in the group is the primary server. Typically, the naming convention used for the group is based upon the member servers. You can have multiple primary subscribers within a cluster, and you can have a CallManager server in multiple groups. This last point is necessary when discussing 2:1 redundancy.

Second, a device pool, which is where we specify all the generic parameters for a group of IP Phones, is created for our devices. By using settings at the device pool level, we can skip configuring the same parameters again and again for a similar set of IP Phones. To access device pool settings, go to System-> Device Pools.

The following two diagrams illustrate redundancy which can be achieved using CCM groups. In the first diagram, we have a traditional 1:1 redundancy scheme. In order to achieve this solution, we would create one CCM group for each primary and backup pair of servers. We could then share the load of our phones amongst the two groups by creating two device pools. Each device pool would be tied to each CCM group we created. Then, we would assign half our devices to one device pool and half to the other. This would give us complete 1:1 redundancy for our environment for each half of our devices.

CCM-1to1-Redundancy

1:1 Redundancy is the best redundancy option because it is easier to provision, understand, and will allow you to do backups while still maintaining high availability for the other device pool. The con to 1:1 redundancy is that it is more expensive than the next option.

CCM-2to1-Redundancy

We can scale our redundancy down to a 2:1 loading solution by using 1 backup server for every two primary servers. Again, we would create two CCM groups. This time however, we will specify our primary server and a shared backup server. I say shared, because our two CCM Groups will each have the same backup server specified as server #2.

The primary drawback of using 2:1 redundancy is that you do not have a failover server while you are doing upgrades to your environment. However, 2:1 does cost less and is better than having no redundancy.

Here’s the Cisco Call Processing, Loading & Balancing documentation.

CallManager 5.x and LDAP

Cisco has really learned a lesson and has decided that it was probably best to avoid integrating with Active Directory and extending the schema. This probably had a lot to do with people jacking up their AD when they were integrating or post-integration. CallManager 5 has the answer. Let’s have integration, but keep it read-only. This allows CallManager to sync and pull user info without necessarily being part of the domain.

The CallManager 5.x and AD (or Netscape Directory) integration is now broken up into two specific parts. By the way, we’ll use AD in place of corporate directory since most folks use AD. Netscape directory can also be integrated as well – but to keep it simple we’ll just use AD.

Synchronization (the import of user information from AD) in CallManager uses the DirSync utility to import user information from the LDAP directory specified in the configuration. You can specifiy multiple sources for import, and even secure the communication using SSL/TLS.

Authentication is the process by which CallManager will perform an authentication proxy request for an application served by CallManager. This includes apps such as IPMA, Attendant Console, Assistant Console, CTI, etc. Major drawback to the authentication is that it will only search one LDAP directory and one search base. Therefore you must specify the search base at the highest level within the tree to insure you’re always capable of finding the user object you’ve imported in the synchronization process.

Do you have any experiences with CCM 5 and LDAP integration? Success story or horror story? Let me know!

Flash-based Music on Hold

Reducing bandwidth is key in corporate WANs. Flash-based MOH provides this functionality at no additional cost.

Music on hold servers are, by traditional design, the CallManager servers. Because of this practice, there are a number of corporations’ offices consuming bandwidth if their clusters are centralized in a data center or corporate office. In the event that the customer can agree to a method by which they can simplify their music on hold strategy using flash-based MOH, you can accomplish a major win on the war on rising bandwidth needs.

First and foremost, evaluate whether this solution is viable for you. If you can localize your music on hold traffic and use a looping music file on the flash, then this is perfect. If you’re very set on using a live stream, then consider multicast music on hold and the proper deployment of PIM. If you have a specific need for localized live music (the local office has an existing Muzak setup perhaps), then you can still use a 4-wire E&M trunk to accomplish localized streaming. For the purposes of this post, we’re only going to consider option 1 – localizing music using a file on the flash.

If you’ve decided that you can use this solution, then let’s next insure you can meet the requirements for the technology. You must be able to provide a file that will first, fit on your flash, and second, be formatted correctly to be streamed. The first objective is straightforward and should be easily accomplished. Your streaming music should not be much more than a megabyte or two at most. Remember, most people aren’t on hold that long, and have grown accustomed to music repeating. Second, the easiest way to get your music in the right format is to take a regular wav file and put it through the MOH translator service on CCM. This translator will pop out a G.711 file for you which you can distribute to your sites.

For the actual configuration and setup, you only need to accomplish a few steps to get everything up and running. First, push the file out to your remote sites simply using ftp to upload the file to the flash on your remote site router. Once it is on the router, you will enter your SRST configuration (call-manager-fallback) to begin the configuration of the file. You can have multiple music files (maybe a song for Christmas time, another that has springtime advertisements, etc.) but the only one that will play is the one configured within your SRST config.

Once in SRST configuration mode, you will need to specify the file source and multicast MOH source IP and port. Note these settings, we’re going to use them later when we configure the CCM multicast moh servers.

One last item to configure on the gateway is the ccm-manager music-on-hold command in global config. This enables the device to stream music on hold while we’ve got callmanager. The SRST config and ccm-manager commands are very important!

Now, to the CallManager to make these changes. Typically, CCM is configured with a device pool, that has a MRGL–>MRG–>MOH Server relationship. Inside the Device Pool (or Common Profile if in 4.2) you have the MOH Audio Source for network and user. If your site is already using Multicast MOH today, you can skip this paragraph and go to the next. If you’re not doing Multicast streams today, then keep reading. You can either add a new MOH Audio source (consult Cisco docs) or you can change one of your existing sources to support multicast. Regardless, you must have at least one audio source that is multicast enabled.

Once you have configured your source we will configure at least one MOH server within the MRG–>MRGL–>Device Pool relationship to support multicast. If you already have multicast today, you have likely adjusted your TTL to accommodate the scope of your network. If you do not have multicast, you will need to enable multicast on the server within the MRG/MRGL/DP you are attempting to modify. Once enabled, adjust the TTL to 1. Then, insure your increment value is set to “Increment on Port”. This last statement here is what drives the moh multicast command on our routers. If we ever adjust our MOH audio sources on the CCM server, CCM will automatically increment every source up a port number. This can be bad if you’re not aware of the caveat. To insure this does not happen, make sure you always reset your MOH servers after adjust your MOH Audio Sources.

Make sure that our MOH Server/MRG/MRGL/DP all support the multicast audio source and server we configured, reset the device pool. (This will reset all phones, make sure you’re ready to do this!) If everything is configured correctly, we should be able to login to our remote office router and issue show ccm-manager music-on-hold and see a live stream once a caller is placed on hold.

Questions? Comments? Let me know.

Reference Link: Cisco documentationfor Flash-based MOH