[OpenSIPS-Users] Dynamic routing fail-over scenario .
Sasmita Panda
spanda at 3clogic.com
Thu Oct 8 14:05:41 CEST 2015
In this case ,in case of failure route , its not going inside the
"use_next_gw" loop . Dont know whats wrong in my config file .
Please help me .
*Thanks & Regards*
*Sasmita Panda*
*Network Testing and Software Engineer*
*3CLogic , ph:07827611765*
On Wed, Oct 7, 2015 at 6:56 PM, Sasmita Panda <spanda at 3clogic.com> wrote:
> Hi All ,
>
> I am using opensips-1.11 . I have some scenario in which there is two
> or more gateways corresponding to a single group .
>
> for example :
>
> grp id : 1 , domain : mongodb1.sasmita.com
> gate ways :
> gw:1 , address : 162.1.1.1:5090
> gw:2 , address : 162.10.1.1:5080
>
> So , what I want is that when call get connected to gw1 , if its fail
> then call get routed to the next gateway .
>
>
> What I have done for this is bellow :
>
> mysql> select * from dr_groups;
> +----+----------+-------------------------------+---------+--------------+
> | id | username | domain | groupid | description |
> +----+----------+-------------------------------+---------+--------------+
> | 1 | | mongodb1.sasmita.com | 9 | out |
> +----+----------+-------------------------------+---------+--------------+
>
> mysql> select * from dr_gateways;
>
> +----+------+------+---------------------+-------+------------+-------+------------+-------+--------+--------------+
> | id | gwid | type | address | strip | pri_prefix | attrs |
> probe_mode | state | socket | description |
>
> +----+------+------+---------------------+-------+------------+-------+------------+-------+--------+--------------+
> | 10 | 4 | 2 | 162.1.1.1:5090 | 0 | NULL | NULL |
> 0 | 0 | NULL | sipp one |
> | 8 | 2 | 2 | 162.10.1.1:5080 | 0 | NULL | NULL |
> 0 | 0 | NULL | asterisk |
>
> +----+------+------+---------------------+-------+------------+-------+------------+-------+--------+--------------+
> mysql>
> mysql> select * from dr_rules;
>
> +--------+---------+--------+---------+----------+---------+--------+-------+---------------+
> | ruleid | groupid | prefix | timerec | priority | routeid | gwlist |
> attrs | description |
>
> +--------+---------+--------+---------+----------+---------+--------+-------+---------------+
> | 32 | 9 | | | 0 | | 2 | NULL
> | fail route |
> | 29 | 9 | | | 1 | | 4 | NULL
> | out |
>
> +--------+---------+--------+---------+----------+---------+--------+-------+---------------+
>
> This is my table of content .
>
> In my opensips script I have done the bellow things .
>
> Starting I have loaded all the modules . then the below things happening .
> I have loaded drouting and dialplan , inaddition to this all the
> necessary modules .
>
>
>
> route{
>
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483","Too Many Hops");
> exit;
> };
>
> if (msg:len >= 2048 ) {
> sl_send_reply("513", "Message too big");
> exit;
> };
>
> if (method=="SUBSCRIBE") {
> sl_send_reply("405", "Method not allowed");
> exit;
> }
> if (method=="NOTIFY") {
> sl_send_reply("405", "Method not allowed");
> exit;
> }
> if (method=="OPTIONS") {
> sl_send_reply("200", "OK");
> exit;
> }
>
> if (!method=="REGISTER")
> record_route();
> if (loose_route()) {
> setflag(2);
> route(1);
> };
>
> if (!uri==myself) {
> # drop packets, look at orig file for original config
> route(1);
> exit;
> }
>
> if (uri==myself) {
> force_rport();
>
> if ( is_method("REGISTER")) {
>
>
> if(($hdr(User-Agent)!~"scanner")||($hdr(User-Agent)!~"SJphone")) # to
> stop scanners
> {
> if(is_present_hf("X-Info"))
> {
> $var(x)=$hdr(X-Info);
> $var(y)=$(var(x){s.select,0,;});
> $var(z)=$(var(x){s.select,1,;});
> $var(y)=$(var(y){s.select,1,=});
> $var(z)=$(var(z){s.select,1,=});
> if($(var(y){s.int})!=0)
> {
> save("location","p1n$var(z)");
> exit;
> }else{
> save("location","rp1");
> append_to_reply("Contact: $ct \r\n");
> xlog( "L_NOTICE", "Contact & $ct \n" );
> sl_send_reply("200","OK");
> exit;
> }
> }else{
> save("location","p1n5");
> exit;
> }
> ; save("location","fc10p1");
> m_dump("$fu");
> }
> exit;
> }
>
> if ( is_method("CANCEL") )
> {
> if ( t_check_trans() ){
> t_relay();
> }
> else {
> t_reply("200","OK");
> }
> exit;
> }
>
>
> if (is_method("BYE")) {
> setflag(2);
> setflag(TRACE_FLAG);
> t_relay();
> exit;
>
> }
>
> if (is_method("INVITE")) {
>
> setflag(4);
> setflag(2);
> xlog( "L_NOTICE", "CallCenter_Info & $ci,$var(c) \n" );
> if(is_from_gw() || (to_uri=~"@190.168.1.1"))
> {
>
> xlog( "L_WARN", "Source IP sas : $Ri To Uri : $tu From : $fU
> Request URI: $oU Call ID:$ci" );
>
> if ( !lookup("location")){
> sl_send_reply("404","NO Match Found");
> exit;
> }
> #do lcr
> if ( !serialize_branches(1)){
> sl_send_reply("500","Internal Server Error");
> exit;
> }
> else{
> next_branches();
> t_on_failure("3");
> route(1);
> exit;
> }
> }
> #}
> else{
> }
> }
>
> route(10);
>
> };
>
> route[1] {
> if (nat_uac_test("7")) {
> fix_nated_contact();
> };
> t_on_reply("1");
> if (!t_relay()) {
> sl_reply_error();
> };
>
> exit;
> }
>
> route[10] {
>
> $avp(src) = $rd;
> xlog("request domain,$avp(trl)");
> dp_translate("5", "$avp(src)/$avp(trl)");
> $avp(grp)=$(avp(trl){s.int});
> xlog("translated to $avp(grp) \n");
>
> if (!do_routing("$avp(grp)","F")) {
> xlog("do_routing: No rules matching the URI\n");
> send_reply("503","No rules matching the URI");
> exit;
> }
>
> if (is_method("INVITE")) {
> t_on_failure("10");
> }
> route(1);
>
> }
>
> onreply_route[1] {
>
> if( status =~ "18[0-9]" ) {
> t_on_failure("4");
> }
> if (nat_uac_test("1")) {
> fix_nated_contact();
>
> };
> }
>
> failure_route[10] {
> xlog("DEBUG: DROUTING failure route active\n");
> if (t_check_status("408|402|50[234]")) {
> # route to the next gateway
> xlog("DEBUG: DROUTING use next gateway \n");
> if (use_next_gw()) {
> # prepare for lcr failover
> xlog( "L_NOTICE", "[$Tf] ACC: $ci Next gateway $fU
> -> $tU via $rd\n" );
> t_on_reply("1");
> t_on_failure("10");
> # send from 5060 for primus gateways
> if (!t_relay()){
> exit;
> }
> } else {
> xlog( "L_WARN", "[$Tf] FR: $ci No more buscuits in
> the biscuit tin -> 503.\n" );
> t_reply("503", "Service unavailable -- no more
> gateways");
> exit;
> };
>
> };
> exit;
> }
>
>
> failure_route[4] {
> xlog("L_NOTICE","could not complete");
> }
>
>
> I want to switch to the next gateway in the status codes
> defined in the failure route . But , now its not switching the gateway .
> Its just coming to the else loop and giving 503 error . I think there is
> something missing in my script or in my dynamic routing table .
>
> Please let me know if I need to change something . I am trying this
> from very long time but not getting any result . Any kind of help is
> appreciated .
>
> *Thanks & Regards*
> *Sasmita Panda*
> *Network Testing and Software Engineer*
> *3CLogic , ph:07827611765*
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20151008/7bf86928/attachment-0001.htm>
More information about the Users
mailing list