Table of Contents

 

Document Overview

This document provides a configuration guide to setup the Sonus SBC 5XX0Series (Session Border Controller) and the Sandvine SDE for Rx Diameter interface between these nodes.

This configuration guide supports features given in Sandvine SDE Configuration Guide.  

Introduction

The interoperability compliance testing focuses on verifying inbound and outbound Diamter Rx message flows between the Sonus SBC 5XX0 and the Sandvine SDE.

Document History

 

DateNameComment
04/20/2016Tariq AusafInitial Draft
   

Audience

This is a technical document intended for telecommunications engineers with the purpose of configuring both the Sonus SBC and the Sandvine SDE. There will be steps that require navigating Sandvine as well as the Sonus SBC Command Line Interface (CLI). Understanding the basic concepts of TCP/UDP, IP/Routing, and SIP/RTP are also necessary to complete the configuration and for troubleshooting, if necessary.

Requirements

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

 

Equipment

Software Version

Sonus Networks

BMC
BIOS
OS
SonusDB
EMA
SBC

V01.34.00
V02.10.00
V03.00.01-R002
V05.00.01-R002
V05.00.01-R002
V05.00.01-R002

Sandvine Equipment

SDE
SubscriberMapping
UsageManagement   

7.45.01
7.45
5.20 

Sandvine OS

Red Hat Enterprise Linux Server

Santiago 6.2

Other software

 

 

Reference Configuration

The following reference configuration shows connectivity between Third Party and Sonus SBC 5XX0.

Connectivity Between Third Party and Sonus SBC 5XX0

Support

Technical support on Sonus SBC 5XX0 can be obtained through the following:

Third Party Product Features

  • Diameter Base
  • PCRF Restart
  • IMS Restart
  • Basic Call Start and Stop: AAR and STR
  • VoLTE/PCMM - Media-Code-Description details
  • Call on Hold: Service information update
  • Conference Call: Service Information update
  • Call Update: AAR Update
  • ASR from PCRF
  • Request for Unknown Session from IMS
  • Rx session creation – IMS phone to PSTN 
  • E2E – Rx session > Gx dedicated bearer - install and remove
  • E2E – Rx session > PCMM gate - install and remove
  • Emergency Call Handling 

Prerequisites

None

Verify License

No special Licensing required.

 

Sandvine Configuration 

Connectivity Between Third-Party and Sonus SBC 5XX0

Sandvine SDE Configuration

The following policy snippet is taken from the SDE and is applicable to the test cases executed within
this IOT.
 

table "rx_session_cleanup" \
(\
string "subscriberIp", \
integer "RxSessionCount" default 0 \
) timeout none \
unique by (Table.rx_session_cleanup.subscriberIp)

 

