The Communications Diversion (CDIV) service enables a ‘diverting user’ to divert communications addressed to the ‘diverting user’ to another destination .

The service description of CDIV’s services CFU, CFB, CFNR, and CD is based on the PSTN/ISDN supplementary services; whereas CFNL is a CDIV service based on requirements for IP-based networks; and CFNRc is based on requirements for mobile networks.

The services are:

  • Communication Forwarding Unconditional (CFU)

  • Communication Forwarding on Busy user (CFB)

  • Communication Forwarding on no Reply (CFNR)

  • Communication Forwarding on Subscriber Not Reachable (CFNRc)

  • Communication Deflection (CD)

  • Communication Forwarding on Not Logged-in (CFNL).

Feature Cheat Sheet

B2BUA Instance SAS Support Originating / Terminating Point(s) in Session Plan Network Operator Data Subscriber Data Stateful or Stateless POJO Feature or SBB Feature Other notes

MMTel

Yes

Terminating

  • SipAccess_SubscriberPreCreditCheck

  • SipAccess_PartyResponse

  • SipAccess_ServiceTimer

Yes

Yes — CDIV rules are stored in the HSS

Stateless w/FSM in Session State

POJO but with much stateful behaviour implemented by storing an FSM instance into Session state

Implications on Charging for Forwarded calls

Prerequisite Features

Source Code

This feature’s source code is available in the Sentinel VoLTE SDK in the mmtel-communication-diversion module pack. It can be viewed by using the create-module command in the SDK with that module pack, for example:

> create-module new-cdiv-module opencloud#mmtel-communication-diversion#volte/4.0.0;4.0.0.0

This command will prompt you for information needed to create the new modules, once completed the original source for the feature can be found in the new modules.

The module-pack includes the following modules:

Module Name Description

mmtel-communication-diversion

Group module for the feature that includes all of the modules listed below.

mmtel-cdiv-profile

Contains the profile specification for the feature configuration profile table.

mmtel-cdiv

Contains the feature itself.

Specification References

GSMA IR.92 Reference Information

This is taken from IR.92 v9.0:

2.3.8 Communication Diversion

The UE and IMS core network must support the SIP procedures in 3GPP TS 24.604 for Communication Diversion (CDIV). For CDIV service activation, deactivation, and interrogation (XCAP operations), the UE and IMS core network must support the XML rules for Call Forwarding Unconditional and the conditions, actions and elements listed in Table 2.2. The UE and IMS core network shall support the XML rules as described in 3GPP TS 24.604 section 4.9.1. The UE must support the History-Info header for identification of diverting parties at the terminating side and of diverted-to parties at the originating side. At the terminating side, a History-Info entry shall be used for the identification of the diverting party only if another History-Info entry exists that has assigned the next index in sequence AND includes a cause value. At the originating side only History-Info entries including a cause value shall be used for presentation of the diverted-to party. Note: Support of subscription options and other conditions and actions are out of scope of the document.

It then shows the following table (reformatted)

Type Parameter

Rule Condition

Busy

Rule Condition

media (supported media types: audio, audio AND video)

Rule Condition

no-answer

Rule Condition

not-registered

Rule Condition

not-reachable(Note)

Rule Condition

rule-deactivated

Rule Action

target

Element

NoReplyTimer

Note: The GSM version of Communication Forwarding on Not Reachable (CFNRc) implies diversion when the user is not registered in the CS core or cannot be reached. To mimic this behaviour, it is recommended that an UE activates both the CFNRc (CDIV using condition not-reachable) and the Communication Forwarding on Not Logged-in (CFNL) (CDIV using condition not-registered) to the same target.

Scope

In Scope

The following are in scope:

  • Communication Forwarding Unconditional (CFU)

  • Communication Forwarding on Busy user (CFB)

  • Support for User Determined User Busy (UDUB)

  • Communication Forwarding on No Reply (CFNR)

  • Communication Forwarding on Subscriber Not Reachable (CFNRc)

  • Communication Deflection (CD)

  • Communication Forwarding on Not Logged-in (CFNL)

  • Checking of the diversion limits

  • Communication Diversion Notification (CDIVN) — 181 responses

Out of Scope

The following are out of scope:

  • There is no support for “Ringing continues” in the no reply timeout case (option for CFNR).

  • There is no support for Network Determined User Busy (NDUB).

  • Deliver to last diverted user is not implemented as an approach when Max Diversions has been exceeded. This is because we consider it a bad practice.

Network Operator Data

