[SR-Users] Question about LCR

Geoffrey Mina geoffreymina at gmail.com
Tue Mar 8 23:35:02 CET 2011


Hello,
I have a question about LCR which I have been unable to solve.  I have 4
upstream carrier gateways owned by 2 carriers.  Each carrier provides a
primary and secondary gateway for load balancing purposes.  On a 5XX error I
am trying to send the same call to the other carrier.  If both carriers
reject the call with 5XX, I allow the response to go downstream to my
asterisk server.  The issue I am running into is that in a scenario where
both my carriers respond with a 5XX, I end up presenting the same call to
all 4 gateways.  I would like to present the call to one gateway on each
carrier and not try the same carriers second gateway for the same call.
Here is what is happening now:

ASTERISK --> INVITE --> KAMAILIO
INVITE --> CARRIER A/GATEWAY 1 <-- 5XX Error
INVITE --> CARRIER A/GATEWAY 2 <-- 5XX Error
INVITE --> CARRIER B/GATEWAY 1 <-- 5XX Error
INVITE --> CARRIER B/GATEWAY 2 <-- 5XX Error
KAMAILIO --> 5XX Error --> ASTERISK

OR any combination of the above... i.e.

ASTERISK --> INVITE --> KAMAILIO
INVITE --> CARRIER A/GATEWAY 1 <-- 5XX Error
INVITE --> CARRIER B/GATEWAY 2 <-- 5XX Error
INVITE --> CARRIER B/GATEWAY 1 <-- 5XX Error
INVITE --> CARRIER A/GATEWAY 2 <-- 5XX Error
KAMAILIO --> 5XX Error --> ASTERISK


What I want to happen is:

ASTERISK --> INVITE --> KAMAILIO
INVITE --> CARRIER A/GATEWAY 1 or 2 <-- 5XX Error
INVITE --> CARRIER B/GATEWAY 1 or 2 <-- 5XX Error
KAMAILIO --> 5XX Error --> ASTERISK

I tried dealing with the issue using some flags on the gateway, but i
couldn't get the logic to work properly.  Here is the path I was heading
down, but my plan fell apart after some testing.

CARRIER A has a gateway flag of "1"
CARRIER B has a gateway flag of "2"

failure_route[1]{
       $var(gw_flag) = $avp(i:712);

        while(next_gw()){
            if($var(gw_flag) != $avp(i:712)){
                xlog("L_INFO","Found an LCR destination which is different
than current, routing. ($ci)");
                t_on_reply("1");
                t_on_failure("1");
                t_relay();
                exit;
            }else{
                xlog("L_INFO","The next destination in LCR has the same AVP
flag, skipping. ($ci)");
            }
        }

        # let the reply go upstram - it is the default action
        xlog("L_ERR", "No Next Gateway - M=$rm RURI=$ru F=$fu T=$tu IP=$si
ID=$ci\n");
        exit;
}


Any help would be greatly appreciated.

Thanks,
Geoff
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20110308/51625164/attachment.htm>


More information about the sr-users mailing list