Call Manager Express – Class of Restriction (COR) Lists
I spend most of my time as a voice engineer dealing with Call Manager and Contact Center Express, but once in a while I get thrown a “small” problem involving Call Manager Express. CME is generally deployed for smaller customers (<100 phones) who don’t need all the fancy features or capacity offered by full-blown Call Manager. Unfortunately, most of my customers are fairly large so I don’t get to play with CME often.
A few weeks ago I had some spare cycles so I was tossed into a case for a customer having issues with their CME and some FXO lines. Summary: they have 8 FXO lines, 6 of which in a hunt group, and 2 need to be assigned for 2 specific individuals at the company. The hunt group configuration was tricky, but let’s focus on the 2 extra lines. They want these FXO ports setup so that User1 and User2 always use 0/2/1 and o/2/2 (respectively) for outbound calls, so that when people call back they get the right person. This would be a piece of cake in UCM: create a special partition and CSS for each of those users, add route patterns pointing to the correct FXO as the gateway, and apply the CSS to the user phones. 15 minutes of work, tops. Except CME doesn’t have Partitions and Calling Search Spaces.
Call Manager Express does have COR Lists though. They are somewhat analogous to partitions and CSS, with some minor differences. First, let’s start setting them up:
! This is basically creating a list of partitions (members) dial-peer cor custom name 911 name local name domestic name intl name local-user1 name local-user2 name domestic-user1 name domestic-user2 name intl-user1 name intl-user2
So there are all of our partitions. Now we need to assemble them into “cor lists” which are just like Calling Search Spaces:
dial-peer cor list outbound-all member 911 member local member domestic member intl dial-peer cor list outbound-user1 member 911 ! Make sure everyone can dial this member local-user1 member domestic-user1 member intl-user1 dial-peer cor list outbound-user2 member 911 ! Make sure everyone can dial this member local-user2 member domestic-user2 member intl-user2
The next step is to assign these lists to the DN on the phones. It is important to assign a cor to every ephone-dn because any DN without a cor will take precedence and can call out any dial peer that matches.
ephone-dn 30 number 1055 cor incoming outbound-user1 ephone-dn 31 number 1056 cor incoming outbound-user2 ! All other ephone-dn will use outbound-all.
The user side is complete, so the next step is to make sure our outgoing dial peers are selected properly. We will need to create individual cor lists for each dial peer so that we can select between the different call types and also select for the user. You will see how this configuration could quickly get out of hand if you had many users who want dedicated lines like this, especially if you’re using FXO ports. I am also not including any blocked number patterns (900, 976, etc) so this configuration is pretty short. A PRI configuration would be much shorter on the dial peer side.
dial-peer cor list call_911 member 911 dial-peer cor list call_local-all member local dial-peer cor list call_domestic-all member domestic dial-peer cor list call_intl-all member intl dial-peer cor list call_local-user1 member local-user1 dial-peer cor list call_domestic-user1 member domestic-user1 dial-peer cor list call_intl-user1 member intl-user1 dial-peer cor list call_local-user2 member local-user2 dial-peer cor list call_domestic-user2 member domestic-user2 dial-peer cor list call_intl-user2 member intl-user2
Whew, that’s a lot of typing and we’re not even done yet. I should write a script to generate these. The final step involves assigning these lists to the actual outbound dial peers so that the correct one is selected based on the user making the phone call. I am going to assume that all of your dial peers are otherwise setup correctly, so I will only include the cor configuration here:
dial-peer voice 21 pots port 0/2/1 corlist outgoing call_911 dial-peer voice 22 pots port 0/2/2 corlist outgoing call_911 ! Repeat the above for all 911 dial peers of course. dial-peer voice 31 pots port 0/2/1 destination-pattern 9[2-9]..[2-9]...... corlist outgoing call_local-user1 dial-peer voice 32 pots port 0/2/2 destination-pattern 9[2-9]..[2-9]...... corlist outgoing call_local-user2 ! All other local dial peers will get "corlist outgoing call_local-all" dial-peer voice 41 pots port 0/2/1 destination-pattern 91[2-9]..[2-9]...... corlist outgoing call_domestic-user1 dial-peer voice 42 pots port 0/2/2 destination-pattern 91[2-9]..[2-9]...... corlist outgoing call_domestic-user2 ! All other domestic dial peers will get "corlist outgoing call_domestic-all" dial-peer voice 41 pots port 0/2/1 destination-pattern 9011!# corlist outgoing call_intl-user1 dial-peer voice 42 pots port 0/2/2 destination-pattern 9011!# corlist outgoing call_intl-user2 ! All other international dial peers will get "corlist outgoing call_intl-all"
So how does this all work? When User1 picks up their phone to make a call, CME looks at the corlist “outbound-user1″ which contains “911, local-user1, domestic-user1, intl-user1″ as members. When CME starts looking at dial peers to match the number dialed, it looks for dial peers that have a corlist that contains the same members as the ephone-dn corlist, then a dial peer that has no corlist at all. This is why it is important that you assign a corlist to all ephone-dn and dial-peer configurations so calls don’t slip through (unless you want them to).
You’ll notice that I made no effort to force 911 calls out any specific port. I left this open so that in an emergency any available port will be used, because it really doesn’t matter in that case. You also need to make sure that every outbound dial peer has a corlist associated, otherwise that port can be used by any phone DN for outbound calls. Of course you want to do extensive testing after this configuration, especially for 911 calls (check with your local PSAP for testing information, they’re not all easy to deal with).
I found most of the information for this config in the Configuring Class of Restrictions document plus a little fiddling on my own.Cisco, Technology comment below, or link to this permanent URL from your own site.