PolicyGroup expr(Workflow.RxAFSessionEstablishment.Sanity.Pre) all
{
integer "dataSessionId"
integer "createRetCode" = 1
if true then \
PCMM.AM.CreateSession(\
SessionId :
OctetsIpToString(Workflow.RxAFSessionEstablishment.Sanity.Pre.Rx.'AARequest'.'
Framed-IP-Address'),\
IpAddress :
StringToIP(OctetsIpToString(Workflow.RxAFSessionEstablishment.Sanity.Pre.Rx.'
AA-Request'.'Framed-IP-Address')),\
IpPrefix : 32,\
DataSessionId:dataSessionId, \
ReturnCode: createRetCode) and \
log values ("Creating Session", Concat("PCMMSession-",
Workflow.RxAFSessionEstablishment.Sanity.Pre.Rx.'AA-Request'.'Session-Id'))
and \
log values ("Session Ip",
StringToIP(OctetsIpToString(Workflow.RxAFSessionEstablishment.Sanity.Pre.Rx.'
AA-Request'.'Framed-IP-Address'))) and \
log values ("Result of session creation: ", createRetCode) and \
log values ("data session id: ", dataSessionId)
}

# By default Subscriber Plan is set to Gold
PolicyGroup expr (Workflow.RxAFSessionEstablishment.CreateSession.Post) all
{
Table.rx_session_cleanup:cursor "rxSession" =
Table.rx_session_cleanup.Create(OctetsIpToString(Workflow.RxAFSessionEstablis
hment.CreateSession.Post.Rx.'AA-Request'.'Framed-IP-Address'))
if true then increment rxSession.RxSessionCount and \
log values ("after increment rx session count is
",rxSession.RxSessionCount)
if true then \
set
Subscriber[Workflow.RxAFSessionEstablishment.CreateSession.Post.Subscriber.Na
me].AttributeView.Profile.Plan = "Gold" and \
log values("subscriber
paln",Subscriber[Workflow.RxAFSessionEstablishment.CreateSession.Post.Subscri
ber.Name].AttributeView.Profile.Plan)
}
# Lets terminate PCMM session when last Rx session is closed
PolicyGroup expr(Workflow.RxAFSessionTermination.BuildSuccessAnswer.Pre)
{
integer "DeleteretCode"
if
expr(Table.rx_session_cleanup[Workflow.RxAFSessionTermination.BuildSuccessAns
wer.Pre.Subscriber.Name].RxSessionCount = 1) then \
PCMM.AM.DeleteSession( \
SessionId:
Workflow.RxAFSessionTermination.BuildSuccessAnswer.Pre.Subscriber.Name,\
Reason: 1,\
ReturnCode:DeleteretCode) and \
log values("PCMM session deleted",DeleteretCode) and \
delete_row
Table.rx_session_cleanup[Workflow.RxAFSessionTermination.BuildSuccessAnswer.P
re.Subscriber.Name]
if true then decrement
Table.rx_session_cleanup[Workflow.RxAFSessionTermination.BuildSuccessAnswer.P
re.Subscriber.Name].RxSessionCount and \
log values ("after decrement rx count is",
Table.rx_session_cleanup[Workflow.RxAFSessionTermination.BuildSuccessAnswer.P
re.Subscriber.Name].RxSessionCount)
11 | P a g e
}
PolicyGroup
{
integer "DeleteretCode2"
if expr (Policy.Reloaded) then \
PCMM.AM.DeleteSession( \
SessionId: "10.35.191.185",\
Reason: 1,\
ReturnCode:DeleteretCode2) and \
log values("PCMM session deleted manually via policy
reload",DeleteretCode2) and \
delete_row Table.rx_session_cleanup["10.35.191.185"]
}
[root@sandvine2 ~]# less GoldPCMMfeatureLab.feature
feature ()
{
foreach "itr" in Session.Rx \
{
PolicyGroup
{
if expr(Session.AttributeView.Rx.Service_Info_Status =
"PRELIMINARY_SERVICE_INFORMATION") then \
set Session.AttributeView.Rx.Rule_Decision_Success = true
if true then InstallRule(Rule :
TrafficRule.G722_RTP96_127_RTPMAP_G722_48_PTIME10_UP,SessionID : itr.Rx.Id)
and \
log values ("installed gate for session: ")
}
}
}

The free format text in the configuration above above does not enable the author to maintain the formatting of the actual code. So we have provided a snapshot of the configuration to make it easier to read.

   }

SBC SBC 5XX0 Series Configuration 

Created 2 Trunk Groups. Originating and Terminating. The Originating Trunk was configured to be the IMS TG with the Rx Interface to the PCRF. 
The configuration below also includes all the routing and peer configuration needed for the test phones and the routing for the PSTN call.

 

 

######################################################################
# Create 2 TGs one for Ingress (IMS/PCRF) and one for Egress
######################################################################

set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG media mediaIpInterfaceGroupName Public
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy carrier 0000
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy country 1
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy localizationVariant northAmerica
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy tgIPVersionPreference both-ipv4-and-ipv6
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy digitParameterHandling numberingPlan NANP_ACCESS
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy callRouting elementRoutingPriority DEFAULT_IP
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy media packetServiceProfile PSP-G711U-20ms
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy services classOfService DEFAULT_IP
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy signaling ipSignalingProfile DEFAULT_SIP
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy ingress flags nonZeroVideoBandwidthBasedRoutingForSip enable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy ingress flags nonZeroVideoBandwidthBasedRoutingForH323 disable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy ingress flags hdPreferredRouting disable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG policy ingress flags hdSupportedRouting disable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG ingressIpPrefix 10.35.191.183 32
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG ingressIpPrefix 10.35.142.52 32
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG state enabled
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TERM-TG mode inService
commit

 

set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG media mediaIpInterfaceGroupName Public
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy carrier 0000
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy country 1
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy localizationVariant northAmerica
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy tgIPVersionPreference both-ipv4-and-ipv6
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy digitParameterHandling numberingPlan NANP_ACCESS
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy callRouting elementRoutingPriority DEFAULT_IP
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy media packetServiceProfile PSP-G711U-20ms
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy services classOfService DEFAULT_IP
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy signaling ipSignalingProfile DEFAULT_SIP
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy ingress flags nonZeroVideoBandwidthBasedRoutingForSip enable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy ingress flags nonZeroVideoBandwidthBasedRoutingForH323 disable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy ingress flags hdPreferredRouting disable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG policy ingress flags hdSupportedRouting disable
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG ingressIpPrefix 10.35.191.185 32
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG state enabled
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG mode inService
commit

######################################################################
# Create 4 SIP Peers. 3 for the SIP Phones and one for the PSTN call
######################################################################

set addressContext default zone SZ_PUB_SOUTH ipPeer SIPPHONE-9001 ipAddress 10.35.191.185 ipPort 5060
commit

set addressContext default zone SZ_PUB_SOUTH ipPeer SIPPHONE-9002 ipAddress 10.35.191.183 ipPort 5060
commit

set addressContext default zone SZ_PUB_SOUTH ipPeer SIPPHONE-9005 ipAddress 10.35.142.52 ipPort 5060
commit

set addressContext default zone SZ_PUB_SOUTH ipPeer USTX-SBCLAB01-PSTN ipAddress 10.35.8.146 ipPort 5060
commit


######################################################################
# Create 4 corresponding Routing Labels
######################################################################

set global callRouting routingLabel 9001-RL overflowNumber ""
set global callRouting routingLabel 9001-RL overflowNOA none
set global callRouting routingLabel 9001-RL overflowNPI none
set global callRouting routingLabel 9001-RL routePrioritizationType sequence
set global callRouting routingLabel 9001-RL action routes
set global callRouting routingLabel 9001-RL numRoutesPerCall 10
set global callRouting routingLabel 9001-RL routingLabelRoute 0 trunkGroup SANDVINE-TG
set global callRouting routingLabel 9001-RL routingLabelRoute 0 ipPeer SIPPHONE-9001
set global callRouting routingLabel 9001-RL routingLabelRoute 0 proportion 0
set global callRouting routingLabel 9001-RL routingLabelRoute 0 cost 1000000
set global callRouting routingLabel 9001-RL routingLabelRoute 0 inService inService
set global callRouting routingLabel 9001-RL routingLabelRoute 0 testing normal
comm

set global callRouting routingLabel 9002-RL overflowNumber ""
set global callRouting routingLabel 9002-RL overflowNOA none
set global callRouting routingLabel 9002-RL overflowNPI none
set global callRouting routingLabel 9002-RL routePrioritizationType sequence
set global callRouting routingLabel 9002-RL action routes
set global callRouting routingLabel 9002-RL numRoutesPerCall 10
set global callRouting routingLabel 9002-RL routingLabelRoute 0 trunkGroup SANDVINE-TERM-TG
set global callRouting routingLabel 9002-RL routingLabelRoute 0 ipPeer SIPPHONE-9002
set global callRouting routingLabel 9002-RL routingLabelRoute 0 proportion 0
set global callRouting routingLabel 9002-RL routingLabelRoute 0 cost 1000000
set global callRouting routingLabel 9002-RL routingLabelRoute 0 inService inService
set global callRouting routingLabel 9002-RL routingLabelRoute 0 testing normal
comm


set global callRouting routingLabel 9005-RL overflowNumber ""
set global callRouting routingLabel 9005-RL overflowNOA none
set global callRouting routingLabel 9005-RL overflowNPI none
set global callRouting routingLabel 9005-RL routePrioritizationType sequence
set global callRouting routingLabel 9005-RL action routes
set global callRouting routingLabel 9005-RL numRoutesPerCall 10
set global callRouting routingLabel 9005-RL routingLabelRoute 0 trunkGroup SANDVINE-TERM-TG
set global callRouting routingLabel 9005-RL routingLabelRoute 0 ipPeer SIPPHONE-9005
set global callRouting routingLabel 9005-RL routingLabelRoute 0 proportion 0
set global callRouting routingLabel 9005-RL routingLabelRoute 0 cost 1000000
set global callRouting routingLabel 9005-RL routingLabelRoute 0 inService inService
set global callRouting routingLabel 9005-RL routingLabelRoute 0 testing normal
comm


set global callRouting routingLabel PSTN overflowNumber ""
set global callRouting routingLabel PSTN overflowNOA none
set global callRouting routingLabel PSTN overflowNPI none
set global callRouting routingLabel PSTN routePrioritizationType sequence
set global callRouting routingLabel PSTN action routes
set global callRouting routingLabel PSTN numRoutesPerCall 10
set global callRouting routingLabel PSTN routingLabelRoute 0 trunkGroup SANDVINE-TERM-TG
set global callRouting routingLabel PSTN routingLabelRoute 0 ipPeer USTX-SBCLAB01-PSTN
set global callRouting routingLabel PSTN routingLabelRoute 0 proportion 0
set global callRouting routingLabel PSTN routingLabelRoute 0 cost 1000000
set global callRouting routingLabel PSTN routingLabelRoute 0 inService inService
set global callRouting routingLabel PSTN routingLabelRoute 0 testing normal
comm


######################################################################
# Add the Routes
######################################################################

set global callRouting route none Sonus_NULL Sonus_NULL standard 4692199001 1 all all ALL none Sonus_NULL routingLabel 9001-RL
comm
set global callRouting route none Sonus_NULL Sonus_NULL standard 4692199002 1 all all ALL none Sonus_NULL routingLabel 9002-RL
comm
set global callRouting route none Sonus_NULL Sonus_NULL standard 4692199005 1 all all ALL none Sonus_NULL routingLabel 9005-RL
comm
set global callRouting route none Sonus_NULL Sonus_NULL standard 9724894725 1 all all ALL none Sonus_NULL routingLabel PSTN
comm

 

######################################################################
# EMERGENCY Call Profile Configuration
######################################################################

set profiles services sipResourcePriorityHeaderProfile "RPH-1" rphEmergencyMatchingConfig "esnet" "1"
commit
set profiles services sipResourcePriorityHeaderProfile "RPH-1" sendEgressRphForEmergency esnet 1
commit
set profiles services emergencyCallProfile "EMG-ECSCF" resPriorityHeaderProfile "RPH-1"
commit
set profiles services emergencyCallProfile EMG-ECSCF prefix 9724894725
comm
set profiles services emergencyCallProfile EMG-ECSCF urnPrefix "service:sos.fire"
comm

######################################################################
# Assign the Emergency Profile to the PCRF TG
######################################################################
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG services emergencyCallProfile EMG-ECSCF

 

#######################################################
# DIAMETER CONFIGURATION
#######################################################

#######################################################
# Configure SBC Diameter Node
#######################################################

set addressContext default diamNode ANVIK-DIAM primaryOriginHost cscf.sonusnet.com secondaryOriginHost cscf2.sonusnet.com ipV4Address 10.35.141.10 originRealm sonusnet.com transactionTimeout 1000 ipInterfaceGroupName Public
commit

#######################################################
# Configure SBC Diameter Peer
#######################################################

set addressContext default diamNode ANVIK-DIAM peer sandvine2.sandvine.com fqdn sandvine2.sandvine.com ipAddress 10.35.137.169 tcpPort 3868
commit

#######################################################
# Configure SBC Diameter Realm Routes
#######################################################

set addressContext default diamNode ANVIK-DIAM realmRoute sandvine2.sandvine.com peer sandvine2.sandvine.com realm sandvine.com
commit

#######################################################
# Enable SBC Diameter Node
#######################################################

set addressContext default diamNode ANVIK-DIAM state enabled

#######################################################
# Enable SBC Diameter Peers
#######################################################
set addressContext default diamNode ANVIK-DIAM peer sandvine2.sandvine.com state enabled
commit

#######################################################
Enable SBC Diameter Realm Routes
#######################################################
set addressContext default diamNode ANVIK-DIAM realmRoute sandvine2.sandvine.com state enabled
commit

#######################################################
# Assign the PCRF Realm to the Truk Group
#######################################################
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG media pcrf pcrfRealm sandvine.com pcrfCommitment required cushionPacketSize enabled cushionNullSdp enabled
commit

#####################################################
# MODIFICATIONS REQUIRED DURING TESTING
# To enable the PCRF to terminate an Rx session on the
# IMS properly. Jira opened to fix this
#####################################################

set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG signaling timers sessionKeepalive 10
set addressContext default zone SZ_PUB_SOUTH sipTrunkGroup SANDVINE-TG callRouting ansSupervisionTimeout 10
commit


Test Results

 

S.No / Procedure

Result

Comment

2.1 Diameter Base
2.2 PCRF Restart 
2.3 IMS Restart 
2.4 Basic Call Start and Stop: AAR and STR 
2.5 VoLTE/PCMM - Media-Code-Description details 
2.6 Call on Hold: Service information update 
2.7 Conference Call: Service Information update 
2.8 Call Update: AAR Update 
2.9 ASR from PCRF 
2.10 Request for Unknown Session from IMS 
2.11 Rx session creation – IMS phone to PSTN 
2.12 E2E – Rx session > Gx dedicated bearer - install and remove
2.13 E2E – Rx session > PCMM gate - install and remove
2.14 Emergency Call Handling 

PASSED
PASSED
PASSED
PASSED
PASSED
PASSED
PASSED
PASSED
FAILED
PASSED
PASSED
SKIPPED
PASSED
PARTIAL PASS
 

  

 

* Please refer to the “Test Case Details” section below for more detail on these test-cases and any special
requirements

Conclusion

These Application Notes describe the configuration steps required for Sonus SBC 5XX0 to successfully interoperate with Sandvine SDE.  All feature and serviceability test cases were completed and passed with the exceptions/observations noted in Test Result Details in Appendix A below.

Appendix A

 

Test Result Details


Test 2.9 ASR from PCRF - FAILED

Goal: Test the ability of the PCRF to terminate an Rx session on the IMS.

According to the 3GCP 29.214 specs, the proper message flow for a Rx session termination is ASR /
ASA messages followed by STR/STA messages. During our testing, ASR is properly responded to with
an ASA with a 2001 success result code but the STR message is not sent to PCRF by the IMS, unless the
RTP inactivity timer is hit.

What this means is that the PCRF cannot really initiate (as a result of a request from network side) a
Rx session termination unless the IMS agrees (by waiting for the RTP inactivity timer to expire).
On the Sonus IMS, two timers were armed to a 10 sec interval: ansSupervisionTimeout and the Session
Keepalive for the corresponding Trunk Group. These 2 timers need to be tuned to be less that the
PCRF stale session timer which is set to 30 secs (otherwise the PCRF will terminate the Rx session
before the IMS sends the STR, leading to incrementing error counters and a discrepancy between the
number of sessions on both systems). In this case, the session is terminated properly on both
PCRF/IMS ends.


Test 2.14 – Emergency call handling – PARTIALLY PASSED

Goal: test the ability of the IMS to signal that a call is an “emergency call”.

Sonus IMS will only send the “sos” string in the Service-URN avp. Additional valid strings like
“sos.fire", "sos.police" and "sos.ambulance" were not possible.

 

Discovered Issues/Limitations


During our testing, we discovered that the ASR (Abort Session Request) messages from the PCRF are not
always processed as expected. ASR is properly responded to with an ASA with a 2001 success result
code but the STR message is not sent to PCRF by the IMS, unless the RTP inactivity timer is hit. 

What this means is that the PCRF cannot really initiate (as a result of a request from network side) a Rx
session termination unless the IMS agrees (by waiting for the RTP inactivity timer to expire).

This may present a problem in the case where there is an issue in the control plane between the PCRF
and the Gx/PCMM enforcing element (e.g. failure to acknowledge QoS enforcement etc.) but the data
plane is fine (RTP path for the call is established). In this case the IMS call will not be terminated.

If there is no traffic on the RTP path and Sonus ansSupervisionTimeout and the Session Keepalive for
the corresponding Trunk Group are set to less than 30 secs (PCRF stale session timer), the session is
terminated properly on both PCRF/IMS ends.