Hi Nilanjan,

Check in the trace if :
1) the 200 OK getting back to the caller has 2 RR headers (one from Proxy and one from LB).

2) the ACK from caller (before LB) has 2 Route headers, one pointing to LB, next to Proxy.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com


On 11/09/2012 05:01 PM, Nilanjan Banerjee wrote:
Hi Bogdan,

Thanks a lot for your suggestion and sorry for the delay in getting back with this...I tried the following configuration as you have suggested for the Load Balancer and the Proxy:

______________
Load Balancer:
______________

route{
        if (!mf_process_maxfwd_header("3")) {
                sl_send_reply("483","looping");
                exit;
        }

        if (!has_totag()) {
                # initial request
                record_route();
        } else {
                # sequential request -> obey Route indication
                loose_route();
                t_relay();
                exit;
        }

        # detect resources and do load balancing

         load_balance("1","sc");

# LB function returns negative if no suitable destination (for requested resources) is found,
        # or if all destinations are full
        if ($retcode<0) {
             sl_send_reply("500","Service full");
             exit;
        }

        xlog("Selected destination is: $du\n");

        # send it out
        if (!t_relay()) {
                sl_reply_error();
        }
}

______
Proxy
______

route{

        if (!has_totag()) {
                # initial request
                record_route();
        } else {
                # sequential request -> obey Route indication
                loose_route();
        }

        if (!t_relay()) {
             #   xlog("L_ERR","sl_reply_error\n");
                sl_reply_error();
        }

}

However, I am still getting the same error - basically the ACK and the BYE messages are skipping the Proxy and the response to the BYE is sent to the Proxy. Here are the sample ACK and BYE for the following setup I am using:

X.X.X.23:5080 --> X.X.X.206:5060 --> X.X.X.8:5060 --> X.X.X.5:5070
(sipp UAC)       --> (Load Balancer) -->  (Proxy)         --> (sipp UAS)

#
U 2012/11/01 11:19:22.901990 X.X.X.206:5060 -> X.X.X.5:5070
ACK sip:X.X.X.5:5070;transport=UDP SIP/2.0.
Record-Route: <sip:X.X.X.206;lr;ftag=31168SIPpTag005;did=9d.087b203>,<sip:X.X.X.8;lr>.
Via: SIP/2.0/UDP X.X.X.206;branch=z9hG4bK0112.20fe162.2.
Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-5-5.
From: sipp <sip:sipp@X.X.X.23:5080>;tag=31168SIPpTag005.
To: sut <sip:service@X.X.X.5:5070>;tag=30500SIPpTag015.
Call-ID: 5-31168@X.X.X.23.
CSeq: 1 ACK.
Contact: sip:sipp@X.X.X.23:5080.
Max-Forwards: 69.
Subject: Performance Test.
Content-Length: 0.
.

#
U 2012/11/01 11:19:22.934118 X.X.X.23:5080 -> X.X.X.206:5060
BYE sip:X.X.X.5:5070;transport=UDP SIP/2.0.
Record-Route: <sip:X.X.X.206;lr;ftag=31168SIPpTag001;did=0ec.de85e9a>,<sip:X.X.X.8;lr>.
Via: SIP/2.0/UDP X.X.X.23:5080;branch=z9hG4bK-31168-1-7.
From: sipp <sip:sipp@X.X.X.23:5080>;tag=31168SIPpTag001.
To: sut <sip:service@X.X.X.5:5070>;tag=30500SIPpTag011.
Call-ID: 1-31168@X.X.X.23.
CSeq: 2 BYE.
Contact: sip:sipp@X.X.X.23:5080.
Max-Forwards: 70.
Subject: Performance Test.
Content-Length: 0.
.

Looks like the loose routing for the messages after the initial requests is not happening properly according to the Record-Route header. Not sure, if I am doing things right in the client side while introducing the Record-Route header - hence attaching the modified sipp uac and uas I am using.

Would greatly appreciate your time and help if you could please throw some light into this matter.

Thanks,
Nil.


