[OpenSER-Users] Question regarding usage of carrier-route

Henning Westerholt henning.westerholt at 1und1.de
Wed Sep 26 13:40:05 CEST 2007


On Tuesday 25 September 2007, Carsten Bock wrote:
> I have a question regarding carrierroute: In table "route_tree" i would
> have the following:
> +----+----------+
> | id | carrier  |
> +----+----------+
> |  1 | carrier1 |
> |  2 | carrier2 |
> +----+----------+
>
> In the table "carrierroute" i have the following:
> +----+---------+-------------+-------+------+-------+---------------+
> | id | carrier | scan_prefix | level | prob | strip | rewrite_host  |
> +----+---------+-------------+-------+------+-------+---------------+
> |  1 |       1 | 49          | 0     |  0.5 | 0     | gateway1_1    |
> |  2 |       1 | 49          | 0     |  0.5 | 0     | gateway1_2    |
> |  3 |       1 | 49          | 1     |    1 | 0     | gateway1_3    |
> |  4 |       1 | 49          | 2     |    1 | 0     | gateway1_4    |
> |  5 |       2 | 49          | 0     |    1 | 0     | gateway2_1    |
> |  6 |       2 | 49          | 1     |    1 | 0     | gateway2_2    |
> +----+---------+-------------+-------+------+-------+---------------+
>
> in the routing logic i would do the following:
>
> route {
> 	# Calls to PSTN based on RURI
> 	if(!cr_rewrite_uri("carrier1", "call_id")){
> 		sl_send_reply("403", "Not allowed");
> 	} else {
> 		# In case of failure, re-route the request
> 		t_on_failure("1");
> 		# Relay the request to the gateway
> 		t_relay();
> 	}
> }
>
> failure_route(1) {
> 	# In case of failure, send it to an alternative route:
> 	if (t_check_status("408|5[0-9][0-9]")) {
> 		if(!cr_rewrite_uri("carrier1", "call_id")){
> 			t_reply("403", "Not allowed");
> 		} else {
> 			t_on_failure("1");
> 			t_relay();
> 		}
> 	}
> }
>
> Questions:
> 1) Is this configuration right?

Hell Carsten,

well, you should specify the level in cr_rewrite_uri, not the carrier. The 
mapping of users to a certain carrier is specified in the cr_prefered_carrier 
column, e.g. in subscriber. But for cr_rewrite_uri only the default carrier 
is used. 

This column is not yet created by the database scripts. Perhaps it makes sense 
to extend this table, if the extra modules are installed like the SERWEB 
case.

So for example you could do this:

route {
        # route calls based on hash over callid
        # choose route level 0 of the default carrier
        if(!cr_rewrite_uri("0", "call_id")){
                sl_send_reply("403", "Not allowed");
        } else {
                # In case of failure, re-route the request
                t_on_failure("1");
                # Relay the request to the gateway
                t_relay();
        }
}

failure_route(1) {
        # In case of failure, send it to an alternative route:
        if (t_check_status("408|5[0-9][0-9]")) {
                #choose route level 1 of the default carrier
                if(!cr_rewrite_uri("1", "call_id")){
                        t_reply("403", "Not allowed");
                } else {
                        t_on_failure("2");
                        t_relay();
                }
        }
}

failure_route(2) {
        # further processing
}

> 2) Would the call, in this case, go to either gateway1_1 or gateway1_2, in
> case of failure to gateway1_3? 

The calls (with the config snippet above) would be in the routed to gateway1_1 
or gateway1_2, depending of the hash of the callid. If you get an failure, 
the next (in this case) level of the routing tree is choosen, e.g. gateway1_3 
or gateway1_4.

> 3) In case all three fail, it would go to 
> gateway1_4? (original route would be level 1, 1st failure-route would be
> level 2, 2nd failure-route would be level 3 and so on?)

You must manually choose another level. You can choose the levels as you like, 
or choose another carrier with the rewrite_tree function.

> 4) Calls to other 
> destinations as to destinations starting with "49" in the URI would be
> rejected, right? 
Yes, if you don't have a route with an empty prefix in this tree. You could 
also block certain prefixes if you specify an empty rewrite.

> 5) Does it cause problems, when "prob" does not result in 
> 1? E.g. does a prob of 1 and 1 result into the same as 0.5 and 0.5?

Yes, this is the same. The actual prob values are "fixed", as you could see in 
the cr_dump_routes output.

I've extended the carrierroute documentation somewhat with the points you 
mentioned, i hope that its now more clear.

Cheers,

Henning




More information about the sr-users mailing list