[OpenSIPS-Users] Load Balancer Script - Looping

Bogdan-Andrei Iancu bogdan at voice-system.ro
Fri Aug 14 09:56:11 CEST 2009


Hi Alec,

On a first view I spoted two major mistakes in tour script. First, the 
$retcode returns the code of the last called function, which in the 
tutorial was the load_balancer(), but in your case is the if() 
statement.....

Secondly, in failure route, there is no t_relay() after selecting the 
new destination

Regards,
Bogdan


Alec Fett wrote:
> I'm having some trouble implementing Bogdan's load_balancer tutorial.
>
> The desired behavior is to call the else block (containing xlog("ALL 
> GATEWAYS DOWN!\n") ) if all gatways are down.
> However, something in my script is causing opensips to enter a 
> continuous loop.
>
> Initially I had "route(1)" in failure_route, which I thought was the 
> cause. However, this is still an issue when only calling load_balance.
>
> Aug 13 15:43:08 denver12 /usr/local/sbin/opensips[18397]: Saw an 
> authorized request FROM IP 10.1.10.76 TO sip:user at 10.1.10.76:5060
> .............................many more of 
> these...................................
> Aug 13 15:43:08 denver12 /usr/local/sbin/opensips[18397]: Saw an 
> authorized request FROM IP 10.1.10.76 TO sip:user at 10.1.10.76:5060
> Aug 13 15:43:08 denver12 /usr/local/sbin/opensips[18397]: Looping 
> detected Sent 483: Looping
>
> (where 10.1.10.76 is openSIPS's ip)
>
> Any suggestions?
> Thanks in Advance.
>
> -Alec
>
>
> ----------------------------------------------------------------------------------------
>
> route{
> route(1);
> }
> route[1]{
> ####IP AUTH##############                
>    if( src_ip==10.1.10.0/24 ){
>        route(2);
>    }
>    else{
>        sl_send_reply("403","Forbidden");
>        xlog("L_INFO", "Unauthorized IP address $si TO $ou Sent 403\n");
>        exit;
>    }
> }
>
> route[2]{
>     xlog("Saw an authorized request FROM IP $si TO $ou");
>
>     if (!mf_process_maxfwd_header("3")) {
>         sl_send_reply("483","looping");
>         xlog("Looping detected Sent 483: Looping\n");
>         exit;
>     }
>
>
>     if (!has_totag()) {
>                 # initial request
>         record_route();
>     } else {
>         # sequential request -> obey Route indication
>         loose_route();
>                 t_relay();
>                 exit;
>         }
>
>         # handle cancel and re-transmissions
>     if ( !t_check_trans() ) {
>         if (is_method("CANCEL"))
>             exit;
>     }
>
>
>         # from now on we have only the initial requests
>         if (!is_method("INVITE")) {
>                 send_reply("405","Method Not Allowed");
>                 exit;
>         }
>
>         # detect resources and do balancing
>                  # looks like an IPR call
>                 if(load_balance("1","ipr")){
>                     t_on_failure("1");
>                 }
>                 else{
>                     xlog("ALL GATEWAYS DOWN!\n");
>                     exec_msg("/usr/bin/php /usr/scripts/sip-failed.php 
> all_destinations_down_1 '$si' '$rU' '$fu'");
>                     sl_send_reply("500","Service full");
>                     exit;
>                 }
>                
>         # LB function returns negative if no suitable destination (for 
> requested resources) is found,
>         # or if all destinations are full
>         if ($retcode<0) {
>             xlog("Gateway down!\n");
>             exec_msg("/usr/bin/php /usr/scripts/sip-failed.php 
> service_full '$si' '$rU' '$fu'");
>             sl_send_reply("500","Service full");
>             exit;
>         }
>
>     xlog("Selected destination is: $du\n");
>
>         # send it out
>     if (!t_relay()) {
>         exec_msg("/usr/bin/php /usr/scripts/sip-failed.php 
> t_relay_failure '$si' '$rU' '$fu'");
>         sl_reply_error();
>     }
> }
>
> failure_route[1]{
> xlog("Gateway down!\n");
> exec_msg("/usr/scripts/sip-failed.php gateway_down '$si' '$rU' '$fu'");
> lb_disable();
> load_balance("1","ipr");
> }
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>   




More information about the Users mailing list