Table of Contents

 

 


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 Ribbon SBC Core and Avoke Siprec Recorder.


Audience

This technical document is intended for telecommunication engineers 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.

This configuration guide is offered as a convenience to Ribbon customers. The specifications and information regarding the product in this guide are subject to change without notice. All statements, information, and recommendations in this guide are believed to be accurate, but are presented without warranty of any kind, express or implied, and are provided "AS IS." Users must take full responsibility for the application of the specifications and information in this guide.

 

Requirements

The following equipment and software were used for the sample configuration provided:

Requirements

 

Equipment

Software Version

Ribbon




Ribbon SBC 5200

V05.01.00-R000

EMAV05.01.00-R000
SonusDBV05.01.00-R000
OSV03.01.00-R000
BIOSV02.06.00
BMCV03.14.00
PSXV10.03.00-R000
EMSV10.03.00-R000

Third-party Equipment

Grandstream GXP 1625 1.0.4.33
Grandstream GXP 1625 1.0.4.33
Bria 44.7.1 Build 83451
Avoke 
SIP Server, drachtio open source SIP application serverv0.7.3-rc1
SIPREC app, drachtio open source siprec recording serverv2.0.0
Media Server Freeswitch1.6.20+git~20180507T185611Z~43a9feb7f8~64bit
Avoke Browserv.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:

  1. Install
  2. Using rtpengine as the media server
  3. Using Freeswitch as the media server
  4. 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 either/choice, 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.

2. Using rtpengine as the media 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.

3. Using Freeswitch as the media server

When using Freeswitch, some configuration is needed on the Freeswitch server. Specifically, you must implement a dialplan that

  • 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.

When using Freeswitch, the application requires access to a redis server. redis is used to track and correlate the A and B call legs, using the X-Return-Token header mentioned above. When using rtpengine as the back-end, redis not required.

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:

  1. Global configuration
  2. PSX Configuration for A1 trunk
  3. PSX Configuration for A2 trunk
  4. PSX Configuration for B1 trunk
  5. PSX Configuration for B2 trunk
  6. PSX Configuration for Recorder trunk
  7. Global Call Routing Configuration

1. Global Configuration

 

Codec Entry

Element Routing Priority

Recorder Profile

Call Recording Criteria


2. PSX Configuration for A1 Trunk

 

IP Peer Group A1

PSX configuration for A1 trunk


3. PSX Configuration for A2 Trunk

 

IP Peer Group A2

PSX Configuration for A2 trunk


4. PSX Configuration for B1 Trunk

Zone Index Profile

IP Peer Group B1

 



5. PSX Configuration for B2 Trunk

 

IP Peer Group B2

PSX Configuration for B2 trunk



6. PSX Configuration for Recorder Trunk

 

PSX Configuration for Recorder trunk




7. Global Call Routing Configuration

A1 Routing Label


 

A2 Routing Label


B1 Routing Label




B2 Routing Label




 

Standard Route A1 to A2


Standard Route A1 to B1

Standard Route A2 to A1

Standard Route A2 to B1

Standard Route B1 to A1

Standard Route B1 to A2

Ribbon SBC Core Configuration

Complete 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

Test Results

Interoperability
Test No

Test ScenarioSetup / Result InformationResultComment
 Inbound Calls   
2001

B1 calls A1 device, A1 hangs up 

call is completed with correct SIP and SDP syntax

Pass 
2002B1 calls A1 device, B1 hangs up 

call is completed with correct SIP and SDP syntax

Pass 
2003A1 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 
4003BLIND A1 calls B1, B1 transfers A1 to A2 -reinvite

call is transferred successfully with correct SIP and SDP syntax

Pass 
 Conference Calls   
5001A1 calls B1, A1 conferences in A2

call is conferenced in successfully with correct SIP and SDP syntax

Pass 
5002A2 calls A1, A1 conferences in B1

call is conferenced in successfully with correct SIP and SDP syntax

Pass 
5003B1 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 
6002A1 sets call forwarding to B1 - reinvite

call is forwarded successfully with correct SIP and SDP syntax

Pass.
 Call Holds    
8001A1 calls B1, A1 puts B1 on hold then resumes call

call is resumed successfully with correct SIP and SDP syntax

Pass 
8002A1 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 
8003A1 calls B1, B1 puts A1 on hold then resumes call - with musiccall is resumed successfully with correct SIP and SDP syntaxPass 
8004A1 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   
12001B1 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.