[OpenSIPS-Users] load balancing in opensips

Bogdan-Andrei Iancu bogdan at voice-system.ro
Thu Aug 13 15:47:40 CEST 2009


Hi Ghaith,

I mean, in the begining of the script you have the "force_send_socket" 
stuff and after that, the processing continues into your script and gets 
at "lookup(location)" function where the socket you force may be 
overwritten.

Regards,
Bogdan

Ghaith.ALKAYYEM at telecom-bretagne.eu wrote:
> Thank you,
>
> Actually I couldn't understand exactly what is meant by: "are your 
> calls hiting the usrloc after setting the outbound socket?"
> Anyway, when I tried to comment the part responsible of calling 
> "lookup function", I got 483 message and the call couldn't be 
> established.
>
> You can notice in the attached image the result that I got, in this 
> scenario I tried to call 172.23.1.3 from 172.23.1.21, and i wanted the 
> traffic to be forwarded through (172.23.1.19).
>
> Regards
> Ghaith
>
>
> Bogdan-Andrei Iancu <bogdan at voice-system.ro> a écrit :
>
>> Hi Ghaith,
>>
>> are your calls hiting the usrloc after setting the outbound socket? 
>> because, looking at the script, I think so . And the 
>> lookup("location") function does override the outbound socket setting.
>>
>> Regards,
>> Bogdan
>>
>>
>> Ghaith ALKAYYEM wrote:
>>> Hi,
>>>
>>> I'm trying to connect OpenSIP to 3 WAN links, and I want to distribute
>>> the traffic between those links according to the dialing number. So, I
>>> tried some modules like lcr and load_balance but the test didn't 
>>> succeed
>>> because those modules are forwarding the traffic to another SIP gateway
>>> or media gateway.
>>>
>>> I tried to change the outbound interface via force_send_socket and
>>> setting mhomed=1 and OpenSIPS still connect through the main interface.
>>>
>>> The IPs of the system are:
>>> 172.23.1.20
>>> 172.23.1.19
>>> 172.23.1.18
>>> and the originating IP is always 172.23.1.20
>>>
>>> please find a part of my configuration file:
>>>
>>>
>>>
>>>
>>> # main request routing logic
>>>
>>> mhomed=1
>>>
>>> route{
>>>
>>> if($ct=~"2000.*")
>>> {
>>>       #load_balance("2","conf");
>>>       force_send_socket(172.23.1.19:5060);
>>> };
>>> if($ct=~"3000.*")
>>> {
>>>       #load_balance("1","conf");
>>>       force_send_socket(172.23.1.18:5060);
>>> };
>>>
>>>       if (!mf_process_maxfwd_header("10")) {
>>>               sl_send_reply("483","Too Many Hops");
>>>               exit;
>>>       }
>>>
>>>       if (has_totag()) {
>>>               # sequential request withing a dialog should
>>>               # take the path determined by record-routing
>>>               if (loose_route()) {
>>>                       if (is_method("BYE")) {
>>>                               setflag(1); # do accounting ...
>>>                               setflag(3); # ... even if the transaction
>>> fails
>>>                       } else if (is_method("INVITE")) {
>>>                               # even if in most of the cases is
>>> useless, do RR for
>>>                               # re-INVITEs alos, as some buggy clients
>>> do change route set
>>>                               # during the dialog.
>>>                               record_route();
>>>                       }
>>>                       # route it out to whatever destination was set by
>>> loose_route()
>>>                       # in $du (destination URI).
>>>                       route(1);
>>>               } else {
>>>                       /* uncomment the following lines if you want to
>>> enable presence */
>>>                       ##if (is_method("SUBSCRIBE") && $rd ==
>>> "your.server.ip.address") {
>>>                       ##      # in-dialog subscribe requests
>>>                       ##      route(2);
>>>                       ##      exit;
>>>                       ##}
>>>                       if ( is_method("ACK") ) {
>>>                               if ( t_check_trans() ) {
>>>                                       # non loose-route, but stateful
>>> ACK; must be an ACK after
>>>                                       # a 487 or e.g. 404 from upstream
>>> server
>>>                                       t_relay();
>>>                                       exit;
>>>                               } else {
>>>                                       # ACK without matching
>>> transaction ->
>>>                                       # ignore and discard
>>>                                       exit;
>>>                               }
>>>                       }
>>>                       sl_send_reply("404","Not here");
>>>               }
>>>               exit;
>>>       }
>>>
>>>       #initial requests
>>>
>>>       # CANCEL processing
>>>       if (is_method("CANCEL"))
>>>       {
>>>               if (t_check_trans())
>>>                       t_relay();
>>>               exit;
>>>       }
>>>
>>>       t_check_trans();
>>>
>>>       # authenticate if from local subscriber (uncomment to enable
>>> auth)
>>>       # authenticate all initial non-REGISTER request that pretend to
>>> be
>>>
>>>       # preloaded route checking
>>>       if (loose_route()) {
>>>               xlog("L_ERR",
>>>               "Attempt to route with preloaded Route's
>>> [$fu/$tu/$ru/$ci]");
>>>               if (!is_method("ACK"))
>>>                       sl_send_reply("403","Preload Route denied");
>>>               exit;
>>>       }
>>>       # record routing
>>>       if (!is_method("REGISTER|MESSAGE"))
>>>               record_route();
>>>
>>>       # account only INVITEs
>>>       if (is_method("INVITE")) {
>>>               setflag(1); # do accounting
>>>       }
>>>       if (!uri==myself)
>>>       ## replace with following line if multi-domain support is used
>>>       ##if (!is_uri_host_local())
>>>       {
>>>               append_hf("P-hint: outbound\r\n");
>>>               # if you have some interdomain connections via TLS
>>>               ##if($rd=="tls_domain1.net") {
>>>               ##      t_relay("tls:domain1.net");
>>>               ##      exit;
>>>               ##} else if($rd=="tls_domain2.net") {
>>>               ##      t_relay("tls:domain2.net");
>>>               ##      exit;
>>>               ##}
>>>               route(1);
>>>       }
>>>
>>>       # requests for my domain
>>>
>>>       ## uncomment this if you want to enable presence server
>>>       ##   and comment the next 'if' block
>>>       ##   NOTE: uncomment also the definition of route[2] from  below
>>>       ##if( is_method("PUBLISH|SUBSCRIBE"))
>>>       ##              route(2);
>>>
>>>       if (is_method("PUBLISH"))
>>>       {
>>>               sl_send_reply("503", "Service Unavailable");
>>>               exit;
>>>       }
>>>
>>>       if (is_method("REGISTER"))
>>>       {
>>>               # authenticate the REGISTER requests (uncomment to enable
>>> auth)
>>>               ##if (!www_authorize("", "subscriber"))
>>>               ##{
>>>               ##      www_challenge("", "0");
>>>               ##      exit;
>>>               ##}
>>>               ##
>>>               ##if (!check_to())
>>>               ##{
>>>               ##      sl_send_reply("403","Forbidden auth ID");
>>>               ##      exit;
>>>               ##}
>>>
>>>               if (!save("location"))
>>>                       sl_reply_error();
>>>
>>>               exit;
>>>       }
>>>
>>>       if ($rU==NULL) {
>>>               # request with no Username in RURI
>>>               sl_send_reply("484","Address Incomplete");
>>>               exit;
>>>       }
>>>       # apply DB based aliases (uncomment to enable)
>>>       ##alias_db_lookup("dbaliases");
>>>
>>>       if (!lookup("location")) {
>>>               switch ($retcode) {
>>>                       case -1:
>>>                       case -3:
>>>                               t_newtran();
>>>                               t_reply("404", "Not Found");
>>>                               exit;
>>>                       case -2:
>>>                               sl_send_reply("405", "Method Not
>>> Allowed");
>>>                               exit;
>>>               }
>>>       }
>>>
>>>       # when routing via usrloc, log the missed calls also
>>>       setflag(2);
>>>
>>>       route(1);
>>> }
>>>
>>>
>>>
>>>
>>> Many thnaks.
>>>
>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>
>>
>
>
> ------------------------------------------------------------------------
>
>




More information about the Users mailing list