Route Patterns and Route Filters

This section introduces the basic building blocks of call routingroute patterns and route filters.

A route pattern is an address, much like your mailing address. When a user dials a number, CallManager tries to figure out to which destination to deliver the call. It performs this function by looking at all the route patterns you have configured and then figuring out which route pattern is the best fit for the number the user has dialed. CallManager then attempts to offer the call to the endpoint that you have associated with the route pattern.

Do not confuse the concept of route pattern that this section discusses with the Route Pattern Configuration page in CallManager Administration. The Route Pattern Configuration page allows you to associate an address with a destination and contains other settings that let you modify the calling and called numbers. One of the fields on the Route Pattern Configuration page takes a route pattern as input; so does one of the fields on the Translation Pattern Configuration page, as does the Hunt Pilot Configuration page. Figure 2-3 shows the field on the Translation Pattern Configuration page that takes a route pattern as input.

Figure 2-3. Route Pattern Field in the Translation Pattern Configuration Page

Many different CallManager Administration pages allow you to enter route patterns. For example, the directory numbers you assign to phones are actually route patterns, as are Meet-Me conference numbers, message waiting on/off numbers, call park numbers, call pickup group numbers, translation patterns, and hunt pilots.

A route pattern is a sequence of digits and other alphanumeric characters. When the digits are all numeric, as is usually the case with directory numbers, CallManager rings the device with which you have associated the route pattern only when a user dials the exact numerical sequence. By including non-numeric characters called wildcards in a route pattern, you tell CallManager to ring the associated device for a range of dialed numbers. For instance, if you assign the route pattern 8XXX to a device, CallManager rings the device when users dial numbers in the range from 8000 to 8999.

Route filters are a special range-refining mechanism. You use route filters with route patterns that contain the special @ wildcard. The @ wildcard allows you to represent the PSTN with a single route pattern. When you must limit the types of PSTN calls (such as emergency, local, long distance, and international) that users can place, route filters limit the scope of the @ wildcard.

This section discusses the following topics:

Wildcards

A house address is a specific sequence of digits and alphabetic characters that allows the postal service to identify a package's destination. A route pattern is like a house address for a callable endpoint; unlike a house address, however, the addresses that a telephone system uses must provide a means by which the administrator can specify a range of addresses. You can enter individual addresses for every phone your network manages, but if users need to dial out of a gateway to the PSTN, the number of individual addresses becomes too vast to configure. Clearly, requiring the configuration of every single telephone number in the PSTN is not reasonable.

Route patterns use wildcards, which are digit placeholders that permit you to specify quickly a range of matching digits. For example, instead of configuring every individual number from 7000 to 7999 to route a call across a gateway to another network, by configuring 7XXX, you can tell CallManager to send all calls that begin with the digit 7 and are followed by three digits (in the range 0 to 9) to the gateway.

There is more to it, but first look at the basic wildcards, which Table 2-1 summarizes.

Table 2-1. Wildcard Summary

Wildcard

Description

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #

These look like digits, but they are actually simple wildcards. Each matches exactly one occurrence of the corresponding digit in a dialed digit string.

[xyz...]

This notation allows you to specify a set of matching digits. For example, [357] matches one occurrence of either the digit 3, 5, or 7.

[...x-y...]

Placing a hyphen between any two digits within square brackets causes one occurrence of any digits within the range to match, including the digits themselves. You can use range notation along with set notation. For example, [3-69] matches one occurrence of a digit 3, 4, 5, 6, or 9.

[^x-y]

