[Kamailio-Users] SIPp dispatcher load testing failure with too many hops - why?

sergejf serge at elasticall.com
Mon Aug 18 17:48:37 CEST 2008


Hello,

I'm attempting to load test a simple dispatcher script in OpenSER 1.3.x
using SIPp (built-in UAC and UAS scenarios). My dispatcher.list only has one
address 8.XX.XX.12 (a SIPp instance, UAS). SIPp on 8.XX.XX.10 sends the
INVITE messages to 63.XXX.XXX.110. Everything goes well until the UAC sends
ACK and BYE in quick sequence. OpenSER tries to t_relay() it to itself,
which results in a "too many hops" error: 

2008-08-18	11:16:56:708	1219072616.708649: Aborting call on unexpected
message for Call-Id '1-3548 at 8.XX.XX.10': while expecting '200' (index 8),
received 'SIP/2.0 483 To Many Hops
Via: SIP/2.0/UDP 8.XX.XX.10:5061;branch=z9hG4bK-3548-1-7
From: sipp <sip:sipp at 8.XX.XX.10:5061>;tag=3548SIPpTag001
To: sut <sip:service at 63.XXX.XXX.110:5060>;tag=2148SIPpTag011
Call-ID: 1-3548 at 8.XX.XX.10
CSeq: 2 BYE
Server: OpenSER (1.3.2-notls (x86_64/linux))
Content-Length: 0

I have tried modifying the SIPp UAC script to re-use the Contact: header
from the SIP 200 OK message in the R-URI of the SIP ACK and SIP BYE, to no
avail. I have loaded the TM module but I suppose that since the SIP 200 OK
is the final message of the transaction, SIP ACK and SIP BYE won't
automatically be relayed to 8.XX.XX.12.

Is this an OpenSER issue or a SIPp scripting issue? Any advice would be
appreciated. Please find below some relevant lines from my openser.cfg:

route{
        xlog("TRACE:ROUTE: src($si:$sp) dst($Ri:$Rp) msg($mb)\n");

        # initial checkings
        if ( !mf_process_maxfwd_header("10") ) {
                xlog("SCRIPT:ERROR: $rm (from $si:$sp) too many hops\n");
                sl_send_reply("483","To Many Hops");
                exit;
        };

        if (method==CANCEL) {
                if (t_check_trans())
                        t_relay();
                exit;
        }

        # routing
        if (has_totag()) {
                xlog("SCRIPT0:INFO: $rm RURI=[$ru] - routing to dst-uri
[$du] cnt [$avp(i:273)] dst set [$avp(i:271)]\n");
                loose_route();
                if (method=="INVITE")
                        record_route();
                route(1);
                exit;
        }

The SIP ACK and SIP BYE follow the route defined in the above if {}
statement. The SIP INVITE follows the dispatcher route shown below:

        record_route();

        # perform load balancing

        # set algorithm (4 = round robin)
        $avp(alg) = 4;
        # set the group 
        $avp(grp) = 2;

        if (method=="INVITE")
                xlog("CALL_START: RURI=[$ru] group=[$avp(grp)]
callid=$ci\n");

        # do balancing
        if(!ds_select_dst("$avp(grp)", "$avp(alg)")) {
                xlog("CALL_DROP:INTERNAL: no destinations for [$ru]
group=[$avp(grp)], callid=$ci\n");
                sl_send_reply("404", "no dst");
                exit;
        }

        if(avp_check("$avp(i:273)", "eq/i:1")) {
                if(!avp_pushto("$ruri","$avp(i:271)")) {
                        xlog("CALL_DROP:INTERNAL: cannot push to ruri
[$avp(i:271)], group=[$avp(grp)], callid=$ci\n");
                        sl_send_reply("500", "cannot get dst");
                        exit;
                }
        } else {
                # redundancy
                t_on_failure("1");
        }

        xlog("SCRIPT:INFO: $rm RURI=[$ru] - routing to dst-uri [$du] cnt
[$avp(i:273)] dst set [$avp(i:271)]\n");

        # do forward
        route(1);
        exit;

-- 
View this message in context: http://www.nabble.com/SIPp-dispatcher-load-testing-failure-with-too-many-hops---why--tp19034416p19034416.html
Sent from the OpenSER Users Mailing List mailing list archive at Nabble.com.





More information about the Users mailing list