The MMTelDetermineFlexibleAlertingMode feature
determines if and how the Flexible Alerting features will execute based on feature configuration and the HSS Subscriber Data.
.
The Determine Flexible Alerting Mode feature runs before the Flexible Alerting features. It reads subscriber data and configuration profile tables to determine the flexible alerting mode and supplies this information to the MMTelParallelFA and MMTelSequentialFA features as a session state field. |
Feature cheat sheet
| B2BUA Instance | Originating/Terminating | Point(s) in Session Plan | Network Operator Data | Subscriber Data | Stateful or Stateless | POJO Feature or SBB Feature |
|---|---|---|---|---|---|---|
All |
Terminating |
Subscriber Check |
Yes |
Yes |
Stateless |
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.7.0;2.7.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 flexible alerting parallel feature. |
mmtel-sequential-fa |
The flexible alerting sequential feature. |
Network Operator Data
The data present in JSLEE profile table MMTelDetermineFAConfigProfileTable is used to configure the
behaviour of the Flexible Alerting features: MMTelParallelFA and MMTelSequentialFA.
This profile table is scoped by the sentinel key and the Pilot Number.
Here is an example of a profile entry:
'SomeOperatorName::::sip:callcentre@someoperator.com':
ModeIsParallel: true
ParallelMaxWaitTimeout: 5000
SequentialAnyResponseTimeout: 2000
SequentialFinalResponseTimeout: 5000
The default profile entry is not scoped by a Pilot Number:
'SomeOperatorName::::':
ModeIsParallel: true
ParallelMaxWaitTimeout: 5000
SequentialAnyResponseTimeout: 2000
SequentialFinalResponseTimeout: 5000
| Variable Name | Type | Comments |
|---|---|---|
ParallelMaxWaitTimeout |
int |
Set the amount of time in milliseconds that the MMTelParallelFA waits for a final response before canceling the session for a pilot number. |
ModeIsParallel |
boolean |
Set the mode to parallel (true) or sequential (false). |
SequentialAnyResponseTimeout |
int |
Set the amount of time in milliseconds that the MMTelSequentialFA waits for a any response from the INVITE before start alerting the next member. |
SequentialFinalResponseTimeout |
int |
Set the amount of time in milliseconds that the MMTelSequentialFA waits for a final response from the INVITE before start alerting the next member. |
Session Input Variables
| Variable Name | Type | Comments |
|---|---|---|
MMTelServiceData |
Complex |
Service data read from HSS |
Session Output Variables
| Variable Name | Type | Comments |
|---|---|---|
FlexibleAlertingMode |
Enum |
Determines whether the |
FlexibleAlertingGroupMode |
Enum |
Determines whether the |
Statistics
MMTelDetermineFAMode statistics are tracked by the volte.sentinel.sip SBB and can be found under the following parameter set:
SLEE-Usage → volte.sentinel.sip service → volte.sentinel.sip SBB
| Statistic | Incremented when… |
|---|---|
MMTelDetermineFAModeFeatureFAModeStarted |
each time the feature runs |
MMTelDetermineFAModeFeatureFailedDuringExecution |
a fatal error occurs while the feature is executing |
MMTelDetermineFAModeFeatureFailedToStart |
sentinel VoLTE encounters an error while attempting to start the feature. |
MMTelDetermineFAModeFeatureIssuedWarning |
a non-fatal problem is encountered and the feature and issues a warning. |
MMTelDetermineFAModeFeatureTimedOut |
the feature takes too long to complete and Sentinel VoLTE aborts execution. |
MMTelDetermineFAModeFeatureFAModeNoFA |
the feature fails to trigger Flexible Alerting under FA mode |
MMTelDetermineFAModeFeatureFANoProfile |
no valid profile is loaded for poilt subscriber |
MMTelDetermineFAModeFeatureFAValidPilotNumber |
subscriber data equals the requestUri header. |
Behaviour
When the feature starts, it tries to load the configuration profile for the pilot number present in the flexible alerting subscriber data.
The table MMTelDetermineFAConfigProfileTable is expected to contain a profile with name scoped by the sentinel selection key and the Pilot Number, i.e, SomeOperatorName::::sip:callcentre@someoperator.com.
If there is no profile for the pilot number the feature try to get the configuration from the default profile: SomeOperatorName::::.
When there is no suitable profile the FlexibleAlertingMode is set to NONE and the FlexibleAlertingGroupMode is set to GROUP_NONE.
It means that the neither MMTelParallelFA
nor MMTelSequentialFA will run.
When there is a suitable profile, the feature checks if the flexible-alerting is active by checking the authorized field in the flexible-alerting Subscriber Data.
If the service is not active, i.e authorized="false", neither MMTelParallelFA
nor MMTelSequentialFA will run.
The HSS schema for flexible alerting defines two sets of services that can contain the key authorized: operator-flexible-alerting and operator-flexible-alerting-group.
The feature checks both to define if the service is authorized. The table below shows the logic:
operator-flexible-alerting authorized |
operator-flexible-alerting-group authorized |
service status |
true |
true |
active |
true |
null |
active |
null |
true |
active |
false |
any |
inactive |
any |
false |
inactive |
null |
null |
inactive |
When flexible alerting is active, the group type in the Subscriber Data (single-user or multiple-users) is written into the Session State variable FlexibleAlertingGroupMode.
The FlexibleAlertingMode Session State field is set according to the value in the configuration profile (ModeIsParallel attribute).
Subscriber data examples
MULTIPLE_USERS
HSS Subscriber Data
<?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:friends@home1.opencloud.co.nz</identity>
<group-type>multiple-users</group-type>
<membership>permanent</membership>
<members>
<member active="true">sip:bob@home1.opencloud.co.nz</member>
<member active="true">sip:charlie@home1.opencloud.co.nz</member>
<member active="true">sip:daisy@home1.opencloud.co.nz</member>
</members>
</operator-flexible-alerting-group>
</complete-flexible-alerting>
</MMTelServices>
</ServiceData>
</RepositoryData>
</Sh-Data>
Profile configuration
ModeIsParallel: true ParallelMaxWaitTimeout: 20000 SequentialAnyResponseTimeout: 2000 SequentialFinalResponseTimeout: 5000
In the example above, the group sip:friends@home1.opencloud.co.nz has three active members.
The FlexibleAlertingGroupMode is set to MULTIPLE_USERS , the FlexibleAlertingMode is set to PARALLEL, and the timeout is set to 20 seconds.
SINGLE_USER
HSS Subscriber Data
<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:bob-mobile@home1.opencloud.co.nz</member>
<member active="true">sip:bob-desk@home1.opencloud.co.nz</member>
</members>
</operator-flexible-alerting-group>
</complete-flexible-alerting>
</MMTelServices>
</ServiceData>
</RepositoryData>
</Sh-Data>
Profile configuration
ModeIsParallel: false ParallelMaxWaitTimeout: 5000 SequentialAnyResponseTimeout: 2000 SequentialFinalResponseTimeout: 5000
In the example above, the group sip:bob@home1.opencloud.co.nz has three active members.
The FlexibleAlertingGroupMode is set to SINGLE_USER, the FlexibleAlertingMode is set to SEQUENTIAL and the
timeout is for receiving any response from a member is set to 2 seconds and the timeout for receiving a final response
from a member is 5 seconds.
