I are testing the last (v3.1.1) version of SIP firmware for Cisco ATA186 and see some bug or misimplementation of loose routing logic. I want known if my interpretation of the loose routing are correct.
The test scenario is:
U1(ATA186) -- callto -- U2(X-Lite)
U1 = 200.80.35.6:25263 SER= 200.80.35.17:5060 U2 = 200.80.35.6:26198
After the answer (200 OK) from X-Lite the Cisco ATA 186 send a different ACK message with version 3.1.0 and 3.1.0 firmware. The ACK sent by version 3.1.1 never reack X-Lite causing it to re-send the 200 OK message.
In version v3.1.0 the ACK to a 200OK is sent by ATA with URI equal to the proxy address as indicated by Record-Route in the previously received 200OK, and with a Route: header equal to the URI of the remote party (U2). With this SER perform loose-routing, take the URI in the Route: hf and sent the message to U2.
In version v3.1.1 the ACK to a 200OK is sent by ATA with URI equal to the U2 address (without port information) and a Route: header indicating the URI of the proxy. So is expected that SER perform loose-routing taking the URI in the Route: header and send the message to itself in this case (Route contain address of proxy instead of U2) but not, the loose-routing is not performed for unknown reason (may be ftag or lr ?) and the message is sent to the original uri (U2 ip without port) and never arrive because the U2 endpoint are listen in other port (26198 instead of 5060).
User-Agent: Cisco ATA 186 v3.1.0 atasip (040211A).
U 2004/07/15 12:25:12.056963 200.80.35.6:25263 -> 200.80.35.17:5060 ACK sip:9903@200.80.35.17 SIP/2.0. Route: sip:demo@200.80.35.6:26198. Via: SIP/2.0/UDP 10.10.0.19:5060. From: ATA186_1 sip:ecolombo@arcotel.net;tag=3551834793. To: sip:9903@arcotel.net;user=phone;tag=3517445666. Call-ID: 2858614495@10.10.0.19. CSeq: 2 ACK. User-Agent: Cisco ATA 186 v3.1.0 atasip (040211A). Proxy-Authorization: Digest username="ecolombo",realm="arcotel.net",nonce="40f6a2fec75c5e94e41551df450c5 8d95c645346",uri="sip :9903@arcotel.net",response="15cb50684f467e0c3144cfa68c678372". Content-Length: 0.
User-Agent: Cisco ATA 186 v3.1.1 atasip (040629A).
U 2004/07/15 11:23:27.392577 200.80.35.6:25263 -> 200.80.35.17:5060 ACK sip:demo@200.80.35.6 SIP/2.0. Route: sip:9903@200.80.35.17;ftag=335027039;lr=on. Via: SIP/2.0/UDP 10.10.0.19:5060. From: ATA186_1 sip:ecolombo@arcotel.net;tag=335027039. To: sip:9903@arcotel.net;user=phone;tag=1196191453. Call-ID: 3372571447@10.10.0.19. CSeq: 2 ACK. User-Agent: Cisco ATA 186 v3.1.1 atasip (040629A). Proxy-Authorization: Digest username="ecolombo",realm="arcotel.net",nonce="40f69484a8e0e9df8bcd477930f1b 6188e0d79ce",uri="sip :9903@arcotel.net",response="a4e2468e2d5984d6cc9cc8a5487e767c". Content-Length: 0.
On Jul 15, 2004 at 13:12, Ezequiel Colombo ecolombo@arcotel.net wrote:
I are testing the last (v3.1.1) version of SIP firmware for Cisco ATA186 and see some bug or misimplementation of loose routing logic. I want known if my interpretation of the loose routing are correct.
The test scenario is:
U1(ATA186) -- callto -- U2(X-Lite)
U1 = 200.80.35.6:25263 SER= 200.80.35.17:5060 U2 = 200.80.35.6:26198
After the answer (200 OK) from X-Lite the Cisco ATA 186 send a different ACK message with version 3.1.0 and 3.1.0 firmware. The ACK sent by version 3.1.1 never reack X-Lite causing it to re-send the 200 OK message.
In version v3.1.0 the ACK to a 200OK is sent by ATA with URI equal to the proxy address as indicated by Record-Route in the previously received 200OK, and with a Route: header equal to the URI of the remote party (U2). With this SER perform loose-routing, take the URI in the Route: hf and sent the message to U2.
This is actually strict routing.
In version v3.1.1 the ACK to a 200OK is sent by ATA with URI equal to the U2 address (without port information) and a Route: header indicating the URI of the proxy. So is expected that SER perform loose-routing taking the URI in the Route: header and send the message to itself in this case (Route contain address of proxy instead of U2) but not, the loose-routing is not performed for unknown reason (may be ftag or lr ?) and the message is sent to the original uri (U2 ip without port) and never arrive because the U2 endpoint are listen in other port (26198 instead of 5060).
This is "normal" loose routing (you don't touch the uri, but you send the message to the route address). It seems they use loose routing in this version. However you are right about the port bug. The uri must contain the same uri as in the 200 Ok Contact, including the port.
Andrei
Ok, thanks Andrei !!! Cisco anounce the loose routing implementation in the release notes of v3.1.1 of ATA firmware. I must open a case to solve this bug (take Request-URI from Contact:) for next releases.
Thanks. Ezequiel Colombo
----- Original Message ----- From: "Andrei Pelinescu-Onciul" pelinescu-onciul@fokus.fraunhofer.de To: "Ezequiel Colombo" ecolombo@arcotel.net Cc: serusers@lists.iptel.org Sent: Thursday, July 15, 2004 1:35 PM Subject: Re: [Serusers] ATA186 v3.1.1 LooseRoute logic
On Jul 15, 2004 at 13:12, Ezequiel Colombo ecolombo@arcotel.net wrote:
I are testing the last (v3.1.1) version of SIP firmware for Cisco ATA186
and
see some bug or misimplementation of loose routing logic. I want known if my interpretation of the loose routing are correct.
The test scenario is:
U1(ATA186) -- callto -- U2(X-Lite)
U1 = 200.80.35.6:25263 SER= 200.80.35.17:5060 U2 = 200.80.35.6:26198
After the answer (200 OK) from X-Lite the Cisco ATA 186 send a
different
ACK message with version 3.1.0 and 3.1.0 firmware. The ACK sent by
version
3.1.1 never reack X-Lite causing it to re-send the 200 OK message.
In version v3.1.0 the ACK to a 200OK is sent by ATA with URI equal to
the
proxy address as indicated by Record-Route in the previously received 200OK, and with
a
Route: header equal to the URI of the remote party (U2). With this SER perform loose-routing, take the URI in the Route: hf and sent the message to U2.
This is actually strict routing.
In version v3.1.1 the ACK to a 200OK is sent by ATA with URI equal to
the U2
address (without port information) and a Route: header indicating the URI of the proxy. So is expected that SER perform loose-routing taking the URI in the Route:
header
and send the message to itself in this case (Route contain address of proxy
instead
of U2) but not, the loose-routing is not performed for unknown reason (may be ftag
or
lr ?) and the message is sent to the original uri (U2 ip without port) and never arrive because the U2 endpoint are listen in other port (26198 instead of 5060).
This is "normal" loose routing (you don't touch the uri, but you send the message to the route address). It seems they use loose routing in this version. However you are right about the port bug. The uri must contain the same uri as in the 200 Ok Contact, including the port.
Andrei
As see in RFC3261 section 12.2.1.1: ... If the route set is not empty, and the first URI in the route set contains the lr parameter (see Section 19.1.1), the UAC MUST place the remote target URI into the Request-URI and MUST include a Route header field containing the route set values in order, including all parameters. ...
The ACK sent by ATA186 v3.1.1 is ok (record-route contain lr) so ATA186 place remote target URI (uri of U2) in the Request-URI. The problem at this moment is that ATA186 v3.1.1 place the remote target URI withouth the port information (as my opinion must take the URI of the Contact in previous 200 OK).
With this logic of loose-routing (fragment of section 12.2.1.1) what is suposed to do by SER when receiving a Route: with "lr" ??? SER dont perform loose_route if Route: have lr ?
----- Original Message ----- From: "Ezequiel Colombo" ecolombo@arcotel.net To: serusers@lists.iptel.org Sent: Thursday, July 15, 2004 1:12 PM Subject: [Serusers] ATA186 v3.1.1 LooseRoute logic
I are testing the last (v3.1.1) version of SIP firmware for Cisco ATA186
and
see some bug or misimplementation of loose routing logic. I want known if my interpretation of the loose routing are correct.
The test scenario is:
U1(ATA186) -- callto -- U2(X-Lite)
U1 = 200.80.35.6:25263 SER= 200.80.35.17:5060 U2 = 200.80.35.6:26198
After the answer (200 OK) from X-Lite the Cisco ATA 186 send a different ACK message with version 3.1.0 and 3.1.0 firmware. The ACK sent by
version
3.1.1 never reack X-Lite causing it to re-send the 200 OK message.
In version v3.1.0 the ACK to a 200OK is sent by ATA with URI equal to the proxy address as indicated by Record-Route in the previously received 200OK, and with a Route: header equal to the URI of the remote party (U2). With this SER perform loose-routing, take the URI in the Route: hf and sent the message to U2.
In version v3.1.1 the ACK to a 200OK is sent by ATA with URI equal to the
U2
address (without port information) and a Route: header indicating the URI of the proxy. So is expected that SER perform loose-routing taking the URI in the Route:
header
and send the message to itself in this case (Route contain address of proxy instead of U2) but not, the loose-routing is not performed for unknown reason (may be ftag or lr ?) and the message is sent to the original uri (U2 ip without port) and never arrive because the U2 endpoint are listen in other port (26198 instead of 5060).
User-Agent: Cisco ATA 186 v3.1.0 atasip (040211A).
U 2004/07/15 12:25:12.056963 200.80.35.6:25263 -> 200.80.35.17:5060 ACK sip:9903@200.80.35.17 SIP/2.0. Route: sip:demo@200.80.35.6:26198. Via: SIP/2.0/UDP 10.10.0.19:5060. From: ATA186_1 sip:ecolombo@arcotel.net;tag=3551834793. To: sip:9903@arcotel.net;user=phone;tag=3517445666. Call-ID: 2858614495@10.10.0.19. CSeq: 2 ACK. User-Agent: Cisco ATA 186 v3.1.0 atasip (040211A). Proxy-Authorization: Digest
username="ecolombo",realm="arcotel.net",nonce="40f6a2fec75c5e94e41551df450c5
8d95c645346",uri="sip :9903@arcotel.net",response="15cb50684f467e0c3144cfa68c678372". Content-Length: 0.
User-Agent: Cisco ATA 186 v3.1.1 atasip (040629A).
U 2004/07/15 11:23:27.392577 200.80.35.6:25263 -> 200.80.35.17:5060 ACK sip:demo@200.80.35.6 SIP/2.0. Route: sip:9903@200.80.35.17;ftag=335027039;lr=on. Via: SIP/2.0/UDP 10.10.0.19:5060. From: ATA186_1 sip:ecolombo@arcotel.net;tag=335027039. To: sip:9903@arcotel.net;user=phone;tag=1196191453. Call-ID: 3372571447@10.10.0.19. CSeq: 2 ACK. User-Agent: Cisco ATA 186 v3.1.1 atasip (040629A). Proxy-Authorization: Digest
username="ecolombo",realm="arcotel.net",nonce="40f69484a8e0e9df8bcd477930f1b
6188e0d79ce",uri="sip :9903@arcotel.net",response="a4e2468e2d5984d6cc9cc8a5487e767c". Content-Length: 0.
---------------------------------------------------------------------------- ----
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
On Jul 15, 2004 at 13:37, Ezequiel Colombo ecolombo@arcotel.net wrote:
As see in RFC3261 section 12.2.1.1: ... If the route set is not empty, and the first URI in the route set contains the lr parameter (see Section 19.1.1), the UAC MUST place the remote target URI into the Request-URI and MUST include a Route header field containing the route set values in order, including all parameters. ...
The ACK sent by ATA186 v3.1.1 is ok (record-route contain lr) so ATA186 place remote target URI (uri of U2) in the Request-URI. The problem at this moment is that ATA186 v3.1.1 place the remote target URI withouth the port information (as my opinion must take the URI of the Contact in previous 200 OK).
With this logic of loose-routing (fragment of section 12.2.1.1) what is suposed to do by SER when receiving a Route: with "lr" ??? SER dont perform loose_route if Route: have lr ?
Yes, it does, but in your case there is only one route field and that with ser's address. ser sees it is its address, so it removes the route field. There are no more routes, so loose_route will return false, and the message will get to the main block. The loose_route script function returns true only if the messages was "routed" according to one of the route fields (meaning that the packet will be sent to a different destination than the request uri, if t_relay or forward(uri:host) is used).
Andrei