Network (or Operator) data may come from two sources:

  • Provisioned data in the VoLTE platform stored in a profile table named MMTelCDIVConfigProfileTable.

  • Received from the HSS in the <operator-communication-diversion> section of the CDIV network data fetched from the HSS.

Properties received from the HSS in the <operator-communication-diversion> section of an MMTel-Services XML document take precedence over data in the MMTelCDIVConfigProfileTable.

Platform Network Operator Data

Network configuration is stored in a JSLEE profile table named MMTelCDIVConfigProfileTable.

Individual configurations are entries in this table. The data is scoped on Sentinel Selection Key.

Parameter Type Default Value Description

MaxDiversionCount

int

20

Maximum number of diversion hops that may occur, see the Diversion Limit section.

MaxDiversionAction

Enum (REJECT, DELIVER_TO_FIXED_DESTINATION)

REJECT

Determines the action to be taken when the MaxDiversionCount is exceeded, see the Diversion Limit section.

MaxDiversionFixedDestination

String, must be a valid SIP or Tel URI

null

The fixed destination to deliver to when MaxDiversionAction is set to DELIVER_TO_FIXED_DESTINATION, see the Diversion Limit section.

NoRetargetURI

String, comma separated list of SIP and/or TEL URIs

null

A list of URIs to which diversions are permitted even when MaxDiversionCount is exceeded (e.g. because they are known not to retarget calls), see the Diversion Limit section.

DefaultTargetURI

String

null

A default URI for use when re-targeting sip requests in the event that there are re-targeting rules and no target URI.

DefaultTargetEnabled

Boolean

false

A boolean flag indicating whether to apply the procedure for default re-targeting.

PlayAnnouncement

boolean

false

Determines if an announcement will be played when diversion occurs.

AnnouncementID

int

0

The announcement ID of the announcement that should be played when diversion occurs.

VmAnnouncementID

int

0

The announcement ID of the announcement that should be played when diversion to a known voice mail server occurs. If the call should not be allowed to reach the voice mail server if the announcement fails, the announcement must be configured with EndSessionOnFailure set to true.

VmsUris

String[]

[]

The list of known voice mail server URIs. When a call is diverted to one of these URIs, the voicemail announcement will be played if VmAnnouncementID is configured.

NoReplyTimeout

int

20

The maximum time (in seconds) to wait for a reply before triggering CFNR.

AddOrigTag

boolean

false

Determines whether to add an orig tag to an outgoing re-targeted INVITE request.

SuppressForCSTerminatingDomain

boolean

false

Determines whether CDIV’s behaviour should be suppressed when a call is on a CS network, see the CDIV Suppression section.

AdditionalNotReachableStatusCodes

int[]

[]

Can be used to trigger the CDIV not-reachable condition (CFNRc) with SIP response status codes not included in the CFNRc specification. This list may not include status codes that have other purposes in CDIV (i.e. 1xx, 2xx, 404, 408, 486, 487).

AllowNotReachableDuringAlerting

boolean

false

A flag that when set to true, will allow the CDIV not-reachable condition to trigger when the call is in the alerting state (usually this condition only triggers in the pre-alerting state).

AddMpParam

boolean

false

Determines whether to add hi-target-param headers (of type mp) to the added hi-entry.

NonProvisionableRetargetURIs

String[]

[]

A list of URIs that are not provisionable as a retarget URI, i.e. they are not allowed to be used as the target of a diversion.

PreferSubscriberConfig

boolean

false

Determine whether the subscriber provisioned diversion rules override the operator provisioned rules (these are the rules within the <communication-diversion> and <operator-communication-diversion> tags respectively).

EnableDefaultForwardToVoicemail

boolean

false

Determine whether the feature should divert to voicemail if call is unsuccessful

DefaultForwardToVoicemailTimeout

int

60

The maximum time (in seconds) to wait before forwarding to voicemail

DefaultForwardToVoicemailWithoutCredit

Enum (NEVER_ALLOW, ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS. ALWAYS_ALLOW)

NEVER_ALLOW

Determines whether a call can be diverted to a subscriber’s voicemail server when credit could not be allocated.

HSS Network Operator Data

There are three elements of <operator-communication-diversion> received from the HSS that the CDIV feature may apply.

Element Description
<total-number-of-diversions-for-each-communication>
                    3
</total-number-of-diversions-for-each-communication>

This property, if present, take precedence over the MaxDiversionCount property of the Platform Network Operator Data profile. See the Diversion Limit section

