Document Overview
This Application Note is a configuration guide for the Ribbon Core Session Border Controller (SBC) 5XX0 and 7XX0 series, and SBC SWe versions when connecting to Avoke Siprec Recorder.
This configuration guide supports features described on the Microsoft Technet http://www.avoke.com/ website.
Introduction
The interoperability compliance testing focuses on verifying inbound and outbound call flows between SBC Core and Avoke Siprec Recorder.
Audience
This technical document is intended for telecommunication who are configuring both the Ribbon SBC and third-party product. Navigating the third-party product as well as the Ribbon SBC Command Line Interface (CLI) is required. Understanding the basic concepts of TCP/UDP, IP/Routing, and SIP/RTP are also necessary to complete the configuration and any needed troubleshooting.
Requirements
The following equipment and software were used for the sample configuration provided:
| Equipment | Software Version |
---|
Ribbon
| Ribbon SBC 5200 | V05.01.00-R000 |
---|
EMA | V05.01.00-R000 |
SonusDB | V05.01.00-R000 |
OS | V03.01.00-R000 |
BIOS | V02.06.00 |
BMC | V03.14.00 |
PSX | V10.03.00-R000 |
EMS | V10.03.00-R000 |
Third-party Equipment | Grandstream GXP 1625 | 1.0.4.33 |
---|
Grandstream GXP 1625 | 1.0.4.33 |
Bria 4 | 4.7.1 Build 83451 |
Avoke | |
SIP Server, drachtio open source SIP application server | v0.7.3-rc1 |
SIPREC app, drachtio open source siprec recording server | v2.0.0 |
Media Server Freeswitch | 1.6.20+git~20180507T185611Z~43a9feb7f8~64bit |
Avoke Browser | v.4.7 |
Reference Configuration
The following reference configuration shows connectivity between Avoke Siprec Recorder and Ribbon SBC Core.
Reference Configuration Topology
Support
For any questions regarding this document or the content herein, contact your maintenance and support provider.
Third-Party Product Features
The testing was executed with the Ribbon test plan. The following features were tested:
- Inbound Calls
- Outbound Calls
- Call Transfers
- Conference Calls
- Call Forwarding
- Call Hold
- Long Call
Verify License
- POL-BASE
- SBC-RTU
- SBC-SIPREC
Avoke Configuration
An open source implementation of a SIPREC recording server based on dractio and using either
The following new configurations are included in this section:
- Install
- Using rtpengine as the media server
- Using Freeswitch as the media server
- Using dockerized versions of drachtio and rtpengine
1. Install
This application requires a drachtio SIP server to be installed in your network. Please refer to the build and installation instructions here, or here.
- Copy either
config/default.json.example-rtpengine
or config/default.json.example-freeswitch
depending on which back-end media server you want to use (it is an ch you cannot mix them) to config/local.json
and edit to provide the IP addresses/ports for your configuration (i.e., location of the drachtio server, and either the rtpengine or freeswitch media server). - Run
npm install
- Run
node app
to run. - Configure your SBC to send SIPREC invites to your drachtio server.
When using rtpengine as the recorder, there is minimal configuration you will need to do on the rtpengine server -- a vanilla install will do. The application will use the ng control protocol, so you will need to open the UDP port on the rtpengine server to allow commands from the server running the drachtio-siprec-recording-server application.
Also, rtpengine generates recordings in pcap file format, so you will need to do some post-processing to deliver a flac, wav, mp3 or whichever final format you prefer.
When using Freeswitch, some configuration is needed on the Freeswitch server. Specifically, you must implement a dialplan
- allows unauthenticated INVITEs from the drachtio server
- hairpins incoming calls back to the sender, by using the Freeswitch bridge application to send the B leg INVITE back to the source of the A leg INVITE
- exports the custom 'X-Return-Token' header from the A leg to the B leg, and finally
- makes a recording of the call.
An example of a snippet of a dialplan might look like this:
<extension name="hairpin_and_record">
<condition field="${sip_h_X-Return-Token}" expression="^(.+)$">
<action application="export" data="sip_h_X-Return-Token=${sip_h_X-Return-Token}" />
<action application="export" data="_nolocal_jitterbuffer_msec=100"/>
<action application="set" data="RECORD_STEREO=true"/>
<action application="set" data="call_id=${strftime(%Y%m%d_%H%M%S)}_${sip_from_tag}"/>
<action application="set" data="outfile=$${base_dir}/recordings/${call_id}.wav"/>
<action application="record_session" data="${outfile}"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="bridge" data="sofia/external/${destination_number}@${network_addr}"/>
</condition>
</extension>
For an example docker image that implements, refer to davehorton/freeswitch-hairpin.
4. Using dockerized versions of drachtio and rtpengine
If you have not built the drachtio server and rtpengine processes (and do not want to), you can run using these docker images:
For guidance, have a look at the test suite, which uses docker-compose to create a test environment, for example test/docker-compose-testbed.yaml.
PSX Configuration
The following new configurations are included in this section:
- Global configuration
- PSX Configuration for A1 trunk
- PSX Configuration for A2 trunk
- PSX Configuration for B1 trunk
- PSX Configuration for B2 trunk
- PSX Configuration for Recorder trunk
- Global Call Routing Configuration
1. Global Configuration
PSX Configuration for A1 Trunk
PSX configuration for A1 trunk
3. PSX Configuration for A2 Trunk
PSX Configuration for A2 trunk
4. PSX Configuration for B1 Trunk
5. PSX Configuration for B2 Trunk
PSX Configuration for B2 trunk
6. PSX Configuration for Recorder Trunk
PSX Configuration for Recorder trunk
7. Global Call Routing Configuration
Ribbon SBC Core Configuration
configure
#DSP Resources
set system mediaProfile compression 90 tone 10
commit
#Enable external PSX
set system policyServer localServer PSX_LOCAL_SERVER mode outOfService state disabled
commit
set system policyServer remoteServer psx ipAddress 10.10.216.30 mode active state enabled
commit
#Internal Side Configuration
#IP Interface Group
set addressContext default ipInterfaceGroup TRUSTED ipInterface TRUSTED ceName VERDECE
set addressContext default ipInterfaceGroup TRUSTED ipInterface TRUSTED portName pkt0
set addressContext default ipInterfaceGroup TRUSTED ipInterface TRUSTED ipAddress 10.35.179.240
set addressContext default ipInterfaceGroup TRUSTED ipInterface TRUSTED prefix 26
set addressContext default ipInterfaceGroup TRUSTED ipInterface TRUSTED mode inService
set addressContext default ipInterfaceGroup TRUSTED ipInterface TRUSTED state enabled
commit
#IP Static Route
set addressContext default staticRoute 0.0.0.0 0 10.35.179.193 TRUSTED TRUSTED preference 100
commit
#Zone
set addressContext default zone TRUSTED id 2
commit
#SIP signaling port
set addressContext default zone TRUSTED sipSigPort 2 ipInterfaceGroupName TRUSTED
set addressContext default zone TRUSTED sipSigPort 2 ipAddressV4 10.35.179.241
set addressContext default zone TRUSTED sipSigPort 2 portNumber 5060
set addressContext default zone TRUSTED sipSigPort 2 transportProtocolsAllowed sip-udp,sip-tcp
set addressContext default zone TRUSTED sipSigPort 2 mode inService
set addressContext default zone TRUSTED sipSigPort 2 state enabled
commit
#A1 IP trunk
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A1 media mediaIpInterfaceGroupName TRUSTED
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A1 ingressIpPrefix 192.168.70.18 32
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A1 state enabled
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A1 mode inService
commit
#A2 IP trunk
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A2 media mediaIpInterfaceGroupName TRUSTED
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A2 ingressIpPrefix 192.168.70.19 32
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A2 state enabled
set addressContext default zone TRUSTED sipTrunkGroup TWO-WAY-SIP-A2 mode inService
commit
#External Side SBC Configuration
#IP Interface Group
set addressContext default ipInterfaceGroup UNTRUSTED ipInterface UNTRUSTED ceName VERDECE
set addressContext default ipInterfaceGroup UNTRUSTED ipInterface UNTRUSTED portName pkt2
set addressContext default ipInterfaceGroup UNTRUSTED ipInterface UNTRUSTED ipAddress 216.110.2.220
set addressContext default ipInterfaceGroup UNTRUSTED ipInterface UNTRUSTED prefix 27
set addressContext default ipInterfaceGroup UNTRUSTED ipInterface UNTRUSTED mode inService
set addressContext default ipInterfaceGroup UNTRUSTED ipInterface UNTRUSTED state enabled
commit
#IP static route
set addressContext default staticRoute 0.0.0.0 0 216.110.2.193 UNTRUSTED UNTRUSTED preference 100
commit
#Zone
set addressContext default zone UNTRUSTED id 3
commit
#SIP signaling port
set addressContext default zone UNTRUSTED sipSigPort 3 ipInterfaceGroupName UNTRUSTED
set addressContext default zone UNTRUSTED sipSigPort 3 ipAddressV4 216.110.2.220
set addressContext default zone UNTRUSTED sipSigPort 3 portNumber 5060
set addressContext default zone UNTRUSTED sipSigPort 3 transportProtocolsAllowed sip-udp
set addressContext default zone UNTRUSTED sipSigPort 3 mode inService
set addressContext default zone UNTRUSTED sipSigPort 3 state enabled
commit
#B1 IP trunk
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B1 media mediaIpInterfaceGroupName UNTRUSTED
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B1 ingressIpPrefix 74.xxx.xxx.xxx 32
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B1 state enabled
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B1 mode inService
commit
#B2 IP trunk
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B2 media mediaIpInterfaceGroupName UNTRUSTED
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B2 ingressIpPrefix 74.xxx.xxx.xxx 32
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B2 state enabled
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-B2 mode inService
commit
#Recoder IP trunk
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-RECORDER media mediaIpInterfaceGroupName UNTRUSTED
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-RECORDER state enabled
set addressContext default zone UNTRUSTED sipTrunkGroup TWO-WAY-SIP-RECORDER mode inService
commit
exit
exit
Test Results
Interoperability Test No | Test Scenario | Setup / Result Information | Result | Comment |
---|
| Inbound Calls | | | |
2001 | B1 calls A1 device, A1 hangs up | call is completed with correct SIP and SDP syntax | Pass | |
2002 | B1 calls A1 device, B1 hangs up | call is completed with correct SIP and SDP syntax | Pass | |
2003 | A1 calls B1, A1 hangs up before call connects | call is completed with correct SIP and SDP syntax | Pass | |
| Outbound Calls | | | |
3001 | A1 calls B1, B1 hangs up | call is completed with correct SIP and SDP syntax | Pass | |
3002 | A1 calls B1, A1 hangs up | call is completed with correct SIP and SDP syntax | Pass | |
3003 | A1 calls B1, A1 hangs up before call connects | call is completed with correct SIP and SDP syntax | Pass | |
| Call Transfers | | | |
4001 | ATTENDED A1 calls B1, B1 transfers A1 to A2 -reinvite | call is transferred successfully with correct SIP and SDP syntax | Pass | |
4003 | BLIND A1 calls B1, B1 transfers A1 to A2 -reinvite | call is transferred successfully with correct SIP and SDP syntax | Pass | |
| Conference Calls | | | |
5001 | A1 calls B1, A1 conferences in A2 | call is conferenced in successfully with correct SIP and SDP syntax | Pass | |
5002 | A2 calls A1, A1 conferences in B1 | call is conferenced in successfully with correct SIP and SDP syntax | Pass | |
5003 | B1 calls A1, A1 conferenecs in A2 | call is conferenced in successfully with correct SIP and SDP syntax | Pass | |
| Call Forwarding | | | |
6001 | A1 sets call forwarding to A2 - reinvite | call is forwarded successfully with correct SIP and SDP syntax | Pass | |
6002 | A1 sets call forwarding to B1 - reinvite | call is forwarded successfully with correct SIP and SDP syntax | Pass | . |
| Call Holds | | | |
8001 | A1 calls B1, A1 puts B1 on hold then resumes call | call is resumed successfully with correct SIP and SDP syntax | Pass | |
8002 | A1 calls B1, A1 puts B1 on hold for a long time (10min) then resumes call | call is resumed successfully with correct SIP and SDP syntax | Pass | |
8003 | A1 calls B1, B1 puts A1 on hold then resumes call - with music | call is resumed successfully with correct SIP and SDP syntax | Pass | |
8004 | A1 calls B1, B1 puts A1 on hold for a long time (10 min) then resumes call - with music | call is resumed successfully with correct SIP and SDP syntax | Pass | |
| Long duration call | | | |
12001 | B1 calls A1. Call last for at least 30 minutes | call stays active until endpoint hangs up | Pass | |
Conclusion
These Application Notes describe the configuration steps required for Ribbon to successfully interoperate with Avoke Siprec Recorder. All feature and serviceability test cases were completed and passed with the exceptions/observations noted in Test Results.