Hello all, first time poster here…
I have gone some way towards diagnosing an issue but need a further pointers please.
We recently upgraded from 1.4 up to 13. It didn’t take us too long to get segments of our previous configs over and into 13; within a working day we had our new version up and running, another day or so testing and ironing out other small (our config) issues, then we went live with it.
A big jump I know, but generally if it ain’t broke…
I have a particular and specific issue with attended transfers, notably after the inbound caller has heard MoH when the calling party is connected through to the intended call recipient (the third party) speech flows only to that third party from the calling party.
Some specifics of our setup:
- Ubuntu latest release, asterisk installed using apt-get.
- External IAX provider accessed via NAT’d connection, registrations initiated on our side only, so pin holing through our firewall is dynamic as a result of the outbound traffic.
- All extensions internally are Linksys SPA942 clients, accessing as SIP peers.
- No external SIP services are offered or consumed, SIP is only used internally within the local LAN.
Some notable things which are working absolutely fine:
- Inbound calls via voice menus to extensions.
- Inbound calls to confbridge (which use MoH without any issues).
- Inbound calls which are transferred using a blind Xfer, or inbound calls which are transferred very quickly using an attended transfer where there is nothing said between the second and third parties, when it’s done quickly and no MoH channel is setup.
- Call from internal extension to the same secondary party, with attended transfer to the same third party, with the same flow, hearing MoH, and with the 2nd and 3rd parties talking briefly before connecting caller and 3rd party.
Here’s the interesting part:
- When I disable bridge type native_rtp using: bridge technology suspend native_rtp - we are then able to do an attended transfer where the caller does hear MoH while party 2 speaks to party 3, then transfers, after which caller and party 3 are able to hear each other in both directions.
It appears to me that: switching from native_rtp technology to simple_bridge - which is a step shown in the CLI when the 2nd party connects the third party to the inbound IAX; the caller channel is failing to continue to pass the RTP packets to the 3rd party.
I turned on RTP debug to view the packet flow, here’s what I noticed:
- when party 2 and party 3 are talking and the caller is listening to MoH, I can see bi-directional RTP flow between party 2 and party 3. As soon as the caller is connected and party 2 is removed, I continue to see traffic towards party 3, but nothing being returned to the caller. - This is in-line with the direction of speech which is being experienced by the caller and the intended call recipient.
So… I can leave things running as they are for now, with the native_rtp bridge type suspended, we will manage to avoid this issue while this is in place. However, it’s not the fix I want and I’m also worried about a reboot of this system and this option not being suspended.
I have yet to find a way to issue this command to suspend this bridge type on startup, or to disable it through the config files…
I would appreciate any pointers (and perhaps some instructions to help me sort this).
Here’s some CLI trace of a failing call - with speech path from the caller to party 3 only (SIP/706):
-- Accepting AUTHENTICATED call from 27.111.14.68:4569:
-- > requested format = alaw,
-- > requested prefs = (alaw|g722|ulaw|g729|gsm),
-- > actual format = ulaw,
-- > host prefs = (ulaw|alaw|siren14|siren7|g722|slin16|slin|g726|g726aal2|adpcm|gsm|ilbc|speex|g729|speex16|testlaw|g719|opus|jpeg|png|h261...),
-- > priority = mine
-- Executing [099129107@from-099129107:1] Set("IAX2/099129107-6552", "CALLERID(number)=021624717") in new stack
-- Executing [099129107@from-099129107:2] Goto("IAX2/099129107-6552", "default,707,1") in new stack
-- Goto (default,707,1)
-- Executing [707@default:1] Gosub("IAX2/099129107-6552", "707,stdexten(SIP/707)") in new stack
-- Executing [707@default:50000] NoOp("IAX2/099129107-6552", "Start stdexten") in new stack
-- Executing [707@default:50001] Answer("IAX2/099129107-6552", "") in new stack
-- Executing [707@default:50002] Set("IAX2/099129107-6552", "LOCAL(ext)=707") in new stack
-- Executing [707@default:50003] Set("IAX2/099129107-6552", "LOCAL(dev)=SIP/707") in new stack
-- Executing [707@default:50004] Set("IAX2/099129107-6552", "LOCAL(cntx)=") in new stack
-- Executing [707@default:50005] Set("IAX2/099129107-6552", "LOCAL(mbx)=707") in new stack
-- Executing [707@default:50006] Dial("IAX2/099129107-6552", "SIP/707,20") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/707
-- SIP/707-00000064 is ringing
-- SIP/707-00000064 answered IAX2/099129107-6552
-- Channel IAX2/099129107-6552 joined 'simple_bridge' basic-bridge <e0e0c448-a709-46c7-af10-084fd6d0f7e2>
-- Channel SIP/707-00000064 joined 'simple_bridge' basic-bridge <e0e0c448-a709-46c7-af10-084fd6d0f7e2>
> 0x7f12c48096d0 -- Probation passed - setting RTP source address to 192.168.5.107:16474
-- Started music on hold, class 'default', on channel 'IAX2/099129107-6552'
== Using SIP RTP CoS mark 5
-- Executing [706@numberplan-IAX2-SetDDI:1] NoOp("SIP/707-00000065", "callerid num is 707") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:2] GotoIf("SIP/707-00000065", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:3] GotoIf("SIP/707-00000065", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:4] GotoIf("SIP/707-00000065", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:5] GotoIf("SIP/707-00000065", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:6] GotoIf("SIP/707-00000065", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:7] GotoIf("SIP/707-00000065", "1?yesDDI") in new stack
-- Goto (numberplan-IAX2-SetDDI,706,17)
-- Executing [706@numberplan-IAX2-SetDDI:17] Set("SIP/707-00000065", "IAXCHAN=099129107") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:18] Goto("SIP/707-00000065", "numberplan-cost-efficient,706,1") in new stack
-- Goto (numberplan-cost-efficient,706,1)
-- Executing [706@numberplan-cost-efficient:1] Gosub("SIP/707-00000065", "706,stdexten(SIP/706)") in new stack
-- Executing [706@numberplan-cost-efficient:50000] NoOp("SIP/707-00000065", "Start stdexten") in new stack
-- Executing [706@numberplan-cost-efficient:50001] Answer("SIP/707-00000065", "") in new stack
> 0x40e7750 -- Probation passed - setting RTP source address to 192.168.5.107:16476
-- Executing [706@numberplan-cost-efficient:50002] Set("SIP/707-00000065", "LOCAL(ext)=706") in new stack
-- Executing [706@numberplan-cost-efficient:50003] Set("SIP/707-00000065", "LOCAL(dev)=SIP/706") in new stack
-- Executing [706@numberplan-cost-efficient:50004] Set("SIP/707-00000065", "LOCAL(cntx)=") in new stack
-- Executing [706@numberplan-cost-efficient:50005] Set("SIP/707-00000065", "LOCAL(mbx)=706") in new stack
-- Executing [706@numberplan-cost-efficient:50006] Dial("SIP/707-00000065", "SIP/706,20") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/706
-- SIP/706-00000066 is ringing
-- SIP/706-00000066 answered SIP/707-00000065
-- Channel SIP/707-00000065 joined 'simple_bridge' basic-bridge <e5d3fd4c-25a8-4910-bfe0-2b90a253b047>
-- Channel SIP/706-00000066 joined 'simple_bridge' basic-bridge <e5d3fd4c-25a8-4910-bfe0-2b90a253b047>
> Bridge e5d3fd4c-25a8-4910-bfe0-2b90a253b047: switching from simple_bridge technology to native_rtp
-- Channel IAX2/099129107-6552 left 'simple_bridge' basic-bridge <e0e0c448-a709-46c7-af10-084fd6d0f7e2>
-- Channel IAX2/099129107-6552 swapped with SIP/707-00000065 into 'native_rtp' basic-bridge <e5d3fd4c-25a8-4910-bfe0-2b90a253b047>
-- Channel SIP/707-00000065 left 'native_rtp' basic-bridge <e5d3fd4c-25a8-4910-bfe0-2b90a253b047>
> Bridge e5d3fd4c-25a8-4910-bfe0-2b90a253b047: switching from native_rtp technology to simple_bridge
-- Channel SIP/707-00000064 left 'simple_bridge' basic-bridge <e0e0c448-a709-46c7-af10-084fd6d0f7e2>
== Spawn extension (numberplan-cost-efficient, 706, 50006) exited non-zero on 'SIP/707-00000065'
-- Stopped music on hold on IAX2/099129107-6552
-- Channel IAX2/099129107-6552 left 'simple_bridge' basic-bridge <e5d3fd4c-25a8-4910-bfe0-2b90a253b047>
== Spawn extension (default, 707, 50006) exited non-zero on 'IAX2/099129107-6552'
-- Hungup 'IAX2/099129107-6552'
-- Channel SIP/706-00000066 left 'simple_bridge' basic-bridge <e5d3fd4c-25a8-4910-bfe0-2b90a253b047>
Here’s one which does work, with the native_rtp bridge suspended…:
asterisk-2015*CLI> bridge technology suspend native_rtp
Suspended bridge technology 'native_rtp'
-- Accepting AUTHENTICATED call from 27.111.14.68:4569:
-- > requested format = alaw,
-- > requested prefs = (alaw|g722|ulaw|g729|gsm),
-- > actual format = ulaw,
-- > host prefs = (ulaw|alaw|siren14|siren7|g722|slin16|slin|g726|g726aal2|adpcm|gsm|ilbc|speex|g729|speex16|testlaw|g719|opus|jpeg|png|h261...),
-- > priority = mine
-- Executing [099129107@from-099129107:1] Set("IAX2/099129107-14595", "CALLERID(number)=021624717") in new stack
-- Executing [099129107@from-099129107:2] Goto("IAX2/099129107-14595", "default,707,1") in new stack
-- Goto (default,707,1)
-- Executing [707@default:1] Gosub("IAX2/099129107-14595", "707,stdexten(SIP/707)") in new stack
-- Executing [707@default:50000] NoOp("IAX2/099129107-14595", "Start stdexten") in new stack
-- Executing [707@default:50001] Answer("IAX2/099129107-14595", "") in new stack
-- Executing [707@default:50002] Set("IAX2/099129107-14595", "LOCAL(ext)=707") in new stack
-- Executing [707@default:50003] Set("IAX2/099129107-14595", "LOCAL(dev)=SIP/707") in new stack
-- Executing [707@default:50004] Set("IAX2/099129107-14595", "LOCAL(cntx)=") in new stack
-- Executing [707@default:50005] Set("IAX2/099129107-14595", "LOCAL(mbx)=707") in new stack
-- Executing [707@default:50006] Dial("IAX2/099129107-14595", "SIP/707,20") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/707
-- SIP/707-00000067 is ringing
-- SIP/707-00000067 answered IAX2/099129107-14595
-- Channel IAX2/099129107-14595 joined 'simple_bridge' basic-bridge <e86b058b-1ce1-42a9-9399-b2b3698672b6>
-- Channel SIP/707-00000067 joined 'simple_bridge' basic-bridge <e86b058b-1ce1-42a9-9399-b2b3698672b6>
> 0x7f12c48096d0 -- Probation passed - setting RTP source address to 192.168.5.107:16478
-- Started music on hold, class 'default', on channel 'IAX2/099129107-14595'
== Using SIP RTP CoS mark 5
-- Executing [706@numberplan-IAX2-SetDDI:1] NoOp("SIP/707-00000068", "callerid num is 707") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:2] GotoIf("SIP/707-00000068", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:3] GotoIf("SIP/707-00000068", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:4] GotoIf("SIP/707-00000068", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:5] GotoIf("SIP/707-00000068", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:6] GotoIf("SIP/707-00000068", "0?yesDDI") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:7] GotoIf("SIP/707-00000068", "1?yesDDI") in new stack
-- Goto (numberplan-IAX2-SetDDI,706,17)
-- Executing [706@numberplan-IAX2-SetDDI:17] Set("SIP/707-00000068", "IAXCHAN=099129107") in new stack
-- Executing [706@numberplan-IAX2-SetDDI:18] Goto("SIP/707-00000068", "numberplan-cost-efficient,706,1") in new stack
-- Goto (numberplan-cost-efficient,706,1)
-- Executing [706@numberplan-cost-efficient:1] Gosub("SIP/707-00000068", "706,stdexten(SIP/706)") in new stack
-- Executing [706@numberplan-cost-efficient:50000] NoOp("SIP/707-00000068", "Start stdexten") in new stack
-- Executing [706@numberplan-cost-efficient:50001] Answer("SIP/707-00000068", "") in new stack
> 0x40e7750 -- Probation passed - setting RTP source address to 192.168.5.107:16480
-- Executing [706@numberplan-cost-efficient:50002] Set("SIP/707-00000068", "LOCAL(ext)=706") in new stack
-- Executing [706@numberplan-cost-efficient:50003] Set("SIP/707-00000068", "LOCAL(dev)=SIP/706") in new stack
-- Executing [706@numberplan-cost-efficient:50004] Set("SIP/707-00000068", "LOCAL(cntx)=") in new stack
-- Executing [706@numberplan-cost-efficient:50005] Set("SIP/707-00000068", "LOCAL(mbx)=706") in new stack
-- Executing [706@numberplan-cost-efficient:50006] Dial("SIP/707-00000068", "SIP/706,20") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/706
-- SIP/706-00000069 is ringing
-- SIP/706-00000069 answered SIP/707-00000068
-- Channel SIP/707-00000068 joined 'simple_bridge' basic-bridge <9eb9a516-095e-4662-a2b2-eaff6debcc16>
-- Channel SIP/706-00000069 joined 'simple_bridge' basic-bridge <9eb9a516-095e-4662-a2b2-eaff6debcc16>
> 0x7f12c47f9510 -- Probation passed - setting RTP source address to 192.168.5.106:16460
-- Channel IAX2/099129107-14595 left 'simple_bridge' basic-bridge <e86b058b-1ce1-42a9-9399-b2b3698672b6>
-- Channel IAX2/099129107-14595 swapped with SIP/707-00000068 into 'simple_bridge' basic-bridge <9eb9a516-095e-4662-a2b2-eaff6debcc16>
-- Channel SIP/707-00000068 left 'simple_bridge' basic-bridge <9eb9a516-095e-4662-a2b2-eaff6debcc16>
-- Channel SIP/707-00000067 left 'simple_bridge' basic-bridge <e86b058b-1ce1-42a9-9399-b2b3698672b6>
-- Stopped music on hold on IAX2/099129107-14595
== Spawn extension (numberplan-cost-efficient, 706, 50006) exited non-zero on 'SIP/707-00000068'
-- Channel SIP/706-00000069 left 'simple_bridge' basic-bridge <9eb9a516-095e-4662-a2b2-eaff6debcc16>
-- Channel IAX2/099129107-14595 left 'simple_bridge' basic-bridge <9eb9a516-095e-4662-a2b2-eaff6debcc16>
== Spawn extension (default, 707, 50006) exited non-zero on 'IAX2/099129107-14595'
-- Hungup 'IAX2/099129107-14595'
I expect this won’t be an issue with the RTP bridge itself, I think this will more likely be an issue with the switching of channels / types and the SIP messaging required to do this, along with my SIP / user configs… It’s just a little over my head at this point… HELP? Thank you.
PS; some other things I know:
- My dial plan for extension dialling internally is completely excessive and could be trimmed…
- It is not 2015 yet.