On Thu, Oct 25, 2012 at 7:30 PM, Bogdan-Andrei Iancu <bog...@opensips.org <mailto:bog...@opensips.org>> wrote:

    Hi Nil,

    Seems the problem is in the proxy, where you do not do RR at all.

    Try

    ____________

    Proxy:
    ____________

    route{

            if (!has_totag()) {
                    # initial request
                    record_route();
            } else {
                    # sequential request -> obey Route indication
                    loose_route();
            }

            if (!t_relay()) {
                 #   xlog("L_ERR","sl_reply_error\n");
                    sl_reply_error();
            }
    }


    Regards,

    Bogdan-Andrei Iancu
    OpenSIPS Founder and Developer
    http://www.opensips-solutions.com


    On 10/22/2012 02:25 PM, Nilanjan Banerjee wrote:
    Thanks Bogdan for taking time to respond to my post. I think you
    have guessed it right, I am using the sample routing script given
    in the Load Balancer (LB) tutorial and that is most likely
    sending the ACK and BYE messages directly to Client 2 bypassing
    the Proxy. The routing code snippets I am using at the LB and the
    Proxy are shown below. Could you please tell me what's going
    wrong over here? I am using record route support at both the
    clients. Alternatively if you could please tell me what should go
    in the routing blocks of the LB and the Proxy so that all the
    messages go through the LB and the Proxy then that will be of
    immense help too.

    Regards,
    Nil.

    ____________

    Load Balancer:
    ____________

    route{
            if (!mf_process_maxfwd_header("3")) {
                    sl_send_reply("483","looping");
                    exit;
            }

            if (!has_totag()) {
                    # initial request
                    record_route();
            } else {
                    # sequential request -> obey Route indication
                    loose_route();
                    t_relay();
                    exit;
            }

            # detect resources and do balancing

             load_balance("1","sc");


            # LB function returns negative if no suitable destination
    (for requested resources) is found,
            # or if all destinations are full
            if ($retcode<0) {
                 sl_send_reply("500","Service full");
                 exit;
            }

            xlog("Selected destination is: $du\n");

            # send it out
            if (!t_relay()) {
                    sl_reply_error();
            }
    }

    ____________

    Proxy:
    ____________

    route{
    record_route();
            if (!t_relay()) {
                 #   xlog("L_ERR","sl_reply_error\n");
                    sl_reply_error();
            }
    }


    On Sun, Oct 21, 2012 at 7:39 PM, Bogdan-Andrei Iancu
    <bog...@opensips.org <mailto:bog...@opensips.org>> wrote:

        Hi Nil,

        I wild guess is you are not correctly do "loose_route" on the
        LB, so instead of following the Route (to OpenSIPS Proxy), it
        goes directly to end destination in RURI (Client 2).

        Of course, I assume that all parties (LB + Proxy) do
        record_route() for the call, right ?

        Regards,

        Bogdan-Andrei Iancu
        OpenSIPS Founder and Developer
        http://www.opensips-solutions.com


        On 10/21/2012 10:09 AM, Nilanjan Banerjee wrote:
        Hello,

          I am trying to build the following setup using OpenSIPS
        load balancer and the proxy functionality:

        Client 1 (sipp) <----> OpenSIPS Load Balancer <---->
        OpenSIPS Proxy <----> Client 2 (sipp)

        At the client ends I am using the following commands:

        Client 1: sipp -sn uac -rsa [Load Balancer Address] [Client
        2 Address]

        Client 2: sipp -sn uas

        The Load Balancer is configured with a destination as the
        OpenSIPS Proxy and the Proxy is configured to simply forward
        the SIP messages based on IP address (using only forward();
        in the routing block).

        Now everything (INVITE, OK and ACK messages) works fine
        except the BYE messages that are getting forwarded by the
        Load Balancer directly to Client 2 unlike the INVITE, OK and
        ACK messages that traverse the Proxy. Client 2 however,
        sends the OK to the BYE to the OpenSIPS Proxy. Since the BYE
        messages do not traverse the Proxy, the OK to the BYE
        messages are getting retransmitted repeatedly by Client 2
        and the sessions are not getting terminated properly. How do
        I make the BYE messages to go through the Proxy or the OK
        message sent directly to the Load Balancer so that the
        retransmissions do not happen and the sessions get
        terminated properly?

        [NB: When the Load Balancer is taken out of the loop and the
        Proxy configuration is kept the same, all the SIP messages
        traverses the Proxy and everything works fine i.e., the BYE
        and the OKs to the BYEs are handled properly and sessions
        get terminated properly.]

        Would greatly appreciate any help in this matter. Thanks in
        advance.

        Nil.


        _______________________________________________
        Users mailing list
        Users@lists.opensips.org  <mailto:Users@lists.opensips.org>
        http://lists.opensips.org/cgi-bin/mailman/listinfo/users



_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to