<communication-forwarding-on-no-reply-timer>
                   30
</communication-forwarding-on-no-reply-timer>

This property, if present, take precedence over the NoReplyTimeout property of the Platform Network Operator Data profile.

<cp:ruleset>
    <cp:rule id="busy">
        <cp:conditions>
            <busy/>
        </cp:conditions>
        <cp:actions>
            <forward-to>
                <target>sip:bob@someplace.com</target>
                <notify-caller>false</notify-caller>
            </forward-to>
        </cp:actions>
    </cp:rule>
</cp:ruleset>

The CDIV feature supports an extension to the standard that allows an operator ruleset to be defined. Operator rules are evaluated before other rules, unless the PreferSubscriberConfig field is set to true.

The other child elements of <operator-communication-diversion> are not read by the CDIV feature.

Note The schema for the Operator part of the Communication Diversion (CDIV) services has been extended to support an optional ruleset.

HSS Metaswitch TAS Data

Default Forward to Voicemail functionality depends on subscriber data provisioned in Forward-To-Voicemail section of the Metaswitch-TAS-Services document in the HSS.

The following attribute from that section is used:

Name Type Description
voicemailServer

String

The URI for the voicemail server to connect to.

See the Metaswitch-TAS-Services Schema to Session-State Fields mapping for more details about the Metaswitch-TAS-Services document.

Session Input Variables

Session State variable name Type Comments
bxref:mmtel-subscriber-data-representation#mmtelcdivservicedata[MMTelCDIVServiceData]

Complex

Read from the HSS or HLR in SubscriberDataLookupFromHSS or SubscriberDataLookupFromHLR

Session Output Variables

Session State variable name Type Comments
DiversionCounter

int

The number of re-targeting attempts caused by the feature in one Session, whether immediate or due to a response

HiLastReceivedIndex

String

The index for the history-info received in the initial INVITE

HistoryInfoHeaders

String []

The latest history-info headers sent or received

LastDiversionType

DiversionType (an enum)

One of: none, CFU, CFNL, CFNR, CFB, CFNRc, CDImmediate, CDAlerting, or Media

EarlyMediaAnnouncementQueue

List<Integer>

Updated announcement queue with diversion announcement id if any

Statistics

MMTelCDIV statistics are tracked by the volte.sentinel.sip SBB and can be found under the following parameter set in REM:
SLEE-Usage → volte.sentinel.sip service → volte.sentinel.sip SBB → feature → MMTelCDIV
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=volte.sentinel.sip,vendor=OpenCloud,version=4.0.0].SbbID[name=volte.sentinel.sip,vendor=OpenCloud,version=4.0.0].feature.MMTelCDIV"

Statistic Incremented when…​
 Started

the feature runs

 FailedToStart

Sentinel VoLTE encounters an error while attempting to start the feature

 IssuedWarning

a non-fatal problem is encountered and the feature issues a warning

 FailedDuringExecution

a fatal problem is encountered and the feature cannot execute correctly

 TimedOut

the feature takes too long to complete and Sentinel VoLTE aborts execution

 Misconfigured

the feature configuration could not be loaded

 ProcessingSipResponse

the feature is triggered on a SIP response

 ProcessingSipRequest

the feature is triggered on a SIP request

 ProcessingChargingEvent

the feature is triggered on a OCS event

 LegManagerError

a problem occurs while trying to access data from the SIP leg manager

 ErrorProcessingSipRequest

a problem occurs while trying to read or modify to a SIP request

 ErrorProcessingSipResponse

a problem occurs while trying to read or modify to a SIP response

 DiversionLoopDetected

diversion is aborted due to a diversion loop being detected

 DiversionLimitExceeded

diversion is aborted due to the diversion limit being hit

 CancelledInviteRequest

the CDIV feature cancels an INVITE on the terminating leg

 ErrorCancellingInviteRequest

a problem occurs while attempting to cancel an INVITE request

 ReleasedDownstreamLeg

caller is being diverted to voicemail

 TerminatedByResponse

CDIV is aborted by sending an error response on the originating leg

 TerminatedByRetargeting

CDIV is aborted by attempting to divert to a fixed final destination

 ErrorTerminatingByRetargeting

diversion fails while trying to terminate by re-targeting

 NoReplyTimerSet

the feature sets a timer for CFNR

 NoReplyTimerCancelled

the feature cancels a timer for CFNR

 NoReplyTimerFired

the feature is triggered by a CFNR timer expiring

 TimerSuppressedByResponseFromCSDomain