If the first character after the open angle bracket is a carat, the expression matches one occurrence of any digit (including * and #) except those specified. For example, [^1-8] matches one occurrence of a digit 9, 0, *, or #.

wildcard?

A question mark following any wildcard or bracket expression matches zero or more occurrences of any digit that matches the previous wildcard. For example, 9[12]? matches 9, 91, 92, 912, 9122, 92121, and many others.

wildcard+

A plus sign following any wildcard or bracket expression matches one or more occurrences of any digit that matches the previous wildcard. For example, 3[1-4]+ matches 31, 3141, 3333, and many others. Note that the simple digit string 3 would not match this pattern, because the + wildcard requires that at least one digit matching the previous wildcard be consumed.

X

The X wildcard is a convenience wildcard that matches one occurrence of any digit in the range 0 to 9. This wildcard is functionally equivalent to the range expression [0-9].

!

The ! wildcard is a convenience wildcard that matches one or more occurrences of any digit in the range 0 to 9. This wildcard is functionally equivalent to the range expression [0-9]+.

. and @

The section "Other Wildcards (@ and .)" discusses these wildcards.

Route Patterns and grep(1)

UNIX users might have noticed a strong similarity between route patterns and regular expressions. UNIX has a robust command line interface that offers many elegant text-processing tools. One tool, grep(1), uses regular expressions to fulfill a common need for those who regularly work with command line interfaces, searching through a text stream for the occurrence of a specified word.

For example, if you had a directory containing text files of letters and memos and you needed to find all files that related to your taxes, you might tell grep(1) to look for the word tax. However, because tax might start a sentence, a simple search for tax would fail to find occurrences of the capitalized Tax. Although you could do two different searches, combining the two searches and weeding out duplicate hits would be onerous, and furthermore, more complicated search criteria might vastly increase the number of individual searches that you would have to do. Using the regular expression [Tt]ax is one way you can find all instances of the word tax, both capitalized and lowercase.

To do the search, grep(1) looks through every individual line of every file looking for specific substrings that match the general pattern that the regular expression represents. Grep(1) prints all matching lines.

On the other hand, the call routing component does the opposite. It takes the specific sequence of digits dialed by the user and examines every general route pattern looking for the best single match.

Furthermore, although grep(1) concerns itself about what text strings currently match a regular expression, because users enter digits one by one, the call routing component must concern itself not only with which route patterns match the current sequence of dialed digits, but also with which route patterns might match if the user dials more digits. For example, the digit string 100 does not match the route pattern 1000; but if the user dials another 0, the route pattern matches perfectly. If CallManager were to take into account only the collected digits at a given moment in time, it would provide reorder tone to the user, because 100 does not match the route pattern 1000. Instead, CallManager realizes that if the user continues dialing, at some point in the future the collected digits might match a configured route pattern. Therefore, CallManager applies reorder tone only when the digits it has collected can never match a configured route pattern.

 

Dialing Behavior

The call routing component's behavior is sometimes counterintuitive, so a better understanding of the process it uses to select a destination can allow you to better troubleshoot problems.

In collecting a user's digits, the call routing component goes through the following steps:

Step 1.

Compare the current sequence of dialed digits against the list of all route patterns and determine which route patterns currently match. Call the set of current matches currentMatches.

 

  • If currentMatches is empty, the user's dialed digit string does not currently correspond with a destination.
  • If currentMatches contains one or more members, the call routing component determines the closest match. The closest match is the route pattern in currentMatches that matches the fewest number of route patterns. For example, the dialed digit string 2000 matches both route pattern 2XXX and 20XX. Although there are 1000 different dialed digit strings that match 2XXX, only 100 dialed digit strings match 20XX, and 20XX is therefore the closest match.

Step 2.

Simultaneously, determine whether different route patterns might match if the user were to dial more digits. Call the condition of having potential matches for a dialed digit string potentialMatches.

 

  • If potentialMatches holds true, the call routing component waits for the user to dial another digit. If the user dials another digit, the sequence of events restarts at step 1 using the new digit string.
  • If potentialMatches no longer holds true or a dialing timeout has elapsed, the call routing component selects a destination.
  • To select a destination, the call routing component looks at the closest match. The section "Example 2: Closest Match Routing" elaborates on closest match routing. If there is no closest match, the user's dialed digit string does not correspond with a destination. Furthermore, no more digits are forthcoming. CallManager rejects the call attempt.
  • Otherwise, CallManager extends the call to the device associated with the closest match.

Examples can best explain this process. The following sections present three examples:

For purposes of the examples, assume that CallManager has been configured with the route patterns in Table 2-2.

Table 2-2. Basic Dialing Behavior Example Route Patterns

Route Pattern

Description

1100

Matches exactly the dialed digit string 1100

1200

Matches exactly the dialed digit string 1200

120X

Matches dialed digit strings in the range 12001209

130

Matches exactly the dialed digit string 130

1300

Matches exactly the dialed digit string 1300

13!

Matches all dialed digit strings of any length that begin with digit sequence 13 followed by at least one more digit in the range 0 through 9

 

Example 1: Simple Call Routing

In this example, a calling user goes off-hook and dials 1100. On collecting the final digit of the dialed digit string, CallManager selects exactly one route pattern and offers the call to the associated destination.

When the user goes off-hook, CallManager begins its routing process. The current set of dialed digits is empty. The set of current matches, currentMatches, is empty. Every route pattern in the table is a potential match at this point, so the condition of having potential matches, potentialMatches, is true. Table 2-3 shows the current set of potential matches. As long as potentialMatches holds true, CallManager must wait for more digits.

Table 2-3. Patterns That Can Match, Example 1, No Dialed Digits

Currently Dialed Digits:

Current Matches

 

Patterns That Can Still Match

 

1100

 

1200

 

120X

 

130

 

1300

 

13!

Patterns That Can No Longer Match

 

When the user dials 1, the state of affairs does not change. No current match exists, and every route pattern in the table is a potential match.

Dialing another 1 eliminates many route patterns as possible matches. The patterns 1200, 120X, 130, 1300, and 13! are no longer potential matches for the dialed digit string. The only route pattern that remains in contention is 1100. However, currentMatches is still empty and potentialMatches still holds true. Even though 1100 is the only route pattern that the user could dial that might result in a match, CallManager must wait until the user does, in fact, dial the full string. Table 2-4 shows the current set of potential matches.

Table 2-4. Patterns That Can Match, Example 1, Dialed Digits 11

Currently Dialed Digits: 11

Current Matches

 

Patterns That Can Still Match

 

1100

Patterns That Can No Longer Match

 

1200

 

120X

 

130

 

1300

 

13!

The next 0 does not change the situation.

When the user dials the final 0, currentMatches contains route pattern 1100. Furthermore, as further digits would not result in a different route pattern matching, potentialMatches does not hold true. CallManager extends the call to the device associated with route pattern 1100. Table 2-5 shows the final set of potential matches.

Table 2-5. Patterns That Can Match, Example 1, Dialed Digits 1100

Currently Dialed Digits: 1100

Current Matches

 

1100

Patterns That Can Still Match

 

Patterns That Can No Longer Match

 

1200

 

120X

 

130

 

1300

 

13!

 

Example 2: Closest Match Routing

In this example, a calling user goes off-hook and dials 1200. On collecting the final digit of the dialed digit string, CallManager determines that two route patterns match the dialed digit string and uses the closest matching routing algorithm to select which route pattern is awarded the call.

The closest match for a dialed digit string is simply the route pattern that matches the fewest number of digit strings of equal length to the dialed digit string. For example, though the route pattern 1000 matches exactly one dialed digit string, the route pattern 1XXX, which matches any dialed digit string in the range 1000 to 1999, matches 1000 possible dialed digit strings. In any comparison between route patterns 1000 and 1XXX, the closest match routing algorithm gives route pattern 1000 precedence.

Closest Match Routing Versus Longest Match Routing

Cisco IOS gateways use a concept called longest match routing. Sometimes the term longest match is used to describe the type of pattern matching that CallManager does. But closest match routing and longest match routing are different.

With longest match routing, Cisco IOS gateways look at the number of initial digits that specifically match. For instance, given the dial peers 11.. and 1.11, Cisco IOS gateways prefer to match the former dial peer over the latter dial peer when the number 1111 is dialed, because the former dial peer begins with two specific digits and the latter begins with only one.

CallManager performs a calculation over the entire dial string. When comparing the dial string 1111 against patterns 11XX and 1X11, CallManager notes that, while 100 dial strings could match the first expression, only 10 could match the second, so CallManager matches the second.

In the end, unless you are doing wickedly creative things with your dial plan, it doesn't matter. Closest match and longest match routing work equivalently well in the field, because most dial plans use the initial digits of dial strings to disambiguate call routing.

The qualification "of equal length to the dialed digit string" in the preceding paragraph handles cases in which one or more of the route patterns being examined contains a wildcard that matches multiple dialed digits. For example, route pattern 1! matches any dialed digit string beginning with 1, and route pattern 13! matches any dialed digit string beginning with 13. The ! wildcard in these route patterns might match one, two, or more digits. As a result, the number of dialed digit strings that match either of these route patterns is infinite.

To decide among them, CallManager restricts the calculation of number of potentially matching dialed digit strings to only those of the same length as the dialed digit string itself. For instance, given the route patterns 1! and 13! and a dialed digit string of 13000, CallManager determines how many five-digit dialed digit strings could potentially match both route patterns. Thus, 13!, which matches 1000 five-digit strings, takes precedence over 1!, which matches 10,000 possible five-digit strings.

Returning to the example, when the user goes off-hook, CallManager begins its routing process. The current set of dialed digits is empty. The set of current matches, currentMatches, is empty. Every route pattern in the table is a potential match at this point, so the condition of having potential matches, potentialMatches, is true. As long as potentialMatches holds true, CallManager must wait for more digits. Table 2-6 shows the current set of potential matches.

Table 2-6. Patterns That Can Match, Example 2, No Dialed Digits

Currently Dialed Digits:

Current Matches

 

Patterns That Can Still Match

 

1100

 

1200

 

120X

 

130

 

1300

 

13!

Patterns That Can No Longer Match

 

When the user dials 1, the situation does not change. No current match exists, and every route pattern in the table is a potential match.

Dialing 2 eliminates route patterns 1100, 130, 1300, and 13! as possible matches. The patterns 1200 and 120X are the only route patterns that can match. Table 2-7 shows the current set of potential matches.

Table 2-7. Patterns That Can Match, Example 2, Dialed Digits 12

Currently Dialed Digits: 12

Current Matches

 

Patterns That Can Still Match

 

1200

 

120X

Patterns That Can No Longer Match

 

1100

 

130

 

1300

 

13!

The next 0 does not change the situation.

When the user dials the final 0, currentMatches contains both route pattern 1200 and route pattern 120X. Furthermore, as further digits would not result in a different route pattern matching, potentialMatches does not hold true and CallManager must select a destination. Because 1200 is a closer match than 120X, CallManager extends the call to the device that owns route pattern 1200. Table 2-8 shows the final set of potential matches.

Table 2-8. Patterns That Can Match, Example 2, Dialed Digits 1200

Currently Dialed Digits: 1200

Current Matches

 

1200

Selected: Matches exactly one number

 

120X

Not selected: Matches 10 different numbers

Patterns That Can Still Match

 

Patterns That Can No Longer Match

 

1100

 

130

 

1300

 

13!

 

Example 3: Wildcards That Match Multiple Digits

When a route pattern contains a wildcard that matches multiple digits, CallManager often must wait for an interdigit timeout to expire before it can route the call. This situation occurs because even if the route pattern containing the wildcard already matches, the user might intend to dial more digits. The most trivial example of this behavior is the route pattern !, which matches one or more occurrence of any number of digits. If a user dials 123 and matches the route pattern !, CallManager must continue to wait, because it has no assurances that the user is not planning to dial 1234. Routing the call prematurely might cause CallManager to send an incomplete dialed digit string to an adjacent network.

In the following example, a calling user goes off-hook and dials 1300. The route pattern 13! ensures that condition potentialMatches always holds true. Even if CallManager finds that route pattern 13! is the best match out of set currentMatches, CallManager must continue to wait, because it has no way of knowing if the user is really finished dialing.

In this example, when the user goes off-hook, CallManager begins its routing process. The current set of dialed digits is empty. The set of current matches, currentMatches, is empty. Every route pattern in the table is a potential match at this point, so the condition of having potential matches, potentialMatches, is true. As long as potentialMatches holds true, CallManager must wait for more digits. Table 2-9 shows the current set of potential matches.

Table 2-9. Patterns That Can Match, Example 3, No Dialed Digits

Currently Dialed Digits:

Current Matches

 

Patterns That Can Still Match

 

1100

 

1200

 

120X

 

130

 

1300

 

13!

Patterns That Can No Longer Match

 

When the user dials 1, the situation does not change. No current match exists, and every route pattern in the table is a potential match.

Dialing 3 eliminates route patterns 1100, 1200, and 120X as possible matches; however, 130, 1300, and 13! are still possible matches. Table 2-10 shows the current set of potential matches.

Table 2-10. Patterns That Can Match, Example 3, Dialed Digits 13

Currently Dialed Digits: 13

Current Matches

 

Patterns That Can Still Match

 

130

 

1300

 

13!

Patterns That Can No Longer Match

 

1100

 

1200

 

120X

The next 0 causes currentMatches to contain route patterns 130 and 13!. However, potentialMatches holds true, because the user's next digit might allow the same (13!) or a different (1300) route pattern to match. Table 2-11 shows the current set of potential matches.

Table 2-11. Patterns That Can Match, Example 3, Dialed Digits 130

Currently Dialed Digits: 130

Current Matches

 

130

 

13!

Patterns That Can Still Match

 

1300

 

13!

Patterns That Can No Longer Match

 

1100

 

1200

 

120X

The fact that route pattern 13! shows up in both the list of current matches and the list of potential matches needs explaining. When a route pattern ends with a multiple match wildcard (!, range expressions ending with ? such as [1-5]?, or range expressions ending with + such as [1-5]+), CallManager recognizes that even though the current dialed number matches the route pattern, the user might intend to dial more digits.

The final 0 eliminates route pattern 130 as a possible match. CurrentMatches contains route patterns 1300 and 13!. CallManager cannot attempt a closest match routing determination, however, because route pattern 13! not only matches the current digit string (1300), but also matches a longer digit string (13000). The ! wildcard at the end of a route pattern means that condition potentialMatches always holds true. Table 2-12 shows the current set of potential matches.

Table 2-12. Patterns That Can Match, Example 3, Dialed Digits 1300

Currently Dialed Digits: 1300

Current Matches

 

1300

 

13!

Patterns That Can Still Match

 

13!

Patterns That Can No Longer Match

 

1100

 

1200

 

120X

 

130

In such a case, the only event that allows CallManager to select a destination is an interdigit timeout. On receiving an interdigit timeout, CallManager knows that no more digits are forthcoming and can make a routing selection. In this example, after the timeout, CallManager selects route pattern 1300 using closest match routing rules. Table 2-13 shows the final list of potential matches.

Table 2-13. Patterns That Can Match, Example 3, Dialed Digits 1300 with Timeout

Currently Dialed Digits: 1300

Current Matches

 

1300

Selected: Matches exactly one number

 

13!

Not selected: Matches 100 different four-digit numbers

Patterns That Can Still Match

 

Interdigit timeout means no further digits are forthcoming

Patterns That Can No Longer Match

 

1100

 

1200

 

120X

 

130

CallManager uses two timers to manage the system interdigit timeout as described in the following paragraphs.

Because users who go off-hook might need to spend extra time to locate the address they want to dial (on a crowded directory lookup web page or in a printed directory), CallManager uses one timer to dictate how long it waits for users to dial an initial digit upon going off-hook. The service parameter Off-hook to First Digit Timer (msec) defines the duration of the initial digit timer in milliseconds. The default for this timer is 15,000 milliseconds.

Subsequent digits are controlled with the CallManager service parameter T302 Timer (msec). T302 Timer (msec) defines the duration of the interdigit timer in milliseconds. The default for this timer is also 15,000 milliseconds.

One feature of CallManager that can be surprising to administrators familiar with other call agents is that CallManager does not assign special significance to the * or # characters. CallManager treats these characters just as any other digit. On other systems, # is sometimes used as an explicit cancellation of the interdigit timeout.

For instance, when users are dialing international numbers, call agents typically cannot detect when the user has fully composed the dialed number, because doing so would require that the call agent have full understanding of every national dial plan in the entire world. When users of these systems (and CallManager) dial the international access code for the country they're in (011 for the United States, 00 in many European countries), the system generally must rely on an interdigit timer to expire before routing the call.

Some systems treat the # key specifically as an indication from the user that the system should immediately route the call based on the digits the user has already provided.

In contrast, CallManager treats the # just like any other digit. On one hand, doing this permits you to use it at the beginning of dial patterns, to represent special abbreviated dialing sequences or access codes. On the other hand, it means that to replicate the use of # as an interdigit timer you might have to configure additional patterns.

The pattern 9.011! is a very typical pattern that a North American administrator would use to direct international calls to a PSTN gateway. This pattern matches digit strings beginning with 9011 and followed by at least one more digit 0 to 9. Because of the digit analysis rules described in section "Dialing Behavior," CallManager routes the call only after the interdigit timer expires. CallManager must refresh the timer after each digit, because CallManager doesn't know whether the user intends to continue dialing.

If the user dials #, according to the dialing rules, CallManager must apply reorder, because the ! wildcard specifically excludes the * and # digits from its list of matched digits. This behavior is similar to the treatment you receive if you define a pattern such as 12[1-4] (which matches the digit strings 121, 122, 123, and 124) and instead dial 125. 125 is not a digit string that is encompassed by 12[1-4], so CallManager rejects the call.

So, if you want to support the ability to use # as an interdigit timer, what can you do? Simply, you take advantage of CallManager's standard dialing behavior, which treats # just like any other digit. If, in addition to 9011!, you define the pattern 9011!#, you can support not only cases where the user dials 9011+international number and waits for timeout but also cases in which the user terminates the dialed digit string with #.

This works because as long as the user is dialing digits after 9011, both provisioned patterns consist as potential matches. For instance, if the dialed digit string is 9 011 33 12 34 56 78 90, CallManager considers that pattern 9011! matches the currently provided digits but that it must also keep waiting because the user might dial another digit. On the other hand, while pattern 9011!# is not a current match, if the user were to provide another digit, this pattern might match.

If the user provides no further digits before the interdigit timer expires, CallManager routes the call based on pattern 9011!. Instead, if the user dials 9 011 33 12 34 56 78 90 #, the digits the user provides cease to match pattern 9011! (because ! doesn't include the # character among its matching characters), but pattern 9011!# does match. Furthermore, because all other potential matches are removed from contention and because the final character of the pattern does not leave open the possibility that the user might provide more digits, CallManager routes the call immediately, which is exactly the behavior you desired when you added pattern 9011!#.

Overlapped Sending and Non-North American Numbering Plans

The previous section demonstrates that when you end a route pattern with a wildcard that matches multiple digits (! or range expressions ending in + or ?), CallManager must wait for the system interdigit timeout to expire before it can route the call. So why would you ever end a route pattern with a wildcard that matches multiple digits?

Many countries have variable-length national dialing plans. Unlike North America, in which the length of a public telephone number is fixed at 10 digits, countries with variable-length dial plans require users to dial a varying number of digits to identify a number in the PSTN. For instance, in Finland, a numbering area equivalent to a North American area code is called a telealue (TLA). Some TLAs are a single digit (2, 3, 5, 6, 9), while other TLAs are two digits (13, 14, 15, 16, 17, 18, 19). Within a TLA, different carriers own different number blocks, which range from three to five digits long. For instance, one carrier controls block 422 in TLA 19, while another carrier controls block 4251 in TLA 19. In other words, one carrier handles calls made from within Finland that begin with the six digits 019422; the other handles calls from within Finland that begin with the seven digits 0194251. (Users within Finland dial 0 before dialing the TLA.) Finally, subscriber numbers range from three to five digits long. As a result, the number of a Finnish resident is of an indeterminate length (in practice, eight or nine digits, but this value does not reflect mobile numbers or service numbers).

Because the number of digits in countries with variable-length numbering plans is so dependent on the particular digits dialed, such countries rely on overlapped sending in the PSTN to figure out how many digits to collect and where to route the call.

Overlapped sending is kind of like a bucket brigade. Figure 2-4 shows the principle under which overlapped sending works. Figure 2-4 depicts a network of four nodes (A, B, C, and D) and three users (1, 2, and 3). User 1 wants to call User 3, whose number is 0123333, composed of a one-digit region identifier (0), a three-digit node identifier (123), and a three-digit subscriber number (333). User 2's number is 01244444, composed of a one-digit region identifier (0), a three-digit node identifier (124), and a four-digit subscriber number (4444).

Figure 2-4. Overlapped Sending in a Simple Network

In Figure 2-4, no single node in the network understands the complete dialing plan. Node A understands that when a user attached to node A dials 0, it should send the call to node B. When node B receives the call, it recognizes that it needs more digits to determine the final destination and asks node A to pass on any digits that node A receives from User 1.

Node B understands that it must collect three digits before it can route the call further. If the digits are 123, it routes the call to node C. If the digits are 124, it routes the call to node D.

Nodes C and D, in turn, manage their portions of the numbering plan. Node C understands that it must collect three digits to select a subscriber, while node D requires four digits to select a subscriber. When User 1 dials 0123, node B offers the call to node C.

Node C performs the same steps that node B does when it receives a call. Node C recognizes that it requires three digits to make a routing selection and asks node B to pass on any digits that node B receives from node A (which, in turn, receives them from User 1). When node C receives the last three digits, it routes the call to User 3. Thus, in the manner that water buckets pass from hand to hand in a bucket brigade until they reach the fire, digits pass from node to node until they reach the spot that needs them.

Versions of CallManager before release 3.1 do not support overlapped sending, but rather require that you provision knowledge of your entire network's numbering plan as route patterns. This requirement is acceptable for numbers within your network and for public numbers in a fixed numbering plan (because, for example, you can just configure a pattern like 9.XXXXXXXXXX to handle all patterns in the North American numbering plan). But variable-length numbering plans require the configuration of large numbers of such patterns just to provide network access.

Hence, in CallManager releases 3.0 and earlier, if you were an administrator in a country with variable-length numbering plans, you had three options.

At the time of this writing, most administrators choose the third option, but also configure a few specific route patterns to handle numbers that their users often dial, relying on closest match routing to eliminate the interdigit timeout. Users strongly dislike long interdigit timeouts, because while CallManager is waiting for the timeout to expire, users think that something is wrong with the system. One approach to eliminate interdigit timeout is to use # as an interdigit timeout character. For example, assume that your external access code to a variable-length dialing plan is 0. If you configure 0!, when users dial any digit sequence beginning with 0, CallManager waits for interdigit timeout and then ships all dialed digits to the PSTN.

However, if you also configure 0!#, users who have been trained to terminate all external dialed number sequences with # can avoid the interdigit timeout. Because the ! wildcard matches only the digits 0 through 9, dialing # removes the 0! route pattern from contention, leaving only 0!#.

Because 0!# is not terminated with a wildcard that matches multiple dialed digits, condition potentialMatches ceases holding true and CallManager can route the call immediately. Pressing # is analogous to pressing the SEND button on a call made from a cell phone.

The good news is that CallManager release 3.1 and later supports overlapped dialing, rendering much of the advice in this section obsolete. If your PSTN supports overlapped sending, simply configure your route patterns with the steering code alone (without the trailing ! wildcard); when CallManager offers the call to the associated gateway or route list, the PSTN prompts CallManager to pass any further digits along.

The bad news is that CallManager supports overlapped dialing only for gateways with digital interfaces that use the Media Gateway Control Protocol (MGCP) protocol. If your network uses Cisco H.323 gateways for access to the PSTN, and your country uses a variable-length numbering plan, you must still choose from one of the three options this section presents.

Overlapped sending is built in to CallManager, but you must specifically indicate which patterns are candidates for overlapped sending. The route pattern setting Allow Overlap Sending tells CallManager whether it should consider the pattern as overlap-sending-capable.

Pre-4.0 versions of CallManager simply assumed that all patterns were overlap-sending-capable, but, as it turns out, this caused several problems. So long as digits arrived one at a time, it didn't really matter, because when CallManager matched the locally-configured pattern, it would simply offer the call to the destination gateway. If the destination gateway required more digits, it would simply request them. In the meantime, CallManager would queue up any dialed digits.

But problems arose with creative dial plans. For instance, examine the patterns 1234, as associated with an IP phone and the pattern 1XXXXXX, as associated with a gateway that could support overlapped signaling.

Before CallManager 3.1, if you provided the dial string 1234567 to the call routing component of CallManager, CallManager would match pattern 1XXXXXX instead of pattern 1234, because too many digits had been provided to match 1234.

When CallManager implemented automatic overlap sending, it had to start queuing up any additional digitsjust in case the destination happened to ask for more. So, after this automatic overlap sending behavior was implemented, dial plans started to break. When 1234567 was dialed, CallManager would assume that the digits 1234 more closely matched the IP phone and digits 567 should be queued up.

In practice, an IP phone would never ask for more digits to be sent to it for routing purposes. As a result, a series of fixes was phased in over releases to first exclude IP phones from participating in overlapped dialing and, then, because the problem could manifest across different gateways, to require you to specifically configure which gateways might ask for more digits and which ones will never ask for more digits.

Dialing Behavior Refinements

The section "Dialing Behavior," for purposes of clarity, describes a simplified version of CallManager's call routing logic. The actual process is more involved. This section discusses six refinements to the basic dialing procedure:

Urgent Route Patterns

As the preceding section mentions, when CallManager receives digits from the user, it waits to route the call until it is sure that it needs no more digits. A case in point is route patterns that end in a wildcard that matches multiple digits. CallManager must wait for the interdigit timeout to expire before it offers the call to the selected destination.

But if you need a call to route the very moment that a user provides sufficient dialed digits, you can use the Urgent Priority check box on the Route Pattern Configuration page to short-circuit the dialing procedure.

An urgent route pattern only has an observable effect if your dial plan contains overlapping route patterns. Your call routing plan contains overlapping route patterns if it is possible to dial a sequence of digits so that the call routing component can select a current match but must continue to wait for more digits because there are also potential matches. For example, if you assign directory number 99110 to a phone and also configure a gateway with route pattern 9.911 (for emergency services in North America), you create a dial plan with overlapping route patterns.

When a user in an emergency situation dials 9911, CallManager waits for the interdigit timeout to expire before routing the call, because CallManager does not know whether the user intends to dial 0 to complete a call to the station instead of the emergency response center.

You can use the Urgent Priority check box to protect yourself from this sort of configuration. By marking the 9.911 route pattern as urgent, you tell CallManager to route the call to the emergency center the instant that a user dials 9911. (Note, however, that in the example provided, marking the 9.911 route pattern as urgent has the side effect of preventing any user from dialing the phone with directory number 99110.)

Another common usage of the Urgent Priority check box comes into play for administrators in countries with variable-length numbering plans. The simplest configuration for countries with variable-length numbering plans is to configure a gateway with an outside access code (for example, 0) followed by the ! wildcard. However, this configuration introduces interdigit timeout into all external numbers that users dial. By configuring specific route patterns for numbers that their users commonly dial, administrators can eliminate the interdigit timeout for the commonly dialed patterns. Table 2-14 provides a sample configuration and explanation of a U.K. dialing plan.

Table 2-14. Sample U.K. Dialing Plan

Route Pattern

Priority

Description

9.00!

Normal

International calls.

9.0[1-57-9]XXXXXXX

9.0[1-57-9]XXXXXXXX

9.0[1-57-9]XXXXXXXXX

Normal

National calls, which can be 9, 10, or 11 digits (not counting the external access code), depending on the specific digits dialed after the 0[1-57-9] portion of the route pattern.

This kind of overlapping route pattern configuration means that users who dial a national number requiring a lesser number of digits (9 in this example) must wait for the interdigit timer to expire before CallManager routes the call, because CallManager cannot be certain that the user does not intend to dial further digits.

9.037[0485]XXXXXX

9.08[56]0XXXXXXX

9.0802XXXXXXX

Urgent

More specific numbers in the national network. Marking these as urgent means that when CallManager selects these as the best match, it stops the interdigit timer.

For instance, the first of these route patterns, 9.037[0485]XXXXXX, is a 10-digit number (not counting the external access code). The national route pattern 9.0[1-57-9]XXXXXXXX would normally match this route pattern, but the longer route pattern 9.0[1-57-9]XXXXXXXXX causes CallManager to keep the interdigit timer running. Marking 9.037[0485]XXXXXX as urgent causes CallManager to route the more specific route pattern immediately when a user dials it.

Two points about urgent route patterns to note especially:

Outside Dial Tone

Another subject that the call routing procedure described in section "Dialing Behavior" omits is providing outside dial tone. Outside dial tone is an indication that users expect when CallManager routes their calls off of the local network. To apply outside dial tone, check the Provide Outside Dial Tone check box on the Route Pattern or Translation Pattern Configuration pages for each route pattern that you consider to be off-network. For dialed digit strings that can match those patterns, the call routing component then applies outside dial tone at some point during the dial sequence.

Note

Outside dial tone is normally a different cadence from the tone provided when a user goes off-hook. However, by setting the service parameter Always Use Inside Dial Tone to True, you can cause the secondary tone played to sound exactly like the initial dial tone the user hears. This parameter does not otherwise affect CallManager's application of dial tone; CallManager still applies a secondary tone when its route configuration indicates that only patterns that require outside dial tone are candidate matches.

You cannot explicitly configure the point in the dialing sequence when CallManager applies outside dial tone. In addition, the decision to apply outside dial tone is completely independent of whether or where the route pattern contains a "." wildcard (described in the section ". Wildcard"). Rather, the call routing component applies outside dial tone at the point when all potential matches for a dialed digit string have had their Provide Outside Dial Tone box checked.

For example, consider the route patterns 9000 and 91XXXXXXX. 91XXXXXXX belongs to a trunk device and has had its Provide Outside Dial Tone box checked. Table 2-15 shows these route patterns.

Table 2-15. Outside Dial Tone Example 1, Configured Route Patterns

Configured Route Patterns

Provide Outside Dial Tone Check Box

9000

Do not apply outside dial tone

91XXXXXXX

Apply outside dial tone

When a user goes off-hook, CallManager applies inside dial tone. Table 2-16 depicts the current dialing state.

Table 2-16. Outside Dial Tone Example 1, Dialed Digits

Currently Dialed Digits:

Current Matches

 

Patterns That Can Still Match

 

9000

Do not apply outside dial tone

 

91XXXXXXX

Apply outside dial tone

Patterns That Can No Longer Match

 

Actions Taken: Apply inside dial tone

The user dials 9 and CallManager turns off inside dial tone. At this point, CallManager cannot tell whether the user intends to dial the on-network number 9000 or the off-network number 91XXXXXXX, so it waits for the next digit. Table 2-17 depicts the current dialing state.

Table 2-17. Outside Dial Tone Example 1, Dialed Digits 9

Currently Dialed Digits: 9

Current Matches

 

Patterns That Can Still Match

 

9000

Do not apply outside dial tone

 

91XXXXXXX

Apply outside dial tone

Patterns That Can No Longer Match

 

Actions Taken: Turn off inside dial tone

If the user then dials 1, CallManager eliminates the route pattern 9000 from its list of potential matches. At this point, all remaining candidates have had their Provide Outside Dial Tone box checked, and the call routing component chooses this moment to apply outside dial tone (see Table 2-18).

Table 2-18. Outside Dial Tone Example 1, Dialed Digits 91

Currently Dialed Digits: 91

Current Matches

 

Patterns That Can Still Match

 

91XXXXXXX

Apply outside dial tone

Patterns That Can No Longer Match

 

9000

Do not apply outside dial tone

Actions Taken: All route patterns require outside dial tone. Apply outside dial tone.

Now assume that an additional route pattern, 9124, has been configured. This route pattern could be a station device, call park, or Meet-Me conference code. Table 2-19 depicts this configuration.

Table 2-19. Outside Dial Tone Example 2, Configured Route Patterns

Configured Route Patterns

Provide Outside Dial Tone Check Box

9000

Do not apply outside dial tone

9124

Do not apply outside dial tone

91XXXXXXX

Apply outside dial tone

The steps that CallManager takes when the user goes off-hook and dials 9 are identical to those in Example 1. However, Table 2-20 shows that when the user dials the subsequent 1, CallManager waits, because at least one of the route patterns that can still match does not require outside dial tone.

Table 2-20. Outside Dial Tone Example 2, Dialed Digits 91

Currently Dialed Digits: 91

Current Matches

 

Patterns That Can Still Match

 

9124

Do not apply outside dial tone

 

91XXXXXXX

Apply outside dial tone

Patterns That Can No Longer Match

 

9000

Do not apply outside dial tone

Actions Taken:

As long as what the user dials keeps the route pattern 9124 in contention as a possible match, CallManager defers applying outside dial tone. For example, if the user continues by dialing 2 (yielding currently dialed digits of 912), CallManager continues to defer application of outside dial tone. However, if instead of dialing 2, the user dials 7 (yielding currently dialed digits of 917), the route pattern 9124 can no longer match, and CallManager applies outside dial tone, because all potentially matching route patterns have had their Provide Outside Dial Tone box checked.

If your system plays outside dial tone later in a dial string than you expect, be sure to look for route patterns that overlap with the route patterns for which you are expecting to hear outside dial tone, but for which you have not checked the Provide Outside Dial Tone box. These conflicting route patterns might be Meet-Me conference or call park ranges, in which case you need to change these ranges so that they do not conflict with the off-network route pattern in question.

On the other hand, if you receive outside dial tone sooner than expected (usually because you want to use access codes that are longer than a single digit), introduce a new route pattern that is identical to your access code, but do not check the Provide Outside Dial Tone box. (You can assign this route pattern to the same gateway or route list to which the full route pattern connects.) CallManager suppresses outside dial tone until the user dials the last digit of the access code. Table 2-21 presents an example in which the access code for external numbers is 999.

Table 2-21. Outside Dial Tone Example 3, Configured Route Patterns

Configured Route Patterns

Provide Outside Dial Tone Check Box

999

Do not apply outside dial tone

999.1XXXXXXX

Apply outside dial tone

Just as in the previous examples, CallManager applies inside dial tone when the user goes off-hook and turns off inside dial tone after the user dials 9. Table 2-22 depicts the dialing state when the user dials 99.

Table 2-22. Outside Dial Tone Example 3, Dialed Digits 99

Currently Dialed Digits: 99

Current Matches

 

Patterns That Can Still Match

 

999

Do not apply outside dial tone

 

999.1XXXXXXX

Apply outside dial tone

Patterns That Can No Longer Match

 

Actions Taken:

CallManager continues suppressing outside dial tone because route pattern 999 might still match the user's dialed digits. Table 2-23 presents the dialing state when the user dials another 9 (yielding dialed digits of 999).

Table 2-23. Outside Dial Tone Example 3, Dialed Digits 999

Currently Dialed Digits: 999

Current Matches

 

999

Patterns That Can Still Match

 

999.1XXXXXXX

Apply outside dial tone

Patterns That Can No Longer Match

 

Actions Taken: All potential matches require outside dial tone. Apply outside dial tone.

Adding the route pattern 999 thus suppresses outside dial tone until the moment that you want it applied.

Call Classification

While the Provide Outside Dial Tone check box dictates whether a caller hears outside dial tone at some point during dialing, it doesn't necessarily mean the call is an outside call. To actually classify a call as an outside call, use the Call Classification list box on the Route Pattern Configuration page. OffNet indicates that a given call is leaving your network (and may generate a charge); OnNet indicates that a given call is staying on your network.

The Call Classification list box also exists on CallManager gateway pages as well. It indicates how CallManager should classify calls arriving through the gateway, and it takes on the values OffNet, OnNet, or Use System Default. The Use System Default setting tells CallManager to classify calls according to the service parameter Call Classification.

Call classification works in conjunction with two service parameters (Block OffNet To OffNet Transfer and Drop Ad Hoc Conference) that attempt to control toll fraud. Toll fraud can occur, for instance, if someone within your organization places a call to an international destination, places the answering party on hold, calls another international party, and then transfers the parties together. Voilà! Free international callingat least for the called parties; unfortunately, you're paying the bill. A similar scenario is possible using the conference feature.

When you set Block OffNet To OffNet Transfer to False, CallManager permits all transfers. When you set Block OffNet To OffNet Transfer to True, CallManager looks at the call classification of the parties being transferred together before allowing the user to complete the transfer.

Call classification isn't really call classification; it's party classification. When a party places a call, he is classified according to the type of device from which he is calling. For instance, Cisco IP Phones are always considered OnNet devices (by the CallManager cluster to which they are registered). On the other hand, some gateways might attach to purely internal destinations (such as a legacy PBX in your network), while others may represent connections to the PSTN. CallManager has no way to tell the difference, so it relies on you to set the Call Classification box to define calls arriving through the gateway as OnNet or OffNet.

The party that receives a call is classified according to the call classification associated with his pattern or directory number. As with placed calls, the directory numbers associated with Cisco IP Phones are automatically classified as OnNet. Calls to gateway destinations must route through a route pattern, and they take their classification from the call classification you specify on the Route Pattern Configuration page.

So when an IP phone calls an IP phone, the calling party is classified as OnNet by virtue of her IP phone's implicit device setting and the called party is classified as OnNet by virtue of his IP phone's implicit directory number setting. When an IP phone calls out a gateway, the calling party is classified as OnNet by virtue of her IP phone's implicit device setting and the called party is classified according to what you've set on the Route Pattern Configuration page. For instance, even if the call goes to the PSTN, you might want to classify numbers that terminate within your local calling region as OnNet anyway. When a gateway calls an IP phone, the calling gateway is classified according to what you've set on the gateway configuration page and the called party is OnNet by virtue of being an IP phone.

When deciding whether to complete a transfer, the transfer feature looks at the classification of the parties on the call. If both are OffNet and the service parameter Block OffNet to OffNet Transfer is set to True, CallManager denies the transfer attempt and displays a message to the transferring party.

The conference setting works similarly, but instead of preventing the conference, it dictates under what conditions the conference should survive. The Drop Ad Hoc Conference setting takes the following values:

MLPP Precedence

Multilevel Priority and Preemption (MLPP) is a feature primarily used by military installations that want to provide a way for important personnel to be able to preempt lower-priority calls on a given phone.

MLPP relies on a standard form of addressing in which the precedence level of a call is indicated by an initial set of digits (01 to 04) on a dialed digit string. CallManager does not include such hard-coded rules in its call routing component; rather, it simply allows you to associate a precedence level with any matching string. For instance, digit strings beginning with 01 typically denote calls of priority flash override; by defining pattern 01XXXX and associating the Precedence Level Flash Override to it, you can conform to the military specifications. However, this approach also leaves you free to define number formats of your own if, for example, you want to have a number to break into your coworkers' calls at lunchtime to arrange vital details such as at which local restaurant to eat. Precedence level follows the call, and, if the call encounters an MLPP-enabled phone or gateway, the precedence level affects the how the call is treated. In the case of phones, it prompts the user and requires him to hang up on any lower-priority calls; in the case of gateways, it can force calls to clear if all circuits on the gateway are in use. Appendix A, "Feature List," provides additional information about MLPP.

The Route Pattern Configuration page and Translation Pattern Configuration page simply allow you to associate priority values with a call when the associated pattern matches. CallManager supports the following values, listed in order from lowest to highest priority:

  1. Default
  2. Routine
  3. Priority
  4. Immediate
  5. Flash
  6. Flash Override
  7. Executive Override

Unlike the other settings, the Default setting simply indicates that CallManager should not modify the precedence of a call when the associated route or translation pattern is selected. For instance, a call might arrive from another system prioritized as Immediate. If the provided digits match a local pattern with a Precedence Level of Default, the call remains Immediate. Setting any other value causes the selected value to overwrite whatever value the call already had.

Tip

Although it might seem a natural fit, Cisco recommends that you not use MLPP as a way to provide emergency calls higher priority than normal calls but rather recommends that you set aside dedicated trunks to the PSTN to be used for emergency calls.

This recommendation exists for a few good reasons. One issue is that emergency response centers often have limited trunk capacity. Certain emergencies might generate a high call volume, and, although using preemption might guarantee that each emergency call routes off your enterprise network, it doesn't guarantee (past the first few calls) that the emergency response center will receive all these calls. At some point, all the preemption logic accomplishes is the disruption of valid nonemergency calls without allowing redundant emergency callers to reach the emergency response center.

Among the nominally nonemergency calls that might be preempted are calls that, while nominally nonemergency, actually are part of your enterprise's emergency policies. Even worse, some of these nominally nonemergency calls might be calls from the emergency response center back into your enterprise. Some laws regarding 911 compliance require that the emergency response center be provided a caller ID that can be used by the emergency response center to dial back into the enterprise should an emergency caller somehow be disconnected.

Thus, by simply reserving some facilities specifically for 911 calls, you ensure that enough capacity exists for emergency callers to reach the emergency response center without running the risk of preempting equally vital calls that happen not to be specifically to 911.

 

The Route/Block Flag

When a given pattern matches, the default behavior that applies is to route the associated call. However, CallManager specifically permits to you block calls when a given pattern is matched. The Route Option field on the Translation Pattern Configuration and Route Pattern Configuration pages permits you to block a call: When you specify Block this pattern, CallManager rejects the call if the blocked pattern happens to be the best match for the dialed string. The rejection of the call is done with the cause value you select from the following list:

If the call came from a different system, through an ISDN or H.323 trunk, the cause value is returned as the Cause Information Element (IE) in Q.931 signaling. The system where the call originated can then apply different outcomes for the call, based on the cause that is returned. For instance, if you choose "unallocated number" as the cause for a blocked pattern, the calling system will be able to abort any further attempts to reroute the call through a different network, avoiding trying another path to reach a destination that is nonexistent. The section "Miscellaneous Solutions" later in the chapter provides some examples of the use of the Route Option field.

Forced Authorization Codes and Client Matter Codes

Forced Authorization Codes and Client Matter Codes provide a twist to CallManager's digit collection process or, to be more precise, a postscript. Both of these features kick in after CallManager finds the closest match for a set of dialed digits. They can be thought of as a second phase of digit collection.

You create forced authorization codes (FAC) and client matter codes (CMC) from the Feature menu in CallManager Administration. Forced authorization codes and client matter codes can consist of any string of numeric digits up to 16 digits long. Forced account codes also have an associated authorization level that takes values from 1 to 255. Higher numeric values correspond to higher authorization levels.

The purpose of forced authorization codes is to require users who place calls to certain destinationsmost often long distance or international callsto enter an authorization code to prove to CallManager that it should route the call.

When CallManager matches a pattern for which the Required Forced Authorization Code check box has been checked, instead of immediately routing the call, it plays a tone to the caller. The caller must enter a valid authorization code. Entry of digits is terminated either when the caller dials # or when the interdigit timer expires.

Upon collecting a forced authorization code, CallManager compares the authorization level configured with the code against the authorization level configured on the Route Pattern Configuration page. If the level of the code equals or exceeds the level on the pattern, CallManager proceeds with the call.

The purpose of client matter codes is to require users to enter an account number upon placing a call that CallManager logs into the call detail records (CDR) upon call completion. A reporting tool can later extract the account codes from the CDR database and properly bill clients for the time spent by the caller on the account.

Client matter codes operate nearly identically to forced authorization codes. When CallManager selects as closest match a route pattern with the Require Client Matter Code check box checked, it plays a tone to the caller and requires him to enter digits. Digit entry expires when either the caller presses the # key or the interdigit timer expires.

Route patterns support the simultaneous support of both forced authorization and client matter codes. When both are configured, CallManager first prompts for the forced authorization code and then prompts for the client matter code.

Forced authorization codes and client matter codes are not compatible with the Allow Overlap Sending flag. When either the Require Client Matter Code or Require Forced Authorization Code check boxes are checked, CallManager Administration disables the Allow Overlap Sending check box. Similarly, when the Allow Overlap Sending check box is checked, CallManager Administrator disables the Forced Authorization Code and Client Matter Code fields.

Other Wildcards (@ and .)

The section "Route Patterns and Route Filters" deliberately glosses over some of the most common wildcards you use: the @ and . wildcards.

@ Wildcard

Unlike the convenient wildcards X and ! and the range-matching notations, the @ wildcard does not represent any particular set of matching characters. The @ wildcard causes CallManager to add the set of national route patterns for the numbering plan that you specify in the Numbering Plan drop-down list on the Route Pattern or Translation Pattern Configuration pages. One way to think of the @ pattern is that it matches any number that you can dial from a residential phone in the country associated with the selected numbering plan. For example, specifying the @ pattern along with the North American numbering plan allows users to dial 911 and 555 1212 and 1 800 555 1212 and 011 33 12 34 56 78 90.

The @ pattern is a macro. When you configure it, CallManager looks up a list of route patterns associated with the dialing plan you have specified and adds them individually. This might cause CallManager to appear to violate closest match routing rules.

For instance, different individual route patterns in the North American numbering plan match the four dialing strings 911 and 555 1212 and 1 800 555 1212 and 011 33 12 34 56 78 90. Table 2-24 shows some sample route patterns.

Table 2-24. Sample Route Patterns in the North American Numbering Plan

Dialing String

Matching Route Pattern

Description

911

[2-9]11

Services (311, 411, 611, 911)

555 1212

[2-9]XX XXXX

Seven-digit dialing

1 800 555 1212

1 [2-9]XX [2-9]XX XXXX

11-digit dialing

011 33 12 34 56 78 90

011 3[0-469] !

International calls to the valid two-digit country codes in the range 3039

Assume that you associate the route pattern @ with a gateway that you want to use for all of your outbound calls. You have another gateway that you prefer to use for seven-digit local calls, so you configure the route pattern XXX XXXX on it. But when you dial 555 1212, your calls route out the first gateway. What is happening?

From your point of view, you configured the route patterns in Table 2-25.

Table 2-25. Closest Matching and the @ Wildcard, User-Configured Patterns

Route Pattern

Selected Destination

@

Gateway 1

XXX XXXX

Gateway 2

The specific route pattern XXX XXXX definitely appears to match fewer route patterns than the @ pattern. However, CallManager interprets @ as a macro expansion and actually treats your configuration as shown in Table 2-26.

Table 2-26. Closest Matching and the @ Wildcard, CallManager-Expanded Patterns

Route Pattern

Selected Destination

[2-9]11

Gateway 1

[2-9]XX XXXX

Gateway 1

1 [2-9]XX [2-9]XX XXXX

Gateway 1

011 3[0-469] !

Gateway 1

XXX XXXX

Gateway 2

When a user dials 555 1212, both [2-9]XX XXXX and XXX XXXX match. [2-9]XX XXXX is the more specific, and thus the call routes to gateway 1.

To avoid this situation, when you configure route patterns that you want to take precedence over the @ pattern, either be as specific as possible in describing your route patterns, or preferably, use route filters (described in the section "Route Filters").

. Wildcard

The . wildcard is unlike other wildcards in that it does not match digits at all. Rather, the call routing component uses the . wildcard to fulfill its secondary responsibility of address translation.

The . wildcard functions solely as a delimiter. When it appears in a route pattern, it divides the dial string into PreDot and PostDot sections. This has no effect on what digit strings the route pattern matches. Rather, you use the . wildcard in conjunction with digit discarding instructions.

Digit discarding instructions are one way to tell the call routing component which dialed digits should be kept before the call is offered to the selected device. Most digit discarding instructions can be used only in conjunction with route patterns that contain the @ wildcard. However, some digit discarding instructions rely on the PreDot section that the . wildcard defines. Further details about digit discarding instructions (and other transformations) are in the section "Digit Discarding Instructions."

Route Filters

As described, the @ wildcard is an all-or-nothing affair. When present, it matches all of the valid numbers for the national numbering plan specified, even those you would prefer your users did not dial.

Route filters are the mechanism by which you can cause CallManager to add only a subset of the route patterns for a given numbering plan. For example, using route filters, you can cause an @ pattern to match only the national emergency numbers. You can also use route filters to distinguish local calls from long distance calls or to limit access to toll services.

Route filters are a test that CallManager applies to individual route patterns in a numbering plan included by the @ wildcard. CallManager examines each valid route pattern in the numbering plan and applies the test. If a particular route pattern passes the test, CallManager adds it into its routing tables, and users are able to dial numbers that match the route pattern. If a particular route pattern fails the test, CallManager skips over it, and users are unable to dial numbers that match the route pattern. Route filters work by allowing CallManager to add only the subset of a numbering plan whose tags fulfill the constraints that operators impose.

Route Filter Length Limitation

The maximum length of the route filter, written out as a textual expression and not including any tags with values of NOT-SELECTED, must not exceed 1024 characters. If you need a more complicated route filter, you can usually split the route filter across several route patterns. For instance, suppose you need to define the route pattern 9.@ and apply a route filter that includes emergency calls, calls to information services, international calls, and calls to a variety of specific area codes. The total length of the filter required, however, exceeds the 1024-character limit.

Route filters of this length consist of several clauses connected by the OR operator. To resolve this problem, break the route filter up into several route filters where different clauses of the long route filter are joined by the OR operator. Then associate the smaller route filters with the duplicate copies of the route pattern.

For instance, the example filter describes emergency calls or calls to information services or international calls or calls to a variety of specific area codes. You can break up the lengthy clause by defining one 9.@ with a route filter for emergency calls, another 9.@ with a route filter for information services, another 9.@ with a route filter for international calls, and other 9.@ route patterns with route filters for the specific area codes. Because each route filter selects a different subset of the numbering plan, it is perfectly fine to reuse the same route pattern multiple times.

 

Tags

Tags are named substrings of individual route patterns for a given national numbering plan.

For instance, the route pattern 1 [2-9]XX [2-9]XX XXXX exists in the North American numbering plan. It is composed of four sections. The first section, 1, denotes the call as a toll call. The second section matches an area code. The office code and the subscriber follow. The numbering plan file for the North American numbering plan encodes this knowledge as the tags LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, and SUBSCRIBER. In contrast, the route pattern [2-9]XX XXXX contains only the OFFICE-CODE and SUBSCRIBER tags.

Table 2-27 shows the tags that the North American numbering plan contains, and it provides representative digit strings for each tag. Bold type in Table 2-27 indicates the section of the example number that corresponds to the listed tag.

Table 2-27. Tags in the North American Numbering Plan

Tag Name

Example Number

Description

AREA-CODE

1 214 555 1212

The area code in an 11-digit long distance call

COUNTRY-CODE

01 1 33 1234567890 #

The country code in an international call

END-OF-DIALING

01 1 33 1234567890 #

The #, which ends interdigit timeout in international calls

INTERNATIONAL-ACCESS

01 1 33 1234567890 #

The initial 01 of an international call

INTERNATIONAL-OPERATOR

01 0

The digit that denotes the operator component of an international call

LOCAL-AREA-CODE

214 555 1212

The area code in a 10-digit local call

LOCAL-DIRECT-DIAL

1 555 1212

The initial 1 some seven-digit calls require

LOCAL-OPERATOR

0 555 1212

The initial 0 some operator-assisted seven-digit calls require

LONG-DISTANCE-DIRECT-DIAL

1 214 555 1212

The initial 1 required for long distance direct-dial calls

LONG-DISTANCE-OPERATOR

0 214 555 1212

The initial 0 required for operator-assisted long distance calls

NATIONAL-NUMBER

01 1 33 1234567890 #

The national number component of an international call

OFFICE-CODE

1 214 555 1212

The office or exchange code of a North American call

SATELLITE-SERVICE

01 1 881 4 1234 #

A specific value associated with calls to the satellite country code

SERVICE

1 411

Access to local telephony provider services

SUBSCRIBER

1 214 555 1212

A particular extension a given exchange serves

TRANSIT-NETWORK-ESCAPE

101 0321 1 214 555 1212

Long distance carrier code

TRANSIT-NETWORK

101 0321 1 214 555 1212

The escape sequence used for entering a long distance carrier code

 

Operators

Operators are the functions that determine whether a given route pattern passes the tests you specify.

There are four operators:

An example might help clarify the tortured description of the == operator. One route pattern defined in the North American numbering plan is [2-9]XX XXXX (see Figure 2-5). This pattern consists of an office code and a subscriber. The first section of the route pattern, [2-9]XX, corresponds to the tag OFFICE-CODE.

Figure 2-5. Pattern [2-9]XX XXXX in the North American Numbering Plan

Assume that you specify OFFICE-CODE == [1-3]XX in a route filter. When determining whether to add the pattern [2-9]XX XXXX into the routing tables, CallManager intersects the route pattern [2-9]XX from the numbering plan with the route pattern [1-3]XX in the route filter. [2-9]XX matches all dialed digit strings in the range 200999, while route pattern [1-3]XX matches all dialed digit strings in the range 100399. The intersection of these sets is all dialed digit strings in the range 200399. As a result, CallManager determines that the route pattern under inspection matches the filter's test. It inserts into the internal routing tables the route pattern that represents the intersection of the value you specified and the entry in the numbering plan, namely, [23]XX XXXX. Figure 2-6 depicts the application of the route filter.

Figure 2-6. Intersection of Two Pattern Ranges Because of a Route Filter

You can string operators together with the Boolean operators AND and OR. When you string operators together with OR, CallManager includes a route pattern under inspection if either of the specified conditions exist. When you string operators together with AND, CallManager includes a route pattern under inspection only if both of the specified conditions exist.

For example, the route filter AREA-CODE EXISTS OR SERVICE EXISTS causes CallManager to include both the route pattern [2-9]11, which matches information and emergency services in the North American numbering plan, and the route pattern 1 [2-9]XX [2-9]XX XXXX, which matches long distance toll calls in the North American numbering plan. [2-9]11 contains the SERVICE tag, and 1 [2-9]XX [2-9]XX XXXX contains the AREA-CODE tag.

However, the route filter AREA-CODE EXISTS AND SERVICE EXISTS causes CallManager to include absolutely no route patterns, because no number in the North American numbering plan has both an area code and a service number.

Route Filter Operation

When an @ pattern has an associated filter, the filter affects the macro expansion that takes place. Before adding an individual route pattern from the numbering plan to the system, CallManager checks to see whether that particular route pattern passes the tests specified in the route filter. If the route pattern does not qualify, CallManager will not add it, which means that users cannot dial it.

It is important to note that route filters in themselves do not explicitly block calls. They tell CallManager not which patterns to exclude but which patterns to include. A route filter that specifies AREA-CODE == 900 does not eliminate calls to area code 900 (reserved for toll services in the United States); rather, it tells CallManager to include only those route patterns in the North American numbering plan where the area code is 900. In other words, it configures the system so that toll-number calls are the only destination users can dial. (You can block these numbers. See the section "Routing by Class of Calling User" for details.)

The best way to see how route filters operate is to look at some examples. For instructive purposes, these examples use the North American numbering plan and assume that the @ pattern expands only to the route patterns in Table 2-28.

Table 2-28. Route Patterns Used for Route Filter Example

Route Pattern

Description

Tags

[2-9]11

311, 411, 611, 911

SERVICE

[2-9]XX XXXX

Seven-digit dialing

OFFICE-CODE

SUBSCRIBER

[2-9]XX [2-9]XX XXXX

10-digit dialing

LOCAL-AREA-CODE

OFFICE-CODE

SUBSCRIBER

1 [2-9]XX [2-9]XX XXXX

11-digit dialing

LONG-DISTANCE-DIRECT-DIAL

AREA-CODE

OFFICE-CODE

SUBSCRIBER

01 1 3[0-469] !

International dialing to valid two-digit country codes in the range 3039

INTERNATIONAL-ACCESS

INTERNATIONAL-DIRECT-DIAL

COUNTRY-CODE

NATIONAL-NUMBER

If you specify the route pattern 9.@ with no route filter, CallManager indiscriminately adds each route pattern in Table 2-28, preceded by 9. Thus, users can dial 9 911 and 9 555 1212, as well as 9 1 900 555 1212. Table 2-29 lists the route patterns that CallManager adds.

Table 2-29. Route Patterns Added When No Route Filter Is Specified

Added Route Patterns

Tags in the Route Pattern

9 [2-9]11

SERVICE

9 [2-9]XX XXXX

OFFICE-CODE, SUBSCRIBER

9 [2-9]XX [2-9]XX XXXX

LOCAL-AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 1 [2-9]XX [2-9]XX XXXX

LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 011 3[0-469] !

INTERNATIONAL-ACCESS, INTERNATIONAL-DIRECT-DIAL, COUNTRY-CODE, NATIONAL-NUMBER

If instead, you add the same route pattern but use a route filter that specifies SERVICE EXISTS, CallManager adds only those route patterns that contain the SERVICE tag. (In North America, the SERVICE tag matches numbers such as 411 for directory information and 911 for emergency services.) Your users can access network services but no other numbers. Table 2-30 lists the added route patterns.

Table 2-30. Route Patterns Added for the Route Filter SERVICE EXISTS

Accepted Route Patterns (Contain SERVICE Tag)

Tags in the Route Pattern

9 [2-9]11

SERVICE

Rejected Route Patterns

Tags in the Route Pattern

9 [2-9]XX XXXX

OFFICE-CODE, SUBSCRIBER

9 [2-9]XX [2-9]XX XXXX

LOCAL-AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 1 [2-9]XX [2-9]XX XXXX

LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 011 3[0-469] !

INTERNATIONAL-ACCESS, INTERNATIONAL-DIRECT-DIAL, COUNTRY-CODE, NATIONAL-NUMBER

The route filter COUNTRY-CODE DOES-NOT-EXIST eliminates the international dialing route pattern. Users can access network services and local and long distance numbers. Table 2-31 lists the added route patterns.

Table 2-31. Route Patterns Added for the Route Filter COUNTRY-CODE DOES-NOT-EXIST

Accepted Route Patterns

(Lack COUNTRY-CODE Tag)

Tags in the Route Pattern

9 [2-9]11

SERVICE

9 [2-9]XX XXXX

OFFICE-CODE, SUBSCRIBER

9 [2-9]XX [2-9]XX XXXX

LOCAL-AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 1 [2-9]XX [2-9]XX XXXX

LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, SUBSCRIBER

Rejected Route Patterns

Tags in the Route Pattern

9 011 3[0-469] !

INTERNATIONAL-ACCESS, INTERNATIONAL-DIRECT-DIAL, COUNTRY-CODE, NATIONAL-NUMBER

The route filter AREA-CODE == [89]00 OR AREA-CODE == 888 OR AREA-CODE == 877 demonstrates the way in which the equal operator can constrain a route pattern. This filter allows users to dial 11-digit numbers to the toll-free ranges 800, 877, or 888 and to the toll-range 900. Table 2-32 lists the added route patterns.

Table 2-32. Route Patterns Added for the Route Filter AREA-CODE == [89]00 OR AREA-CODE == 888 OR AREA-CODE == 877

Added Route Patterns (Contain AREA-CODE Tag, Constrained to Specified Ranges)

Tags in the Route Pattern

9 1 [89]00 [2-9]XX XXXX

LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 1 888 [2-9]XX XXXX

LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 1 877 [2-9]XX XXXX

LONG-DISTANCE-DIRECT-DIAL, AREA-CODE, OFFICE-CODE, SUBSCRIBER

Filtered Route Patterns (Lack AREA-CODE Tag)

Tags in the Route Pattern

9 [2-9]11

SERVICE

9 [2-9]XX XXXX

OFFICE-CODE, SUBSCRIBER

9 [2-9]XX [2-9]XX XXXX

LOCAL-AREA-CODE, OFFICE-CODE, SUBSCRIBER

9 011 3[0-469] !

INTERNATIONAL-ACCESS, INTERNATIONAL-DIRECT-DIAL, COUNTRY-CODE, NATIONAL-NUMBER

The bold type in the above table shows that the values specified on the equals operator have constrained the area code substring of the North American numbering plan to a particular range. In each case, the generalized substring [2-9]XX, which matches any digit string between 200 and 999, has been modified so that it matches only the intersection between the substring and value specified in the route filter.

Useful Route Filters for the North American Numbering Plan

This section presents some route filter configurations for the North American numbering plan that you might find useful.

It describes how to use route filters to do the following:

Block Calls Where the User Has Selected a Long Distance Carrier

In North America, users can select a long distance carrier by dialing at the beginning of their number the digits 101 followed by a four-digit carrier code. CallManager digit discarding instructions (see the section "Digit Discarding Instructions") call this type of dialing 10-10- Dialing.

On the North American numbering plan Route Filter page, the tag TRANSIT-NETWORK-ESCAPE filters numbers in which the user has included the 101 carrier selection digits. Configuring a route filter with the value TRANSIT-NETWORK-ESCAPE DOES-NOT-EXIST blocks calls that include the carrier selection code.

The difference between configuring a route filter to block long distance carrier selection and using the digit discarding instructions 10-10-Dialing is that the route filter blocks a user's call attempt if the user dials the carrier selection code, while the digit discarding instructions permit the call to go through but silently strip out the carrier selection portion of the dialed number.

Block International Calls

You can block international calls with the route filter INTERNATIONAL-ACCESS DOES-NOT-EXIST. In the North American numbering plan file, the tag INTERNATIONAL-ACCESS corresponds to the initial 01 of international dialed calls. By specifying a route filter that prevents CallManager from including route patterns beginning with this tag, you prevent CallManager from matching any numbers beginning with 01. You block international calls by never adding them in the first place.

Route Just Local Numbers

Routing just local numbers typically requires stringing together several route filter clauses joined by OR.

Local calls can vary dramatically by geographical region. Some regions have 7-digit local calls, some metropolitan regions have a mixture of 7- and 10-digit local calls, and other regions have 10- digit local calls.

Seven-Digit Dialing

If your region has seven-digit dialing and you want to permit users to dial only seven-digit numbers, defining the route filter SERVICE DOES-NOT-EXIST AND LOCAL-AREA-CODE DOES-NOT-EXIST AND AREA-CODE DOES-NOT-EXIST AND INTERNATIONAL-ACCESS DOES-NOT-EXIST should suffice. Filtering against SERVICE DOES-NOT-EXIST blocks calls to information and emergency services, LOCAL-AREA-CODE blocks 10-digit calls, AREA-CODE DOES-NOT-EXIST blocks 11-digit long distance calls, and INTERNATIONAL-ACCESS blocks international calls.

If you want to, say, permit calls to services, long distance calls, or international calls, you simply exclude the appropriate operator expression from the proposed route filter.

The LOCAL-AREA-CODE section of the defined route filter deserves some more explanation. You might have noticed that in some cases, a proposed route filter uses the tag AREA-CODE and in other cases it uses the tag LOCAL-AREA-CODE. The tag LOCAL-AREA-CODE represents the area code as it appears in 10-digit numbers.

Some metropolitan regions of North America require users to dial 10 digits for all of their local calls. This means that CallManager must include both 7-digit patterns and 10-digit patterns in its expansion of the North American numbering plan, because you can deploy CallManager in different geographic regions. Because of CallManager's analysis process, however, unless you explicitly exclude the 10-digit pattern when you are in a 7-digit dialing region, CallManager will wait for the interdigit timer to expire before offering your 7-digit calls to the PSTN.

On the other hand, the AREA-CODE tag represents the area code as it appears in 11-digit numbers (typically direct-dial and calling-card long distance calls) in the North American numbering plan. Using two different tag names for essentially the same subsection of a North American number assists those administrators in 10-digit dialing regions who want to permit 10-digit local calls while blocking 11-digit toll calls. By specifying the filter AREA-CODE DOES-NOT-EXIST, such administrators can screen out all of the toll calls while leaving the 10-digit calls untouched. The section "Eliminate Interdigit Timing Between 7-Digit and 10-Digit Patterns" expands on this wrinkle of CallManager's North American numbering plan.

Metro Dialing

Some geographical regions have metro dialing. In metro dialing, a user in a home area code needs to dial only 7 digits, but a few neighboring area codes, also local calls, require the user to dial 10 digits. Metro dialing is typically the most problematic, because some 11-digit calls might actually be local calls, while some 10-digit calls might be toll calls. In such cases, you might need to specify criteria down to the office code level to provide full local access. (Another approach is to define an @ pattern to perform general filtering and to define separate specific patterns, such as 972 813 XXXX, to handle the exceptional cases.)

If your region has metro dialing, define a route filter in which one clause specifies seven-digit dialing and subsequent clauses define the nontoll area codes on an area-code-by-area-code basis. For instance, in the Dallas-Fort Worth area in 1995, the following route filter would provide general metro dialing access from the point of view of a user in the 972 area code:

LOCAL-AREA-CODE DOES-NOT-EXIST AND AREA-CODE DOES-NOT-EXIST AND INTERNATIONAL-ACCESS DOES-NOT-EXIST

OR

LOCAL-AREA-CODE == 214

OR

LOCAL-AREA-CODE == 817

Because the user in the 972 area code dials seven digits to call other numbers in the 972 area code, the first part of this route filter handles any seven-digit calls that the user in the 972 area code dials. The second part of this route filter handles 10-digit calls starting with 214 that the user dials, and the third part of this route filter handles 10-digit calls starting with 817 that the user dials.

You can add exceptional cases as additional clauses or as separate route patterns.

Note especially the use of the tag LOCAL-AREA-CODE. The LOCAL-AREA-CODE tag represents an area code as dialed as part of a 10-digit North American number (for example, 214 555 1212). The same area code in an 11-digit North American number (0 214 555 1212 and 1 214 555 1212) corresponds to the tag AREA-CODE.

10-Digit Dialing

A 10-digit dialing route filter is like a metro dialing routing filter, but you need not include the route filter for 7-digit dialing. For instance, in the Dallas-Fort Worth area in 2000, the following route filter provides general 10-digit dialing access:

LOCAL-AREA-CODE == 214

OR

LOCAL-AREA-CODE == 817

OR

LOCAL-AREA-CODE == 972

OR

LOCAL-AREA-CODE == 940

Again, you can add exceptional cases (11-digit local calls) as additional clauses or as separate route patterns.

Route Toll-Free Numbers

In the North American numbering plan, area codes 800, 866, 877, and 888 are dedicated to toll-free numbers. The following route filter provides access to only these services:

AREA-CODE == 800

OR

AREA-CODE == 877

OR

AREA-CODE == 888

Eliminate Interdigit Timing Between 7-Digit and 10-Digit Patterns

Because some geographical regions use 7-digit dialing and others use 10-digit dialing, the North American numbering plan shipped with CallManager must accommodate both types of dialing. Furthermore, because the IP network permits stations homed to a particular CallManager to be in different geographical locations, CallManager must be able to support both types of dialing simultaneously.

As a result, the North American numbering plan shipped with CallManager includes both route patterns [2-9]XX XXXX and [2-9]XX [2-9]XX XXXX. The problem that occurs is with the 10- digit route pattern in place, users of the 7-digit pattern must wait for the interdigit timeout to expire before CallManager routes their 7-digit calls.

Eliminating the interdigit timeout means configuring CallManager to eliminate the 10-digit route pattern for users of 7-digit dialing. Configure the route filter LOCAL-AREA-CODE DOES-NOT-EXIST to eliminate the [2-9]XX [2-9]XX XXXX pattern from the list of patterns in the North American numbering plan and associate it with your @ pattern.

Note

Actually, the route pattern set that CallManager uses to implement 7- and 10-digit patterns in the North American numbering plan is rather more complex. CallManager represents 7- and 10- digit patterns using 4 patterns:

The patterns are constructed in this matter in order not to create overlap between service patterns such as [2-9]11. A digit string such as 911 doesn't match patterns 1 or 3, because the second wildcard in these patterns doesn't match the second 1 in the digit string, and 911 doesn't match patterns 2 or 4 because the third wildcard in these patterns doesn't match the third 1 in the digit string.

But the simpler patterns [2-9]XX XXXX and [2-9]XX XXX XXXX demonstrate the principles that this section is communicating without complicating the issue with the addition of more confusing patterns.

You can discover exactly what patterns CallManager loads for any given dial plan by inspecting the files stored in the dialPlans subdirectory of the CallManager installation directory.

 

Block 900 Numbers

The previous route filters in this section operate by using inclusion. That is, the clauses provided define a subset of the North American numbering plan that includes only those patterns that you want to be routed and excludes those patterns you want to block.

As long as the restrictions placed use the EXISTS or DOES-NOT-EXIST operators, you can use one route filter to define which patterns should be routed. EXISTS specifies that CallManager should route all valid number ranges for a particular tag, while DOES-NOT-EXIST specifies that CallManager should route no valid number ranges for a particular tag.

When you need to specify only some of the valid number ranges for a particular tag, use the == operator. However, CallManager does not support a != (not-equals) operator. As a result, although you can specify a route filter such as AREA-CODE == 900, rather than blocking 900 numbers, this filter routes 900 numbers and blocks all other types of calls.

However, you can still block 900 numbers with the use of two route patterns. First, configure an @-pattern with the route filter AREA-CODE == 900. On the route pattern, however, click the radio button Block This Pattern. This configuration specifies that CallManager should block all external calls with area code 900.

To make all non-900-numbers route, configure another @-pattern with no route filter at all. Using closest match routing rules (see the section "Example 2: Closest Match Routing"), if a user dials a dialed digit string containing an area code of 900, the route pattern with the route filter AREA-CODE == 900 matches, which causes CallManager to block the call. Because an external call to another area code matches only the unfiltered pattern, CallManager routes the call.

An example can best illustrate the process that occurs. Table 2-33 shows a representative sample of route patterns that CallManager adds when you specify the route pattern 9.@.

Table 2-33. Sample Route Patterns Added By 9.@

Route Pattern

Description

9 [2-9]11

Services (311, 411, 611, 911)

9 [2-9]XX XXXX

Seven-digit dialing

9 1 [2-9]XX [2-9]XX XXXX

11-digit dialing

9 011 3[0-469] !

International calls to the valid two-digit country codes in the range 3039

When you specify the route filter, AREA-CODE == 900, CallManager includes only those route patterns that have an area code tag. Furthermore, CallManager constrains the route pattern so that the tag can match the number 900 (see Table 2-34).

Table 2-34. Route Pattern Added by 9.@ Where AREA-CODE == 900

Route Pattern

Description

9 1 900 [2-9]XX XXXX

11-digit dialing to the 900 area code

When you add both route patterns and specify that CallManager should route calls to 9.@ but block calls to 9.@ where AREA-CODE == 900, the routing tables appear as displayed in Table 2-35.

Table 2-35. Combined Routing Tables

Route Pattern

Treatment

9 [2-9]11

Route this pattern

9 [2-9]XX XXXX

Route this pattern

9 1 [2-9]XX [2-9]XX XXXX

Route this pattern

9 011 3[0-469] !

Route this pattern

9 1 900 [2-9]XX XXXX

Block this pattern

If a user dials 911 or a seven-digit number, it is evident that CallManager routes the call. When a user dials an 11-digit number, however, closest match routing rules ensure that the user's call is handled properly. Table 2-36 shows that when a user dials 9 1 214 555 1212, CallManager finds a unique match for the 9.@ route pattern and routes the call.

Table 2-36. Routing Treatment for Number 9 1 214 555 1212

Currently Dialed Digits: 9 1 214 555 1212

Current Matches

 

9 1 [2-9]XX [2-9]XX XXXX

Route this pattern

Patterns That Can Still Match

 

Patterns That Can No Longer Match

 

9 [2-9]11

 

9 [2-9]XX XXXX

 

9 011 3[0-469].!

 

9 1 900 [2-9]XX XXXX

Actions Taken:

When a user dials 9 1 900 555 1212, on the other hand, CallManager finds two matching route patterns in the routing tables, uses closest match routing rules to select between them, and then applies the appropriate treatment. Table 2-37 shows CallManager selecting the blocked route pattern 9.@ where AREA-CODE == 900 over the more generic route pattern 9.@. As a result, CallManager rejects calls to 900 numbers.

Table 2-37. Routing Treatment for Number 9 1 900 555 1212

Currently Dialed Digits: 9 1 900 555 1212

Current Matches

 

9 1 900 [2-9]XX XXXX

Block this pattern

Selected: Matches 8,000,000 numbers

 

9 1 [2-9]XX [2-9]XX XXXX

Route this pattern

Not selected: Matches 6,400,000,000 numbers

Patterns That Can Still Match

 

Patterns That Can No Longer Match

 

9 [2-9]11

 

9 [2-9]XX XXXX

 

9 011 3[0-469].!

Actions Taken:

This strategy of configuring a general route pattern to allow most calls through, but then configuring specific route patterns with blocking treatment to screen a very specific small set of calls, recurs often in enterprise deployments.

Категории