[Serusers] ser not sending ACK back to MGW

Colin Dalton cd at eircom.net
Tue May 31 15:50:24 CEST 2005


Hello,

Apologies if this has come up before, but I'm having some problems
with SER not forwarding an ACK back to a Cisco AS5300 media gateway. This
means that incoming calls break down because the 5300 hasn't received
an ACK from the SIP phone. Outgoing calls are fine, because SER is 
forwarding the 5300's ACK back to the SIP phone correctly. Would anyone
know why this is only working in one direction?

With incoming calls, the sequence of events is:

1. I dial the PSTN number on my SIP phone.
2. The SIP phone sends the INVITE to SER.
3. SER rewrites the host and forwards it to the Media Gateway (MGW)
4. The MGW brings up an ISDN channel and connects the call
5. When the call is answered, the MGW sends back the 200/OK to SER
6. SER forwards the 200/OK on to the SIP phone and I can converse on the call
7. The SIP phone sends the ACK back to SER, but SER doesn't send it on to
   the MGW.
8. The MGW waits 19 secs before disconnecting the call because it hasn't
   received an ACK.

In the reverse direction everything works fine, because SER sends on the
ACK it receives from the AS5300.

My configuration is appended below. Running IOS 12.3(9) on the 5300, the
SIP phone is a Siemens Optipoint 400. SER version is 0.8.10 on Fedora
Core 3.

Thanks,

Colin

--- config ---

#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#

# ----------- global configuration parameters ------------------------

#debug=3         # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no	# (cmd line: -E)

/* Uncomment these lines to enter debugging mode 
debug=7
fork=no
log_stderror=yes
*/

check_via=no	# (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
#port=5060
#children=4
fifo="/tmp/ser_fifo"

# ------------------ module loading ----------------------------------

# Uncomment this if you want to use SQL database
#loadmodule "/usr/local/lib/ser/modules/mysql.so"

loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"

# Uncomment this if you want digest authentication
# mysql.so must be loaded !
#loadmodule "/usr/local/lib/ser/modules/auth.so"
#loadmodule "/usr/local/lib/ser/modules/auth_db.so"

# ----------------- setting module-specific parameters ---------------

# -- usrloc params --

modparam("usrloc", "db_mode",   0)

# Uncomment this if you want to use SQL database 
# for persistent storage and comment the previous line
#modparam("usrloc", "db_mode", 2)

# -- auth params --
# Uncomment if you are using auth module
#
#modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config), 
# uncomment also the following parameter)
#
#modparam("auth_db", "password_column", "password")

# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)

# -------------------------  request routing logic -------------------

# main routing logic

route{

	# initial sanity checks -- messages with
	# max_forwards==0, or excessively long requests
	if (!mf_process_maxfwd_header("10")) {
		sl_send_reply("483","Too Many Hops");
		break;
	};
	if ( msg:len > max_len ) {
		sl_send_reply("513", "Message too big");
		break;
	};

	# we record-route all messages -- to make sure that
	# subsequent messages will go through our proxy; that's
	# particularly good if upstream and downstream entities
	# use different transport protocol
	record_route();	
	# loose-route processing
	if (loose_route()) {
		t_relay();
		break;
	};

	# if the request is for other domain use UsrLoc
	# (in case, it does not work, use the following command
	# with proper names and addresses in it)
	if (uri==myself) {

		if (method=="REGISTER") {
			save("location");
			break;
		};

		if (uri=~"^sip:9[0-9]*@*") {   # pstn escape = 9
		#	strip(9);
			rewritehostport("159.134.250.247:5060");
			log(1,"Forwarding to PSTN/n");
			forward(159.134.250.247, 5060);
		} else {
		# native SIP destinations are handled using our USRLOC DB
		if (!lookup("location")) {
			sl_send_reply("404", "Not Found");
			break;
		};
		forward(uri:host,uri:port);
	};
	# forward to current uri now; use stateful forwarding; that
	# works reliably even if we forward from TCP to UDP
	if (!t_relay()) {
		sl_reply_error();
	};

};
}




More information about the sr-users mailing list