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         

_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to