The concept of Callmanager route filters is associated with a famous route pattern wildcard: the @ symbol. As a brief review, a route pattern written in the <something>@<something> implicitly tells CUCM to generate as many route patterns as the numbering plan needs. For example, if you choose the North American numbering plan, and you create a route pattern in that format, CUCM will generate patterns for :
- local calls,
- 10-digit calls,
- long distance 11-digit calls,
- international calls,
- service calls,…
And all that without your intervention.
So what is the problem? The problem is that, given all these patterns, any call will be possible and your users will be able to call their pen pals from The Himalayas. And your company does not like that very much.
The solution is to use callmanager route filters to –as its name implies – allow specific route patterns and filter the rest. What this means is, as soon as you create a route filter and apply it to a @-based route pattern, all the implicitly generated route patterns that are associated with the @-based route pattern will be put in inspection. In other words, they will sit for a test (the route filters), and one of either things will happen:
- if the tested route pattern passes the test: it is put in the call routing table,
- if the tested route pattern does not pass the test: it is filtered out.
Call Manager route filters: components
We may need to stuff things up in a route filter, by putting all our conditions in one sentence. Like when we want to buy a car, we want a sports car, with a red color, or a Mustang. if we translate this sentence in computer language, we will find the following:
car_type = sportscar AND car_color = red OR car_type = Mustang.
Similarly, a route filter in call manager is composed of one or more clauses. Clauses are linked with either AND or OR boolean operator. Each clause is made of at least a tag and an operator. Here is what I mean:
route filter = Clause_1 OR Clause_2 OR Clause_3
Clause_1 = <tag> operator [ AND <tag> operator]
Clause_2 = <tag> operator [ AND <tag> operator]
Clause_3 = <tag> operator [ AND <tag> operator]
However, while writing route filters is sometimes an addiction, we must not forget that CUCM route filters are up to 1024 characters long. In this case, we can simply write many route filters based on the same root route pattern. So for example, instead of writing a long 9.@ route filter, we can create multiple 9.@ route filters, each with one clause.
Remember when we said that, when you create a route pattern with the @ symbol, CUCM generates many implicit route patterns and inserts them in the routing table. In fact, more precisely, CUCM stores each route pattern with its tags, according to the numbering plan specified in the configuration.
For example, let’s say you created a route pattern 9.@, and you chose the North American Numbering plan. then CUCM will store these patterns in his numbering plan file:
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_CALL, AREA_CODE, OFFICE_CODE, SUBSCRIBER.
9.01133! — INTERNATIONAL_ACCESS, INTERNATIONAL_DIRECT_DIAL, NATIONAL_NUMBER
I’ve only mentioned some of the patterns and some route filter tags, in this example.
We see that each route pattern is stored with its associated route filter tags. However, unless you define a route filter, all route patterns (both the explicit and the implicit ones) stay in the routing table.
Route filter operators
There are four route filter operators:
- <tag> == something
Callmanager Route filters: configuration example
Example 1: Allow only local calls in Central Texas.
We will create a route filter named “LOCAL_ONLY”, apply it to a route pattern and set it to “route the call”.
- Add a new route filter
- Set the route filter clauses as in the screenshot.
- Go to the route pattern configuration menu. Select the route pattern for which you want to apply the route filter. Remember that it must contain a “@” wildcard.
- apply the newly-created route filter to it. Make sure to add a gateway/RL and a partition. The partition should be accessible by your users. Set the route pattern to “route this pattern”.