Strange packet-loss in SIP when "on hold"


I’m not sure if this question belongs here at all, but since I have no clue of what’s happening there, I’ll still give it a try. Maybe some of you ran into similar problems.

So here’s the case (using asterisk 1.4 (have tried some versions > 1.4.20 up to the latest stable version)):

  • inbound call via whatever channel is routed to an internal extension X (snom phone)
  • X answers the call
  • X presses “hold” - a invite is being sent to the server, moh starts
  • X dials internal extension Y - another invite is being sent to the server

At this point Y would normally ring and X could talk to Y while the first call is still on hold. This is however not the case.

What’s happening is that the second invite (where X dials Y’s number) is ignored.
Asterisk does not send ACK-packets, the sip debugger does not dump the invite-packets. However, with tcpdump (libpcap) on the same machine I could see the invite-request (4 packets since asterisk does not answer). The packets look fine (all layers), just like they would if X would have called Y in the first place (which always works if there’s no call on hold).
When the telephone gets no answers from asterisk, it eventually sends a cancel-request just a second or two after the last invite has been sent and gets an ack from asterisk stating that the call-leg does not exist (since it didn’t receive the invites).
If I try several times I may get lucky that the invite comes through and it works like expected but it works never at first try.

We don’t have any intelligent router or whatsoever, no firewall (neither on the network nor on the linux itself) and the underlying linux is an ubuntu server 64bit 8.04 lts.
Only this 4 packets are dropped by any instance but you can rely on it - that’s what makes it so strange for me. Everything else just works fine.

Does anybody have an idea of where these packets might have been dropped? Any settings that should be made? Possibly a bug?
I really appreciate any idea here :wink:

Many thanks in advance!