The MMTelParallelFA feature implements the Flexible Alerting service, by alerting the group members in parallel
Feature Cheat Sheet
B2BUA Instance | Originating / Terminating | SAS Support | Point(s) in Session Plan | Network Operator Data | Subscriber Data | Stateful or Stateless | POJO Feature or SBB Feature |
---|---|---|---|---|---|---|---|
MMTEL |
No |
Terminating |
Sip_Access_Subscriber_Check, Sip_Access_Party_Request, Sip_Access_Party_Response, Sip_Access_Service_Timer, SipMidSession_Party_Request, Sip_Mid_Session_Party_Response, SipLegEnd |
Yes |
Yes |
Statefull |
POJO |
Source Code
This feature’s source code is available in the Sentinel VoLTE SDK in the mmtel-flexible-alerting
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack, for example:
> create-module new-mmtel-flexible-alerting opencloud#mmtel-flexible-alerting#volte/2.9.0;2.9.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-determine-flexible-alerting-mode |
Group module for the Determine Flexible Alerting Mode feature. |
mmtel-determine-flexible-alerting-mode-profile |
The profile for this feature |
mmtel-determine-flexible-alerting-mode-library |
The common library for this module pack |
mmtel-parallel-fa |
The the flexible alerting parallel feature. |
mmtel-sequential-fa |
The the flexible alerting sequential feature. |
Statistics
MMTelParallelFA statistics are tracked by the sentinel.volte.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → sentinel.volte.sip service → sentinel.volte.sip SBB → feature → MMTelParallelFA
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=sentinel.volte.sip,vendor=OpenCloud,version=2.9.0].SbbID[name=sentinel.volte.sip,vendor=OpenCloud,version=2.9.0].feature.MMTelParallelFA"
Name | Type | Incremented when … |
---|---|---|
Started |
Counter |
each time the feature runs |
FailedDuringExecution |
Counter |
a fatal error occurs while the feature is executing |
FailedToStart |
Counter |
Sentinel VoLTE encounters an error while attempting to start the feature. |
IssuedWarning |
Counter |
a non-fatal problem is encountered and the feature and issues a warning. |
TimedOut |
Counter |
the feature takes too long to complete and Sentinel VoLTE aborts execution |
ProcessingRequest |
Counter |
processing a request message. |
ProcessingResponse |
Counter |
processing a response from the downstream forked legs. |
InviteRequestReceived |
Counter |
the original INVITE is received. |
CancelRequestReceived |
Counter |
a CANCEL message is received. |
ProvisionalResponseReceived |
Counter |
a 1xx message is received. |
GroupMemberAlerted |
Counter |
an INVITE request is sent to a group member. |
LegReleased |
Counter |
a dialog leg is released. |
UpstreamForkCreated |
Counter |
the feature creates a new leg towards the calling party. It happens on the provisional responses. |
TriggeredOnResponse |
Counter |
the feature is triggered on a response message. |
TriggeredOnRequest |
Counter |
the feature is triggered on a request message. |
TriggeredOnTimer |
Counter |
the feature is triggered on a timmer. |
TimeoutTimerCancelled |
Counter |
the feature cancel the timer. |
TimeoutTimerSet |
Counter |
the feature sets the timer. The timer is set before the INVITE is sent to the first group member. |
ExitedEarlyNoMembersToAlert |
Counter |
there is just one member in the group and it is the pilot number. |
Received480 |
Counter |
receives a 480 (Temporarily Unavailable) response from a member |
Received486 |
Counter |
receives a 486 (Busy Here) response from a member |
Received408 |
Counter |
receives a 408 (Timeout) response from a member |
Received404 |
Counter |
receives a 404 (Not found) response from a member |
ReceivedSuccess |
Counter |
receives a 200 (OK) response from a member |
RespondedUpstreamWith480 |
Counter |
the feature sends a 480 (Temporarily Unavailable) to the calling party. |
RespondedUpstreamWith486 |
Counter |
the feature sends a 486 (Busy Here) to the calling party. |
RespondedUpstreamWith408 |
Counter |
the feature sends a 408 (Timeout) to the calling party. |
RespondedUpstreamWith404 |
Counter |
the feature sends a 404 (Not found) to the calling party. |
RespondedUpstreamWithSuccess |
Counter |
the feature sends a 200 (OK) to the calling party. |
Interaction with other MMTel Services
CDIV Unconditional
If CDIV Unconditional is active for the Pilot Identity, CDIV Unconditional procedures will be applied and no FA group member will be alerted.
CDIV Busy
If CDIV Busy is active for the Pilot Identity, CDIV Busy procedures will be applied if the pilot number is considered busy.
The definition of Busy for the pilot number depends on the group type: single-user
or multiple-users
.
For single-user
, when one member is busy the pilot number is busy, while for multiple-uses
all group members have to be busy for the pilot number to be considered busy.
CDIV No Reply and CDIV Not Reachable
If the FA Pilot Number is considered in a state of No Reply
or Not Reachable
then the CDIV procedures for those MMTel services will be applied.
CDIV Not Logged-in
If the FA Pilot Identity has CDIV Not Registered active, the procedures for CDIV Not Registered will be applied.
MMTelOIP
OIP applied to any FA group member when OIP is active for the FA Pilot Identity.
MMTelTIP
If the FA Pilot Identity did not apply TIR, the termination identification is the FA Pilot Identity.
MMTelTIR
If the FA Pilot Identity has TIR activated, the termination identification is not presented.
MMTelICB
If the FA Pilot Identity has ICB activated, the procedures for ICB will be applied.
MMTelOCB
If any FA group member has OCB activated, the procedures for OCB will be applied for that member.
Network Operator Data
The data present in JSLEE profile table MMTelDetermineFAConfigProfileTable
is used to configure the behaviour of the Parallel Flexible Alerting feature.
Variable Name | Type | Comments |
---|---|---|
ParallelMaxWaitTimeout |
int |
Set the amount of time in milliseconds that the MMTelParallelFA feature waits before canceling the session for a pilot number. |
AddHistoryInfoHeader |
boolean |
Determines whether to add |
AddMpParam |
boolean |
If adding |
Session Input Variables
Variable Name | Type | Comments |
---|---|---|
MMTelFAServiceData |
Complex |
Service data read from the HSS |
FlexibleAlertingGroupMode |
Enum |
Determines whether single user or multi-user Flexible Alerting is used. |
Session Output Variables
Variable Name | Type | Comments |
---|---|---|
SuppressCdiv |
Boolean |
Indicates whether response should be ignored by the MMTel CDIV feature. |
ParallelFATimerID |
int |
Indicates the MMTelParallelFA timer identification. |
Behaviour
The MMTelParallelFA implements the Flexible Alerting in parallel.
It reads the MMTelFAServiceData
session variable for the group information and issues INVITE requests towards all members in parallel using SIP parallel forking.
The INVITE request URI will have two parameters added to it.
-
The first is the Cause Parameter with the value always set to
cause=302
. -
The second is the MMTel Service Type Parameter with the value set to
mmtel-service-type=11
for flexible alerting.
When a member answers the call with 200 (OK) the feature cancels all other sessions towards the other members and finishes the call setup procedures between the calling party and the member that answered.
It also controls the state of the FA Pilot Identity regarding busy, not reachable and no reply states.
The determination of those states, depends on the members responses and on the FA group type: single-user
or multiple-users
.
For further information regarding the state of a Pilot Identity see Flexible Alerting.
OC-Retarget Header
The OC-Retarget header is added by MMTel Flexible Alerting to communicate that a retarget has occurred. This header is inserted into the initial INVITEs that goes towards the retargeted party. This is then used in the composition to decide whether to invoke the SCC-AS.
For more details see OC-Retarget Header
Parallel Flexible Alerting and MMTelCDIV interaction
The CDIV feature runs before the Flexible Alerting feature on INVITE path. This way, the CFNL and CFU conditions can be applied to the Pilot Number
before alerting any FA-Group
member.
On the Response path, the CDIV feature runs after the Flexible Alerting feature. CDIV applies the conditions CFB, CFNR, and CFNRc based on the final response that the MMTelParallelFA feature
sends to the caller. To avoid the CDIV feature being triggered on any final FA-Group
members response, the MMTelParallelFA feature suppresses the CDIV feature execution by setting the session state variable SuppressCdiv
.
MMTelParallelFA will allow the CDIV feature to execute only after the the state of the Pilot Number
is defined by receiving all members final responses or by timing out.
CDIV and MMTelParallelFA are both triggered on each other timers. This guarantees that the MMTelParallelFA feature cancels the ongoing downstream dialogs and that the CDIV feature can execute the CFNR and CFNRc conditions properly.
When the CDIV timer fires first, the MMTelParallelFA feature cancels the downstream dialogs and sends a 408 (Timeout) response towards the caller party. When CDIV executes, it will identify the 408 response and do the proper re-targeting towards the diverted subscriber.
When the MMTelParallelFA timer fires first, the MMTelParallelFA feature stops the CDIV timer and cancels the downstream dialogs and sends a 408 (Timeout) response towards the caller party. When CDIV executes, it identifies the trigger is the MMTelParallelFA timer, identifies the 408 response and do the proper re-targeting towards the diverted subscriber.
In the case when no timer has been fired, CDIV feature uses the sip response sent from the MMTelParallelFA feature to evaluate and execute the proper MMTelCDIV conditions.
HSS Subscriber Data Examples
single user
group type
In the first example the Subscriber Data configures a flexible alerting group with type single-user
.
The group has three active members and the flexible alerting service is authorized or active.
<?xml version="1.0" encoding="UTF-8"?> <Sh-Data> <RepositoryData> <ServiceIndication>MMTEL-Services</ServiceIndication> <SequenceNumber>1</SequenceNumber> <ServiceData> <MMTelServices xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <complete-flexible-alerting> <operator-flexible-alerting authorized="true"/> <operator-flexible-alerting-group authorized="true"> <identity>sip:bob@home1.opencloud.co.nz</identity> <group-type>single-user</group-type> <membership>permanent</membership> <members> <member active="true">sip:bob@home1.opencloud.co.nz</member> <member active="true">sip:bobmobile@home1.opencloud.co.nz</member> <member active="true">sip:bobdesk@home1.opencloud.co.nz</member> </members> </operator-flexible-alerting-group> </complete-flexible-alerting> </MMTelServices> </ServiceData> </RepositoryData> </Sh-Data>
multiple-users
group type
The following example shows a group of multiple-users
type with four members. The flexible alerting service is authorized or active.
<?xml version="1.0" encoding="UTF-8"?> <Sh-Data> <RepositoryData> <ServiceIndication>MMTEL-Services</ServiceIndication> <SequenceNumber>1</SequenceNumber> <ServiceData> <MMTelServices xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <complete-flexible-alerting> <operator-flexible-alerting authorized="true"/> <operator-flexible-alerting-group authorized="true"> <identity>sip:office@home1.opencloud.co.nz</identity> <group-type>multiple-users</group-type> <membership>demand</membership> <members> <member active="true">sip:desk1@home1.opencloud.co.nz</member> <member active="true">sip:desk2@home1.opencloud.co.nz</member> <member active="true">sip:desk3@home1.opencloud.co.nz</member> <member active="true">sip:desk4@home1.opencloud.co.nz</member> </members> </operator-flexible-alerting-group> </complete-flexible-alerting> </MMTelServices> </ServiceData> </RepositoryData> </Sh-Data>