timer is suppressed when parallel fork is done and the CS domain answers first

 CDIVSuppressedByResponseFromCSDomain

CDIV service is suppressed when parallel fork is done and the CS domain answers first

 CallerNotifiedOfDiversion

the feature notify the caller the session is being diverted

 FailedToNotifyCallerOfDiversion

the feature fails to notify the caller the session is being diverted

 CFUSucceeded

unconditional call forwarding is successfully executed

 CFUFailed

a fatal problem occurs while trying to execute unconditional call forwarding

 CFNLSucceeded

call forwarding due to the target user not being logged into IMS is successfully executed

 CFNLFailed

a fatal problem occurs while trying to execute call forwarding due to the target user not being logged into IMS

 CFNRSucceeded

call forwarding due to the target user not replying is successfully executed

 CFNRFailed

a fatal problem occurs while trying to execute call forwarding due to the target user not replying

 CFBSucceeded

call forwarding due to the target user being busy is successfully executed

 CFBFailed

a fatal problem occurs while trying to execute call forwarding due to the target user being busy

 CFNRcSucceeded

call forwarding due to the target user being unreachable is successfully executed

 CFNRcFailed

a fatal problem occurs while trying to execute call forwarding due to the target user being unreachable

 CDImmediateSucceeded

call forwarding due to immediate call deflection is successful.

 CDImmediateFailed

a fatal problem occurs while trying to execute call forwarding due to immediate call deflection

 CDAlertingSucceeded

call forwarding due to call deflection during alerting is successful

 CDAlertingFailed

a fatal problem occurs while trying to execute call forwarding due to call deflection during alerting

 ToHeaderChanged

'To' header is set to diverted party or served user

 SubscriberCDIVAttempted

call forwarding due to subscriber rules was attempted, either succesfully or unsuccesfully

 OperatorCDIVAttempted

call forwarding due to operator rules was attempted, either succesfully or unsuccesfully

 DivertingCallToVoicemail

call is being forwarded to voicemail

 ExecutingDefaultForwardToVoicemail

call is being re-targeted to voicemail

 ErrorExecutingDefaultForwardToVoicemail

a fatal problem occured while re-targeting to voicemail

 DefaultForwardToVoicemailTimerSet

the default forward to voicemail timer has been started

 DefaultForwardToVoicemailTimerCancelled

the default forward to voicemail timer has been cancelled

 DefaultForwardToVoicemailTimerFired

the default forward to voicemail timer has fired, call will be diverted to voicemail

Behaviour

If MMTelCDIVServiceData.OperatorAuthorized is false and EnableDefaultForwardToVoicemail is false, the feature finishes execution without modifying any state.

If MMTelCDIVServiceData.OperatorAuthorized is false and EnableDefaultForwardToVoicemail is true, the feature runs in voicemail-only mode, ignoring CDIV rules, but enabling the default forward to voicemail functionality.

Condition Evaluation

Triggered conditions and non-triggered conditions are part of CDIV rule and condition evaluation.

  • Triggered conditions include:

    • Communication Forwarding on Busy user (CFB)

    • Communication Forwarding on No Reply (CFNR)

    • Communication Forwarding on Subscriber Not Reachable (CFNRc)

    • Communication Deflection (CD)

    • Communication Forwarding on Not Logged-in (CFNL)

    • Communication Forwarding Unconditional (CFU)

Note Triggered conditions are mutually exclusive, therefore if more than one is in a rule the rule will evaluate to false.
  • Non-triggered conditions include:

    • Media Type

    • Validity.

Note Non-triggered conditions can evaluate to true in any type of diversion.
Triggered conditions can only evaluate to true at particular points of session processing.
Triggered condition name Applicable point in session XML condition element value from HSS

Communication Forwarding on Busy user (CFB)

486-BUSY response

<cp:conditions><busy/></cp:conditions>

Communication Forwarding on No Reply (CFNR)

A 180 Ringing response followed by a 408 response, or a 180 Ringing response followed by No Reply timer expiry

<cp:conditions><no-answer/></cp:conditions>

Communication Forwarding on Subscriber Not Reachable (CFNRc)

500, 503, or 408 response prior to a 180 response, or a response with a status code included in the AdditionalNotReachableStatusCodes configuration parameter. Usually only triggers in pre-alerting call state, but can be configured to trigger during alerting (except on 408 responses) using the AllowNotReachableDuringAlerting configuration parameter.

<cp:conditions><not-reachable/></cp:conditions>

