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:

  • corresponds to a telephone number, i.e. a SIP URI with a “user” URI parameter set to “phone” or a tel URI; and

  • does not point to a destination served by a network within the country where the originating user is located when initiating the call.

international-exHC: This condition for international barring, excluding the home country, evaluates to true when the request URI of the outgoing SIP request:

  • corresponds to a telephone number, i.e. a SIP URI with a “user” URI parameter set to “phone” or a tel URI;

  • does not point to a destination served by a network within the country where the originating user is located when initiating the call; and

  • does not point to a destination served within the served users home network.

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:

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.0.0;3.0.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

EndCallIfNoVisitedNetwork

Boolean

Decide if the feature will end the call if no Visited Network can be determined.

ForceUserEqualsPhone

Boolean

Explicitly add user=phone parameter and value to SIP URI during inspection.

MinLength

int

The minimum length of address that will be checked.

NonInternationalFormatDNIsNational

Boolean

Whether non international format DNs, i.e. with no leading "+", should always be treated as national.

UseMCCSpecificAddressListTables

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 and To address.

  • If the session is terminating, then it checks the P-Asserted-Identity address, the From address, and the Referred-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 in DetermineInternationalAndRoamingStatusConfigProfileTable

  • 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 the DetermineInternationalAndRoamingStatus_AddressListConfigurationTable profile. The installer adds the DEFAULT entry, and an entry for the home network MCC. Furthermore, there is an address list of prefixes stored in the DetermineInternationalAndRoamingStatus_AddressListEntryTable for both DEFAULT and each MCC or visited network stored in the DetermineInternationalAndRoamingStatus_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

Description

String

Address

String

The prefix address this address list entry is for — a sequence of characters matching: 0 … 9, a … f, A … F, #, *, .

ListId

String

The list id is a string that identifies the address list this entry belongs to. It has the following form: <selectionkey>:<schemaName>:<listname>

CountryName

String

Name of the country for where the subscriber is located.

ISOCountryCode

String

The ISO country code for the subscriber’s location.

MCCs

String[]

The list of MCCs for this prefix.

HomeNetwork

boolean

Is true if and only if this prefix represents a home network.

VisitedNetwork

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 to false:

    1. The feature will first attempt to use the default prefix address list named DEFAULT.

    2. 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 to true:

    1. The feature will first attempt to use the prefix address list for the specific MCC.

    2. 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:

    1. 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, <platform>:<network>:::)

For selecting configuration data

Report featureCannotStart, featureHasFinished if the network operator field is not set.

CallType

com.opencloud.sentinel.common.CallType

One of: MobileOriginating, MobileTerminating, MobileForwarded, NetworkInitiated, EmergencyCall

Session type of this call

Report featureCannotStart, featureHasFinished

IMSDefaultPublicID

java.lang.String

tel URL or SIP URI

the default-public-id (set by IMSIDLookup)

Increment statistic SubscriberNotLoggedIn and report featureHasFinished

ImsInformation. ImsVisitedNetworkIdentifier

java.lang.String

recommended format is epc.ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org according to IR65

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 visited-network-id

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

NOT_ROAMING, NATIONAL, INTERNATIONAL, UNKNOWN

  • NOT_ROAMING if served user is in home network.

  • NATIONAL if served user is in home country but not in the home mobile network.

  • INTERNATIONAL if served user is not in his home country.

  • UNKNOWN if there were not enough information to assert roaming.

Error scenarios

These scenarios trigger the following reports.

Scenario Report

Sessionstate SentinelSelectionKey network operator field is not set

featureCannotStart

Sessionstate CallType is null

featureCannotStart

No Called Party Leg available from the LegManager

featureCannotStart

Cannot determine a digit String to analyse in originating case

featureIssuedWarning

Cannot determine a digit String to analyse in terminating case

featureIssuedWarning

There is no prefix address list for a visited-network-id

featureFailedToExecute

No registration data found for default-public-id

featureFailedToExecute

Registration data fetched for default-public-id indicates this id is not a default-public-id

featureFailedToExecute

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.0.0].SbbID[name=volte.sentinel.sip,vendor=OpenCloud,version=3.0.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 home-network-id set (the feature cannot determine if the subscriber is roaming).

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 SkipDIRSAddressList

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.

Previous page Next page
Sentinel VoLTE Version 3.0.0