The CapLocationHeaders feature adds proprietary SIP headers to outbound INVITE requests to allow CAP charging of the session.
The OC-Charging-GT header contains the location of the subscriber to allow roaming to be correctly charged.
The OC-IM-TDP header contains the location of the SCP that the IM-SSF should send charging requests to.
The OC-Replication-Information header contains instructions on how the IM-SSF should handle session tracking and replication.
The OC-VLR-Number header contains the VLR number of the subscriber.
The OC-MCC and OC-MNC headers contain the MCC and MNC of the subscriber. These headers are optional and only injected if CapChargingConfigProfile.GenerateCellGlobalIdWithMccMnc is set to true.
Feature cheat sheet
Feature Script Name |
CapLocationHeaders |
|---|---|
MMTel or SCC |
Both |
Call-Type |
Orig or Term |
Session Plan |
mmtel-orig, scc-tads-only |
Execution Points |
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 |
Network Operator Data
The CapLocationHeaders feature depends on configuration in the CapChargingConfigProfileTable to specify how to generate the OC-Charging-GT header.
It also reads the RefreshPeriod in the SessionRefresh configuration profile table to determine the refresh period to include on the OC-Replication-Information header when replication is enabled.
CapChargingConfigProfileTable
Configuration is stored on a profile table called CapChargingConfigProfileTable.
Data is scoped according to a Sentinel selection key.
| Attribute Name | Type | Default | Description |
|---|---|---|---|
ChargingGTFormatString |
String |
null |
The format template to use when creating Charging GTs. It must be a digit string except for tokens ('{iso}', '{mcc}', '{mnc}') which are substituted in. |
UnknownLocationChargingGT |
String |
null |
The Charging GT to use when one could not be generated because the user’s location could not be determined. |
OnlyChargeTerminatingCallsIfInternationalRoaming |
boolean |
false |
When true, terminating calls will only be charged if the served user is roaming outside of their home country. |
GenerateCellGlobalIdWithMccMnc |
boolean |
false |
When true, the feature will add the |
UnknownMcc |
String |
null |
The MCC to use when the subscriber’s MCC is unknown (only in conjunction with |
UnknownMnc |
String |
null |
The MNC to use when the subscriber’s MNC is unknown (only in conjunction with |
UseDetailedLocationInfo |
boolean |
false |
When true, the feature will add an |
ImsiSources |
ImsiSource[] |
|
A list of potential sources of the subscriber’s IMSI which will be included in an |
Session Input Variables
| Variable name | Type | Comments |
|---|---|---|
ChargeMode |
Enum |
The feature will only run if the charge mode is |
SentinelSelectionKey |
SentinelSelectionKey |
Affects which profiles are loaded from each configuration table. |
CallType |
Enum |
Affects whether CAP headers are added and what values are used for them. |
RoamingStatus |
Enum |
If the call is terminating and not roaming, no headers are added. |
VLRNumber |
AddressString |
If the call is CS terminating then the VLRNumber is used for the |
VMSCAddress |
AddressString |
If the call is CS terminating and there is no VLRNumber available then the VMSCAddress is used for the |
OcImTdpHeader |
String |
The value to use for the |
IsoCountryCode |
String |
The ISO country code that the subscriber is registered with. It is used for formatting the |
PaniMccsMncs |
List<MccMnc> |
The MCCs and MNCs that the subscriber is registered with. Used when populating the |
SessionUACLegReplicationTrigger |
Enum |
Used to determine if replication should be indicated as enabled on the |
SessionUASLegReplicationTrigger |
Enum |
Used to determine if replication should be indicated as enabled on the |
DiscoveredAccessNetworkInformation |
String |
Used as a potential source for the value of the |
PaniLocations |
List<LocationID> |
Used as a potential source for the value of the |
Statistics
CapLocationHeaders statistics are tracked by the sentinel.volte.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → sentinel.volte.sip service → sentinel.volte.sip SBB → feature → CapLocationHeaders
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=sentinel.volte.sip,vendor=OpenCloud,version=4.1].SbbID[name=sentinel.volte.sip,vendor=OpenCloud,version=4.1].feature.CapLocationHeaders"
Statistic |
Type |
Description |
Started |
Counter |
Incremented when the feature is invoked. |
FailedToStart |
Counter |
Incremented when Sentinel VoLTE encounters an error while attempting to start the feature. |
IssuedWarning |
Counter |
Incremented when a non-fatal problem is encountered and the feature issues a warning. |
FailedDuringExecution |
Counter |
Incremented when a fatal problem is encountered and the feature cannot execute correctly. |
TimedOut |
Counter |
Incremented when the feature takes too long to complete and Sentinel VoLTE aborts execution. |
CapLocationHeadersNotRequired |
Counter |
Incremented when the feature determines that no CAP location headers need to be added. |
UsedVlrNumber |
Counter |
Incremented when the VLR number is used for the |
UsedVmscNumber |
Counter |
Incremented when the VMSC address is used for the |
NoVlrOrVmscNumberFound |
Counter |
Incremented when no VLR number and no VMSC address could be found. |
UsedGeneratedChargingGT |
Counter |
Incremented when a generated Charging GT is used for the |
UsedUnknownLocationChargingGT |
Counter |
Incremented when the unknown location Charging GT is used for the |
SetOCIMTDP |
Counter |
Incremented when an |
SetOCChargingGT |
Counter |
Incremented when an |
SetOCReplicationInformation |
Counter |
Incremented when an |
SetOCVLRNumber |
Counter |
Incremented when an |
Installation
CapLocationHeaders is a GSM-only feature and as such will only be deployed if GSM mode is selected in the installer.
Behaviour
The behaviour varies depending on whether the call is terminating or not.
Originating Behaviour
The feature attempts to generate a Charging GT using the ChargingGTFormatString and sets the OC-Charging-GT with this. If this fails, the feature uses the UnknownLocationChargingGT for the OC-Charging-GT header.
The feature sets the OC-IM-TDP header to the value stored in session state by the FetchIMCSI feature.
The feature sets the OC-Replication-Information, OC-Location-Information, and OC-IMSI headers as described below in the Other Headers section.
Terminating Behaviour
If the subscriber is not roaming, the feature will check the OnlyChargeTerminatingCallsIfInternationalRoaming configuration value to determine whether it should do anything.
If the call is forked, then the following occurs for each outgoing forked leg.
If the outgoing leg is CS then the feature attempts to set the OC-Charging-GT to the VLR Number retrieved by FetchMSRN.
If there is no VLR Number in session state, the feature attempts to set the OC-Charging-GT to the VMSC address.
If that is not present in session state either then the header will not be set.
If the outgoing leg is PS then the feature attempts to generate a Charging GT using the ChargingGTFormatString and sets the OC-Charging-GT with this. If this fails, the feature uses the UnknownLocationChargingGT for the OC-Charging-GT header. Additionally, in the PS case, the feature sets the OC-VLR-Number header to the VLR Number retrieved by FetchMSRN.
The feature sets the OC-IM-TDP header to the value stored in session state by the FetchIMCSI feature.
The feature sets the OC-Replication-Information as described below in the Replication Information section.
Generating Charging GTs
The feature uses the CAP Charging Component to generate Charging GTs based on location data.
OC-Roaming-Status Header
The feature reads the proprietary OC-Roaming-Status header from the inbound INVITE on the calling party leg as a potential fallback source for the following data when it is not otherwise available in session state:
-
VLR Number
-
MSC Number
-
MCC
-
MNC
Other Populated Headers
Replication Information
The feature includes an OC-Replication-Information header on the request towards the IM-SSF, which indicates whether replication behaviour is required.
The header value is determined based on the values of the SessionUASLegReplicationTrigger and SessionUACLegReplicationTrigger session input fields.
If either of the fields indicates DISABLED then the header value will be set to disabled, otherwise it will be set to enabled.
When the header value is set to enabled, a refreshPeriod parameter will be added as well.
This parameter is used to determine the TTL value the IM-SSF should use for session ownership records when doing session tracking.
It is set equal to the value of the RefreshPeriod field in the SessionRefresh configuration profile table.
IMSI
The feature will include an OC-IMSI header on the request towards the IM-SSF if it is able to find an IMSI for the subscriber from one of the configured sources.
Sources are set in the ImsiSources config field, which has a list of any of the following, in order of most to least preferred source:
| Config Value | Description |
|---|---|
IMPI |
IMSI is derived from the user-part of the subscriber’s IMS private identity (IMPI) obtained from third-party registration data. |
MAP_SRI |
The IMSI is extracted from an SRI MAP response from the HLR. Note that configuring this will not trigger an SRI request on its own. The FetchMSRN feature can be used to generate the request. |
COMPANION_DEVICE_PROVISIONING |
The IMSI is obtained directly from data provisioned for a companion device in the Metaswitch-TAS-Services transparent data document. This only applies on terminating routes to a companion device. |
GENERATE |
This triggers a special instruction for the IM-SSF to generate a synthetic IMSI from the MCC, MNC, and MSISDN for the subscriber. This is the default behaviour and will always succeed, so it must be the last option when included in the config field list. |
None of the above sources (except GENERATE) are guaranteed to have a usable IMSI value for every call.
If the feature is unable to find an IMSI from any of the configured sources,
the ultimate result is that no IMSI will be included in the IDP towards the charging SCP.
Location Information
If the UseDetailedLocationInfo field is set to true, the feature will attempt to include an OC-Location-Information header with the most detailed location information available.
The location information will include some combination of the MCC, MNC, area ID, and/or a cell ID, with the specifics of the area and cell IDs depending on the access network technology used.
There are many possible sources of this information:
-
Access network information derived from a
P-Access-Network-Info,P-Cellular-Network-Info, orCellular-Network-Infoon the inbound request, or the third-party registration data. This is obtained by the ExtractNetworkInfo feature. This is the preferred source for originating calls, and for terminating calls towards the PS network. -
Access network information derived from the
OC-Term-P-Access-Network-Infoheader, which is a custom header the upstream Sentinel instances can include on the inbound request. This is the preferred source for terminating calls towards the CS network. This header can be populated by the SCCCamelToIMSReOriginationSIP and DetermineRoamingFromHlr features. -
Location information provided directly to the feature through the
DiscoveredAccessNetworkInformationsession input field. This field may be populated by the DetermineRoamingFromHlr feature when running on the same Sentinel instance as this feature.
When this header is present, the IM-SSF will attempt to encode the information into the appropriate location information field in the IDP sent to the charging SCP.
