This feature determines if the SIP session is roaming and if it represents an international, or international ex HC call, based on the location of the calling party and the destination address . The results of this feature are applied by the VoLTE communication barring features (MMTelOCB and MMTelICB).
- From the spec
- Feature cheat sheet
- Prerequisite features
- Source Code
- Configuration
- Behaviour
- Get the address string to use in address analysis
- Determine if address international and roaming status should be skipped
- Get the visited Mobile Country Code and Mobile Network Code
- Get the ISO Country Code
- Get the visited-network-id for the served user
- Get the prefix address list
- Determine international and international-exHC status
- Using MCC specific prefix address lists
- Determine roaming status
- OC-Roaming-Status Header
- Session state inputs and outputs
- Error scenarios
- Statistics
From the spec
Here’s what 3GPP 24.611 says:
international: This condition evaluates to true when the request URI of the outgoing SIP request:
international-exHC: This condition for international barring, excluding the home country, evaluates to true when the request URI of the outgoing SIP request:
|
Feature cheat sheet
Feature Script Name |
DetermineInternationalAndRoamingStatus |
---|---|
MMTel or SCC |
Both |
Call-Type |
Orig or Term |
Session Plan |
mmtel-orig, mmtel-term, scc-tads-only |
Execution Points |
SipAccess_SessionCheck or SipAccess_SubscriberCheck |
Network Operator Config |
Yes |
Subscriber Config |
No |
POJO or SBB |
POJO |
Feature FSMs |
None |
Feature Parameters |
None |
SAS Support |
Yes |
RA Entity Links |
None |
Prerequisite features
Sentinel-SIP:
-
SIP Determine Network Operator
-
SND:Determine Call Type Feature
-
SIP Extract Network Info
-
SIP Normalization (recommended)
VoLTE:
-
DetermineChargeMode (only required when using CAP charging)
Source Code
This feature’s source code is available in the Sentinel VoLTE SDK in the volte-determine-international-and-roaming-status
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack, for example:
> create-module new-diar-module opencloud#volte-determine-international-and-roaming-status#volte/3.1.0;3.1.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 |
---|---|
volte-determine-international-and-roaming-status |
Group module for the feature that includes all of the modules listed below. |
volte-determine-international-and-roaming-status-address-list |
Contains the profile specification for the feature address list profile table. |
volte-determine-international-and-roaming-status-profile |
Contains the profile specification for the feature configuration profile table. |
volte-determine-international-and-roaming-status-feature |
Contains the feature itself. |
Configuration
Configuration for this feature is in the DetermineInternationalAndRoamingStatusConfigProfileTable
. The profiles within this table have the following fields:
Parameter | Type | Description |
---|---|---|
|
Boolean |
Decide if the feature will end the call if no Visited Network can be determined. |
|
Boolean |
Explicitly add user=phone parameter and value to SIP URI during inspection. |
|
int |
The minimum length of address that will be checked. |
|
Boolean |
Whether non international format DNs, i.e. with no leading "+", should always be treated as national. |
|
Boolean |
Use a prefix address list table for the subscribers Mobile Country Code. |
Behaviour
Get the address string to use in address analysis
The DetermineInternationalAndRoamingStatus
feature analyses a digit string that corresponds to the destination (or called) party. Digit strings may be in a Tel URL, or the user part of a SIP URI.
If the number retrieved from the Tel URI or SIP URI user part contains a + sign, the + sign is removed to leave just the digits.
The DetermineInternationalAndRoamingStatus
feature uses different properties of the initial INVITE
request for originating and terminating treatment:
-
If the session is originating, then it checks the
request-uri
andTo
address. -
If the session is terminating, then it checks the
P-Asserted-Identity
address, theFrom
address, and theReferred-By
address.
Otherwise, the feature execution ends.
If a digit string is not found, then the feature will respond to the sentinel-core with featureCannotStart
, and end.
Determine if address international and roaming status should be skipped
The DetermineInternationalAndRoamingStatus
feature may decide to not handle the address if either:
-
The address is shorter than the configured
MinLength
defined inDetermineInternationalAndRoamingStatusConfigProfileTable
-
The address matches an entry in the
SkipDIRSAddressList
This allows for short codes and specific longer length numbers to avoid DetermineInternationalAndRoamingStatus
.
The SkipDIRSAddressList
is a configurable address list scoped by the Sentinel selection key; it is only given to the component when used by the SIP normalization component.
The format of the SkipDIRSAddressList
is described by a standard address list configuration table. See Address List Configuration Profile for more information.
The SkipDIRSAddressList
configuration is found in its profile within ${PLATFORM_OPERATOR_NAME}_Sentinel_AddressListConfigurationTable
.
Get the visited Mobile Country Code and Mobile Network Code
The prerequisite Extract Network Info Feature attempts to parse the P-Access-Network-Info
and P-Visited-Network-Identifier
headers to obtain the visited MCC and MNCs, and stores them in session state.
The feature first checks if the session state field PaniMccsMncs
(obtained from P-Access-Network-Info
) contains any entries.
If so, it takes the first entries for both the MCC and MNC.
Otherwise, the visited MCC and MNCs are retrieved from the session state field PvniMccMnc
, obtained by parsing the P-Visited-Network-Identifier
according to IETF RFC 3455.
Get the ISO Country Code
The ISO country code is determined by the ExtractNetworkInfo or DetermineLocationFromMSRN feature.
It is stored in session state in the IsoCountryCode
field.
The feature will attempt to retrieve it from this field.
Get the visited-network-id for the served user
The feature first checks if the session state field IMSInformation
contains a valid IMS Visited Network Identifier populated by Diameter Per Leg Info Feature.
If no value is present, it extracts the visited network id for the served user as follows:
-
If the session is originating, the
P-Visited-Network-Id
header is checked in the incoming request.-
If this header exists, then the visited network id is set to the header value.
-
-
If the session is terminating, the
OC-Term-P-Visited-Network-Id
header is checked in the incoming request.-
If this header exists, then the visited network id is set to the header value.
-
If the incoming request did not contain the visited network id, and if the served user is logged into the IMS, then Third Party Registration Data is consulted - to find the P-Visited-Network-Id at the time of IMS registration. Third Party Registration data is looked up with an access key of the default public identity for the served user. It is accessed via the Sh Cache Microservice.
If a visited network id cannot be determined, the feature checks the configuration in the DetermineInternationalAndRoamingStatusConfigProfileTable
to determine if the call should proceed or not. If EndCallIfNoVisitedNetwork
is false, then the feature exits without modifying session state. If EndCallIfNoVisitedNetwork
is true then the call is terminated.
Get the prefix address list
An important part of this feature is an address list of prefixes for each MCC or each visited network. Each entry in the list states whether an address with this prefix, for a subscriber of the network operator, registered with a subscriber location network, represents a visited or home network.
The addresses in the list will be used to determine the international status based on the MCC.
For originating calls the called party address is used to find the destination MCC, and for terminating calls the calling party address is used to define the MCC from the originating party.
This list allows the operator to define how the international status will be resolved by setting the field isVisitedNetwork
.
For a session processed by VoLTE:
-
The session is scoped to the network operator by the SIP Determine Network Operator feature (this is the subscriber’s home).
-
The MCC or
visited-network-id
is found as described above. -
In addition to a
DEFAULT
entry, it is possible to add entries for any MCC or visited network in theDetermineInternationalAndRoamingStatus_AddressListConfigurationTable
profile. The installer adds theDEFAULT
entry, and an entry for the home network MCC. Furthermore, there is an address list of prefixes stored in theDetermineInternationalAndRoamingStatus_AddressListEntryTable
for bothDEFAULT
and each MCC or visited network stored in theDetermineInternationalAndRoamingStatus_AddressListConfigurationTable
profile. Both tables are scoped to the Network operator.
The DetermineInternationalAndRoamingStatus_AddressListConfigurationTable
is a standard address list configuration table, see Address List Configuration Profile for more information.
The DetermineInternationalAndRoamingStatus_AddressListEntryTable
profile format is outlined by the following:
Parameter | Type | Description |
---|---|---|
|
String |
|
|
String |
The prefix address this address list entry is for — a sequence of characters matching: 0 … 9, a … f, A … F, #, *, . |
|
String |
The list id is a string that identifies the address list this entry belongs to. It has the following form: <selectionkey>:<schemaName>:<listname> |
|
String |
Name of the country for where the subscriber is located. |
|
String |
The ISO country code for the subscriber’s location. |
|
String[] |
The list of MCCs for this prefix. |
|
boolean |
Is true if and only if this prefix represents a home network. |
|
boolean |
Is true if and only if this prefix represents a visited network. |
The prefix address list to use is now determined as follows:
-
If an MCC was found and the profile field
useMCCSpecificAddressListTables
is set tofalse
:-
The feature will first attempt to use the default prefix address list named
DEFAULT
. -
If the default list could not be found, the feature attempts to use the prefix address list for the
visited-network-id
.
-
-
If an MCC was found and the profile field
useMCCSpecificAddressListTables
is set totrue
:-
The feature will first attempt to use the prefix address list for the specific MCC.
-
If the prefix address list for the MCC could not be found, the feature attempts to use the prefix address list for the
visited-network-id
.
-
-
If an MCC could not be found:
-
The feature will use the prefix address list for the
visited-network-id
.
-
If no prefix address list is found, the feature will respond to the sentinel-core with featureFailedToExecute
, and end.
Determine international and international-exHC status
If the original number did not include a + prefix and the profile field nonInternationalFormatDNIsNational
is set to true, then the feature determines that the number is national, regardless of the MNC and MCC. Both the international
and internationalExHC
session state fields are set to false.
The DetermineInternationalAndRoamingStatus
feature does a longest-prefix search of the prefix address list with the address string (extracted in step #1).
If a match is found, then the address starts with a prefix of significance within the scope of the MCC or visited network. The feature can set the International
session state field in two ways:
-
If an MCC has been determined for the served user and there is a list of MCCs present in the prefix address list entry then 'International' is set to 'true' if the served user MCC is not present in the address list entry.
-
If either MCC could not be found then 'International' is set to
not networkPrefixListEntry.isVisitedNetwork()
.
The internationalExHC
session state field is set to International and not networkPrefixListEntry.isHomeNetwork()
.
If a prefix address list match is not found, then it must be an international call; so the feature sets the International
session state field to true
and the internationalExHC
session state field to true
.
Using MCC specific prefix address lists
The DetermineInternationalAndRoamingStatus
feature uses a single prefix address list named DEFAULT
unless useMCCSpecificAddressListTables
is configured as true
in the feature’s profile.
MCC specific prefix address list tables may be needed for more advanced scenarios where different MCCs are desired to not be treated as international.
Determine roaming status
The home network ids define the home network for the subscriber.
If the feature finds a non-empty MCC for the visited network, it compares that value with the home MCCs using the PLMN ID Analyser Component.
If it is not a home MCC the feature sets the RoamingStatus to INTERNATIONAL
and the RoamingIndicator
session state field is set to true
.
If they are equal and the PLMN ID is a home PLMN ID, the feature sets the RoamingStatus to NOT_ROAMING
and the RoamingIndicator
session state field is set to false
.
If they are equal and the visited MNC is not present in the home MNCs, the feature sets the RoamingStatus to NATIONAL
and the RoamingIndicator
session state field is set to false
.
If no MCC is present then the feature does the roaming analysis based on the ISO Country Code.
If the ISO country code is equal to the configured home network ISO country code, the feature sets the RoamingStatus to NOT_ROAMING
and the RoamingIndicator
session state field is set to false
.
If they are not equal the feature sets the RoamingStatus to INTERNATIONAL
and the RoamingIndicator
session state field is set to true
.
If no ISO country code is present then the feature does the roaming analysis based on the visited-network-id
.
If the visited-network-id
is a member of the set of home network ids, the feature sets the RoamingStatus to NOT_ROAMING
and the RoamingIndicator
session state field is set to false
.
If the visited-network-id
is not a member of the set of home network ids, the feature sets the RoamingStatus to INTERNATIONAL
and the RoamingIndicator
session state field is set to true
.
If neither the visited MCC nor the visited network are present, the feature sets the RoamingStatus to UNKNOWN
.
OC-Roaming-Status Header
Setting the Header
If the feature is running on a terminating MMTel instance, and CAP charging is enabled, it will attempt to add an OC-Roaming-Status
header to the outbound request.
The value of the header will be set to match the value of RoamingStatus
.
Using the Header
When the feature is invoked, it will check for an OC-Roaming-Status
header on the inbound request.
If the header is found, the feature will forgo the usual process for determining the roaming status.
Instead, the value of the header will be used to set the RoamingStatus
field, and if the value is INTERNATIONAL
the RoamingIndicator
field will be set to true
.
The international status of the call will not be determined if the header is found, as it should only be present for the SCC AS, which does not need the international status.
If the header is absent the feature will go through the usual roaming and international determination procedure as described above.
Session state inputs and outputs
Inputs
Name | Type | Format | Description | Behaviour if null/invalid |
---|---|---|---|---|
SentinelSelectionKey |
com.opencloud. sentinel.common.SentinelSelectionKey |
selection key (for example, |
For selecting configuration data |
Report featureCannotStart, featureHasFinished if the network operator field is not set. |
CallType |
com.opencloud.sentinel.common.CallType |
One of: |
Session type of this call |
Report |
IMSDefaultPublicID |
java.lang.String |
tel URL or SIP URI |
the |
Increment statistic |
ImsInformation. ImsVisitedNetworkIdentifier |
java.lang.String |
recommended format is
|
The visited network id extracted from the Invite request or from the registration data by the Diameter Leg Info feature |
Try to extract from the triggered request |
PaniMccsMncs |
List<MccMnc> |
MCC and MNC as String |
A list of MCCs and MNCs extracted from the P-Access-Network-Info header from the request or from the registration data by the Extract Network Info Feature |
Try to extract from the session state PvniMccMnc |
PvniMccMnc |
com.opencloud.sentinel.common.MccMnc |
MCC and MNC as String |
A list of MCC and MNC extracted from P-Visited-Network-Id header from the request or from the registration data by the Extract Network Info feature |
Try to use the ISO country code |
IsoCountryCode |
java.lang.String |
Two-letter ISO country code |
An ISO country code determined by the Extract Network Info or Determine Location From MSRN feature. |
Try to use |
ChargeMode |
com.opencloud.volte.sentinel.common.sessionstate.types.ChargeMode |
ChargeMode enum value |
Used to determine whether a OC-Roaming-Status header should be included on the outbound message. |
Header will not be included. |
Outputs
Name | Type | Format | Description |
---|---|---|---|
International |
boolean |
true or false |
the international condition as defined by 3GPP 24.611 |
InternationalExHC |
boolean |
true or false |
the international-exHC condition as defined by 3GPP 24.611 |
RoamingIndicator |
boolean |
true or false |
true, if the subscriber is roaming |
RoamingStatus |
enum |
|
|
Error scenarios
These scenarios trigger the following reports.
Scenario | Report |
---|---|
|
|
|
|
No Called Party Leg available from the |
|
Cannot determine a digit String to analyse in originating case |
|
Cannot determine a digit String to analyse in terminating case |
|
There is no prefix address list for a |
|
No registration data found for |
|
Registration data fetched for |
|
Statistics
DetermineInternationalAndRoamingStatus 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 → DetermineInternationalAndRoamingStatus
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=volte.sentinel.sip,vendor=OpenCloud,version=3.1.0].SbbID[name=volte.sentinel.sip,vendor=OpenCloud,version=3.1.0].feature.DetermineInternationalAndRoamingStatus"
Parameter | Type | Description |
---|---|---|
Started |
Counter |
Incremented each time the feature runs |
FailedToStart |
Counter |
Incremented when a fatal error occurs before feature execution |
IssuedWarning |
Counter |
Incremented when a non-fatal error occurs during feature execution |
FailedDuringExecution |
Counter |
Incremented when a fatal error occurs during feature execution |
TimedOut |
Counter |
Incremented when feature execution does not complete within a reasonable time frame |
VisitedNetworkHeaderFound |
Counter |
Incremented when the requestURI identity is in RegistrationRecords list of public identities. |
AccessNetworkMccFound |
Counter |
Incremented when the mobile-Country-Code is found in the P-Access-Network-Info header. |
DeterminedInternationalUsingAccessNetworkMcc |
Counter |
Incremented when the MCC prefix address list is used to determine whether the call is international. |
DeterminedInternationalUsingVisitedNetworkId |
Counter |
Incremented when the visited-network-id prefix address list is used to determine whether the call is international. |
CouldNotGetPVisitedNetworkID |
Counter |
Incremented when no visited network ID information could be found. |
HomeNetworkIdSetForNetworkOperatorIsEmpty |
Counter |
Incremented when the Sentinel SIP configuration for the network operator has an empty |
InternationalRoaming |
Counter |
Incremented when the feature determines that the served user is roaming in a foreign country. |
NationalRoaming |
Counter |
Incremented when the feature determines that the served user is roaming in their home country. |
NotRoaming |
Counter |
Incremented when the feature determines that the served user is on their home network. |
UnknownRoaming |
Counter |
Incremented when the feature is unable to determine the served user’s roaming status. |
AddressNotMinimumLength |
Counter |
Incremented when destination address is less than the configured minimum length |
AddressOnBlackList |
Counter |
Incremented when destination address matches an entry in the |
StatusDeterminedFromHeader |
Counter |
Incremented when the roaming status is determined from a OC-Roaming-Status header on the incoming request. |
NoActionRequired |
Counter |
Incremented when the feature determines that it does not need to do anything for the current invocation. |