I looked at the attached dumps. First of all, 0.8.10 and 0.8.12 handle record routing differently. 0.8.10 implements strict routing while 0.8.12 implements loose routing.
The bug is in your script. Because 0.8.12 implements loose routing, the Request-URI will contain the Contact of the callee. The Contact contains the number of the callee -- 5803932.
In your script you are searching for numbers beginning with 580 and rewrite the hostname to a gateway. ACK and BYE will also contain the number in the Request-URI -- see above, but they don't contain the IP of your server in the Request-URI -- the IP of the callee is there.
But you don't check this and rewrite anyway.
The proper solution would be to search for numbers beginning with 580 inside the if (uri==myself) condition.
BTW, all searches and rewrites of Request-URI should be inside uri==myself condition -- the condition will be true only for requests establishing a dialog.
The Request-URI of requests WITHIN a dialog (BYE, ACK) must not be changed.
In addition to that 0.8.10 and 0.8.12 configs are different. Your config for 0.8.10 doesn't use record routing while the config for 0.8.12 does.
Jan.
On 17-12 10:19, Jamin W. Collins wrote:
I sent the following message to to the serteam address per (Jiri's request) several days ago regarding an apparent routing difference between 0.8.10 and 0.8.12. I've yet to receive any indication that it was received and/or that anyone is looking into this.
I'm reposting it here (with configs and traces) in hopes that someone here can either indicate what I've done wrong or confirm that these two configurations should work the same.
----- Forwarded message from "Jamin W. Collins" jcollins@asgardsrealm.net -----
From: "Jamin W. Collins" jcollins@asgardsrealm.net To: serteam@iptel.org
I believe I've found a routing difference between 0.8.10 and 0.8.12. I originally brought this up on the serusers list[1]. Jiri has suggested that I forward the configurations and ngrep captures to this address, you should find these attached to this message. The ngrep capture from 20031204 contains the Snom phone's request against the 0.8.10 configuration. The 20031205 capture contains a Snom and Cisco request against the 0.8.12 configuration. The Snom phone works as expected against the 0.8.10 configuration, but not he 0.8.12. The Cisco phone works as expected against the 0.8.12 configuration.
[1] - http://lists.iptel.org/pipermail/serusers/2003-December/004272.html
----- End forwarded message -----
-- Jamin W. Collins
This is the typical unix way of doing things: you string together lots of very specific tools to accomplish larger tasks. -- Vineet Kumar
On Thu, Dec 18, 2003 at 10:58:22PM +0100, Jan Janak wrote:
I looked at the attached dumps. First of all, 0.8.10 and 0.8.12 handle record routing differently. 0.8.10 implements strict routing while 0.8.12 implements loose routing.
The bug is in your script. Because 0.8.12 implements loose routing, the Request-URI will contain the Contact of the callee. The Contact contains the number of the callee -- 5803932.
So, should I be checking a different variable? If so, which? I didn't find anything about this in the Admin Guide.
In your script you are searching for numbers beginning with 580 and rewrite the hostname to a gateway. ACK and BYE will also contain the number in the Request-URI -- see above, but they don't contain the IP of your server in the Request-URI -- the IP of the callee is there.
But you don't check this and rewrite anyway.
The proper solution would be to search for numbers beginning with 580 inside the if (uri==myself) condition.
I've moved the search inside the if (uri==myself) condition as you suggested. However, this has not (as I suspected) changed the behavior of the routing. The 580XXXX calls still do not get routed to the gateway as they did in 0.8.10. In the attached ngrep output you can see a call to sip:5803932@172.21.30.53 starting at 2003/12/18 17:15:44.976502. However this request makes it past the 580XXXX check and is routed instead to 172.21.30.10, which is not what I would expect. Is there still something wrong with the new config? Am I checking the wrong variable?
BTW, all searches and rewrites of Request-URI should be inside uri==myself condition -- the condition will be true only for requests establishing a dialog.
The Request-URI of requests WITHIN a dialog (BYE, ACK) must not be changed.
In addition to that 0.8.10 and 0.8.12 configs are different. Your config for 0.8.10 doesn't use record routing while the config for 0.8.12 does.
I am aware that they are slightly different. I used the 0.8.12 default config as a starting point and attempted to translate the working 0.8.10 configuration to the 0.8.12 syntax.
Jamin,
I acknowledge the problem. It is in ser, more exactly it's a collision with one special feature that allows ser to work properly even with implementations that remove parameters from Route header fields.
I need to investigate more, I am not sure yet whether we should change the behaviour of ser or ask snom to change their preloaded route set.
Anyway, it's Christmas time now so I will get back to your problem later, thanks for your patience.
Jan.
On 18-12 16:37, Jamin W. Collins wrote:
On Thu, Dec 18, 2003 at 10:58:22PM +0100, Jan Janak wrote:
I looked at the attached dumps. First of all, 0.8.10 and 0.8.12 handle record routing differently. 0.8.10 implements strict routing while 0.8.12 implements loose routing.
The bug is in your script. Because 0.8.12 implements loose routing, the Request-URI will contain the Contact of the callee. The Contact contains the number of the callee -- 5803932.
So, should I be checking a different variable? If so, which? I didn't find anything about this in the Admin Guide.
In your script you are searching for numbers beginning with 580 and rewrite the hostname to a gateway. ACK and BYE will also contain the number in the Request-URI -- see above, but they don't contain the IP of your server in the Request-URI -- the IP of the callee is there.
But you don't check this and rewrite anyway.
The proper solution would be to search for numbers beginning with 580 inside the if (uri==myself) condition.
I've moved the search inside the if (uri==myself) condition as you suggested. However, this has not (as I suspected) changed the behavior of the routing. The 580XXXX calls still do not get routed to the gateway as they did in 0.8.10. In the attached ngrep output you can see a call to sip:5803932@172.21.30.53 starting at 2003/12/18 17:15:44.976502. However this request makes it past the 580XXXX check and is routed instead to 172.21.30.10, which is not what I would expect. Is there still something wrong with the new config? Am I checking the wrong variable?
BTW, all searches and rewrites of Request-URI should be inside uri==myself condition -- the condition will be true only for requests establishing a dialog.
The Request-URI of requests WITHIN a dialog (BYE, ACK) must not be changed.
In addition to that 0.8.10 and 0.8.12 configs are different. Your config for 0.8.10 doesn't use record routing while the config for 0.8.12 does.
I am aware that they are slightly different. I used the 0.8.12 default config as a starting point and attempted to translate the working 0.8.10 configuration to the 0.8.12 syntax.
-- Jamin W. Collins
Linux is not The Answer. Yes is the answer. Linux is The Question. - Neo
# # $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"
# proxy server IP listen="172.21.30.53"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so"
# Uncomment this if you want digest authentication # mysql.so must be loaded ! #loadmodule "/usr/lib/ser/modules/auth.so" #loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# persistent user registrations modparam("usrloc", "db_mode", 2) modparam("registrar", "default_expires", 172800) modparam("tm", "fr_inv_timer", 5 ) modparam("tm", "fr_timer", 5 )
# -- 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"); log(1, "Registration request."); break; }; # check for 911 calls if (uri=~"^sip:911@.*") { log(1, "911 Call"); rewritehost("172.21.30.51"); t_relay(); break; }; # pass local calls off to the gateway if (uri=~"^sip:580[0-9][0-9][0-9][0-9]@") { log(1, "Local call sent to gateway"); rewritehost("172.21.30.51"); t_relay(); break; }; # native SIP destinations are handled using our USRLOC DB if (!lookup("location")) { log(1, "Location lookup failure."); if ((src_ip==172.21.30.10) || (src_ip==172.21.30.12)) { log(1, "Request from IC server trying to go back
to IC server."); sl_reply_error(); } else { rewritehost("172.21.30.10"); log (1, "Sending request to the first server."); t_on_failure ("1"); t_relay(); }; break;
}; }; # 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(); };
}
failure_route[1]{ rewritehost("172.21.30.12"); log(1, "Sending request to the second server."); t_on_failure("2"); append_branch(); t_relay(); }
failure_route[2]{ rewritehost("172.22.30.51"); log(1, "Sending request to the gateway."); append_branch(); t_relay(); }
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
On Sun, Dec 21, 2003 at 08:48:15PM +0100, Jan Janak wrote:
I acknowledge the problem. It is in ser
Thank you.
I need to investigate more, I am not sure yet whether we should change the behaviour of ser or ask snom to change their preloaded route set.
I took a look at the specification, but didn't see anything (from my limited understanding) that would indicate that Snom was doing anything against the spec. So, if (and I know it's a big if with my understanding of SIP and the spec) they are within the spec then wouldn't it need to be SER that made the change?
Anyway, it's Christmas time now so I will get back to your problem later, thanks for your patience.
Thank you for taking the time to verify the problem.
On 22-12 07:57, Jamin W. Collins wrote:
I took a look at the specification, but didn't see anything (from my limited understanding) that would indicate that Snom was doing anything against the spec. So, if (and I know it's a big if with my understanding of SIP and the spec) they are within the spec then wouldn't it need to be SER that made the change?
I am not sure about this yet. As far as I know nobody else is using preloaded route set this way. I have to review the spec thoroughly. Anyway I will get back to it after the holidays.
Jan.
At 04:24 PM 12/22/2003, Jan Janak wrote:
On 22-12 07:57, Jamin W. Collins wrote:
I took a look at the specification, but didn't see anything (from my limited understanding) that would indicate that Snom was doing anything against the spec. So, if (and I know it's a big if with my understanding of SIP and the spec) they are within the spec then wouldn't it need to be SER that made the change?
I am not sure about this yet. As far as I know nobody else is using preloaded route set this way. I have to review the spec thoroughly. Anyway I will get back to it after the holidays.
My esthetic option is that preloaded Routes are not a good idea. I think you can turn it off in snom configuration.
-jiri
Jamin,
It's a bug in ser which was introduced when we wanted to make ser more interoperable with implementations that remove unknown parameters from Record-Route header fields. I will revert the changes and that will eliminate the problem with Snom.
Thanks for the report.
Jan.
On 22-12 16:24, Jan Janak wrote:
On 22-12 07:57, Jamin W. Collins wrote:
I took a look at the specification, but didn't see anything (from my limited understanding) that would indicate that Snom was doing anything against the spec. So, if (and I know it's a big if with my understanding of SIP and the spec) they are within the spec then wouldn't it need to be SER that made the change?
I am not sure about this yet. As far as I know nobody else is using preloaded route set this way. I have to review the spec thoroughly. Anyway I will get back to it after the holidays.
Jan.
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
On Sun, Jan 11, 2004 at 11:40:35PM +0100, Jan Janak wrote:
It's a bug in ser which was introduced when we wanted to make ser more interoperable with implementations that remove unknown parameters from Record-Route header fields. I will revert the changes and that will eliminate the problem with Snom.
Thank you very much. Will there be a notice of a patch or new version?
I will send you a notification.
Jan.
On 11-01 23:24, Jamin W. Collins wrote:
On Sun, Jan 11, 2004 at 11:40:35PM +0100, Jan Janak wrote:
It's a bug in ser which was introduced when we wanted to make ser more interoperable with implementations that remove unknown parameters from Record-Route header fields. I will revert the changes and that will eliminate the problem with Snom.
Thank you very much. Will there be a notice of a patch or new version?
-- Jamin W. Collins
Linux is not The Answer. Yes is the answer. Linux is The Question. - Neo
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
On Mon, Jan 12, 2004 at 06:54:05PM +0100, Jan Janak wrote:
On 11-01 23:24, Jamin W. Collins wrote:
On Sun, Jan 11, 2004 at 11:40:35PM +0100, Jan Janak wrote:
It's a bug in ser which was introduced when we wanted to make ser more interoperable with implementations that remove unknown parameters from Record-Route header fields. I will revert the changes and that will eliminate the problem with Snom.
Thank you very much. Will there be a notice of a patch or new version?
I will send you a notification.
Any progress on this?
Hello Jamin,
yes, the change is easy, but I haven't commited yet because I have to test it with Cisco gear first (there were some problems previously -- loops) and it takes some time. I can send you a patch if you want to give it a try by yourself.
Jan.
On 30-01 11:18, Jamin W. Collins wrote:
On Mon, Jan 12, 2004 at 06:54:05PM +0100, Jan Janak wrote:
On 11-01 23:24, Jamin W. Collins wrote:
On Sun, Jan 11, 2004 at 11:40:35PM +0100, Jan Janak wrote:
It's a bug in ser which was introduced when we wanted to make ser more interoperable with implementations that remove unknown parameters from Record-Route header fields. I will revert the changes and that will eliminate the problem with Snom.
Thank you very much. Will there be a notice of a patch or new version?
I will send you a notification.
Any progress on this?
-- Jamin W. Collins
Facts do not cease to exist because they are ignored. --Aldous Huxley, "Proper Studies", 1927
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
On Sat, Jan 31, 2004 at 02:14:21AM +0100, Jan Janak wrote:
On 30-01 11:18, Jamin W. Collins wrote:
On Mon, Jan 12, 2004 at 06:54:05PM +0100, Jan Janak wrote:
I will send you a notification.
Any progress on this?
yes, the change is easy, but I haven't commited yet because I have to test it with Cisco gear first (there were some problems previously -- loops) and it takes some time. I can send you a patch if you want to give it a try by yourself.
I've got a test box I can hit with both a Snom and Cisco phone on Monday if accessibility to the hardware is a problem.