Communication Deflection (CD)

302 response

Not configurable through XCAP

Communication Forwarding on Not Logged-in (CFNL)

Receipt of INVITE request

<cp:conditions><not-registered/></cp:conditions>

Communication Forwarding Unconditional (CFU)

Receipt of INVITE request

<cp:conditions/>

OC-Retarget Header

The OC-Retarget header is added by MMTel CDIV to communicate that a diversion has occurred. This header is inserted into the initial INVITE that goes towards the diverted party. This is then used in the composition to decide whether to invoke the SCC-AS.

For more details see OC-Retarget Header

Media

Media is evaluated as part of condition evaluation. Therefore CFB can cause a re-targeting to different destinations if there are several diversion rules with busy and media conditions.

Media-only conditions can be used to immediately re-target INVITE requests matching media conditions.

An example where all sessions that contain both audio and video are diverted is as follows:

<cp:conditions>
    <media>video</media>
    <media>audio</media>
</cp:conditions>

Each <media> element value is searched against all media descriptions in the INVITE request SDP. If all media conditions match, then the conditions block evaluates to true.

Validity

Validity provides the ability to filter a condition based on date comparisons. For example:

<cp:conditions>
    <busy/>
    <cp:validity>
        <cp:from>2015-01-01T00:00:00</cp:from>
        <cp:until>2015-01-31T23:59:59</cp:until>
    </cp:validity>
</cp:conditions>

This conditions block will evaluate to true if the condition is evaluated during January 2015.

Deflection and CDIV

There is no XCAP rule for receipt of 302, yet the CDIV specification clearly describes the re-targeting of the INVITE due to a 302 response.

We interpret this as hardcoded behaviour of the CDIV feature.

Request URI for a Re-targeted INVITE

The request URI is set to the SIP URI or tel URI where the communication is being diverted to. This URI is normalized using the Normalization Component.

This comes from the <target> sub-element of the <forward-to> element in a CDIV rule’s actions:

<cp:actions>
    <forward-to>
        <target>sip:+6505550201@example.com</target>
    </forward-to>
</cp:actions>

It may or may not have a target parameter, and always has a cause parameter and MMTel service type parameter.

Target Parameter

The request URI has a target parameter if and only if the re-targeting is due to a response, such as in the following cases:

  • busy

  • no-answer

  • deflection

  • not-reachable.

The target parameter is set to the request URI for the received initial INVITE, including all parameters. Any parameters of the original request URI are in escaped format. This is to ensure that the SIP message has valid syntax.

Conversely, if communication forwarding is due to Unconditional, or Not Logged In, then there is no target parameter in the request URI.

Cause Parameter

There is always a cause parameter for every re-targeted INVITE.

The cause-param parameter of the request URI is simple cause= appended with a “cause value”.

Cause Cause Value Determination Rule
Communication Forwarding on Busy
486

UDUB — 486 Response received

Communication Forwarding on No Reply
408

CDIV No Reply Timer, or a 408 response after a 180-RINGING response

Communication Forwarding Unconditional
302

CFU

Communication Deflection (immediate response)
480

Immediate deflection: 302 received before 180-RINGING response is received

Communication Forwarding not logged in
404

CFNL

Communication Deflection during alerting
487

deflection: 302 received after 180-RINGING is received

Communication Forwarding Subscriber not Reachable
503

500, 503, or 408 response prior to a 180-RINGING response, or a response with a status code included in the AdditionalNotReachableStatusCodes configuration parameter. Usually only triggers in pre-alerting call state, but can be configured to trigger during alerting (except on 408 responses) using the AllowNotReachableDuringAlerting configuration parameter.

MMTel Service Type Parameter

There is always a MMTel service type for every re-targeted INVITE.

The mmtel-service-type parameter of the request URI is simple mmtel-service-type=6 for CDIV.

181 Responses

A 181 notification is sent to the calling party in a CDIV scenario if the <notify-caller> element is set to true or if the element is missing from the condition. For example:

<cp:conditions/>
    <cp:actions>
        <forward-to>
            <target>sip:+6505550201@example.com</target>
            <notify-caller>true</notify-caller>
        </forward-to>
    </cp:actions>
Warning A 181 notification will not be sent if the <notify-caller> element is set to false.

Reveal Served User Identity to Caller

There is an optional flag that determines whether the identity of the served user is revealed to the calling party on 181 responses or not.

