[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