[OpenSIPS-News] [NEW] Dynamic Routing enhancements in OpenSIPS 1.8.0

Bogdan-Andrei Iancu bogdan at opensips.org
Fri Mar 23 14:11:08 CET 2012

Hi all

In OpenSIPS 1.8.0, the Dynamic Module comes with some major changes and 
enhancements :

Carrier concept added
Now you can group the GWs in carrier, so you can achieve a better 
control over the destinations. A carrier is a list of gws - for each 
carrier, you can define how the gws should be sort - based on the 
definition order, or based on weigths . Once again, this setting is per 
carrier. Also you can enabled / disable carriers (via MI) during 
runtime. The carrier has attached an attribute string that will be 
pushed to script when a gws from the carrier will be used.

When defining a routing rule, you can define a list of gws and carriers 
to be used (a mixed list). How the list from the rule is interpreted 
(order or weight), depends on a flag in do_routing() function.

     gateways :  g1, g2, g3, g4, g5
     carriers :  c1 = g1=75,g2=25  (a premium carrier), ordering based 
on weight
                 c2 = g3,g4  (a standard carrier), ordering based on 
given order
     rules:   prefix= 004021 ; list = #c1,#c2,g5  - first we will try do 
distribute 75/25 the traffic
                   between the gws from carrier c1 and if all fail, we 
will try gws from carrier c2
                   (according the ordering defined for c2), and so on

              prefix= 004072 ; list = #c2=50,g5=50  - all traffic will 
be weight balanced between carrier
                   c2 and gw g5; of course, if carrier c2 is to be used, 
the corresponding traffic will
                   routed over the c2 gateways according to its definition

do_routing() enhancements
The do_routing() function takes several flags (as second optional 
parameter) to control the matching and ordering in the rules:

    * /W/ - Instead of using the destination (from the rule definition)
      in the given order, sort them based on their weight.
    * /F/ - Enable rule fallback; normally the engine is using a single
      rule for routing a call; by setting this flag, the engine will
      fallback and use rules with less priority or shorter prefix when
      all the destination from the current rules failed.
    * /L/ - Do strict length matching over the prefix - actually DR
      engine will do full number matching and not prefix matching anymore.

Also, the function takes a new third optional parameter - a white list 
of gateways -> during the routing, only the gateways from this list will 
be considered valid (from the gws specified by the routing rules)

Rule fallback
Before, the dr module was matching and using a single rule. Now, via the 
F flag, you can instruct the DR engine to fallback and use additional 
rules that match (with looser matching) the dialed prefix - like rules 
with same prefix but lower priority, rules with shorter prefix.
The fallback is transparent done, via the use_next_gw() function.

    prefix 004072, prio 10  => g1,g2
   prefix 004072, prio  1  => g3
    prefix 0040,   prio  1  => g4,g5

    when dialing 00407221234567 and using fallback, the gws g1, g2 
(first rule), g3 (second rule) and g4 , g5 (third rule) will be used.

New routing functions
route_to_gw(gw_id) - function to trigger the direct routing to a given 
gateway. Attributes and per-gw preocessing will be available.

route_to_carrier(carrier_id) -f unction to trigger the direct routing to 
a given carrier. In this case the routing is not done prefix based, but 
carrier based (call will be sent to the GWs of that carrier, based on 
carrier policy)

For more, please see the online documentation for the DR module:


Bogdan-Andrei Iancu
OpenSIPS Founder and Developer

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/news/attachments/20120323/71a0cff1/attachment.htm>

More information about the News mailing list