<cp:conditions/>
    <cp:actions>
        <forward-to>
            <target>sip:+6505550201@example.com</target>
            <notify-caller>true</notify-caller>
            <reveal-served-user-identity-to-caller>false</reveal-served-user-identity-to-caller>
        </forward-to>
    </cp:actions>
  • If reveal-served-user-identity-to-caller is set to false, or if TIR is enabled, then the privacy header on the History-Info entry for the served user is set to history, and the privacy header on the response is set to id.

  • If reveal-served-user-identity-to-caller is set to not-reveal-gruu, and the target URI on the History-Info entry for the served user contains a gr parameter, it is replaced by the asserted identity of the served user.

  • If reveal-served-user-identity-to-caller is omitted, the default is true.

Reveal Diverted-To User Identity to Caller

There is an optional flag that determines whether the identity of the diverted-to user is revealed to the calling party on 181 responses or not.

<cp:conditions/>
    <cp:actions>
        <forward-to>
            <target>sip:+6505550201@example.com</target>
            <notify-caller>true</notify-caller>
            <reveal-identity-to-caller>false</reveal-identity-to-caller>
        </forward-to>
    </cp:actions>
  • If reveal-identity-to-caller is set to false, then the privacy header on the History-Info entry for the diverted-to user is set to history.

  • If reveal-identity-to-caller is omitted, the default is true.

Reveal Served User Identity to Diverted-To Party

There is an optional flag - reveal-identity-to-target - that determines whether the identity of the diverting party is revealed to the diverted-to party in the diverted INVITE request or not.

<cp:conditions/>
    <cp:actions>
        <forward-to>
            <target>sip:+6505550201@example.com</target>
            <notify-caller>true</notify-caller>
            <reveal-identity-to-target>false</reveal-identity-to-target>
        </forward-to>
    </cp:actions>
  • If reveal-identity-to-target is set to false, or if OIR is active, then the To header is modified to the SIP identity of the diverted-to party, and the privacy header on the History-Info entry for the served user is set to history.

  • If reveal-identity-to-target is set to not-reveal-gruu, and the To header contains a gr parameter, the To header and the History-Info entry for the served user are set to the asserted identity of the served user.

  • If reveal-identity-to-target is set to true, then the To header is the SIP identity of the diverting party.

  • If reveal-identity-to-target is omitted, the default is true.

One Re-targeted INVITE

The MMTelCDIV feature will only ever re-target once. This is because MMTelCDIV is designed to execute on a public network. Private network derivations of this feature do not need to follow this rule.

As the feature re-targets once, it will insert one history-info element into one INVITE to represent a re-targeting.

The only case the feature inserts more than one element into history-info is in the case where no history-info or an empty history-info was received in the initial INVITE.

CDIV Suppression

There is a case where the CDIV feature needs to be suppressed even though it may be active. This is needed on an MT call, when the SCC-AS diverts a call to a CS network as the MSC will have its own CDIV services. This means that, when the call is diverted to CS, the MMTel-AS does not divert any calls, and cancels any remaining no-reply timers. If the SCC-AS utilizes parallel-routing (i.e. forwards call to both PS and CS domain), the MMTel-AS will respond in the same way.

CDIV suppression is achieved by analysing the provisional responses for the given call. These responses contain the OC-Terminating-Domain custom header, which indicates what network the call is diverted to. Because the no-reply timers are typically set upon provisional responses (i.e. 18X responses), it is here that CDIV suppression is engaged/disengaged.

The presence of CDIV suppression is configurable. Setting the SuppressForCSTerminatingDomain attribute of the MmtelCDIVConfigProfile profile to true will enable the aforementioned CDIV suppression. Its default value is false, which leaves CDIV suppression disabled.

CDIV Default Target URI

The CDIV feature can optionally use a default URI for re-targeting requests. The default URI is stored in the DefaultTargetURI field as a String. This default URI is applied when there is a re-targeting rule and no URI to forward to. The default re-targeting URI can be enabled using the DefaultTargetEnabled boolean variable.

CDIV No Reply Timer

When CDIV sees a 180 Ringing response, it will check to see if there are any rules relevant to Communication Forwarding on No Reply (CFNR). If there is at least one relevant rule, CDIV sets a CDIV No Reply Timer. The duration of the timer is:

  1. the <communication-forwarding-on-no-reply-timer> value in the <operator-communication-diversion> section of the MMTel-Services XML data, if present

  2. …​ or the Network Operator Data NoReplyTimeout field

Default Forward to Voicemail

