Hello,
is your sipp script dealing with record routing properly? Can you post a
sample sip call from invite to bye (e.g., ngrep trace)? Will show better
whose fault is. I doubt it has something to do with openser.
Cheers,
Daniel
On 08/18/08 18:48, sergejf wrote:
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(a)8.XX.XX.10'.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@8.XX.XX.10:5061>;tag=3548SIPpTag001
To: sut <sip:service@63.XXX.XXX.110:5060>;tag=2148SIPpTag011
Call-ID: 1-3548(a)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;
--
Daniel-Constantin Mierla
http://www.asipto.com