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
- 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 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
- 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
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 |
Both |
Any |
Yes |
No |
Stateless |
POJO |
Prerequisite features
Sentinel-SIP:
-
SIP Determine Network Operator
-
SND:Determine Call Type Feature
-
SIP Extract Network Info
-
SIP Normalization (recommended)
VoLTE:
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/2.8.0;2.8.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. |
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.
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 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.
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 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
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 an MCC present in the prefix address list entry then 'International' is set to 'true' if the MCCs are different.
-
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 false
.
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 SIP Sentinel SipSentinelConfiguration
profile (scoped on the Sentinel selection key) defines the home Mobile Country Code (MCC), the Mobile Network Codes (MNCs) and the home network ids for the network operator.
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 MCC present in the SipSentinelConfiguration
profile.
If they are different the feature sets the RoamingStatus to INTERNATIONAL
and the RoamingIndicator
session state field is set to true
.
If they are equal and the visited MNC is present in the home MNCs, 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 visited-network-id
.
If the visited-network-id
is not 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 true
.
If neither the visited MCC nor the visited network are present, the feature sets the RoamingStatus to UNKNOWN
.
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 |
Use the |
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=2.8.0].SbbID[name=volte.sentinel.sip,vendor=OpenCloud,version=2.8.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 |