The CDIV feature can be configured to re-target a call to voicemail. This is configured via the feature configuration field EnableDefaultForwardToVoicemail. The re-target destination voicemail server is provisioned in the <voicemail-server> value in the <forward-to-voicemail> section of the subscriber’s Metaswitch TAS XML data. If configured, the CDIV feature sets a Default Forward To Voicemail Timer when processing the initial INVITE. The duration of the timer is based on the DefaultForwardToVoicemailTimeout feature configuration.

The re-target to voicemail will occur if:

  • the Default Forward To Voicemail Timer expires;

  • the called subscriber has no provisioned diversion rules but is busy or not logged in; or

  • the called subscriber has provisioned diversion rules, but the diversion is terminated without initiating a further retarget; or

  • credit could not be allocated for the call and configuration allows the voicemail server to be contacted without credit (see below).

Announcements

If PlayAnnouncement is true and an announcement is configured, then the announcement will be played before diverting the call to the subscriber’s voicemail server. If VmAnnouncementID is configured and the subscriber’s voicemail server matches one the URIs in VmsUris, then the voicemail announcement will be played. If the subscriber’s voicemail server does not match any of the URIs in VmsUris, or if VmAnnouncementID is not configured, then the default AnnouncementID announcement will be played (if it is configured).

Credit Not Allocated

Default forward to voicemail may be executed when using online charging if credit is required to deliver the call but:

  • the subscriber does not have enough credit; or

  • the OCS failed; or

  • charging procedures were deliberately aborted by Sentinel.

This behaviour depends on the value of the DefaultForwardToVoicemailWithoutCredit field in feature configuration:

Value Behaviour
NEVER_ALLOW

Default forward to voicemail will not execute.

ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS

Default forward to voicemail will execute if the subscriber’s voicemail server URI is present in the VmsUris list the feature configuration.

ALWAYS_ALLOW

Default forward to voicemail will always execute if credit cannot be executed.

Warning If this behaviour is triggered then the online charging session will be finalised, after which no further updates will be sent to the OCS.

Diversion Limit

The CDIV feature enforces a limit on the maximum number of times a call may be diverted, this limit is:

  1. the <total-number-of-diversions-for-each-communication> value in the <operator-communication-diversion> section of the MMTel-Services XML data, if present

  2. …​ or the MaxDiversionCount field in the feature’s network operator data.

Before a call is diverted, this limit is checked against the number of diversions that have already occurred to ensure the new diversion can go ahead.

When the diversion limit is exceeded there are a number of things that can happen based on these Network Operator Data fields: NoRetargetURI, MaxDiversionAction, and MaxDiversionFixedDestination.

First, the feature will check the value of the next target URI against the list of URI’s in the NoRetargetURI field. This field contains a comma separated list of known URI’s that will never themselves trigger additional re-targeting. If the next target URI is equal to a URI on this list, after both are normalized using the Normalization Component, the feature considers it "safe" to allow the diversion to take place and the diversion limit will not be immediately enforced.

In the event that the next target URI is not in the NoRetargetURI list, the feature will execute its max diversion behaviour. There are two possible outcomes, based on the value of the MaxDiversionAction field.

  1. If the field is set to REJECT, then the feature will reject the INVITE request with a 486 response in the event that the last re-target was triggered by CFB (Call Forward Busy), or a 480 response in all other cases.

  2. If the field is set to DELIVER_TO_FIXED_DESTINATION, then the feature will attempt to re-target the call to the URI given in the MaxDiversionFixedDestination field.

If the MaxDiversionAction field is set to DELIVER_TO_FIXED_DESTINATION, but the MaxDiversionFixedDestination field does not contain a valid URI, then the feature will reject the INVITE as if MaxDiversionAction field had been set to REJECT.

If the MaxDiversionAction field is set to DELIVER_TO_SUBSCRIBERS_VOICEMAIL_SERVER, the feature will re-target the call towards voicemail. If a retarget to voicemail has already occurred the feature will reject the INVITE as if MaxDiversionAction field had been set to REJECT.

Choosing the CDIV Rule to Apply

The <communication-diversion> and <operator-communication-diversion> sections of the MMTel-Services XML document can contain diversion rules. A rule may be relevant for a diversion scenario (e.g CFB) and it may be applicable to a particular communication session (i.e its condition evaluates to true).

The CDIV feature:

  1. finds all rules that are appropriate for a diversion scenario (e.g CFU)

  2. evaluates the operator rules first .* The first rule, if any, whose condition evalutes to true, is applied.

  3. If no operator rule was applied, then evaluate subscriber rules .* The first rule, if any, whose condition evalutes to true, is applied.

