Asterisk using different RTP port than session description


#1

Situation:
Asterisk@Home on a LAN. All extensions are on the LAN. There are no natting or firewall issues.

This is a test server, we are looking at the asterisk platform. As such, we are making the buffalo on every nickel squeal - we are using 2 x X100P clones, one Sipura SPA-2000 ATA, on Sipura SPA-3000 ATA (just using the line1 FXS, NOT the FXO), and one X-Lite Soft Phone.

Problem
The X-Lite soft phone functions perfectly time after time with no issues.

A phone hooked to either line of the SPA-2000 or the Line1 of the SPA-3000 makes the first call normally and without issue.

On the second call, the Sipura gets no audio back from a call, the other party has no audio issues. The call ends when either of them hang up.

Looking at an Ethereal dump:
First Call
The Sipura sends an SIP/SD packet with a “Request: INVITE”. In the SD part, the Media Description PORT is 16464

A few packets later, the Asterisk sends an SIP/SD packet back to the Sipura with a “Status: 200 OK”. In the SD part, the Media Description PORT is 16414.

The RTP Packet exchange begins. The Sipura and the asterisk use the ports from the Session Description (From 16464 To 16414 and vice versa).

Second Call
The Sipura sends an SIP/SD packet with a “Request: INVITE”. In the SD part, the Media Description PORT is 16466

A few packets later, the Asterisk sends an SIP/SD packet back to the Sipura with a “Status: 200 OK”. In the SD part, the Media Description PORT is 16400.

The very next packet begins the RTP. For some reason, the Asterisk Server is sending FROM 16400, TO 16464 - IT CHANGED THE RTP PORT FOR THE EXTENSION

The Sipura sends back an ICMP Port Unreachable Packet to the Asterisk Server telling it that 16464 is a bad port.

The Sipura sends it’s RTP packets to the ports specified in the Session Desccription (FROM 16466 TO 16400).

The other party can hear the Sipura fine, the Sipura hears nothing.

Again, this does not happen on the first call, only on subsequest calls. This count seems to reset itself after a while. I thought I could change the registration timer and fix it, but that had no bearing.

When using the X-Lite Soft Phone, the Asterisk server always seems to send to the correct port - it never changes it. The X-Lite also has a setting for “RTP Rececive Port” which never changes either - it always uses 8000 by default.

Do you think the asterisk server assumes that the Sipura is always using the same RTP Receive port, no matter what the Session Description packet says? If so, is there a way to tell the asterisk server that the RTP receive port will change every call for the Sipura?

Any ideas or solutions??

Thanks in advance for anything!


#2

The Sipura had RTP ports from 16382 - 16484 open. I changed it to 16382-16383, and now it works, because the sipura always chooses the same RTP port - 16382.

Bad, because this is a two-line ATA, and with only one effective RTP port open, only one line can be used at a time. If I open up 2 effective ports, then every other call goes through as the Port Selection bounces from 16382 - 16384 - 16382, etc. Only when it is on 16382 does it work.

I don’t know on whose doorstep to lay the problem, Asterisk or Sipura, so I am posting this in a Sipura place and here.

Does any one know how to A) make the asterisk use the port in the session description packet, or B) tell the Sipura to use a certain port for receiving RTP on a per-line basis?

Thanks, and hopefully the right person reads this!