Initial Filter Criteria (iFC) is the mechanism used by the IMS to invoke Application Servers. It applies to SIP initial requests.
Sentinel VoLTE defines various Route Header Parameters such that the iFC can select specific behaviour from the Sentinel VoLTE applications.
For example, SCC or MMTel functionality, or influencing the T-ADS routing mode are selected through the use of Route Header Parameters.
Requirements for Sentinel VoLTE iFC
The iFC requirements can be met through various different iFC configurations. The purpose of this section is to cover the requirements.
INVITE related
Registered and Un-Registered Service Point Triggers
Both the MMTel and SCC require INVITE processing for originating, terminating, and the registered and un-registered cases. There are not any particular headers that are able to be used to "narrow" which INVITEs the SCC or MMTel receive such that they are triggered in certain cases only (unlike e.g. a voice-mail service that is only triggered on terminating INVITEs to a PSI).
Session Case | Consumers of case |
---|---|
Originating Registered |
SCC Originating Signalling Anchor for access transfer, MMTel Originating Features |
Originating Un-Registered |
MMTel Originating Features in case of and unregistered originating party. This is typical when using IMS centralised services without I2. I.e. a non IMS-registered user making an outgoing Circuit Switched call that is routed into the IMS for service control. |
Terminating Registered |
SCC Terminating Signalling Anchor for access transfer, SCC T-ADS, MMTel Terminating Features |
Terminating Un-Registered |
SCC T-ADS, MMTel Terminating features (e.g CDIV Not Logged In) |
INVITE trigger chaining
VoLTE calls can be processed sequentially by both the MMTel-AS and SCC-AS with INVITE iFC chaining. iFCs are chained together by associating the same Trigger Point (group of one or more SPTs) with multiple AS in a specific order.
The SCC-AS must be the first SIP-AS in the originating iFC trigger chain and last in the terminating iFC trigger chain. I.e it "wraps" the other SIP-AS nodes, and is the "closest" AS to the served UE. Therefore it directly observes the true SIP Dialog Identifier used between the IMS core and the served UE.
Third Party Registration Service Point Triggers
SCC-AS requires third party registration, as both eSRVCC and T-ADS functionality need access to (for example) the IMS private identity. MMTel-AS also requires third party registration so that it can access the default IMS public identity.
Typically the SCC-AS and MMTel-AS are co-located on the same TAS. In this case, there must be only one Third Party Registration request sent to the TAS. The TAS then performs appropriate logic for the MMTel and SCC functions based on the single request. Multiple distinct Third Party Registration requests should only be sent to the SCC-AS and MMTel-AS when the functions are not co-located on the same TAS.
Registration Case | Consumers of case | Needs first party registration content |
---|---|---|
Initial Registration |
SCC for eSRVCC registration and T-ADS. MMTel for default public identity. |
Both first-party request and response |
Re-registration |
SCC for eSRVCC re-registration and T-ADS (e.g. P-Access-Network-Info). MMTel to refresh its registration data. |
Both first-party request and response |
De-registration |
SCC and MMTel to clean up registration state database |
Both first-party request and response |
Depending on your HSS, the configuration for including first-party request and response messages could be on the iFC or the associated AS. |
MMTel Conferencing Service Point Triggers
MMTel Conferencing requires that the Conference Focus has a URI termed the Conference Factory Public Service Identity, or Conference Factory PSI for short.
Both Invites and Subscriptions to the Conference Factory PSI are implemented at the Conference Focus within the MMTel-AS.
Therefore the iFC for Conferencing needs to ensure that SIP SUBSCRIBE and INVITE sessions where the Request URI host part matches the host part of the Conference Factory PSI trigger the MMTel-AS.
Trigger examples
Due to the nature of the iFC XML, and that Method
and SessionCase
elements are part of a choice
(meaning one or the other can be specified inside an SPT
) sometimes logical OR is used for different SPT
elements
inside a Trigger
, and sometimes logical AND is used.
SCC-AS INVITE Trigger
The following XML fragment shows the use a single Trigger
element to capture the various INVITE cases for the SCC-AS.
<?xml version="1.0"?>
<!-- this is a snippet of an iFC showing only the Trigger elements
necessary for SCC-AS INVITE processing -->
<!-- An example of INVITE trigger point for SCC-AS -->
<TriggerPoint>
<!-- ConditionTypeCNF 0 means logical AND of SPT elements in the same group
ConditionTypeCNF 1 means logical OR of SPT elements the same group
See TS 29.228 for Conjunctive Normal Form vs Disjunctive Normal Form
SPT elements in different groups are AND'd together
-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!-- logically the statement is
INVITE AND (ORIGINATING_REGISTERED OR TERMINATING_REGISTERED OR TERMINATING_UNREGISTERED)
-->
<SPT>
<Group>0</Group>
<Method>INVITE</Method>
</SPT>
<SPT>
<Group>1</Group>
<SessionCase>0</SessionCase><!-- ORIGINATING_REGISTERED -->
</SPT>
<SPT>
<Group>1</Group>
<SessionCase>1</SessionCase><!-- TERMINATING_REGISTERED -->
</SPT>
<SPT>
<Group>1</Group>
<SessionCase>2</SessionCase><!-- TERMINATING_UNREGISTERED -->
</SPT>
</TriggerPoint>
SCC-AS Third Party Register Trigger
The following XML fragment shows the use of a Trigger
element that includes all three cases of Third Party registration.
<?xml version="1.0"?>
<!-- this is a snippet of an iFC showing only the Trigger element
necessary for Third Party Registration -->
<!-- Initial Register OR Re-register OR de-register -->
<TriggerPoint>
<!-- there is only a single SPT so ConditionTypeCNF is not important
yet it is a mandatory element so it is here as 1-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!-- Register, re-register and de-register -->
<SPT>
<Group>4</Group>
<Method>REGISTER</Method>
</SPT>
<Extension>
<RegistrationType>0</RegistrationType> <!-- INITIAL_REGISTRATION -->
<RegistrationType>1</RegistrationType> <!-- RE_REGISTRATION -->
<RegistrationType>2</RegistrationType> <!-- DE_REGISTRATION -->
</Extension>
</TriggerPoint>
MMTel-AS INVITE Trigger
The following XML fragment shows the use of a single Trigger
element to invoke the MMTel-AS for all INVITE sessions
except those going to voicemail.
<?xml version="1.0"?>
<!-- this is a snippet of an iFC showing only the Trigger elements
necessary for MMTel-AS INVITE processing -->
<!-- An example of INVITE trigger point for MMTel-AS excluding voicemail
All MMTel services will be served on the same AS here -->
<TriggerPoint>
<!-- ConditionTypeCNF 0 means logical AND of SPT elements in the same group
ConditionTypeCNF 1 means logical OR of SPT elements the same group
See TS 29.228 for Conjunctive Normal Form vs Disjunctive Normal Form
SPT elements in different groups are OR'd togethered
-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!-- MMTel needs INVITEs for all SessionCases
Voicemail is often not implemented on the same MMTel-AS platform
Therefore exclude the voicemail AS, assuming it has a URI of voicemail.example.com
Logically this is INVITE AND NOT (RequestURI equals voicemail.example.com)
-->
<SPT>
<Group>0</Group>
<Method>INVITE</Method>
</SPT>
<SPT>
<ConditionNegated>1</ConditionNegated> <!-- Use ConditionNegated to exclude the RequestURI -->
<Group>2</Group>
<RequestURI>voicemail.example.com</RequestURI>
</SPT>
</TriggerPoint>
MMTel-AS SUBSCRIBE Trigger
The following XML fragment shows the use of a Trigger
element to invoke the MMTel-AS for subscriptions to the
Conference Factory PSI.
<?xml version="1.0"?>
<!-- this is a snippet of an iFC showing only the Trigger for
subscriptions to the Conf Factory PSI -->
<TriggerPoint>
<!-- ConditionTypeCNF 0 means logical AND of SPT elements in the same group
ConditionTypeCNF 1 means logical OR of SPT elements the same group
See TS 29.228 for Conjunctive Normal Form vs Disjunctive Normal Form
SPT elements in different groups are OR'd togethered
-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!--
Logically this is SUBSCRIBE AND (RequestURI host part equals conf.example.com)
-->
<SPT>
<Group>0</Group>
<Method>SUBSCRIBE</Method>
</SPT>
<SPT>
<Group>1</Group>
<RequestURI>conf.example.com</RequestURI>
</SPT>
</TriggerPoint>
Recommendations for Application Server element
An iFC document joins an Application Server and zero or more Trigger Point elements. Each Trigger Point element includes one or more Service Trigger Points (SPTs). These are discussed above.
This section discusses recommendations for the Application Server section.
Use a TCP transport
The default SIP transport mechanism for AS communication is UDP. TCP can be specified by appending ;transport=tcp
to the configured AS URI.
AS functional separation
One Sentinel VoLTE TAS instance can handle both SCC-AS and MMTel-AS roles. However it is possible to logically separate the roles onto their own instance or node. This can be useful for non-functional reasons such as sizing, or functional reasons such as debugging.
This is achieved with the oc-mode
parameter as part of the AS URI.
The mmtel
oc-mode handles MMTel and Conferencing. Conferencing traffic can be diverted to its own node via iFC association.
For example, to split MMTel, SCC and MMTel-Conferencing traffic on such that they are on distinct ports 5060, 5070 and 5080.
Role | AS URI | Associated TP / iFC |
---|---|---|
MMTel |
sip:<volte-tas-address>:5060;transport=tcp;oc-mode=mmtel |
MMTel iFCs |
SCC |
sip:<volte-tas-address>:5070;transport=tcp;oc-mode=scc |
SCC iFCs |
MMTel-Conferencing |
sip:<volte-tas-address>:5080;transport=tcp;oc-mode=mmtel |
Conf iFC |
For each configured AS it is possible to assign further specific functions through the use of Route Header Parameters
iFC examples
These examples provide a full initial filter criteria including TriggerPoint
and ApplicationServer
elements.
SCC-AS INVITE
The SCC-AS is invoked in three INVITE cases
-
originating
-
terminating registered
-
terminating un-registered
These can be shown in a single iFC for the INVITE case
<?xml version="1.0"?>
<InitialFilterCriteria>
<Priority>2</Priority>
<TriggerPoint>
<!-- ConditionTypeCNF 0 means logical AND of SPT elements in the same group
ConditionTypeCNF 1 means logical OR of SPT elements the same group
See TS 29.228 for Conjunctive Normal Form vs Disjunctive Normal Form
SPT elements in different groups are AND'd together
-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!-- logically the statement is
INVITE AND (ORIGINATING_REGISTERED OR TERMINATING_REGISTERED OR TERMINATING_UNREGISTERED) AND NOT (Recv-Info Header equals 'g.3gpp.ussd')
-->
<SPT>
<Group>0</Group>
<Method>INVITE</Method>
</SPT>
<SPT>
<Group>1</Group>
<SessionCase>0</SessionCase><!-- ORIGINATING_REGISTERED -->
</SPT>
<SPT>
<Group>1</Group>
<SessionCase>1</SessionCase><!-- TERMINATING_REGISTERED -->
</SPT>
<SPT>
<Group>1</Group>
<SessionCase>2</SessionCase><!-- TERMINATING_UNREGISTERED -->
</SPT>
<SPT>
<ConditionNegated>1</ConditionNegated>
<Group>2</Group>
<SIPHeader>
<Header>Recv-Info</Header>
<Content>g.3gpp.ussd</Content>
</SIPHeader>
<Extension/>
</SPT>
</TriggerPoint>
<ApplicationServer>
<ServerName>sip:scc-as.domain.name:5060;transport=tcp;oc-mode=scc</ServerName>
<DefaultHandling>1</DefaultHandling>
<Extension>
<IncludeRegisterRequest/>
<IncludeRegisterResponse/>
</Extension>
</ApplicationServer>
</InitialFilterCriteria>
MMTel-AS INVITE
An example showing the iFC for an MMTel-AS for INVITE requests is below.
<?xml version="1.0"?>
<InitialFilterCriteria>
<Priority>2</Priority>
<TriggerPoint>
<!-- ConditionTypeCNF 0 means logical AND of SPT elements in the same group
ConditionTypeCNF 1 means logical OR of SPT elements the same group
See TS 29.228 for Conjunctive Normal Form vs Disjunctive Normal Form
SPT elements in different groups are AND'd together
-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!-- MMTel needs INVITEs for all SessionCases
Voicemail is often not implemented on the same MMTel-AS platform
Therefore exclude the voicemail AS, assuming it has a URI of voicemail.example.com
Logically this is INVITE AND NOT (RequestURI equals voicemail.example.com) AND NOT (Recv-Info Header equals 'g.3gpp.ussd')
-->
<SPT>
<Group>0</Group>
<Method>INVITE</Method>
</SPT>
<SPT>
<ConditionNegated>1</ConditionNegated> <!-- Use ConditionNegated to exclude the RequestURI -->
<Group>2</Group>
<RequestURI>voicemail.example.com</RequestURI>
</SPT>
<SPT>
<ConditionNegated>1</ConditionNegated>
<Group>3</Group>
<SIPHeader>
<Header>Recv-Info</Header>
<Content>g.3gpp.ussd</Content>
</SIPHeader>
<Extension/>
</SPT>
</TriggerPoint>
<ApplicationServer>
<ServerName>sip:mmtel-as.domain.name:5060;transport=tcp;oc-mode=mmtel</ServerName>
<DefaultHandling>1</DefaultHandling>
<Extension>
<IncludeRegisterRequest/>
<IncludeRegisterResponse/>
</Extension>
</ApplicationServer>
</InitialFilterCriteria>
Note: if the MMTel-AS will run the MMTel-Conferencing feature (ie. not the discrete conferencing example) then the iFC needs to also include SUBSCRIBE requests where the RequestURI matches the host name part of the conference factory PSI.
MMTel-AS SUBSCRIBE
If the MMTel-AS is running the MMTel-Conferencing feature, rather than a discrete MMTel-Conferencing AS node, then the MMTel-AS needs to receive SUBSCRIBE requests for the Conference Factory PSI.
An example is shown
<?xml version="1.0"?>
<InitialFilterCriteria>
<Priority>2</Priority>
<TriggerPoint>
<!-- ConditionTypeCNF 0 means logical AND of SPT elements in the same group
ConditionTypeCNF 1 means logical OR of SPT elements the same group
See TS 29.228 for Conjunctive Normal Form vs Disjunctive Normal Form
SPT elements in different groups are OR'd togethered
-->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!--
Logically this is SUBSCRIBE AND (RequestURI host part equals conf.example.com)
-->
<SPT>
<Group>0</Group>
<Method>SUBSCRIBE</Method>
</SPT>
<SPT>
<Group>1</Group>
<RequestURI>conf.example.com</RequestURI>
</SPT>
</TriggerPoint>
<ApplicationServer>
<ServerName>sip:mmtel-as.domain.name:5060;transport=tcp;oc-mode=mmtel</ServerName>
<DefaultHandling>1</DefaultHandling>
<Extension>
<IncludeRegisterRequest/>
<IncludeRegisterResponse/>
</Extension>
</ApplicationServer>
</InitialFilterCriteria>
Third Party Registration example
The following example adds triggers for REGISTER request, for:
-
initial registration
-
re-registration
-
de-registration
When sending the third-party register request, both the first party register request and response are included.
<?xml version="1.0"?>
<!-- sip registration IFC -->
<InitialFilterCriteria>
<Priority>1</Priority>
<!-- Initial Register OR Re-register OR de-register -->
<TriggerPoint>
<!-- there are three SPTs, and we want OR, so ConditionTypeCNF 1 -->
<ConditionTypeCNF>1</ConditionTypeCNF>
<!-- Register -->
<SPT>
<Group>0</Group>
<Method>REGISTER</Method>
<Extension>
<RegistrationType>0</RegistrationType> <!-- INITIAL_REGISTRATION -->
</Extension>
</SPT>
<!-- re-register -->
<SPT>
<Group>0</Group>
<Method>REGISTER</Method>
<Extension>
<RegistrationType>1</RegistrationType> <!-- RE_REGISTRATION -->
</Extension>
</SPT>
<!-- de-register -->
<SPT>
<Group>0</Group>
<Method>REGISTER</Method>
<Extension>
<RegistrationType>2</RegistrationType> <!-- DE_REGISTRATION -->
</Extension>
</SPT>
</TriggerPoint>
<ApplicationServer>
<ServerName>sip:third-party-registrar:5060;transport=tcp</ServerName>
<DefaultHandling>0</DefaultHandling>
<Extension>
<IncludeRegisterRequest/>
<IncludeRegisterResponse/>
</Extension>
</ApplicationServer>
</InitialFilterCriteria>
Discrete Conferencing Example
Sentinel VoLTE implements many MMTel Services, including MMTel Conferencing. It may be useful to configure the Conference as a different set of VMs than the rest of MMTel, for example for sizing reasons.
If so, this iFC for conferencing can be defined.
<?xml version="1.0"?>
<!-- Conferencing IFC
MMTel Conferencing requires SUBSCRIBE and INVITE requests to the
Conference Factory PSI
-->
<InitialFilterCriteria>
<Priority>2</Priority>
<!-- Logically (INVITE OR SUBSCRIBE) AND (RequestURI host part equals conf.example.com) AND Terminating Unregistered
-->
<TriggerPoint>
<ConditionTypeCNF>1</ConditionTypeCNF>
<SPT>
<Group>0</Group>
<Method>INVITE</Method>
</SPT>
<SPT>
<Group>0</Group>
<Method>SUBSCRIBE</Method>
</SPT>
<SPT>
<Group>1</Group>
<RequestURI>conf.example.com</RequestURI>
</SPT>
<SPT>
<Group>2</Group>
<SessionCase>2</SessionCase> <!-- Terminating Unregistered -->
</SPT>
</TriggerPoint>
<ApplicationServer>
<ServerName>sip:conf-as.example.com:5060;transport=tcp;oc-mode=mmtel</ServerName>
<DefaultHandling>0</DefaultHandling>
</ApplicationServer>
</InitialFilterCriteria>
Note: if MMTel-Conferencing is provided on a different node, then the Conference Factory PSI should be excluded from the MMTel-AS Trigger.
Excluding services
There are cases where there are services that are not implemented on a particular SIP-AS. If there are no other distinguishing characteristics of the INVITE (such as for MMTel) then any Public Service Identifiers for services that are not implemented on the MMTel-AS should be excluded. If there are distinguishing characteristics, such as a unique SIP header, these can be used for exclusion.
-
Example - Voicemail AS
Add a negated condition specifying a Service Point Trigger where the URI is the host-part of the PSI for the VoiceMail service. An example is shown below.
<SPT>
<ConditionNegated>1</ConditionNegated>
<Group>3</Group>
<RequestURI>voicemail.example.com</RequestURI>
</SPT>
-
Example - USSI AS
Sentinel VoLTE does not implement the role of a USSI Application Server.
As USSD over IMS requests are signalled using SIP INVITE, and MMTel and SCC AS are signalled using INVITE, a negated condition is added to the iFC for Sentinel VoLTE.
USSI INVITE requests contain a Recv-Info header with the value g.3gpp.ussd
.
An example is shown below.
<SPT>
<ConditionNegated>1</ConditionNegated>
<Group>4</Group>
<SIPHeader>
<Header>Recv-Info</Header>
<Content>g.3gpp.ussd</Content>
</SIPHeader>
<Extension/>
</SPT>
Note: each excluded service should be in a Group that is independent of the other groups. This is because SPTs in different groups are AND’ed together.