Consider the following example, where there are two rules relevant for CFU.

<complete-communication-diversion>
  <communication-diversion active="true">
    <!-- ... -->
    <cp:ruleset>
      <cp:rule id="Audio">
        <cp:conditions>
          <media>audio</media>
        </cp:conditions>
        <cp:actions>
          <forward-to>
            <target>sip:bob@audio.somewhere.com</target>
            <notify-caller>false</notify-caller>
          </forward-to>
        </cp:actions>
      </cp:rule>
    </cp:ruleset>
  </communication-diversion>
  <operator-communication-diversion authorized="true">
    <!-- ... -->
    <cp:ruleset>
      <cp:rule id="Video">
        <cp:conditions>
          <media>video</media>
        </cp:conditions>
        <cp:actions>
          <forward-to>
            <target>sip:bob@video.somewhere.com</target>
            <notify-caller>false</notify-caller>
          </forward-to>
        </cp:actions>
      </cp:rule>
    </cp:ruleset>
  </operator-communication-diversion>
</complete-communication-diversion>

The subscriber rule will cause audio calls to be forwarded to sip:bob@audio.somewhere.com. The operator rule will cause video calls to be forwarded to sip:bob@video.somewhere.com.

case #1 Alice makes a Video call to bob.

  1. Search operator rules and evaluate rule 'Video', which matches, so forward the call.

---alice---[Video]--->bob----->(rule id="Video")---->bob@video.somewhere.com

case #2 Alice makes an Audio call to bob.

  1. Search operator rules and evaluate rule 'Video', which does not match

  2. Search subscriber rules and evaluate rule 'Audio`, which matches, so forward the call.

---alice---[Audio]--->bob--+-->(rule id="Video") X
                           |
                           +-->(rule id="Audio")---->bob@audio.somewhere.com

Non-Provisionable Retarget URIs

It is possible to configure a list of NonProvisionableRetargetURIs in the feature configuration. Retargeting to these URIs is not permitted. When selecting the CDIV rule to apply, any rules whose target URI (after normalization) matches a URI on the NonProvisionableRetargetURIs list (after normalization), are ignored. Normalization is done using the Normalization Component.

Example CDIV Rules

For clarity, here are some example CDIV rules.

They can be pasted directly into the Transparent Data editor in REM.

CDIV Unconditional

<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy">
    <cp:rule id="unconditional">
        <cp:conditions>
        </cp:conditions>
        <cp:actions>
            <forward-to>
                <target>sip:+6505550201@example.com</target>
                <notify-caller>false</notify-caller>
            </forward-to>
        </cp:actions>
    </cp:rule>
</cp:ruleset>

CDIV Busy

<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy">
    <cp:rule id="busy">
        <cp:conditions>
            <busy/>
            <media>video</media>
            <media>audio</media>
        </cp:conditions>
        <cp:actions>
            <forward-to>
                <target>sip:+6505550201@example.com</target>
                <notify-caller>true</notify-caller>
            </forward-to>
        </cp:actions>
    </cp:rule>
</cp:ruleset>

CDIV Not Reachable

<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy">
    <cp:rule id="not-reachable">
        <cp:conditions>
            <not-reachable/>
            <cp:validity>
                <cp:from>2015-01-01T00:00:00</cp:from>
                <cp:until>2015-01-31T23:59:59</cp:until>
            </cp:validity>
        </cp:conditions>
        <cp:actions>
            <forward-to>
                <target>sip:+6505550201@example.com</target>
                <notify-caller>true</notify-caller>
            </forward-to>
        </cp:actions>
    </cp:rule>
</cp:ruleset>

CDIV No Reply

<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy">
    <cp:rule id="no-answer">
        <cp:conditions>
            <no-answer/>
        </cp:conditions>
        <cp:actions>
            <forward-to>
                <target>sip:+6505550201@example.com</target>
                <notify-caller>true</notify-caller>
            </forward-to>
        </cp:actions>
    </cp:rule>
</cp:ruleset>

CDIV Not Registered

<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy">
    <cp:rule id="not-registered">
        <cp:conditions>
            <not-registered/>
        </cp:conditions>
        <cp:actions>
            <forward-to>
                <target>sip:+6505550201@example.com</target>
                <notify-caller>true</notify-caller>
            </forward-to>
        </cp:actions>
    </cp:rule>
</cp:ruleset>
Previous page Next page
Sentinel VoLTE Version 4.0.0