Hello list!
I am trying to troubleshoot an issue we are having where we sometimes see an ACK in
response to a 200 OK (SDP) come from the a different IP address to the rest of dialogue.
The client ignore the traffic from the different IP and the call set up fails.
Kamailio is multihomed on two IPs and this client is registered with the first IP address.
I have done some searching on this and seen a few others with the issue, it seems like
it's the ACK in the loose_route() section of WITHINDLG in the default kamailio.cfg
file. I tried the force_send_socket solution one other person suggested but this caused
issues with other kinds of dialogues, perhaps I did it incorrectly?
Thanks for your time
Boden
Here is my attempt to solve the issue and config snippets
mhomed=1
# ----- rr params -----
# set next param to 1 to add value to ;lr param (helps with some UAs)
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 1)
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (!has_totag()) return;
# sequential request within a dialog should
# take the path determined by record-routing
if (loose_route()) {
route(DLGURI);
# this is the attempt to use the right IP
if ($(route_uri{uri.host}) == VRRP_IP) {
force_send_socket(VRRP_IP);
} else if ($(route_uri{uri.host}) == KAM01_IP) {
force_send_socket(KAM01_IP);
}
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the transaction fails
} else if (is_method("ACK")) {
# ACK is forwarded statelessly
route(NATMANAGE);
} else if (is_method("NOTIFY")) {
# Add Record-Route for in-dialog NOTIFY as per RFC 6665.
record_route();
}
route(RELAY);
exit;
}
if (is_method("SUBSCRIBE") && uri == myself) {
# in-dialog subscribe requests
route(PRESENCE);
exit;
}
if (is_method("ACK")) {
if (t_check_trans()) {
# no loose-route, but stateful ACK;
# must be an ACK after a 487
# or e.g. 404 from upstream server
route(RELAY);
exit;
} else {
# ACK without matching transaction ... ignore and discard
exit;
}
}
sl_send_reply("404", "Not here");
exit;
}
For example (please excuse formatting)
xxx.xx.xxx.97:5060 xxx.xx.xxx.96:5060
yyy.yyy.102.96:58308 xxx.xx.xxx.27:5060
----------w--------- ----------w--------- ----------w---------
----------w---------
x INVITE (SDP) x x
x
x --------------------------> x x
x
x 100 trying -- your call is x x
x
x <-------------------------- x x
x
x x INVITE (SDP) x
x
x x --------------------------> x
x
x x 100 Trying x
x
x x <-------------------------- x
x
x x 180 Ringing x
x
x x <-------------------------- x
x
x 180 Ringing x x
x
x <-------------------------- x x
x
x x 200 OK (SDP) x
x
x x <-------------------------- x
x
x 200 OK (SDP) x x
x
x <-------------------------- x x
x
x ACK x x
x
x --------------------------> x x
x
x x x
ACK x
x x x
<-------------------------- x
x x 200 OK (SDP) x
x
x x <<<------------------------ x
x
Show replies by date