Notices

Copyright © 2014-2021 Metaswitch Networks. All rights reserved

This manual is issued on a controlled basis to a specific person on the understanding that no part of the Metaswitch Networks product code or documentation (including this manual) will be copied or distributed without prior agreement in writing from Metaswitch Networks.

Metaswitch Networks reserves the right to, without notice, modify or revise all or part of this document and/or change product features or specifications and shall not be responsible for any loss, cost, or damage, including consequential damage, caused by reliance on these materials.

Metaswitch and the Metaswitch logo are trademarks of Metaswitch Networks. Other brands and products referenced herein are the trademarks or registered trademarks of their respective holders.

Where to start

Welcome to the Configuration and Management guide for the Rhino VoLTE TAS, Metaswitch’s carrier-class VoLTE Telephony Application Server (VoLTE TAS) product.

This page will guide you through the process of getting a freshly installed Rhino VoLTE TAS up and running in your network. If this is your first time setting up a Rhino VoLTE TAS, we recommend following the steps laid out below in order.

.1. Familiarize yourself with how configuration works in the Rhino VoLTE TAS

Before getting into configuring the system, you should make sure you are familiar with how configuration in the Rhino VoLTE TAS works, and how to modify the configuration files. Read through Declarative configuration to learn about this.

While using this guide, if you come across a particular field or section in the configuration and you want to find more detailed information about it, click the link on its name in the text. This takes you to its entry in the RVT declarative configuration reference included in this guide.

.2. Set up the Rhino VoLTE TAS platform

The first step is to configure the identity of the platform and the identity of the virtual machines (VM) and VM pools for each node type, and in some cases set up user access and integration between nodes of the system.

Read through The platform for details.

.3. Set up integration with other network systems

The next step is to get the Rhino VoLTE TAS talking to other nodes in the network. Instructions for doing this for each relevant node are in Integration with other systems. Exactly which systems that need to be configured will be specific to your network and requirements.

.4. Set up charging

The next thing to do is set up the charging systems you want to use. There are several different systems for doing charging, including online and offline charging systems. This is also the place where Call Data Record (CDR) generation is configured. Exactly which systems you choose to use will depend on your particular network. See Charging for a description of each system and how to configure it.

.5. Set up home network information

Next, you need to get the Rhino VoLTE TAS up to speed with the details of your network.

This means configuring:

  • how phone numbers should be normalized

  • country codes

  • handling of international and roaming calls

  • reserved URIs and phone numbers.

See Home networks and roaming for instructions.

.6. Set up SCC services

By this point the Rhino VoLTE TAS should be ready to process a basic LTE call. The next step is to get the service centralization and continuity (SCC) services up and running. They are responsible for providing interoperability between the GSM/CDMA and LTE networks.

There are three services that you may need to configure:

  1. T-ADS, which selects whether a called subscriber will receive the call over the GSM/CDMA or the LTE (or a Wi-Fi) network.

  2. Access transfer, which keeps calls up and running when a subscriber leaves LTE coverage.

  3. Reorigination, which allows a subscriber to access and use their VoLTE services while outside of LTE coverage.

.7. Set up MMTel services

The final step for configuring call processing is to get the MultiMedia Telephony (MMTel) services set up. These services provide a variety of ways for operators and subscribers to control calls. Some of the services provided are defined by the 3GPP; others are unique to the Rhino VoLTE TAS.

Not all networks will use all of the available services. So look through the following list and go to the linked page for each service required in your network.

The available MMTel services are:

  1. Announcements, which plays announcements to subscribers. Details of all possible announcements that can be played to subscribers must be configured here. Other services count on this configuration to nominate announcements to be played at various times.

  2. Call failure announcements, which selects which announcements to play under various call failure conditions.

  3. PSAP callback, which provides special handling for return calls from emergency services to a subscriber.

  4. Dial plan enforcement, which checks the number dialed by a subscriber to ensure it is valid for the network before permitting a call.

  5. Privacy, which controls whether or not each subscriber in a call can see the other’s identity. It covers the functionality for the 3GPP defined Originating Identity Restriction (OIR), Originating Identity Presentation (OIP), Terminating Identity Restriction (TIR), and Terminating Identity Presentation (TIP) services.

  6. Conferencing, which enables calls with more than two participants. It covers the functionality for the 3GPP defined Conference (CONF) service.

  7. Call barring, which blocks incoming and/or outgoing calls for a subscriber according to set rules. It covers the functionality for the 3GPP defined Outgoing Call Barring (OCB), Incoming Call Barring (ICB), and Anonymous Call Rejection (ACR) services. It provides support for both subscriber and operator defined barring rules.

  8. Communication waiting, which notifies a subscriber when they have an incoming call while they are already on another call, and gives them a chance to answer it. It covers the functionality for the 3GPP defined Communication Waiting (CW) service.

  9. Communication hold, which manages announcements and media stream bandwidth when a call is put on hold. It covers the functionality for the 3GPP defined Communication Hold (HOLD) service.

  10. Communications diversion, which forwards calls to new destinations according to rules set by or for a called subscriber. It covers the functionality for the 3GPP defined Communications Diversion (CDIV) service.

  11. Voicemail forwarding, which forwards an incoming call to a subscriber’s nominated voicemail server.

  12. Companion device, which provides features supporting LTE connected devices besides a subscriber’s main phone (e.g. smart watches).

  13. Vertical service codes, which enables the creation of phone numbers and number prefixes/suffixes that invoke services in the network.

  14. Location based dialing, which allows for phone numbers that direct to different places depending on a subscriber’s location.

  15. Explicit communication transfer, which allows a subscriber to transfer a call to someone else. It covers the functionality for the 3GPP defined Explicit Communication Transfer (ECT) service.

  16. Flexible alerting, which allows a single phone number to be used for multiple people or devices. It covers the functionality for the 3GPP defined Flexible Alerting (FA) service.

  17. Session transfer to own device, which allows a subscriber to transfer a call from their current device to a different one without creating a new call.

.8. Set up XCAP

XCAP is an interface used to manage subscriber specific configuration. The Rhino VoLTE TAS incorporates an XCAP server which can be used by both the operator and subscriber to manage subscriber specific configuration data in the HSS. See RVT XCAP for details of how to set this up.

You will also need to set up the authentication gateway so that XCAP requests can be verified. See RVT Authentication Gateway for details.

.9. Set up the IP-SM-GW

Depending on your particular installation, the Rhino VoLTE TAS may include an IP-SM-GW (Internet Protocol Short Message Gateway). The purpose of the IP-SM-GW is to allow SMS messages to cross between GSM and LTE networks. See RVT IP Short Message Gateway (IP-SM-GW) for information about configuring the IP-SM-GW.

Declarative configuration

This section describes how to configure the Rhino VoLTE TAS - that is, the processes of making and applying configuration changes.

It is not intended as a full checklist of the steps to take during an upgrade or full installation - for example, business level change-control processes are not discussed.

The configuration process is based on modifying configuration files, which are validated and sent to a central configuration data store (CDS) using the rvtconfig tool. The nodes in the Rhino VoLTE TAS will poll the CDS, and will pull down and apply any changes.

declarative config how to

Initial setup

The initial configuration process starts with the example YAML files distributed alongside the Rhino VoLTE TAS, as described in Example configuration YAML files.

Note Metaswitch strongly recommends that the configuration files are stored in a version control system (VCS). A VCS allows version control, rollback, traceability, and reliable storage of the system’s configuration.

If a VCS is not a viable option for you, it is still required and your responsibility every time a change is needed to take backups of the configuration before making any changes. In this case, the recommended approach is to store the full set of configuration files in a reliable cloud storage system (e.g. OneDrive) and to keep the backups in different folders named with a progressive number and a timestamp of the backup date (e.g. v1-20210310T1301).

The rest of the guide is written assuming a VCS is being used to manage the configuration files.

Initially, add the full set of example YAMLs into your VCS as a baseline, alongside the solution definition files (SDFs) described in the RVT VM install guides. You should store all files (including the SDFs for all nodes) in a single directory yamls with no subdirectories.

Making changes

The first step to changing the system configuration is to edit the configuration files, making the desired changes (as described in this guide). You can do this on any machine using a text editor (one with YAML support is recommended). After you have made the changes, they should be recorded to the VCS.

Validating the changes

On the SIMPL VM, as the admin user, change to the directory /home/admin/. Check out (or copy) your yamls directory to this location, as /home/admin/yamls/.

Note If network access allows, it is recommended to retrieve the files directly from the VCS into this directory, rather than copying them. Having a direct VCS connection means that changes made at this point in the process are more likely to be committed back into the VCS, a critical part of maintaining the match between live and stored configuration.

At this point, use the rvtconfig tool to validate the configuration used for all relevant nodes.

Note For more information on the rvtconfig tool, see rvtconfig reference.

The relevant nodes depend on which configuration files have been changed. To determine the mapping between configuration files and nodes, consult Example configuration YAML files in the install guide for:

The rvtconfig tool is delivered as part of the VM image CSAR file, and unpacked into /home/admin/.local/share/csar/<csar name>/<version>/resources/rvtconfig.

Important It is important that the rvtconfig binary used to validate a node’s configuration is from a matching release. That is, if the change is being made to a mag node which is at version x.y.z-p1, the rvtconfig binary must be from a version x.y.z CSAR.

For example, assume a change has been made to the home-network-config.yaml file in a CDMA network. This would require reconfiguration of the smo, mmt-cdma and mag nodes, with all nodes at version 4.0.0. To validate this change, use the following commands from the /home/admin/ directory.

./.local/share/csar/mmt-cdma/4.0.0/resources/rvtconfig validate -t mmt-cdma -i ./yamls
./.local/share/csar/smo/4.0.0/resources/rvtconfig validate -t smo -i ./yamls
./.local/share/csar/mag/4.0.0/resources/rvtconfig validate -t mag -i ./yamls

If any of the nodes fail validation, update the files to fix the errors as reported, and record the changes in your VCS.

Uploading the changes

Once the file is validated, record the local changes in your VCS.

Next, use the rvtconfig upload-config command to upload the changes to the CDS. As described in Uploading configuration to CDS with upload-config, the upload-config command requires a number of command line arguments.

The full syntax to use for this use case is:

rvtconfig upload-config -c <cds-ip-addresses> -t <node type> -i <config-path> --vm-version <vm_version>

where:

  • <cds-ip-addresses> is the signaling IP address of a TSN node

  • <deployment-id> can be found in the relevant SDF

  • <node type> is the node being configured, as described above

  • <config-path> is the path of the directory containing the YAML and SDFs

  • <vm_version> is the version string of the node being configured

As with validation, the rvtconfig executable must match the version of software being configured. Take the example of a change to the home-network-config.yaml as above, on a CDMA network with nodes at version 4.0.0, a deployment ID of prod, and a CDS at IP 192.0.0.1. In this environment the configuration could be uploaded with the following commands (from /home/admin/:

./.local/share/csar/mmt-cdma/4.0.0/resources/rvtconfig upload-config -c 192.0.0.1 -t mmt-cdma -i ./yamls --vm-version 4.0.0
./.local/share/csar/smo/4.0.0/resources/rvtconfig upload-config -c 192.0.0.1 -t smo -i ./yamls --version--vm-version 4.0.0
./.local/share/csar/mag/4.0.0/resources/rvtconfig upload-config -c 192.0.0.1 -t mag -i ./yamls --vm-version 4.0.0

Verifying the changes

Once the upload is completed, the software on the VMs will apply the configuration from the CDS. You can verify this by monitoring the system logs on the relevant nodes.

rvtconfig reference

Overview

To apply an update to the Rhino VoLTE TAS’s declarative configuration, the rvtconfig tool is used. rvtconfig applies configuration to the Rhino VoLTE TAS’s configuration data store (CDS). The CDS distributes this configuration to the Rhino VoLTE TAS’s VMs. The rvtconfig tool is provided on the VMs that the RVT runs on and the SIMPL VM.

For further information on configuring the RVT’s virtual machines, refer to the RVT VM Install Guide (CDMA) and the RVT VM Install Guide (GSM).

rvtconfig tool

Configuration YAML files can be validated and uploaded to the CDS using the rvtconfig tool. The rvtconfig tool can be run either on the SIMPL VM or any RVT VM.

On the SIMPL VM, you can find the command in the resources subdirectory of any RVT (tsn, shcm, mag, mmt-gsm, mmt-cdma or smo) CSAR, after it has been extracted using csar unpack.

/home/admin/.local/share/csar/<csar name>/<version>/resources/rvtconfig

On any RVT VM, the rvtconfig tool is in the PATH for the sentinel user and can be run directly by running:

rvtconfig <command>

The available rvtconfig commands are:

  • rvtconfig validate validates the configuration, even before booting any VMs by using the SIMPL VM.

  • rvtconfig upload-config validates, encrypts, and uploads the configuration to the CDS.

  • rvtconfig delete-deployment deletes a deployment from the CDS.

    Note Only use this when advised to do so by a Customer Care Representative.
  • rvtconfig delete-node-type-version deletes state and configuration for a specified version of a given node type from the CDS.

    Note This should only be used when there are no VMs of that version deployed.
  • rvtconfig delete-node-type-all-versions deletes state and configuration for all versions of a given node type from the CDS.

    Note Only use this after deleting all VMs for a given node type.
  • rvtconfig delete-node-type-retain-version deletes state and configuration for a given node type from the CDS, except for the specified version.

  • rvtconfig list-config displays a summary of the configurations stored in the CDS.

  • rvtconfig dump-config dumps the current configuration from the CDS.

  • rvtconfig print-leader-seed prints the current leader seed as stored in the CDS.

  • rvtconfig generate-private-key generates a new private key for use in the SDF.

  • rvtconfig enter-maintenance-window disables VMs' scheduled tasks for a period of time.

  • rvtconfig leave-maintenance-window re-enables VMs' scheduled tasks.

  • rvtconfig calculate-maintenance-window calculates the required length of a maintenance window for rolling upgrades.

  • rvtconfig maintenance-window-status displays a message indicating whether there is an maintenance window period reserved or not.

  • rvtconfig export-log-history exports the quiesce log history from the CDS.

  • rvtconfig initconf-log retrieves initconf.log file from the specified remote RVT node.

  • rvtconfig describe-versions prints the current values of the versions of the VM found in the config and in the SDF.

  • rvtconfig compare-config compares currently uploaded config with a given set of configuration.

  • rvtconfig backup-cds creates a backup of the CDS database in tar format and retrieves it.

  • rvtconfig restore-cds uses CDS database backup taken with backup-cds to restore the CDS database to a previous state.

  • rvtconfig set-desired-running-state sets DesiredRunningState to stopped/started in MDM.

    • If --state Started or no --state is specified, all initconf processes of non-TSN VMs will pause their configuration loops.

    • If --state Stopped is specified, all initconf processes of non-TSN VMs will resume their configuration loops.

  • rvtconfig cassandra-status prints the cassandra database status of all the specified CDS IP addresses.

Common arguments

Commands that read or modify CDS state take a --cds-address parameter (which is also aliased as --cds-addresses, --cassandra-contact-point, --cassandra-contact-points, or simply -c). For this parameter, specify the management address(es) of at least one machine hosting the CDS database. Separate multiple addresses with a space, for example --cds-address 1.2.3.4 1.2.3.5.

The upload-config and export-audit-history commands read UNRESOLVABLE BXREF: sdf-secrets[secrets] from QSG. If you have not yet uploaded secrets to QSG, you can specify a --secrets-file <file> argument, passing in the path to your secrets file (the YAML file which you pass to csar secrets add). QSG is only available on the SIMPL VM; if running rvtconfig on a platform other than the SIMPL VM, for example on the VM itself, then you must pass the --secrets-file argument.

Commands that read or modify CDS state may also require additional parameters if the CDS endpoints are configured to use authentication as per UNRESOLVABLE BXREF: cassandra-security[Cassandra security configuration]. If the CDS endpoints are configured to use authentication, you must pass the --cds-username argument with your configured password and either the --cds-password or --cds-password-secret-name argument with the configured password or its ID in the secrets file.

The various delete-node-type commands, and the report-group-status command, require an SSH private key to access the VMs. You can specify this key as either a path to the private key file with the --ssh-key argument, or as a secret ID with the --ssh-key-secret-id argument. If you are running rvtconfig on the SIMPL VM, the recommended approach is to use the secret ID of the SIMPL VM-specific private key that you specified in the SDF (see UNRESOLVABLE BXREF: solution-service-group#simpl-vm-ssh-private-key[SIMPL VM SSH private key] ). Otherwise, use the SSH private key file itself (copying it to the machine on which you are running rvtconfig, and deleting it once you have finished, if necessary).

For more information, run rvtconfig --help. You can also view help about a particular command using, for example, rvtconfig upload-config --help.

rvtconfig limitations

The following limitations apply when running rvtconfig on the SIMPL VM:

  1. All files and directories mentioned in parameter values and the secrets file must reside within the root (/) filesystem of the SIMPL VM. A good way to ensure this is the case is to store files only in directories under /home/admin.

  2. rvtconfig assumes files specified without paths are located in the current directory. If multiple directories are involved, it is recommended to use absolute paths everywhere. (Relative paths can be used, but may not use .. to navigate out of the current directory.)


Verifying and uploading configuration

  1. Create a directory to hold the configuration YAML files.

    mkdir yamls
  2. Ensure the directory contains the following:

    • configuration YAML files

    • the Solution Definition File (SDF)

    • Rhino license for nodes running Rhino.

Note Do not create any subdirectories. Ensure the file names match the example YAML files.
Verifying configuration with validate

To validate configuration, run the command:

rvtconfig validate -t <node type> -i ~/yamls

where <node type> is the node type you want to verify, which can be tsn, shcm, mag, mmt-gsm, mmt-cdma or smo. If there are any errors, fix them, move the fixed files to the yamls directory, and then re-run the above rvtconfig validate command on the yamls directory.

Once the files pass validation, store the YAML files in the CDS using the rvtconfig upload-config command.

Tip

If using the SIMPL VM, the rvtconfig validate command can be run before any of the other VMs are booted. We recommend that you validate all configuration before any of the VMs are booted.

Uploading configuration to the CDS with upload-config

To upload the YAML files to the CDS, run the command:

rvtconfig upload-config [--secrets-file <file>] -c <tsn-mgmt-addresses> -t <node type> -i ~/yamls
[(--vm-version-source [this-vm | this-rvtconfig | sdf-version] | --vm-version <vm_version>)] [--reload-resource-adaptors]

Note

The <tsn-mgmt-addresses> value can either be any single TSN management IP address or a space-separated list of TSN management IP addresses.

If you would like to specify a version, you can use:

  • --vm-version to specify the exact version of the VM to target (as configuration can differ across a VM upgrade).

  • --vm-version-source to automatically derive the VM version from the given source. Failure to determine the version will result in an error.

    • Use this-rvtconfig when running the rvtconfig tool included in the CSAR for the target VM, to extract the version information packaged into rvtconfig.

    • Use this-vm if running the rvtconfig tool directly on the VM being configured, to extract the version information from the VM.

    • Option sdf-version extracts the version value written in the SDF for the given node.

If --vm-version and --vm-version-source are omitted, then the version in the SDF will be compared to the this-rvtconfig or this-vm version (whichever is appropriate given how the rvtconfig command is run). If they match, this value will be used. Otherwise, the command will fail.

Note

Whatever way you enter the version, the value obtained must match the version in the SDF. Otherwise, the upload will fail.

Any YAML configuration values which are specified as secrets are marked as such in the YAML files' comments. These values will be encrypted using the generated private-key created by rvtconfig generate-private-key and prior to uploading the SDF. In other words, the secrets should be entered in plain text in the SDF, and the upload-config command takes care of encrypting them. Currently this applies to the following:

  • Rhino users' passwords

  • REM users' passwords

  • SSH keys for accessing the VM

  • the SNMPv3 authentication key and privacy key

Tip

Use the rvtconfig describe-versions command to view the exact version values provided by this-vm, this-rvtconfig, and sdf-version.

If the CDS is not yet available, this will retry every 30 seconds for up to 15 minutes. As a large Cassandra cluster can take up to one hour to form, this means the command could time out if run before the cluster is fully formed. If the command still fails after several attempts over an hour, troubleshoot Cassandra on the machines hosting the CDS database.

This command first compares the configuration files currently uploaded for the target version with those in the input directory. It summarizes which files are different, how many lines differ, and if there are any configuration changes that are unsupported (for example, changing the VMs' IP addresses). If there are any unsupported configuration changes, the config will not be uploaded. Follow the instructions in the error message(s) to revert unsupported changes in the configuration, then try again.

If the changes are valid, but any files are different, rvtconfig will prompt the user to confirm the differences are as expected before continuing with the upload. If the upload is canceled, and --output-dir is specified, then full details of any files with differences will be put into the given output directory, which rvtconfig creates if it doesn’t already exist.

Changes to secrets and non-YAML files cannot be detected due to encryption; they will not appear in the summary or detailed output. Any such changes will still be uploaded.

You can disable this pre-upload check on config differences using the --skip-diff flag (also aliased as -f).

Comparing existing configuration in the CDS with compare-config

Compare the configuration in an input directory with the currently uploaded configuration in the CDS using the command:

rvtconfig compare-config -c <cds-mgmt-addresses> -t <node type> -i ~/yamls --output-dir <output-directory>
[--deployment-id <deployment ID>] [--site-id <site ID>] [(--vm-version-source [this-vm | this-rvtconfig | sdf-version] | --vm-version <vm_version>)]

This will compare the currently uploaded configuration in the CDS with the configuration in the local input directory.

The deployment ID, site ID, and version of configuration to look up in CDS will be automatically taken from the SDF. These can be overridden by using the --deployment-id, --site-id, and one of the --vm-version-source or --vm-version parameters respectively. For example, you can specify --vm-version <downlevel version> to check what has changed just before running an upgrade, where the version in the input SDF will be the uplevel version.

The files that have differences will be displayed, along with the number of different lines, and any errors or warnings about the changes themselves. Any errors will need to be corrected before you can run rvtconfig upload-config.

The command puts the full contents of each version of these files into the output directory, along with separate files showing the differences found. The command ignores non-YAML files and any secrets in YAML files. The files in this output directory use the suffix .local for a redacted version of the input file, .live for a redacted version of the live file, and .diff for a file showing the differences between the two.

Note The contents of the files in the output directory are reordered and no longer have comments; these won’t match the formatting of the original input files, but contain the same information.

Deleting configuration from the CDS with delete-deployment

Delete all deployment configuration from the CDS by running the command:

rvtconfig delete-deployment -c <tsn-mgmt-addresses> -d <deployment-id> [--delete-audit-history]

Warning Only use this when advised to do so by a Customer Care Representative.
Warning Only use this after deleting all VMs of the deployment within the specified site. Functionality of all nodes of this type and version within the given site will be lost. These nodes will have to be deployed again to restore functionality.

Deleting state and configuration for a specific node type and version from the CDS with delete-node-type-version

Delete all state and configuration for a given node type and version from the CDS by running the command:

rvtconfig delete-node-type-version -c <tsn-mgmt-addresses> -d <deployment-id> --site-id <site-id> --node-type <node type>
(--vm-version-source [this-vm | this-rvtconfig | sdf-version -i ~/yamls] | --vm-version <vm_version>) (--ssh-key SSH_KEY | --ssh-key-secret-id SSH_KEY_SECRET_ID) [-y]

Note The argument -i ~/yamls is only needed if sdf-version is used.
Warning Only use this after deleting all VMs of this node type and version within the specified site. Functionality of all nodes of this type and version within the given site will be lost. These nodes will have to be deployed again to restore functionality.

Deleting all state and configuration for a specific node type from the CDS with delete-node-type-all-versions

Delete all state and configuration for a given node type from the CDS by running the command:

rvtconfig delete-node-type-all-versions -c <tsn-mgmt-addresses> -d <deployment-id> --site-id <site-id>
--node-type <node type> (--ssh-key SSH_KEY | --ssh-key-secret-id SSH_KEY_SECRET_ID) [--delete-certificates] [-y]

Warning Only use this after deleting all VMs of this node type within the specified site. Functionality of all nodes of this type within the given site will be lost. These nodes will have to be deployed again to restore functionality.
Warning The --delete-certificates option should only be used when advised by a Customer Care Representative.

Deleting historical state and configuration for a given node type from the CDS with delete-node-type-retain-version

Remove all state and configuration relating to a versions of the node type other than the specified version from CDS by running the command:

rvtconfig delete-node-type-retain-version -c <tsn-mgmt-addresses> -d <deployment-id> --site-id <site-id> --node-type <node-type>
(--vm-version-source [this-vm | this-rvtconfig | sdf-version -i ~/yamls] | --vm-version <vm_version>) (--ssh-key SSH_KEY | --ssh-key-secret-id SSH_KEY_SECRET_ID) [-y]

Note The argument -i ~/yamls is only needed if sdf-version is used.
Warning The version specified in this command must be the only running VM version for this node type. i.e. do not use during an upgrade or rollback when multiple versions of the same node type may be running. All state and configuration relating to other versions will be deleted from CDS.

Removing unused Rhino-generated keyspaces

Following an upgrade or rollback, you may wish to clean up keyspaces in the Cassandra ramdisk database from version(s) that are no longer in use. This conserves memory and disk space.

To clean up unused keyspaces, use the following command:

rvtconfig remove-unused-keyspaces -c <tsn-mgmt-addresses> -d <deployment-id> -g <group-id> [-y]

Note Group ID syntax: RVT-<node type>.<site ID>
Example: RVT-tsn.DC1
Here, <node type> can be tsn, shcm, mag, mmt-gsm, mmt-cdma or smo.

Confirm that the active VM versions that the command identifies are correct. rvtconfig removes keyspaces relating to all other versions from Cassandra.

Listing configurations available in the CDS with list-config

List all currently available configurations in the CDS by running the command:

rvtconfig list-config -c <tsn-mgmt-addresses> -d <deployment-id>

This command will print a short summary of the configurations uploaded, the VM version they are uploaded for, and which VMs are commissioned in that version.

Retrieving configuration from the CDS with dump-config

Retrieve the VM group configuration from the CDS by running the command:

rvtconfig dump-config -c <tsn-mgmt-addresses> -d <deployment-id> --group-id <group-id>
(--vm-version-source [this-vm | this-rvtconfig | sdf-version -i ~/yamls -t <node type>] | --vm-version <vm_version> | -i ~/yamls -t <node type>) [--output-dir <output-dir>]

Note Group ID syntax: RVT-<node type>.<site ID>
Example: RVT-tsn.DC1
Here, <node type> can be tsn, shcm, mag, mmt-gsm, mmt-cdma or smo.

If the optional --output-dir <directory> argument is specified, then the configuration will be dumped as individual files in the given directory. The directory can be expressed as either an absolute or relative path. It will be created if it doesn’t exist.

If the --output-dir argument is omitted, then the configuration is printed to the terminal.

If the version is not specified, then the version in the SDF will be compared to the this-rvtconfig or this-vm version (whichever is appropriate given how the rvtconfig command is run). If they match, this value will be used. Otherwise, the command will fail.

Note The arguments -i ~/yamls and -t <node type> are only needed if sdf-version is used or --vm-version and --vm-version-source are both omitted.

Displaying the current leader seed with print-leader-seed

Display the current leader seed by running the command:

rvtconfig print-leader-seed -c <tsn-mgmt-addresses> -d <deployment-id> --group-id <group-id>
(--vm-version-source [this-vm | this-rvtconfig | sdf-version -i ~/yamls -t <node type>] | --vm-version <vm_version> | -i ~/yamls -t <node type>)

Note Group ID syntax: RVT-<node type>.<site ID>
Example: RVT-tsn.DC1
Here, <node type> can be tsn, shcm, mag, mmt-gsm, mmt-cdma or smo.

The command will display the current leader seed for the specified deployment, group, and VM version. If the version is not specified, then the version in the SDF will be compared to the this-rvtconfig or this-vm version (whichever is appropriate given how the rvtconfig command is run). If they match, this value will be used. Otherwise, the command will fail. A leader seed may not always exist, in which case the output will include No leader seed found. Conditions where a leader seed may not exist include:

  • No deployment exists with the specified deployment, group, and VM version.

  • A deployment exists, but initconf has not yet initialized.

  • A deployment exists, but the previous leader seed has quiesced and a new leader seed has not yet been selected.

Note The arguments -i ~/yamls and -t <node type> are only needed if sdf-version is used or --vm-version and --vm-version-source are both omitted.

Generating a secrets-private-key for Encrypting Secrets with generate-private-key

Some configuration, for example Rhino or REM users' passwords, are configured in plaintext, but stored encrypted in CDS for security. rvtconfig automatically performs this encryption using a secrets private key which you configure in the SDF. This key must be a Fernet key, in Base64 format. Use the following rvtconfig command to generate a suitable secrets private key:

rvtconfig generate-private-key

Add the generated secrets private key to your secrets input file when UNRESOLVABLE BXREF: sdf-secrets#adding-secrets[adding secrets to QSG].

Maintenance window support

The rvtconfig enter-maintenance-window and rvtconfig leave-maintenance-window commands allow you to pause and resume UNRESOLVABLE BXREF: scheduled-tasks[scheduled tasks] (Rhino restarts, SBB/activity cleanup, and Cassandra repair) on the VMs for a period of time. This is useful to avoid the scheduled tasks interfering with maintenance window activities, such as patching a VM or making substantial configuration changes.

To start a maintenance window, use

rvtconfig enter-maintenance-window -c <tsn-mgmt-addresses> -d <deployment-id> -S <site-id> [--hours <hours>]

  • The <site-id> is in the form DC1 to DC32. It can be found in the SDF.

  • The number of hours defaults to 6 if not specified, and must be between 1 and 24 hours.

Once started, the maintenance window can be extended by running the same command again (but not shortened). rvtconfig will display the end time of the maintenance window in the command output. Until this time, all scheduled tasks on all VMs in the specified site will not be run.

Warning

Any scheduled tasks which are in progress at the time the maintenance window is started will continue until they are finished. If the maintenance window is starting around the time of a scheduled task as configured in the YAML files, it is advisable to manually check that the task is complete before starting maintenance (or run the rvtconfig enter-maintenance-window command in advance of the scheduled task time).

When the maintenance window is complete, use the following command:

rvtconfig leave-maintenance-window -c <tsn-mgmt-addresses> -d <deployment-id> -S <site-id>

Scheduled tasks will now resume as per their configured schedules.

To check whether or not a maintenance window is currently active, use the following command:

rvtconfig maintenance-window-status -c <tsn-mgmt-addresses> -d <deployment-id> -S <site-id>

Calculating the required length of a maintenance window with calculate-maintenance-window

The rvtconfig calculate-maintenance-window commands allows you to estimate how long an upgrade or rollback is expected to take, so that an adequate maintenance window can be scheduled.

To calculate the recommended maintenance window duration, use

rvtconfig calculate-maintenance-window -i ~/yamls -t <node type> -s <site-id> [--index-range <index range>]

  • The <site-id> is in the form DC1 to DC32. It can be found in the SDF.

  • If --index-range is not specified, a maintenance window for upgrading all VMs will be calculated. If only some VMs are to be upgraded, specify the --index-range argument exactly as it will be specified for the csar update command to be used to upgrade the subset of VMs. For example, if only nodes with indices 0, 3, 4 and 5 are to be upgraded, the argument is --index-range 0,3-5.

Retrieving VM logs with export-log-history

During upgrade, when a downlevel VM is removed, it uploads Initconf, Rhino and SGC logs to the CDS. The log files are stored as encrypted data in the CDS. They are automatically removed from the CDS after 28 days.

Note Only the portions of the logs written during quiesce are stored.

Retrieve the VM logs for a deployment from the CDS by running the command:

rvtconfig export-log-history -c <tsn-mgmt-addresses> -d <deployment-id> --zip-destination-dir <directory>
--secrets-private-key-id <secrets-private-key-id>

Note The --secrets-private-key-id must match the ID used in the SDF (secrets-private-key-id).
Note The Initconf, Rhino and SGC logs are exported in unencrypted zip files. The zip file names will consist of VM hostname, version, and type of log.

Viewing the values associated with the special sdf-version, this-vm, and this-rvtconfig versions with describe-versions

Some commands, upload-config for example, can be used with the special version values sdf-version, this-vm, and this-rvtconfig.

  • Calling sdf-version extracts the version from the value given in the SDF for a given node.

  • The this-vm option takes the version of the VM the command is being run from. This can only be used when the commands are run on a node VM.

  • Using this-rvtconfig extracts the version from the rvtconfig found in the directory the command is being run from. This can only be used on a SIMPL VM.

To view the real version strings associated with each of these special values:

rvtconfig describe-versions [-i ~/yamls]

Optional argument -i ~/yamls is required for the sdf-version value to be given. If it is called, the sdf-version will be found for each node type in the SDF. If a node type is expected but not printed this may be because the config yaml files for that node are invalid or not present in the ~/yamls directory.

If a special version value cannot be found, for example if this-vm is run on a SIMPL VM or the optional argument is not called, the describe-versions command will print N/A for that special version.

Reporting group status, to help guide VM recovery

This command reports the status of each node in the given group, providing information to help inform which approach to take when recovering VMs.

It connects to each of the VMs in the group via SSH, as well as querying the CDS service. It then prints a detailed summary of status information for each VM, as well as a high level summary of the status of the group.

It does not log its output to a file. When using this command to aid in recovery operations, it’s good practice to redirect its output to a file locally on disk, which can then be used as part of any root cause analysis efforts afterwards.

On the SIMPL VM, run the command as follows, under the resources dir of the unpacked CSAR:

./rvtconfig report-group-status -c <cds-mgmt-addresses> -d <deployment-id> \
  --g <group-id> --ssh-key-secret-id <simpl-private-key-id>
Note Group ID syntax: RVT-<node type>.<site ID>
Example: RVT-tsn.DC1
Here, <node type> can be tsn, shcm, mag, mmt-gsm, mmt-cdma or smo.

Gathering diagnostics and initconf log files

It is possible to obtain diagnostic files from RVT nodes with the command rvtconfig gather-diags. These diagnostic files include system files and solution configuration files, are packaged as a tar.gz file and deposited in the given output directory. Depending on the node type there will be different kinds of solution configuration files. These files can be crucial to troubleshoot problems on the VMs.

./rvtconfig gather-diags --sdf <SDF File> -t <node type> --ssh-key-secret-id <SSH key secret ID> --ssh-username sentinel --output-dir <output-directory>

If you need to quickly check the initconf.log file from a certain VM or VMs, it is possible to do it with the command rvtconfig initconf-log. This command executes a tail on the initconf.log file of the specified VM or VMs and dumps it to the standard output.

rvtconfig initconf-log --ssh-key-secret-id <SSH key secret ID> --ssh-username sentinel --ip-addresses <Space separated VM IP address list> --tail <num lines>

Operate the TSN Cassandra Database

The command rvtconfig cassandra-status prints the cassandra database status for the specified CDS IP addresses. Here is a example:

  • ./rvtconfig cassandra-status --ssh-key-secret-id <SSH key secret ID> --ip-addresses <TSN Address 1> <TSN Address 2> …​

CDS Backup and Restore operations.

From RVT 4.1-3-1.0.0, the TSNs' CDS database can be backed up and restored. This provides a faster recovery procedure in case TSN upgrades go wrong.

To backup the CDS of a running TSN cluster, run ./rvtconfig backup-cds --sdf /home/admin/uplevel-config/sdf-rvt.yaml --site-id <site ID> --output-dir <backup-cds-bundle-dir> --ssh-key-secret-id <SSH key secret ID> -c <CDS address> <CDS auth args>

To restore the CDS of a running TSN cluster, run ./rvtconfig restore-cds --sdf /home/admin/uplevel-config/sdf-rvt.yaml --site-id <site ID> --snapshot-file <backup-cds-bundle-dir>/tsn_cassandra_backup.tar --ssh-key-secret-id <SSH key secret ID> -c <CDS Address> <CDS auth args>

Warning Only use restore-cds when advised to do so by a Customer Care Representative.

Control initconf configuration loop in non-TSN nodes.

During maintenance windows which involve upgrading TSN nodes, the command rvtconfig set-desired-running-state allows you stop/start the configuration tasks performed by the initconf that read from the CDS database in all non-TSN VMs. This operation does not stop the non-TSN VMs or the initconf process within it. But it instructs the initconf to pause or resume, the configuration tasks, while operating normally under traffic.

To pause initconf configuration tasks of all non-TSN VMs, run ./rvtconfig set-desired-running-state --sdf /home/admin/uplevel-config/sdf-rvt.yaml --site-id <site ID> --state Stopped.

To resume initconf configuration tasks of all non-TSN VMs, run ./rvtconfig set-desired-running-state --sdf /home/admin/uplevel-config/sdf-rvt.yaml --site-id <site ID> --state Started.

RVT system configuration

The platform

Set the platform operator name

Within common-config.yaml, in the common section, set your platform operator name:

  platform-operator-name: Metaswitch

Configure session replication

Session replication allows established calls to continue if the node that previously processed the call becomes unavailable.

Within either sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config, in the sentinel-volte section, set session-replication-enabled

      session-replication-enabled: true

If enabling on a system where session replication was previously disabled, please contact Metaswitch support.

Review the SIP session settings

Within either sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config, in the session-refresh section, check that these values are appropriate and change if necessary.

    # Configuration for the Session Refresh feature.
    session-refresh:
        # The interval of the periodic timer (in seconds).
        timer-interval-seconds: 30

        # Period of no activity for leg tp refresh (in seconds).
        refresh-period-seconds: 570

        # Whether the session should be refreshed using UPDATE requests,
        # as long as the endpoint allows UPDATE requests.
        refresh-with-update-if-allowed: true

        # Maximum allowed duration of a call (in seconds).
        max-call-duration-seconds: 86400

Configuring integration within the system

For each node type deployed, you need to configure the names of the cluster and individual virtual machines using data from the node type’s site definition files (SDF) which were created as part of the VM Install process. In some cases you also need to configure user access and node specific integration parameters.

Parameters

This table cross references the node types and which parameters need configuring.

Parameter

Applicable node types

MAG

MMT GSM

MMT CDMA

SHCM

TSN

SMO

deployment-id

site-id

node-type-suffix

cassandra-contact-points

additional-rhino-jvm-options

rhino-auth

rem-auth

xcap-domains

Per node parameters

vm-id

rhino-node-id

scheduled-rhino-restarts

per-node-diameter-rf

per-node-diameter-ro

diameter-zh-origin-host

diameter-sh-origin-host

sip-local-uri

deployment-id and site-id

deployment-id and site-id must be set to match the parameters of the same name in the SDFs created as part of the VM Installation process.

node-type-suffix

Leave the node-type-suffix blank unless directed otherwise by Metaswitch support.

cassandra-contact-points

Leave the cassandra-contact-points blank unless directed otherwise by Metaswitch support.

additional-rhino-jvm-options

Leave the additional-rhino-jvm-options blank unless directed otherwise by Metaswitch support.

rhino-auth and rem-auth

Some node types have lists of rhino-auth and/or rem-auth authentication data. These are used to access rhino and rem respectively. See the appropriate reference for details.

Per node parameters

These parameters are in a list called virtual-machines, with one entry per VM.

vm-id

The vm-id values under virtual-machines must be the same as the name values under instances in the SDF.

rhino-node-id

For nodes supporting a Rhino cluster, specify the node-id for the Rhino rhino-node-id on each VM.

scheduled-rhino-restarts

For nodes that run Rhino, you can optionally specify that Rhino should be automatically restarted on a regular schedule. This can be useful if you observe resource leaks (memory, file handles, activities, and so on) in Rhino which require a restart to clean up the leftover resources.

The available options for scheduled restarts are daily, weekly, or monthly schedules. The following shows example configuration for each:

# a daily schedule
scheduled-rhino-restarts:
    time-of-day: "02:00"

# or, a weekly schedule
scheduled-rhino-restarts:
    time-of-day: "02:00"
    day-of-week: "Wednesday"

# or, a monthly schedule
scheduled-rhino-restarts:
    time-of-day: "02:00"
    day-of-month: 9
Note
  • day-of-week takes a full English weekday name (Sunday through to Saturday).

  • day-of-month takes a value between 1 and 28.

  • time-of-day must be specified in the 24-hour clock, with leading zeros, in the VMs' timezone.

  • Be sure to quote the time-of-day value, since it is a string value but is misinterpreted as a number by rvtconfig validation if quotes are not used.

  • All VMs of a particular type must have restarts enabled, or all must have them disabled. Likewise, they must all use the same schedule type (daily, weekly or monthly).

  • It is not permitted to schedule two VMs of the same type to restart at the same time, or within 30 minutes of each other. This is to ensure that at most one node is down at a time, and hence the cluster remains at full capacity at all times (production deployments should be sized to have at least one redundant node in the cluster).

  • Rhino will be restarted at the scheduled time regardless of whether or not it is running. If you plan to carry out maintenance involving stopping Rhino at the time of the restart, consider temporarily reconfiguring the VM to disable restarts, and re-enabling restarts again after the maintenance is complete.

To disable automatic Rhino restarts, omit the scheduled-rhino-restarts section from the configuration. By default, restarts are disabled.

per-node-diameter-rf and per-node-diameter-ro

To set the origin-host value for Diameter Rf per-node-diameter-rf and Diameter Ro per-node-diameter-ro protocols, see Charging.

diameter-zh-origin-host

To set the origin-host value for Diameter Zh protocol diameter-zh-origin-host, see Diameter Zh interface.

diameter-sh-origin-host

To set the origin-host value for Diameter diameter-sh-origin-host Sh protocol, see Diameter Sh interface.

sip-local-uri

Set a per node local URI sip-local-uri to use for SIP: protocol.

Integration with other systems

The Rhino VoLTE TAS requires integration with several other services in an IMS network to utilize its full capability. This section discusses the several configuration options to integrate Rhino VoLTE TAS operations with other parts of the network. You will usually find the information required in your network design/topology document.

In this section

What it does

Integration of the Rhino VoLTE TAS to your network involves editing interface specific addresses and values for the relevant Rhino VoLTE TAS YAML configurations that are being used. For example, a VoLTE network with GSM networking support will require configuration changes to the sentinel-volte-gsm-config.yaml file. If there is an interface that is left unused by the network, it can be disabled by deleting or commenting out the specific interface’s section.

Further information on how to specify and edit configuration YAML files is specified in the guide on how to use the declarative configuration system. In addition, there are further options available beyond system integration, such as tuning message timeouts, in the configuration reference guide.

Important The example configurations in this section use valid, but placeholder, values that will not work with your network. You will need to replace the values according to your network setup.

I-CSCF integration

The Rhino VoLTE TAS requires access to the I-CSCF (Interrogating Call Session Control Function) to integrate into the IMS network.

What you need

  • ❏ The network’s I-CSCF URI address.

Setting up the I-CSCF interface

The configuration for the I-CSCF to Rhino VoLTE TAS interface is in the icscf-config.yaml file.

In the icscf section, configure the i-cscf-uri value. The example configuration given here indicates input for what is needed for integrating the Rhino VoLTE TAS with the network’s I-CSCF.

icscf-config.yaml
icscf:

  # The URI of the Interrogating Call Session Control Function.
  # For MMT, the Conf and ECT features will automatically add an "lr" parameter to it.
  # The hostname part should either be a resolvable name or the IP address of the I-CSCF.
  i-cscf-uri: sip:icscf@icscfhost.example:5060

ATCF integration

The Rhino VoLTE TAS requires integration with the ATCF (Access Transfer Control Function) in the IMS network for SCC AS functionality.

What you need

  • ❏ A Session Transfer Number for SRVCC (STN-SR) to allocate to the SCC AS.

Setting up the ATCF interface

The configuration for the ATCF to Rhino VoLTE TAS interface is in the sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml file.

In the service-continuity section, configure the stn-sr values. The example configuration given here indicates input for what is needed for integrating the Rhino VoLTE TAS with the network’s ATCF.

sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml
sentinel-volte:

    scc:

        # Service continuity configuration.
        service-continuity:

            # STN-SR.
            stn-sr: "6421999999"

SS7 integration

To communicate with the SS7 protocols in a network, you need to set up the SS7 signaling gateway client (SGC).

Integration with the Rhino VoLTE TAS and IN interfaces requires an SCCP address assigned to it.

Setting up the SS7 SGC

The SS7 SGC in the Rhino VoLTE TAS provides support for communicating with the SS7 protocols in a network. The configuration for it is located in the sgc-config.yaml file.

If the SGC is being reconfigured after its initial configuration has been applied, you need to follow the steps in Reconfiguring the SGC before applying the new configuration.

M3UA interface configuration

The SGC uses the M3UA (MTP Level 3 User Adaptation Layer) interface for handling networking between the Rhino VoLTE TAS and the network’s SS7 signaling.

General configuration

This configuration determines what the SGC’s attributes are for SS7 signaling. This will be what systems outside of the Rhino VoLTE TAS require to direct SS7 signaling towards the SGC.

What you need

The following must be defined in the configuration:

  • ❏ The local-port M3UA endpoint used for SS7 signaling.

  • ❏ The sccp-variant used by the SGC. Either ITU or ANSI.

  • ❏ The Rhino VoLTE TAS’s local point-code.

The following may be defined in the configuration:

  • ❏ The value for the national indicator to use for SCMG (SCCP management) messages.

    • This would override the defaults of INTERNATIONAL for ITU-T SCCP, and NATIONAL for ANSI SCCP.

  • ❏ The value for the M3UA network-indicator field.

    • This would override the default of INTERNATIONAL

Example configuration

The example configuration given in the snippet below sets the SGC in the Rhino VoLTE TAS to:

  • Have the SGC’s local endpoint port at 2905

  • Use the ITU variant for SCCP addresses

  • Have a local point code of 5

  • The default national indicator for ITU-T SCCP messages is used — which is INTERNATIONAL

  • The default network-indicator field is used, which is INTERNATIONAL.

sgc-config.yaml
deployment-config:sgc:
  m3ua:
    local-port: 2905
    sccp-variant: ITU
    point-code: "5"
Note The supported format of the point code depends on the sccp-variant. Contact Metaswitch support for further details if you would like to use these other forms.
If sccp-variant is…​ format of point-code is…​ Example

ANSI

- separated triplets, network-cluster-member format

0-0-5

ITU

simple numeric, quoted

"5"

Remote peer configuration

For details on how to configure remote peers in the Rhino VoLTE TAS, see SGC M3UA remote peer addresses.

Global title translation configuration

For details on how to configure global title translation in the Rhino VoLTE TAS, see SGC M3UA global title translation.

SGC properties

The Rhino VoLTE TAS supports further configuration of the SGC via the sgc-properties field. This field offers additional configuration of the SGC beyond the given declarative configuration.

For further configuration of the SGC, contact Metaswitch support for more details.

sgc-config.yaml
deployment-config:sgc:
  sgc-properties:

Hazelcast

The Rhino VoLTE TAS supports using Hazelcast for communication in the cluster of subsystems in the SS7 SGC stack. The declarative configuration in the hazelcast section allows for:

  • the number of backup instances in the cluster to be defined.

Warning Unless specified by Metaswitch support, the backup-count must be left unspecified. If incorrectly set, the cluster can experience data loss. The Rhino VoLTE TAS’s VMs will default to a valid and working backup-count.
  • an optional password for the Hazelcast subsystem.

Note The password will be automatically encrypted using the secrets-private-key configured in the site definition file (SDF).
sgc-config.yaml
deployment-config:sgc:
  hazelcast:
    backup-count:
    password:

For further configuration of using Hazelcast in the SGC, contact Metaswitch support for more details.

sgcenv

The declarative configuration supports configuring the port for which the internal sgc CLI in the SMO nodes is binded to. This is set in the jmx-port field.

sgc-config.yaml
deployment-config:sgc:
  sgcenv:
    jmx-port: 55555

What you need

  • ❏ An SS7 point code for the site.

  • ❏ A unique SCCP address to be the originating address for IN signalling for the Rhino VoLTE TAS.

Setting up for IN interfaces

The configuration for the IN signaling to the Rhino VoLTE TAS is in the sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml file.

In the service-centralisation section, configure the inbound-ss7-address value. The example configuration given here indicates input for what is needed for integrating the Rhino VoLTE TAS with the SS7 network.

sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml
sentinel-volte:

    # Service Centralisation configuration.
    service-centralisation:

      # The SCCP address of the Sentinel VoLTE AS.
      inbound-ss7-address: type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0,digits=123456
Warning If the inbound-ss7-address contains a pc= parameter, that parameter’s value must be the same as the point-code value in sgc-config.yaml. See General configuration.

The SS7 point code needs to be used consistently in other places.

  • In sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml file, if the inbound-ss7-address value contains a pc= parameter, that parameter’s value must be the same as the point-code value in sgc-config.yaml.

  • In sentinel-ipsmgw-config.yaml file, if the originating-address value contains a pc= parameter, that parameter’s value must be the same as the point-code value in sgc-config.yaml. For more details, see step 3 of IP-SM-GW Initial configuration.

Note Do not quote the point code in SCCP addresses, e.g. use pc=5, not pc="5". Quoting is only required when the point code is a standalone field value in a YAML configuration file.

There are also requirements for assigning SSNs correctly. Contact Metaswitch support for details.

SGC M3UA remote peer addresses

The Rhino VoLTE TAS SGC requires the configuration of the networking details of its remote peers. These remote peers host application servers (AS) that interact with the Rhino VoLTE TAS’s SS7 signaling.

What you need

  • ❏ The remote peer addresses that act as the signal transfer points (STP) in the network.

  • ❏ The AS(s) accessible via these remote peer addresses.

  • ❏ The AS destination point code(s) (DPC).

  • ❏ The subsystem number(s) (SSN) to monitor for each of the DPCs.

Remote peer configuration

The remote M3UA peer application servers in the network are designated in the peers section. Multiple remote peers to the Rhino VoLTE TAS’s SGC can be defined here.

What you need

For each remote M3UA AS peer, define the following:

  • ❏ A unique id for each remote peer.

  • ❏ The set of IPv4 addresses that belong to the server peer. This is defined in remote-ips.

  • ❏ Whether a specific SMO node or any SMO node in the Rhino VoLTE TAS should communicate with the peer’s set of IP addresses. This is defined in node-index.

  • ❏ At least one AS ID defined in as-id which is related to the remote peer. This is defined in application-servers.

Optional configuration may include:

  • ❏ The port for the remote peer.

  • ❏ Whether the SGC takes an active role in M3UA state maintenance or not with the peer. This is set in the state-maintenance-role field.

  • ❏ Whether the SGC connects to the remote peer (client mode) or waits for a connection from the remote peer (server mode). This is set in the conn-type field.

  • ❏ Whether the SGC is an IP server Process (IPSP) for the peer or not. This is set in the is-ipsp field.

  • ❏ Whether to define the asp-id to use in ASP-UP/DOWN messages.

  • ❏ For a specified AS as-id, whether to send Destination State Audit (DAUD) when the Application Server Process (ASP) goes active in this AS. This is set in the daud-on-asp-ac field.

Example configuration

In the following example snippet, two remote peers are configured.

They are both configured to:

  • the same port number of 2906

  • have no restriction on what SMO node in the Rhino VoLTE TAS they can communicate with

  • correspond to the same AS identifier that is defined in the application-servers example

  • each have their own distinct sets of IP addresses.

sgc-config.yaml
deployment-config:sgc:
  m3ua:
    remote:
      peers:
        - id: 'STP-1'
          remote-ips:
            - node-index: -1
              ips:
                - 10.14.144.71
                - 10.14.144.134
          port: 2906
          application-servers:
            - as-id: 'NN-AS'

        - id: 'STP-2'
          remote-ips:
            - node-index: -1
              ips:
                - 10.14.144.81
                - 10.14.144.144
          port: 2906
          application-servers:
            - as-id: 'NN-AS'

Defined application servers

The SGC interacts with known application server(s) for routing SS7 signaling. These ASs are accessible on the remote peer addresses configured in peers. The declarative configuration defines these ASs in the application-servers list.

What you need

For each M3UA AS hosted on these remote peers, define the following:

  • ❏ A unique id for each AS that the SGC interacts with. This value is only used by the declarative configuration and is not exposed externally.

  • ❏ A default-priority for any routes for the AS.

  • ❏ The list of dpc-ids that may be accessible from the AS. This includes for each DPC:

    • ❏ The internal unique identifier for the DPC — defined in id.

    • ❏ The priority for each DPC (this is optional and overrides the default priority).

Optional configuration may include:

  • ❏ Whether the AS would assume an active or passive traffic-maintenance-role.

  • ❏ Whether the AS has a routing-context.

  • ❏ Whether to not allow the AS to be become active until there is at least one connected TCAP for each specified SSN. This is accessed in the precond-ssns field.

Example configuration

In the following example snippet, the SGC is configured to communicate with one AS.

The AS connection is configured:

  • to have the 'NN-AS' identifier, connecting it with the two remote peers as configured the peers example

  • to have a default priority integer of '5' for routing

  • that the AS itself has a DPC alias 'alias-2-233-3' as managed by the configuration in dpcs.

sgc-config.yaml
deployment-config:sgc:
  m3ua:
    remote:
      application-servers:
        - id: 'NN-AS'
          routes:
            default-priority: 5
            dpc-ids:
              - id: 'alias-2-233-3'

Defined DPCs

The SGC interacts with known DPCs for routing SS7 signaling through application servers. Multiple DPCs can be defined in the dpcs section.

What you need

For each designated DPC in the network interacting with the SGC, we must define:

  • ❏ The dpc itself.

  • ❏ A unique identifier for the DPC which is used for the AS routing configuration in dpc-ids. This value is only used by the declarative configuration and is not exposed externally. This is defined in the id field.

Optional configuration may include the DPC’s:

  • network-appearance.

  • muss (Maximum unsegmented SCCP message size)

  • mss (Maximum user data length per segment)

  • ❏ preferred unitdata message type (pudt): either UDT or XUDT.

Example configuration

In the following example snippet, the SGC is configured to communicate with a remote DPC used by the AS.

SGC has the remote DPC configured to have:

  • an configuration specific identifier of the configured DPC 'alias-2-233-3' to connect to the AS configuration

  • an actual DPC code of 5963

  • a DPC MUSS of 252

  • a DPC MSS of 245.

Tip

For ITU variant, specify point codes as quoted integers, e.g. "5963".

For ANSI variant, specify point codes in network-cluster-member format, e.g 2-233-3.

sgc-config.yaml
deployment-config:sgc:
  m3ua:
    remote:
      dpcs:
        - id: 'alias-2-233-3'
          dpc: "5963"
          muss: 252
          mss: 245

Concerned point code notifications

The defined Concerned Point Codes (CPCs) are specified DPCs that are notified if a local SSN status changes. Multiple CPCs can be defined in the cpcs section.

What you need

For each designated CPC in the network which we want to configure, we must define:

  • ❏ A dpc to notify

  • ❏ The ssns to monitor for that DPC.

Example configuration

In the following example snippet, the SGC is configured to communicate with a remote CPC.

SGC has the remote CPC configured to have:

  • an actual DPC code of 5963

  • the SGC is to monitor the SSNs 8 and 146 for that DPC.

sgc-config.yaml
deployment-config:sgc:
  m3ua:
    remote:
      cpcs:
        - dpc: "5963"
          ssns:
            - 8
            - 146

Setting up SGC M3UA remote peer addresses

I want to …​

Connect any sized SGC cluster to a dual-homed dual-node STP cluster

There are two peer STP nodes to configure for the remote-peers.

An any sized SGC cluster connected to a dual-homed dual-node STP cluster
  • Add the set of IP addresses for each STP node to the ips list.

  • Ensure that any SGC instance can connect to the STP cluster by setting for each remote peer their node-index to -1.

  • Add the declarative configuration’s internal unique identifer of the STP AS to both remote peers' application-servers.

deployment-config:sgc:
  m3ua:
    remote:
      peers:
        - id: 'to-STP-1-node-1'
          remote-ips:
            # All SGCs have connections to this member of the STP pair.
            - node-index: -1
              ips:
                - 10.2.0.1
                - 10.3.0.1
          application-servers:
            # This STP is a member of AS 'STP-1'
            - as-id: 'STP-1'
        - id: 'to-STP-1-node-2'
          remote-ips:
            # All SGCs have connections to this member of the STP pair.
            - node-index: -1
              ips:
                - 10.2.0.2
                - 10.3.0.2
          application-servers:
            # This STP is a member of AS 'STP-1'
            - as-id: 'STP-1'

For configuring the STP cluster’s DPC, add:

  • The declarative configuration’s identifier for the STP’s DPC in the id field.

  • The actual DPC itself in the dpc field.

deployment-config:sgc:
  m3ua:
    remote:
      dpcs:
        - id: "DPC-2"
          dpc: "2"

There is one AS operating on the STP cluster to configure for.

For the AS’s route configuration, add:

  • The default-priority for routing messages.

  • The declarative configuration’s identifier for the STP’s DPC in the AS’s dpc-ids list.

deployment-config:sgc:
  m3ua:
    remote:
      peers:
      application-servers:
        - id: 'STP-1'
          routes:
              default-priority: 5
              dpc-ids:
                # The STP's own DPC.
                - id: 'DPC-2'
Connect an SGC cluster to two separate STPs that are connected to a remote peer used in load balancing mode

There are two peer STP nodes to configure for the remote-peers.

An SGC cluster connected to two separate STPs and via them a remote peer used for load balancing
  • Add the set of IP addresses for each STP node to the ips list.

  • Ensure that any SGC instance can connect to the STP cluster by setting for each remote peer their node-index to -1.

  • Add the declarative configuration’s internal unique identifer each STP’s AS to their respective remote peer configuration application-servers field.

deployment-config:sgc:
  m3ua:
    remote:
      peers:
        - id: 'to-STP1'
          remote-ips:
            # All SGCs have connections to this STP.
            - node-index: -1
              ips:
                - 10.2.0.1
                - 10.3.0.1
          application-servers:
            # This STP is a member of AS 'STP-1'
            - as-id: 'STP-1'
        - id: 'to-STP-1-node-2'
          remote-ips:
            # All SGCs have connections to this STP.
            - node-index: -1
              ips:
                - 10.4.0.1
                - 10.5.0.1
          application-servers:
            # This STP is a member of AS 'STP-2'
            - as-id: 'STP-2'

For configuring each STP’s DPC, add:

  • The declarative configuration’s identifier for each STP’s DPC in the id field.

  • The actual DPC itself in dpc field.

deployment-config:sgc:
  m3ua:
    remote:
      dpcs:
        - id: 'DPC-2'
          dpc: '2'
        - id: 'DPC-3'
          dpc: '3'
        - id: 'DPC-4'
          dpc: '4'

There are two application servers operating on the STP cluster to configure for.

For each AS’s route configuration, add:

  • The default-priority for routing messages.

  • The declarative configuration’s identifier for each STP’s DPC in the AS’s dpc-ids list.

deployment-config:sgc:
  m3ua:
    remote:
      application-servers:
        - id: 'STP-1'
          routes:
            default-priority: 5
            dpc-ids:
              # The STP's own DPC.
              - id: 'DPC-3'
              # Add further DPC IDs here if the SGC should send DAUD for them (accessed via this STP).
              - id: 'DPC-4'
        - id: 'STP-2'
          routes:
            default-priority: 5
            dpc-ids:
              # The STP's own DPC.
              - id: 'DPC-2'
              # Add further DPC IDs here if the SGC should send DAUD for them (accessed via this STP).
              - id: 'DPC-4'

SGC M3UA global title translation

The SGC translates global titles (GTs) in incoming and outgoing SCCP messages. The Rhino VoLTE TAS supports creating specialized rules for translating these inbound and outbound messages.

Inbound GT translation

The SGC determines how GT translation occurs for inbound SCCP messages. Multiple incoming called addresses can be configured for the SGC.

For where the incoming called address for an SCCP message is a GT, it is:

  • matched against the configuration to determine whether it should be processed, and

  • may then determine which SSN should receive it.

Configuration

The configuration for the inbound GT translation matching rules are in the inbound section.

For matching inbound called addresses, you may configure:

  • ❏ A unique id for the address for the configuration. This value is only used by the declarative configuration and is not exposed externally.

  • ❏ The called party address information to match on the inbound SCCP message digits. This is defined in the addrinfo field.

  • ❏ For matching the incoming address, whether to allow the address information to match on the prefix or have to match the entire address. This is set in the is-prefix field.

  • ❏ The SCCP message’s nature of address (natofaddr) code required for a match. The code is defined in the RFC 3868 Global Title Section.

  • ❏ The SCCP message’s numbering plan code (numplan) required for a match. The code is defined in the RFC 3868 Global Title Section.

  • ❏ The SCCP message’s translation type code (trtype) required for a match. The code is defined in the RFC 3868 Global Title Section.

  • ❏ The local ssn to route matched messages towards.

Setting up inbound GT translation

I want to …​
Send all inbound SCCP CdPA which have addressed digits=123456, in an international number format, in an ISDN numbering plan, and an unknown translation type to SSN 146

In the global-title, inbound section, add the inbound matching rule with a unique identifier.

Ensure that the following are set for the inbound rule:

  • id.

  • addrinfo is set to digits 123456.

  • is-prefix is set to false as we are only accepting an exact match.

  • natofaddr corresponds to Nature of Address for international numbers.

  • numplan corresponds to the numbering plan code for the ISDN numbering plan.

  • trtype corresponds- to the unknown translation type.

  • ssn.

deployment-config:sgc:
  m3ua:
    global-title:
      inbound:
        - id: 'to-sentinel-volte-gsm'
          addrinfo: '123456'
          is-prefix: false
          natofaddr: 4
          numplan: 1
          trtype: 0
          ssn: 146
Send inbound SCCP CdPA addressed to digits prefixed with 123456 to SSN 146

In the global-title, inbound section, add the inbound matching rule with a unique identifier.

    global-title:
      inbound:
        - id: 'inbound-rule-example'
          addrinfo: '123456'
          is-prefix: true
          ssn: 146
Send two different inbound SCCP CdPA addressed messages to different local SSNs

In the global-title, inbound section, add each inbound matching rule with their own unique identifiers.

In this case we have two inbound translation rules. For all inbound SCCP CdPA addressed to:

  • digits=1234567890, the message is sent to the local SSN 8.

      inbound:
      # All inbound SCCP CdPA addressed to digits=1234567890 will be sent to local SSN 8
        - id: 'SSN_6'
          addrinfo: '1234567890'
          is-prefix: false
          ssn: 8
  • digits=2143658709, the message is sent to the local SSN 146.

      inbound:
      # All inbound SCCP CdPA addressed to digits=2143658709 will be sent to local SSN 146
        - id: 'B'
          addrinfo: '2143658709'
          is-prefix: false
          ssn: 146

Outbound GT translation

The SGC determines how GT translation occurs for outbound SCCP messages. Multiple outgoing called addresses can be configured for the SGC.

When the outgoing SCCP called party address (SCCP CdPA) is set to ri=GT, global title translation function is invoked. The function uses the SCCP called party address to determine which destination point code (DPC) the M3UA layer should route the message to.

The parameters of the SCCP message are compared against the matcher rules defined in the configuration. If a match occurs, the message will be routed towards the DPC defined in one of the translation rules associated with that matcher.

Optionally after outbound GT translation, the GT rewriter rule(s) may modify the parameters of the SCCP called party address.

Configuration

There are three different types of rules defined for outbound GT translation.

These are:

  1. The matching rule, which decides what SCCP addresses are to be translated. This invokes specified translation rules.

  2. The translation rule, which decides the DPC to route and routing priority. This invokes specified rewriter rules.

  3. The rewriter rule, which decides what is replaced and transformed in the SCCP address.

The configuration for the outbound GT translation matching rules are in the outbound section.

The scope of these rules overlap for parts of the SCCP message and interact with each other. The following table demonstrates how each configurable rule may interact with each other and the SCCP message.

Table 1. Outbound SCCP Message GT Configurable Rules
Scope of Rule on SCCP message Matching Rule matchers Translation Rule translations Rewrite/Replace Rule rewriters

Rule ID

Matching rule id

Configuration specific translation rule id invoked by a matching rule

Configuration specific rewrite rule id invoked by a translation rule

Address Information

Match to specific addrinfo digits

Replace with addrinfo digits

Treat digits to match as a prefix

is-prefix

GT Encoding

Replace gtencoding

GTI Global Title Indicator

Replace gti

Nature of Address (code defined in RFC 3868)

Match natofaddr - may set a default for all matching rules

Replace natofaddr

Numbering Plan (code defined in RFC 3868)

Match numplan - may set a default for all matching rules

Replace numplan

Translation Type (code defined in RFC 3868)

Match trtype - may set a default for all matching rules

Replace trtype

SSN

ssn

Route on SSN, GT, or no change

Replace route-on

Message DPC

Add dpc to route messages to

Local Routing

prefer-local routing on SGC or not

Relative Rule Priority

Rule priority

Rules to Invoke

Invoke translations rule(s)

Invoke rewriter-id rule(s)

To configure outbound GT translation, you must:

  • ❏ Configure the matching rules to activate the translation rules on the outbound GTs.

  • ❏ Configure the translation rule(s).

In addition, to rewrite the outbound GT after translation, you must:

  • ❏ Ensure that the translation rule(s) activates the appropriate rewrite rule(s).

  • ❏ Configure the rewrite rule(s).

Note The declarative configuration supports several different matching, translation, and rewriter rules. This allows for different numbers to be routed to different DPCs and have their SSN rewritten.

Setting up outbound GT translation

I want to …​
Route all outbound SCCP messages to a specific DPC

In the global-title, outbound section:

  • Add an outbound matcher rule that matches with any outgoing message.

    • Add is-prefix = true to allow any dialled digits to be matched.

    • Add to the matcher rule’s list of translations the unique identifier for the translation rule to invoke it.

    global-title:
      outbound:
        matchers:
          rules:
            - id: '1'
              is-prefix: true
              translations:
                - 'all'
  • Add a translation rule that is invoked by the matcher rule to the intended DPC.

    • Add the dpc that the messages are routed to.

    • Add the priority for the translation rule.

Note The priority for a translation rule is relative to other translation rules defined in the declarative configuration.
    global-title:
      outbound:
        translations:
          - id: 'all'
            dpc: "5963"
            priority: 5
Route all SCCP CdPA with digits starting with 44123456 to primary and backup DPCs

In the global-title, outbound section:

  • Add an outbound matcher rule that matches with any outgoing message.

    • The addrinfo is set to the digit string 44123456.

    • The is-prefix is set true so SCCP addressed digits starting with 44123456 are accepted.

    • The invoked translations rules list has the identifier for the primary DPC 'to_4' and the secondary DPC 'to_100' added.

      outbound:
        matchers:
          rules:
            # All outbound SCCP CdPA with ri=GT and digits starting with 44123456 will be sent to DPC 4 (primary) and DPC 100 (backup)
            - id: 'to_44123456*'
              addrinfo: '44123456'
              is-prefix: true
              translations:
                - 'to_4'
                - 'to_100'
  • Add a translation rule that is invoked by the matcher rule to route to the primary DPC.

    • The id is set to match the primary DPC in the matcher rule.

    • The dpc is filled with the primary DPC in the network.

    • The priority is set higher than the backup DPC’s priority.

      outbound:
        translations:
          - id: 'to_4'
            dpc: '4'
            priority: 10
  • Add a translation rule that is invoked by the matcher rule to route to the backup DPC.

    • The id is set to match the backup DPC in the matcher rule.

    • The dpc is filled with the backup DPC in the network.

    • The priority is set lower than the primary DPC’s priority.

      outbound:
        translations:
          - id: 'to_100'
            dpc: '100'
            priority: 5
Route all SCCP CdPA with digits starting with 44666 to a primary DPCs and set their SSN to 146

In the global-title, outbound section:

  • Add an outbound matcher rule that matches with any outgoing message.

    • The addrinfo is set to the digit string 44666.

    • The is-prefix is set true so SCCP addressed digits starting with 44666 are accepted.

    • The invoked translations rules list has the identifier for the translation rule 'rewrite' which will invoke the rewrite rule.

      outbound:
        matchers:
          rules:
                # All outbound SCCP CdPA with ri=GT and digits starting with 44666 will be sent to DPC 4 and have the SSN rewritten to 146
                - id: 'to_44666*'
                  addrinfo: '44666'
                  is-prefix: true
                  translations:
                    - 'rewrite'
  • Add a translation rule that is invoked by the matcher rule that will route to the primary DPC and invoke a rewrite rule.

    • The id is set to match the translation rule invoked by the matcher rule.

    • The dpc is filled with the primary DPC in the network.

    • The rewriter-id is set to invoke the rewrite_44666_to_have_ssn rewrite rule.

      outbound:
        translations:
          - id: 'rewrite'
                  dpc: '4'
                  rewriter-id: 'rewrite_44666_to_have_ssn'
  • Add a rewrite rule that is invoked by the translation rule that will make the messages route on SSN 146.

    • The id is set to match the rewriter rule invoked by the translation rule.

    • The route-on is to set SSN, replacing existing route indicator on the message.

    • The ssn is set to 146, making the message be routed towards the 146 SSN.

      outbound:
        rewriters:
          - id: 'rewrite_44666_to_have_ssn'
                  route-on: SSN
                  ssn: 146
By default, only translate outbound SCCP messages that have a telex numbering plan, and an unknown nature of address and translation type

In the matchers, defaults section:

These given number codes correspond to a telex numbering plan, and an unknown nature of address and translation type as per RFC 3868 Section 3.10.2.3.

      outbound:
        matchers:
          # All addresses we care about are natofaddr=0, numplan=4 and trtype=0 so we can save some typing
          defaults:
            natofaddr: 0
            numplan: 4
            trtype: 0

Reconfiguring the SGC

This section applies in the case where the Rhino VoLTE TAS SGC has previously received its initial configuration and now requires reconfiguration.

Tip

If only the SGC’s SNMP subsystem requires reconfiguration it is recommended to follow the procedure at Reconfiguring the SGC’s SNMP Subsystem as that process does not cause a full SGC outage.

Reconfiguration of the SGC requires a SMO or an SGC VM with version 4.0.0-9-1.0.0 or newer. Reconfiguration of the SGC component in older VMs is not supported.

Warning

Reconfiguring the SGC will cause a full SS7 outage in live deployments.

There are two stages to reconfiguring the SGC:

Even if you have reconfigured the SGC before it is essential that you follow both of these steps.

Reviewing the SGC configuration

This section applies in the case where the Rhino VoLTE TAS SGC received its initial configuration on a VM version less than or equal to 4.0.0-22-1.0.0 or was most recently reconfigured following the SGC reconfiguration procedure on a VM with version less than or equal to 4.0.0-22-1.0.0.

If the VM is part of a new deployment with VM version greater than or equal to 4.0.0-23-1.0.0 this section does not apply.

Overview

Previous VM releases have contained defects that resulted in some SGC configuration parameter values being applied incorrectly. Multiple subsequent VM releases have contained fixes for these defects and configuration is now correctly applied.

VMs retain their pre-existing SGC configuration during upgrade. This means that VMs that were initially configured using a release with the configuration defects, that were then upgraded, still retain the defective configuration. This ensures that upgrades don’t fail due to changes in how configuration is interpreted.

However, this MOP takes the SGC back to an unconfigured state, and then applies the new configuration. This means that there is a possibility that configuration parameters subject to the defect may be applied differently (correctly) compared with previously (incorrectly), resulting in the SGC behaving differently.

In some cases the difference in behavior can mean a loss of service.

Generally, this is only likely to be a problem when both:

  • The configuration YAML contains an error that sets an integer field to 0 that should have been omitted or set to null.

  • The VM configuration defect treats 0 as being absent or null, when it should be treating it as an actual 0.

The two together result in the VM exhibiting the behavior of a null or absent value.

Once the VM configuration defect is rectified and the VM reconfigured, the 0 will be treated as a 0.

To avoid this, follow these instructions to review the configuration.

Reviewing the configuration

It is strongly recommended that the existing configuration is reviewed and thoroughly tested prior to executing this MOP on the live site.

Steps to carry out:

  1. Examine m3ua configuration for any integer parameter values that are currently set to 0. Determine if and how this parameter is affected by configuration defects by consulting the table below.

    1. If you wish to implement the correct behavior then no further action is required. Do not carry out the operation in the action to retain incorrect behavior column.

    2. If you wish to retain the previous incorrect behavior, apply the action documented in the action to retain incorrect behavior column.

    3. If the parameter is not documented in this table, check that it is an integer value, and that 0 is a permitted value. Only integer values are affected. Contact support for further advice.

  2. precond-ssns were not applied prior to version 4.0.0-18-1.0.0, regardless of their value. To retain that behavior, delete all precond-ssns elements. To obtain the corrected behavior leave them configured as-is.

The configuration parameters that don’t correctly honor a value of 0 are:

Fixed in Parameter name Incorrect behavior Correct behavior Action to retain incorrect behavior

4.0.0-10-1.0.0

rewriters: gti

rewriter does not set gti

rewriter sets gti to 0

Remove the parameter and its value.

4.0.0-10-1.0.0

rewriters: gtencoding

rewriter does not set gtencoding

rewriter sets gtencoding to 0

Remove the parameter and its value.

4.0.0-10-1.0.0

rewriters: natofaddr

rewriter does not set natofaddr

rewriter sets natofaddr to 0

Remove the parameter and its value.

4.0.0-10-1.0.0

rewriters: numplan

rewriter does not set numplan

rewriter sets numplan to 0

Remove the parameter and its value.

4.0.0-10-1.0.0

rewriters: trtype

rewriter does not set trtype

rewriter sets trtype to 0

Remove the parameter and its value.

4.0.0-10-1.0.0

matchers: rules: natofaddr

matcher may match on configured defaults if use-defaults is set, or accept any natofaddr value

matcher will only match a natofaddr of 0

Remove the parameter and its value.

4.0.0-10-1.0.0

matchers: rules: numplan

matcher may match on configured defaults if use-defaults is set, or accept any numplan value

matcher will only match a numplan of 0

Remove the parameter and its value.

4.0.0-10-1.0.0

matchers: rules: trtype

matcher may match on configured defaults if use-defaults is set, or accept any trtype value

matcher will only match a trtype of 0

Remove the parameter and its value.

4.0.0-10-1.0.0

translations: priority

Initconf did not converge.

Initconf will converge, and the priority will be set to 0.

N/A

4.0.0-10-1.0.0

inbound: natofaddr

inbound rule will match any natofaddr value

inbound rule will only match a natofaddr of 0

Remove the parameter and its value.

4.0.0-10-1.0.0

inbound: numplan

inbound rule will match any numplan value

inbound rule will only match a numplan of 0

Remove the parameter and its value.

4.0.0-10-1.0.0

inbound: trtype

inbound rule will match any trtype value

inbound rule will only match a trtype of 0

Remove the parameter and its value.

4.0.0-10-1.0.0

remote: peers: asp-id

ASP management messages will be sent without an asp-id parameter

ASP management messages will be sent with the asp-id parameter set to 0. If this was previously working, it is likely that this will result in failure to communicate properly with the remote peer unless the remote peer is also configured to use an asp-id of 0.

Remove the parameter and its value.

4.0.0-10-1.0.0 and 4.0.0-23-1.0.0

dpc: network-appearance

the network-appearance parameter is set to null. This impacts the DAUD/DAVA/DUNA messages used to share information about an AS between peers. An incorrect setting may result in a network outage.

the network-appearance parameter is set to 0

Remove the parameter and its value.

4.0.0-10-1.0.0 and 4.0.0-23-1.0.0

routes: dpc-ids: priority

the routes: default-priority will be used to configure the route. This may result in the route having a lower than expected priority.

The route will be configured with a priority of 0 (the highest).

Remove the parameter and its value.

Applying the new SGC configuration

This section applies in the case where the Rhino VoLTE TAS SGC has previously received its initial configuration and now requires reconfiguration.

Reconfiguration of the SGC requires a SMO or an SGC VM with version 4.0.0-9-1.0.0 or newer. Reconfiguration of the SGC component in older VMs is not supported.

Warning

Reconfiguring the SGC will cause a full SS7 outage in live deployments.

Warning

You must carry out the process documented here exactly as documented. It should not be skipped or modified.

What you need

  • ❏ The sgctool utility (available on the SGC or SMO VM).

  • ❏ The IP address of one of the deployment’s TSN nodes (<cds_address>).

  • ❏ The deployment ID (<deployment_id>).

  • ❏ The group ID (<group_id>).

Process overview

Here is the high-level view of the required steps:

  1. Review the configuration.

  2. Stop the OCSS7 SGCs.

  3. Verify that the OCSS7 SGCs are stopped.

  4. Delete the OCSS7 SGCs.

  5. Clear OCSS7 SGC-related state from the TSN nodes (CDS).

  6. Apply the new configuration.

Process detail

1. Review the configuration

Warning

Do not skip this step. Applying the configuration without reviewing it may result in loss of service.

Previous releases of the Rhino VoLTE TAS VM contained defects that resulted in the configuration being incorrectly applied. These defects have since been corrected. The reconfiguration process removes all previous configuration, including the incorrectly applied configuration, and replaces it with correctly applied configuration. This may result in changes in behavior, which in some cases could result in loss of service if the configuration was affected by this defect and is not adjusted appropriately.

See reviewing the SGC configuration for full details.

2. Stop the OCSS7 SGCs

You need to stop every SGC in the cluster. On each SGC or SMO node, issue the following command:

$ sudo systemctl stop ocss7

Note

The following message may be safely ignored:

Warning: ocss7.service changed on disk. Run 'systemctl daemon-reload' to reload units.

3. Verify that the OCSS7 SGCs are stopped

  1. Check the systemctl status of the ocss7 service. On each SGC or SMO node issue the following command:

$ sudo systemctl status ocss7
Dec 22 15:45:28 tst-sgc-1 systemd[1]: Stopping Start the OCSS7 SGC...
Dec 22 15:45:28 tst-sgc-1 ocss7[5029]: Stopping processes:
Dec 22 15:45:28 tst-sgc-1 ocss7[5029]: SGC:2027
Dec 22 15:45:28 tst-sgc-1 ocss7[5029]: DAEMON:2017
Dec 22 15:45:28 tst-sgc-1 ocss7[5029]: Initiating graceful shutdown for [2027] ...
Dec 22 15:45:28 tst-sgc-1 ocss7[5029]: Sleeping for max 32 sec waiting for graceful shutdown to complete.
Dec 22 15:45:39 tst-sgc-1 ocss7[5029]: Graceful shutdown successful
Dec 22 15:45:39 tst-sgc-1 ocss7[5029]: Shutdown complete (graceful)
Dec 22 15:45:39 tst-sgc-1 systemd[1]: Stopped Start the OCSS7 SGC.
  1. Check the OCSS7 SGC’s view of its own status. On each SGC or SMO node issue the following command:

$ ~/ocss7/<deployment_id>/<instance_id>/current/bin/sgc status
SGC is down

4. Delete the OCSS7 SGCs

On each SGC or SMO node, remove the OCSS7 SGC installation:

$ rm -rf /home/sentinel/ocss7/<deployment_id>/
Warning

Do not delete /home/sentinel/ocss7/, as this contains the necessary packages to reinstall the OCSS7 SGC.

Remove OCSS7 SGC configuration data that was persisted to the Cassandra Data Store (CDS). This only needs to be carried out once per SGC or SMO cluster.

  1. Run the sgctool from one SGC or SMO VM:

$ /opt/tasvmruntime-py/bin/sgctool clear-config --cds-address <cds_address> --deployment-id <deployment_id> --group-id <group_id>
The CDS SGC state has been cleared
Note

The <group_id> syntax is: RVT-<node type>[-suffix].<site_id>. For example: RVT-smo.DC1.

6. Apply the new configuration

You may now apply the new configuration using rvtconfig, as documented in Declarative configuration.

Reconfiguring the SGC’s SNMP Subsystem

This section applies in the case where the Rhino VoLTE TAS SGC has previously received its initial configuration and only the SNMP subsystem requires reconfiguration.

Warning

If other SGC configuration has changed it is necessary to follow the Reconfiguring the SGC procedure.

Warning

Reconfiguring the SNMP subsystem will cause an SNMP outage in live deployments. This includes other SNMP services, such as Rhino and Initconf. Full SNMP service will resume once the procedure is complete.

There are three situations where the SGC’s SNMP subsystem may require reconfiguring:

SNMP reconfiguration without upgrade or rollback

This process should be followed when the SGC SNMP subsystem requires reconfiguration. It consists of two phases:

  1. Removal of existing SNMP configuration.

  2. Application of desired SNMP configuration.

For each affected node type (SGC or SMO) the steps to follow are:

  1. Complete Preparation for SGC SNMP reconfiguration.

  2. Modify the snmp-config.yaml to the desired final state and upload the modified configuration using rvtconfig.

Upgrading when SNMPv3 is enabled

Warning

This process is only required when both:

  • SNMPv3 is enabled; and

  • Upgrading from VM version 4.0.0-23-1.0.0 or older to VM version 4.0.0-24-1.0.0 or newer.

The process consists of two phases:

  1. Preparation and removal of the existing SNMP configuration.

  2. Performing the upgrade.

For each affected node type (SGC or SMO) the steps to follow are:

  1. Complete Preparation for SGC SNMP reconfiguration.

  2. Continue with the upgrade procedure, ensuring that the uplevel SNMP configuration reflects the desired final state. No additional steps are required; SNMP will automatically be configured and enabled as the nodes are upgraded.

Rolling back when SNMPv3 is enabled

Warning

This process is only required when both:

  • SNMPv3 is enabled; and

  • Rolling back from VM version 4.0.0-24-1.0.0 or newer to VM version 4.0.0-23-1.0.0 or older.

The process consists of two phases:

  1. Preparation and removal of the existing SNMP configuration.

  2. Performing the rollback.

For each affected node type (SGC or SMO) the steps to follow are:

  1. Complete Preparation for SGC SNMP reconfiguration

  2. Then, continue with the rollback procedure, ensuring that the downlevel SNMP configuration reflects the desired final state. No additional steps are required; SNMP will automatically be configured and enabled as the nodes are rolled back.

Preparation for SGC SNMP reconfiguration

This step is common to all SGC SNMP reconfiguration processes and must only be followed when directed by those processes. This step removes the existing SNMP configuration from the SGC in preparation for a new configuration.

Warning

Reconfiguring the SNMP subsystem will cause a full SNMP outage in live deployments for the affected node type. This includes other services that provide SNMP agents and notifications, such as Rhino and Initconf.

For the node type being prepared, the steps to follow are:

  1. Ensure that you have a backup copy of the active cluster’s original snmp-config.yaml configuration file.

  2. Modify the active cluster’s snmp-config.yaml to disable all SNMP:

    deployment-config:snmp:
      v1-enabled: false
      v2c-enabled: false
      v3-enabled: false
  3. Upload the modified configuration using rvtconfig and wait for Initconf to converge.

  4. Remove the SGC’s existing SNMP configuration.

Remove the SGC’s existing SNMP configuration

Note

Perform this process once, on one VM of the type being reconfigured. The process affects the whole SGC cluster.

Tip

When performed as part of a rollback operation this process may be performed on any uplevel or downlevel cluster member where Initconf has successfully converged (i.e. "gone Green").

Either the automatic or manual method may be used.

Automatic

The sgc_snmp_cleaner tool is included on newer VMs by default at /opt/tasvmruntime-py/bin/sgc_snmp_cleaner. If not present on your VM, request it from your support representative and follow the installation instructions provided with it.

It must be executed on an active VM in the cluster to be reconfigured

[sentinel@tst-smo-1 ~]$ /opt/tasvmruntime-py/bin/sgc_snmp_cleaner --deployment-id tst
Checking the output

The script will report on the SNMP nodes, SNMP targets and USM users that it finds and removes. Successful completion will indicate:

SNMP configuration successfully cleared

Unsuccessful completion may indicate one of the following:

  • USM user configuration still exists:

  • Target address configuration still exists:

  • SNMP node configuration still exists:

Example successful output from the script for a single node test cluster:

[sentinel@tst-smo-1 ~]$ PYTHONPATH=/opt/tasvmruntime-py/lib/python3.7/site-packages/ python3 sgc_snmp_cleaner.py --deployment-id tst
Found SNMP node: tst-smo-1_v2c
  - Removed SNMP node: tst-smo-1_v2c
Found SNMP node: tst-smo-1_v3
  - Removed SNMP node: tst-smo-1_v3
Found SNMP target: 172.30.102.143#162#v3#UdpIpv4#trap#v3user
  - Removed SNMP target: 172.30.102.143#162#v3#UdpIpv4#trap#v3user
Found SNMP target: 172.30.102.143#162#v2c#UdpIpv4#trap#tst
  - Removed SNMP target: 172.30.102.143#162#v2c#UdpIpv4#trap#tst
Found USM user: snmp_user
  - Removed USM user: snmp_user
SNMP configuration successfully cleared

In the event that execution is unsuccessful follow the manual procedure.

Manual
  1. Log into one VM of the type being reconfigured.

  2. Start the SGC CLI: /home/sentinel/ocss7/<deployment_id>/<deployment_id>-<node_id>/current/cli/sgc-cli.sh

  3. Then, view the configured SNMP nodes by executing the SGC CLI command display-snmp-node.

    172.30.102.140:55555 tst-smo-1> display-snmp-node:
    Found 3 object(s):
    +--------------+----------+--------+--------+---------------+---------------+---------------+----------+--------------+---------------+--------+
    |oname         |dependenci|enabled |active  |node           |transport-type |host           |port      |snmp-version  |community      |extended|
    |              |es        |        |        |               |               |               |          |              |               |-traps  |
    +--------------+----------+--------+--------+---------------+---------------+---------------+----------+--------------+---------------+--------+
    |tst-smo-1_v3  |0         |true    |true    |tst-smo-1      |UDP            |172.30.102.140 |11103     |v3            |tst            |true    |
    +--------------+----------+--------+--------+---------------+---------------+---------------+----------+--------------+---------------+--------+
    |tst-smo-2_v3  |0         |true    |true    |tst-smo-2      |UDP            |172.30.102.141 |11103     |v3            |tst            |true    |
    +--------------+----------+--------+--------+---------------+---------------+---------------+----------+--------------+---------------+--------+
    |tst-smo-3_v3  |0         |true    |true    |tst-smo-3      |UDP            |172.30.102.142 |11103     |v3            |tst            |true    |
    +--------------+----------+--------+--------+---------------+---------------+---------------+----------+--------------+---------------+--------+

    For each line in the returned table, execute the following two SGC CLI commands to disable and remove those nodes:

    • disable-snmp-node: oname=<oname>

    • remove-snmp-node: oname=<oname>

      For instance:

      172.30.102.140:55555 tst-smo-1> disable-snmp-node: oname=tst-smo-1_v3
      OK snmp-node disabled.
      172.30.102.140:55555 tst-smo-1> remove-snmp-node: oname=tst-smo-1_v3
      OK snmp-node removed.
  4. Similarly, view the configured SNMP notification targets by executing the SGC CLI command display-target-address. For each line in the returned table, execute remove-target-address: oname=<oname>.

  5. Finally, view the configured SNMP USM users by executing the SGC CLI command display-usm-user. For each line in the returned table, execute remove-usm-user: oname=<oname>.

  6. Check that no SNMP configuration remains by executing the following commands and verifying that there are no lines in the returned tables.

    • display-snmp-node

    • display-target-address

    • display-usm-user

      For instance:

      172.30.102.140:55555 tst-smo-1> display-snmp-node
      Found 0 objects.
      
      172.30.102.140:55555 tst-smo-1> display-target-address:
      Found 0 objects.
      
      172.30.102.140:55555 tst-smo-1> display-usm-user:
      Found 0 objects.

In the event that manual cleanup is unsuccessful please contact your support representative.

HSS integration

The Rhino VoLTE TAS requires access to the HSS to acquire provisioned subscriber data for configuring network wide or subscriber specific functionality and options.

Diameter Sh interface

The Rhino VoLTE TAS requires integration with the HSS using the Diameter Sh interface to be able to acquire provisioned subscriber data.

What you need

  • ❏ The origin realm to use when sending Diameter Sh messages.

  • ❏ The destination realm for where sent Diameter Sh messages go. This will be the HSS’s realm.

  • ❏ The HSS destination peers' destination-hostname, port, and protocol-transport type.

  • ❏ A sample user identity to be used for performing a health check on the interface.

  • ❏ A unique origin host domain name for each VM in the pool to use when sending Diameter Sh messages.

Setting up the Diameter Sh interface

The configuration for the HSS to Rhino VoLTE TAS Diameter Sh interface is in the shcm-service-config.yaml file.

In the shcm-service section, configure the diameter-sh section. The example configuration given here indicates the format of the required configuration.

shcm-service-config.yaml
# Service configuration for the Sh Cache Microservice
shcm-service:
    ##
    ## Diameter Sh Configuration
    ##
    diameter-sh:

        # The origin realm to use when sending messages.
        origin-realm: opencloud.com

        # The value to use as the destination realm.
        destination-realm: opencloud

        # The HSS destination peers.
        destination-peers:
            - destination-hostname: hss.opencloud.com
              port: 3868
              protocol-transport: aaa
              metric: 1

        # The user identity that is put in the diameter message to the HSS when a health check is performed
        health-check-user-identity: sip:shcm-health-check@example.com

  • The protocol-transport variable is an enum. The valid values for this field are described in the reference guide’s section on Diameter Sh protocol transport type.

  • The metric variable is an integer that determines which peer to route to.

  • The health-check-user-identity is a user identity that should also be configured in the HSS. This will allow health checks to query the HSS and confirm functionality without affecting non-test subscribers.

The configuration for the Diameter Sh origin host values is in the shcm-vmpool-config.yaml file.

shcm-vmpool-config.yaml
# This file describes the pool of Virtual Machines that comprise a "ShCM group"
deployment-config:shcm-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vApp parameter
  site-id: DC1

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-shcm-1
      diameter-sh-origin-host: shcm1.shcm.site1.mnc123.mcc530.3gppnetwork.org
      rhino-node-id: 101

    - vm-id: example-shcm-2
      diameter-sh-origin-host: shcm2.shcm.site1.mnc123.mcc530.3gppnetwork.org
      rhino-node-id: 102

Diameter Zh interface

The Diameter Zh interface allows IMS devices to authenticate with the network without any user interaction required.

What you need

  • ❏ The origin realm to use when sending Diameter Zh messages.

  • ❏ The destination realm for where sent Diameter Zh messages go. This will be the HSS’s realm.

  • ❏ The HSS destination peers' destination-hostname, port, and protocol-transport type.

  • ❏ A unique origin host domain name for each VM in the pool to use when sending Diameter Sh messages.

Setting up the Diameter Zh interface

The configuration for the HSS to Rhino VoLTE TAS Diameter Zh interface is in the bsf-config.yaml file.

In the bsf section, configure the zh-diameter section. The example configuration given here indicates the format of the required configuration.

bsf-config.yaml
bsf:

  zh-diameter:

    origin-realm: opencloud.com

    destination-realm: opencloud.com

    destination-peers:
      - destination-hostname: hss.opencloud.com
        port: 3868
        protocol-transport: aaa
        metric: 1

  • The protocol-transport variable is an enum. The valid values for this field are described in the reference guide’s section on Diameter Zh protocol transport type.

  • The metric variable is an integer that determines which peer to route to.

The configuration for the Diameter Zh origin host values is in the mag-vmpool-config.yaml file.

mag-vmpool-config.yaml
# This file describes the pool of Virtual Machines that comprise a "MAG cluster"
# there are some pieces of software on this VM type that require clustering and
# knowing each other's IP addresses, for example Rhino
deployment-config:mag-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vapp parameter
  site-id: DC1

  xcap-domains:
    - xcap.site1.ims.mnc123.mcc530.pub.3gppnetwork.org
    - xcap.site1.ims.mnc124.mcc530.pub.3gppnetwork.org

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  # Define one or more REM users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # each REM user maps to a Rhino user, when REM logs into Rhino
  rem-auth:
    - username: remreadonly
      real-name: REM read only user
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-mag-1
      rhino-node-id: 101
      diameter-zh-origin-host: mag1.mag.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mag-2
      rhino-node-id: 102
      diameter-zh-origin-host: mag2.mag.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mag-3
      rhino-node-id: 103
      diameter-zh-origin-host: mag3.mag.site1.mnc123.mcc530.3gppnetwork.org

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  rem-debug-logging-enabled: false

HLR integration

Integration with an HLR allows the Rhino VoLTE TAS to gather subscriber data for circuit switched (CS) domain calls.

What you need

For GSM or CDMA networks:

  • ❏ The SCCP address of the HLR in the network.

  • ❏ A unique SCCP address for the Rhino VoLTE TAS in the network.

For GSM networks:

  • ❏ An MLC SCCP address for the Rhino VoLTE TAS for outgoing MAP requests to the HLR.

  • ❏ If a separate address for the MSC is required, an MSC SCCP address for the Rhino VoLTE TAS for outgoing MAP requests to the HLR.

  • ❏ Whether to use the configured destination hlr-address as the exact HLR address when establishing a MAP dialog, or to replace the digits in the address with the subscriber MSISDN.

For CDMA networks:

  • ❏ The Market ID and Switch Number to be set on the MSCID of outgoing requests to the HLR.

Setting up the HLR interface

The Rhino VoLTE TAS to HLR interface configuration is in three files:

  • hlr-config.yaml details the destination configuration of messages sent to the HLR Rhino VoLTE TAS.

  • sentinel-volte-gsm-config.yaml details the origin configuration of GSM compatible messages sent from the Rhino VoLTE TAS.

  • sentinel-volte-cdma-config.yaml details the origin configuration of CDMA compatible messages sent from the Rhino VoLTE TAS.

The GSM and CDMA YAML files share an overlap of configuration scope.

Destination configuration

The destination configuration specifies the HLR SCCP address for where messages are sent from the Rhino VoLTE TAS to the HLR.

In the hlr section, configure the hlr-address value. The example configuration given here indicates the required SCCP address format.

hlr-config.yaml
hlr:
    hlr-address: "type=C7,ri=pcssn,pc=5,ssn=6"

Origin configuration

The origin configuration specifies details of the Rhino VoLTE TAS that are communicated to the HLR.

In the hlr-connectivity-origin section, configure the originating-address value. The example configuration given here indicates the format of the required configuration for either CDMA or GSM with:

  • The SCCP originating address of the Rhino VoLTE TAS.

  • The timeout value for opening a dialog with the HLR.

sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml
sentinel-volte:

  # Origin configuration for this application when connecting to the HLR.
  # The actual HLR SCCP address (destination) is in the hlr-configuration.yaml file
    hlr-connectivity-origin:

      # The SCCP address of the Sentinel VoLTE AS.
      originating-address: type=C7,ri=pcssn,pc=7,ssn=146

      # The timeout value for opening the MAP dialog with the HLR (in milliseconds).
      map-invoke-timeout-milliseconds: 5000

GSM network configuration

There is a GSM specific configuration required for networking with an HLR for the GSM network.

In the hlr-connectivity-origin section, configure the mlc-address value. The example configuration given here indicates what is needed for integrating with an HLR used in a GSM network with:

  • The Rhino VoLTE TAS’s MLC originating address.

  • The destination HLR address has the digits replaced with the Subscriber MSISDN rather than the exact destination address as configured in hlr-address.

  • A dedicated MSC originating address that is different to the MLC address.

sentinel-volte-gsm-config.yaml
sentinel-volte:

    hlr-connectivity-origin:

      # GSM specific configuration.
      gsm:
        # The address of the MLC (Sentinel).
        mlc-address: address=653333333,nature=INTERNATIONAL,numberingPlan=ISDN

        # Indicates if 'hlr-config/hlr-address' should be used as the actual HLR address, or have
        # its digits replaced with the MSISDN of the subscriber.
        use-msisdn-as-hlr-address: true

        # Originating SCCP address when acting as an MSC, used when
        # establishing the MAP dialog. Will default to the value of
        # 'originating-address' when not present. Typically used to set a
        # different originating SSN when sending a SendRoutingInformation
        # message to the HLR.
        msc-originating-address: address=654444444,nature=INTERNATIONAL,numberingPlan=ISDN

CDMA network configuration

There is a CDMA specific configuration required for networking with an HLR for the CDMA network.

In the hlr-connectivity-origin section, configure the market-id and switch-number values. The example configuration given here indicates input for what is needed for integrating with an HLR used in a CDMA network. This example designates for the MSCID set on outgoing CDMA requests to the HLR using:

  • The market ID value.

  • The switch number value.

sentinel-volte-cdma-config.yaml
sentinel-volte:

    hlr-connectivity-origin:

      # CDMA specific configuration.
      cdma:
        # The market ID value to be used in the MSCID set on outgoing CDMA requests to the HLR
        market-id: 1

        # The switch number value to be used in the MSCID set on outgoing CDMA requests to the HLR
        switch-number: 1

Diagnostics systems integration

SAS integration

The Rhino VoLTE TAS supports Metaswitch’s SAS (Service Assurance Service) integration.

What you need

  • ❏ To chose whether or not to activate SAS tracing.

  • ❏ The IP addresses or DNS hostnames of SAS servers to connect the Rhino VoLTE TAS to.

Setting up the SAS interface

The configuration for the SAS to Rhino VoLTE TAS interface is in the sas-config.yaml file.

In the sas section, configure the servers list. The example configuration given here indicates input for what is needed for integrating the Rhino VoLTE TAS with SAS servers in a network.

sas-config.yaml
sas:

  # Whether SAS is enabled ('true') or disabled ('false')
  enabled: true

  # Parameters for connecting to SAS
  sas-connection:
    # List of SAS servers. Either IP addresess or DNS hostnames.
    # Needs to be specified in a non-MDM deployment.
    servers:
      - 10.10.10.10
      - 10.10.10.11
      - sas.example.com

SNMP integration

The Rhino VoLTE TAS supports integration with SNMP based systems.

What you need

  • ❏ The version of SNMP to be used.

  • ❏ If using SNMP v2c, the SNMP community value.

  • ❏ The SNMP agent details such as location and contact address.

  • ❏ If using SNMP notifications, each notification target’s host, port, and specifc SNMP version.

Setting up the SNMP interface

The configuration for the SNMP to Rhino VoLTE TAS interface is in the snmp-config.yaml file.

In the snmp section, configure the targets list. The example configuration given here indicates input for what is needed for integrating the Rhino VoLTE TAS with SNMP services in the network.

snmp-config.yaml
snmp:

  # Enable SNMP v1 (not recommended)
  v1-enabled: false

  # Enable SNMP v2c
  v2c-enabled: true

  # Enable SNMP v3
  v3-enabled: false

  # SNMP Community. Required for SNMP v2c
  community: clearwater

  # SNMP agent details
  agent-details:
    location: Unknown location
    contact: support.contact@invalid.com

  # SNMP Notifications
  notifications:

    # Enable SNMP Notifications
    enabled: true

    # SNMP notification targets. Normally this is the address of your MVS
    targets:
      - version: v2c
        host: 127.0.0.1
        port: 162

Media server integration

Announcement server integration

To play announcement media to a user, the Rhino VoLTE TAS requires the URI of the announcement media server.

What you need

  • ❏ The URI for the network’s announcement media server.

Setting up the announcement server interface

The configuration for the announcement server to Rhino VoLTE TAS interface is in the sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml file.

In the announcement section, configure the announcements-media-server-uri value, as shown in the example.

sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml
sentinel-volte:

    mmtel:

        announcement:

            # Media server URI, used when playing announcements
            # This is distinct from mrf-uri for Conferencing
            announcements-media-server-uri: sip:annc-audio@localhost:5260;lr;transport=tcp

Conferencing media server integration

To utilize conferencing functionality in the Rhino VoLTE TAS, a media server that specializes in handling conferencing needs to be specified.

What you need

  • ❏ The URI for the MRF used for conferencing.

Setting up the conferencing media server interface

The configuration for the conferencing media server server to Rhino VoLTE TAS interface is in the sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml file.

In the conferencing section, configure the conference-mrf-uri value, as shown in the example.

sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml
sentinel-volte:

    mmtel:

        # Configuration for conferencing.
        conferencing:

            # The URI of the Media Resource Function used for Conferencing.
            # This is distinct from the media-server-uri used for Announcements
            # The hostname part should either be a resolvable name or the IP address of the MRF.
            conference-mrf-uri: sip:mrf@mrfhost.example:5060

IP-SM-GW specific integration

MSC integration

There is a MAP interface between the IP Short Message Gateway (IP-SM-GW) in the Rhino VoLTE TAS and the MSC.

What you need

  • ❏ A template default SMSC address for MAP messaging.

  • ❏ A unique SCCP address for the Rhino VoLTE TAS in the network.

  • ❏ An international address for the Rhino VoLTE TAS in the network.

Setting up the MSC interface

The Rhino VoLTE TAS to MSC interface configuration is in the sentinel-ipsmgw-config.yaml file.

In the map-messaging section, configure the template-smsc-address, originating-address and ipsmgw-as-msc-address values. The example configuration given here indicates input for what is needed for integrating with the MSC for SMS.

sentinel-ipsmgw-config.yaml
sentinel-ipsmgw:

    # MAP messaging configuration
    map-messaging:

        # Template SMSC address. The digits are replaced by those of the received SMSC address.
        template-smsc-address: "type=C7,ri=gt,digits=0,ssn=8,national=false,nature=INTERNATIONAL,numbering=ISDN,gti=4,tt=0"

        # IPSMGW SCCP address.
        originating-address: "type=C7,ri=pcssn,pc=6,ssn=147"

        # IPSMGW international address.
        ipsmgw-as-msc-address: "address=653333333,nature=INTERNATIONAL,numberingPlan=ISDN"

Charging

What it does

The charging service communicates with a number of possible systems to charge subscribers for making and receiving calls. The Rhino VoLTE TAS supports three different charging methods:

  • offline charging using Diameter Rf to send reports to a Charging Data Function (CDF)

  • online charging using Diameter Ro protocol to communicate with an Online Charging Server (OCS)

  • online charging using SIP to CAP translation to communicate with a charging Service Control Point (SCP) in a GSM network.

Online and offline charging can be used simultaneously. It is also possible to use both types of supported online charging at the same time. The Rhino VoLTE TAS does not support CDMA based charging systems, so for those networks only Diameter based charging is available.

Additionally, the Rhino VoLTE TAS writes Charging Data Records (CDRs) for every call. These contain metadata about the call suitable to use for charging purposes.

In this section

Diameter Rf offline charging

What it does

When Diameter Rf charging is in use, the Rhino VoLTE TAS communicates with a CDF to deliver interim CDRs using Accounting Request (ACR) messages. If the communication with the CDF fails, ACR messages are held locally until it is restored.

Interim CDRs must be enabled to use Diameter Rf offline charging.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to Diameter Rf offline charging in the sentinel-volte/charging/rf-charging section.

What you need

  • ❏ The release version of Diameter Rf to use with the offline charging system.

  • ❏ The origin realm to use when sending Diameter Rf messages. This is the TAS’s realm.

  • ❏ The destination realm to use when sending Diameter Rf messages. This is the offline charging system’s realm.

  • ❏ The CDF peers' hostnames, ports, and transport protocols.

Setting up Diameter Rf based offline charging

I want to…​
Use Diameter Rf offline charging

In the charging section, add an rf-charging section with:

        rf-charging:
            diameter-rf:
                diameter-rf-release: Vcb0
                origin-realm: metaswitch.com
                destination-realm: metaswitch.com
                destination-peers:
                    -   destination-hostname: peer.metaswitch.com
                        port: 3868
                        protocol-transport: sctp
                        metric: 1

You must ensure that all per-node-diameter-rf sections in the MMT cluster configuration are present and not commented out. The sections are located:

          # Remove this if diameter-rf is disabled
          per-node-diameter-rf:
              diameter-rf-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
Disable Diameter Rf offline charging

In the charging section, remove or comment out the entire rf-charging section:

#        rf-charging:
#            diameter-rf:
#                diameter-rf-release: Vcb0
#                origin-realm: metaswitch.com
#                destination-realm: metaswitch.com
#                destination-peers:
#                    -   destination-hostname: peer.metaswitch.com
#                        port: 3868
#                        protocol-transport: sctp
#                        metric: 1

You must comment out any per-node-diameter-rf sections in the MMT cluster configuration, which are located:

          # Remove this if diameter-rf is disabled
#          per-node-diameter-rf:
#              diameter-rf-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org

Diameter Ro online charging

What it does

When Diameter Ro charging is in use, the Rhino VoLTE TAS communicates with one or more online charging systems (OCS) in real time to authorize credit for calls. While a call is in progress, Diameter Ro messages are exchanged with the OCS whenever more credit is required, or when there are significant changes in the call that could impact the cost (e.g. video is enabled). If at any point the OCS refuses to grant credit, the call is ended.

While the method for enabling Diameter Ro charging differs between GSM and CDMA based deployments, there is no functional difference in charging behavior as the GSM and CDMA parts of the network are not involved.

Diameter Ro charging announcements

When using Diameter Ro online charging, the Rhino VoLTE TAS supports playing announcements when:

  • the subscriber attempts to make a call when they are running low on credit

  • the subscriber attempts to make a call without having any credit

  • the subscriber begins to run low on credit during a call

  • the subscriber runs out of credit during the call

  • the OCS instructs the TAS to do so.

Low credit announcements are played when the OCS’s response to a credit check includes a low balance indicator. After playing a low credit announcement, the Rhino VoLTE TAS waits for a time before doing another credit check. The time period is set in the charging-reauth-delay-milliseconds field.

Out of credit announcements are played when the OCS sends an "Out of Credit" response to a credit check. The call is terminated after playing an out of credit announcement.

The OCS instructs announcements to be played by including announcement information in its response to a credit check. These announcements will take precedence over the low and out of credit announcements configured in the Rhino VoLTE TAS. If the announcement information came in a "Out of Credit" response, the call will end after the announcement has been played.

When configuring the charging service to play an announcement, you only provide the ID of the announcement that should be played. This ID must correspond to an announcement that has been configured in the announcement service. See Announcements for instruction about how to do this.

Multiple OCS Support

The Rhino VoLTE TAS supports communicating with multiple different Diameter Ro online charging systems. Each OCS must have its own Diameter realm, and those realms must be configured as destination realms in the Rhino VoLTE TAS’s Diameter Ro configuration.

The particular OCS to use for a given call is determined from the ecf parameter of the P-Charging-Function-Addresses header on the initial SIP request for the call. The value of the ecf parameter that identifies a particular OCS is its realm name by default, but can be configured to be any arbitrary value by specifying a charging-function-address when configuring the destination realm for an OCS.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to Diameter Ro online charging in the sentinel-volte/charging/ro-charging section.

What you need

  • ❏ The release version of Diameter Ro to use with the online charging system.

  • ❏ The origin realm to use when sending Diameter Ro messages. This is the TAS’s realm.

  • ❏ The destination realm to use when sending Diameter Ro messages. This is the online charging system’s realm.

  • ❏ The OCS peers' hostnames, ports, and transport protocols.

For low balance announcements:

  • ❏ The ID of the low balance announcement to play in call setup.

  • ❏ The ID of the low balance announcement to play in an active call.

  • ❏ The time to wait after playing an announcement before doing another credit check.

For out of credit announcements:

  • ❏ The ID of the out of credit announcement to play in call setup.

  • ❏ The ID of the out of credit announcement to play in an active call.

For multiple OCS support:

  • ❏ The destination realm of each OCS.

  • ❏ A list of which peers are associated with which realms.

  • ❏ (Optional) An identifier for each OCS that will be used to select it with a P-Charging-Function-Addresses header.

Setting up Diameter Ro online charging

I want to…​
Use Diameter Ro online charging on a GSM based deployment
        gsm-online-charging-type: ro
          # Remove this if diameter-ro is disabled
          per-node-diameter-ro:
              diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
Disable Diameter Ro charging on a GSM based deployment
        gsm-online-charging-type: disabled
#        ro-charging:
#            diameter-ro:
#                diameter-ro-release: Vcb0
#                origin-realm: metaswitch.com
#                destination-realm: metaswitch.com
#                destination-peers:
#                    -   destination-hostname: peer.metaswitch.com
#                        port: 3868
#                        protocol-transport: aaa
#                        metric: 1
#                continue-session-on-ocs-failure: false
#
#            charging-announcements:
#                low-credit-announcements:
#                    call-setup-announcement-id: 100
#                    mid-call-announcement-id: 100
#                    charging-reauth-delay-milliseconds: 30000
#                out-of-credit-announcements:
#                    call-setup-announcement-id: 101
#                    mid-call-announcement-id: 102
          # Remove this if diameter-ro is disabled
#          per-node-diameter-ro:
#              diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
Use Diameter Ro online charging on a CDMA based deployment
        cdma-online-charging-enabled: true
          # Remove this if diameter-ro is disabled
          per-node-diameter-ro:
              diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
Disable Diameter Ro charging on a CDMA based deployment
        cdma-online-charging-enabled: false
  • Remove or comment out the entire ro-charging section:

#        ro-charging:
#            diameter-ro:
#                diameter-ro-release: Vcb0
#                origin-realm: metaswitch.com
#                destination-realm: metaswitch.com
#                destination-peers:
#                    -   destination-hostname: peer.metaswitch.com
#                        port: 3868
#                        protocol-transport: aaa
#                        metric: 1
#                continue-session-on-ocs-failure: false
#
#            charging-announcements:
#                low-credit-announcements:
#                    call-setup-announcement-id: 100
#                    mid-call-announcement-id: 100
#                    charging-reauth-delay-milliseconds: 30000
#                out-of-credit-announcements:
#                    call-setup-announcement-id: 101
#                    mid-call-announcement-id: 102
          # Remove this if diameter-ro is disabled
#          per-node-diameter-ro:
#              diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
Configure Diameter Ro online charging

In the charging section, ensure that the ro-charging section is present and not commented out:

        ro-charging:
            diameter-ro:
                diameter-ro-release: Vcb0
                origin-realm: metaswitch.com
                destination-realm: metaswitch.com
                destination-peers:
                    -   destination-hostname: peer.metaswitch.com
                        port: 3868
                        protocol-transport: aaa
                        metric: 1
Play an announcement to subscribers when they run low on credit
Warning Ensure the announcement IDs you want to use have been set up in the announcement service. See Announcements.

In charging, ro-charging, ensure that the charging-announcements section is present.:

            charging-announcements:
                low-credit-announcements:
                    call-setup-announcement-id: 100
                    mid-call-announcement-id: 100
                    charging-reauth-delay-milliseconds: 30000
Play an announcement to subscribers when they run out of credit
Warning Ensure the announcement IDs you want to use have been set up in the announcement service. See Announcements.

In charging, ro-charging, ensure that the charging-announcements section is present:

            charging-announcements:
                out-of-credit-announcements:
                    call-setup-announcement-id: 101
                    mid-call-announcement-id: 102
Configure multiple destination realms
            diameter-ro:
                diameter-ro-release: Vcb0
                origin-realm: metaswitch.com
                destination-realms:
                    -   destination-realm: ocs1.metaswitch.com
                        peers:
                            - peer1.metaswitch.com
                    -   destination-realm: ocs2.metaswitch.com
                        peers:
                            - peer2.metaswitch.com
                            - peer3.metaswitch.com
                destination-peers:
                    -   destination-hostname: peer1.metaswitch.com
                        port: 3868
                        protocol-transport: aaa
                        metric: 1
                    -   destination-hostname: peer2.metaswitch.com
                        port: 3868
                        protocol-transport: aaa
                        metric: 1
                    -   destination-hostname: peer3.metaswitch.com
                        port: 3868
                        protocol-transport: aaa
                        metric: 2
Set an identifier for an OCS for selecting it with a P-Charging-Function-Addresses header
                destination-realms:
                    -   destination-realm: ocs1.metaswitch.com
                        charging-function-address: ocs_1
                        peers:
                            - peer1.metaswitch.com
                    -   destination-realm: ocs2.metaswitch.com
                        peers:
                            - peer2.metaswitch.com
                            - peer3.metaswitch.com

Mixed Diameter Ro and CAP online charging

What it does

Operators may have a mixed Diameter Ro and CAP online charging environment. This is typically seen when an Operator is migrating off their SCP. To support this deployment the cap-ro gsm-online-charging-type is used, which instructs the installer to deploy both CAP and Diameter Ro configurations.

Charging Mode Selection

When a call triggers RVT the online charging mode (either Diameter Ro or CAP) is determined by inspecting the top-most route header for the oc-charge-mode uri parameter which is set to either ro, cap, or offline. If ro is set then Diameter Ro is used for charging, if cap is set then CAP online charging is used.

Note Check the Sentinel VoLTE Administration Guide for more details on the oc-charge-mode.

For more details on the Diameter Ro and CAP online charging check these links.

Configuration

When using the mixed environment set the gsm-online-charging-type to cap-ro. Both Diameter Ro and CAP online charging configuration needs to be present.

What you need for CAP Online Charging

  • ❏ The SCCP address of the GSM charging SCP.

  • ❏ The TDP(s) to use when retrieving IM-CSI data from the HLR.

  • ❏ Whether or not to send location information to the SCP.

If sending location information to the SCP:

  • ❏ The format to sent the information in (see Location information).

  • ❏ A default value to send when a subscriber’s location cannot be determined.

What you need for Diameter Ro Charging

  • ❏ The release version of Diameter Ro to use with the online charging system.

  • ❏ The origin realm to use when sending Diameter Ro messages. This is the TAS’s realm.

  • ❏ The destination realm to use when sending Diameter Ro messages. This is the online charging system’s realm.

  • ❏ The OCS peers' hostnames, ports, and transport protocols.

For low balance announcements:

  • ❏ The ID of the low balance announcement to play in call setup.

  • ❏ The ID of the low balance announcement to play in an active call.

  • ❏ The time to wait after playing an announcement before doing another credit check.

For out of credit announcements:

  • ❏ The ID of the out of credit announcement to play in call setup.

  • ❏ The ID of the out of credit announcement to play in an active call.

I want to…​

Use both Diameter Ro and CAP online charging on a GSM based deployment
        gsm-online-charging-type: cap-ro

Also in the charging section:

        cap-charging:
            imssf:
                scf-address: "type=C7,ri=pcssn,pc=6,ssn=156"
          # Remove this if diameter-ro is disabled
          per-node-diameter-ro:
              diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org

CAP online charging

What it does

When CAP online charging is in use, the Rhino VoLTE TAS functions as an IM-SSF (IP Multimedia Service Switching Function) and communicates with an SCP in a GSM network. At various points in the SIP signalling for the call the Rhino VoLTE TAS will translate the SIP to the equivalent CAP signalling towards the SCP, to give it the opportunity to intervene in call processing. Through this the SCP can provide a charging service. The exact details of how and when the Rhino VoLTE TAS will signal the SCP is determined by subscriber specific IM-CSI data in the HLR.

CAP online charging requires that integration with an SCP is set up. To do this, the SCCP (Signalling Connection Control Part) address of the SCP must be set in the scf-address field.

Note CAMEL Application Part (CAP) is a GSM protocol, so naturally can only be used with GSM networks.

The Rhino VoLTE TAS supports CAP phase 2 and phase 3 triggers.

IM-CSI

The IM-CSI (IP multimedia CAMEL subscription information) is subscriber data retrieved from the HLR that is used to determine when and how to do SIP to CAP translation. There are different versions of the IM-CSI for the originating and terminating legs of the call; they are the O-IM-CSI and the VT-IM-CSI respectively. The Rhino VoLTE TAS can be configured to retrieve either the O-IM-CSI or the VT-IM-CSI independently of whether it is acting as an originating or terminating TAS.

The IM-CSI that is fetched on:

Both fields can take the same values, which are numbers that correspond to CAP TDPs (trigger detection points).

The following values are valid for these fields.

Table 2. TDPs for IM-CSI retrieval
TDP number TDP name IM-CSI retrieved

2

Collected_Info

O-IM-CSI

3

Analysed_Info

O-IM-CSI

12

Terminating_Attempt_Authorised

VT-IM-CSI

Location information

Information about a subscriber’s current country and access network can be sent to the SCP in the form of a charging GT (global title).

The format of the charging GT is configured in the format field, and it is made up from any combination of: fixed digits, the mobile country code (MCC), the mobile network code (MNC), and/or the two letter ISO country code. The value of the field should match any fixed digits to be included in the charging GT, with {mcc}, {mnc}, and/or {iso} tags inserted where those values should be substituted in. For example, 12345{mcc}{mnc} results in a charging GT that always starts with 12345 and has the current MCC and MNC for the subscriber appended on the end.

The unknown-location field can be used to set a default charging GT, which is used when a subscriber’s location cannot be determined.

When a subscriber receives a call, the CAP charging service is always invoked. This can be changed so that the service is only used for terminating calls when the charging GT data indicates that the subscriber is roaming in a foreign country.

Configuration

Note CAP based charging is only available on GSM networks.

The example for sentinel-volte-gsm-config.yaml shows example configuration relevant to CAP charging in the sentinel-volte/charging section.

What you need

  • ❏ The SCCP address of the GSM charging SCP.

  • ❏ The TDP(s) to use when retrieving IM-CSI data from the HLR.

  • ❏ Whether or not to send location information to the SCP.

If sending location information to the SCP:

  • ❏ The format to sent the information in (see Location information).

  • ❏ A default value to send when a subscriber’s location cannot be determined.

Setting up CAP based online charging

I want to…​
Enable CAP charging

In the charging section, set the gsm-online-charging-type to either cap or cap-ro for mixed CAMEL/Ro deployments:

        gsm-online-charging-type: cap

Also in the charging section:

        cap-charging:
            imssf:
                scf-address: "type=C7,ri=pcssn,pc=6,ssn=156"
  • Ensure there is a cap-charging section.

  • Ensure there is an imssf section.

  • Set the scf-address to the SCCP address of the SCP that the Rhino VoLTE TAS should communicate with.

Disable CAP charging

In the charging section, set the gsm-online-charging-type to disabled:

        gsm-online-charging-type: disabled

Comment out the entire cap-charging section:

#        cap-charging:
#            imssf:
#                imcsi-fetching:
#                    originating-tdp: 2
#                    terminating-tdp: 12
#                charging-gt:
#                    format: "6422142{iso}"
#                    unknown-location: "64221429090"
#                    only-charge-terminating-call-if-international-roaming: false
#                scf-address: "type=C7,ri=pcssn,pc=6,ssn=156"
Change the SCP that the CAP charging service communicates with

In the imssf section, set the scf-address to the SCCP address of the new SCP:

                scf-address: "type=C7,ri=pcssn,pc=6,ssn=156"
Generate and send a charging GT containing location information for a subscriber to the SCP

In the imssf section:

                charging-gt:
                    format: "6422142{iso}"
                    unknown-location: "64221429090"
  • Add a charging-gt section. Inside it add:

    • a format field specifying how the location information should be delivered. It can be made up from fixed digits and any of these tags: {mcc}, {mnc}, and/or {iso}; which will substitute in the MCC, MNC, and ISO two letter country code respectively.

    • a unknown-location field indicating what to send to the SCP if location information cannot be obtained.

Related section: Location information

Disable sending of the charging GT to the SCP

In the imssf section, comment out the entire charging-gt section:

#                charging-gt:
#                    format: "6422142{iso}"
#                    unknown-location: "64221429090"

Related section: Location information

Only invoke the CAP charging service for terminating subscribers when they are roaming in a foreign country
                    only-charge-terminating-call-if-international-roaming: true

Related section: Location information

Always invoke the CAP charging service for terminating subscribers regardless of their location
                    only-charge-terminating-call-if-international-roaming: false

Related section: Location information

Use O-IM-CSI data from the HLR on originating calls

In the charging section:

        cap-charging:
            imssf:
                imcsi-fetching:
                    originating-tdp: 2

Related section: IM-CSI

Use VT-IM-CSI data from the HLR on originating calls

In the charging section:

        cap-charging:
            imssf:
                imcsi-fetching:
                    originating-tdp: 12

Related section: IM-CSI

Use O-IM-CSI data from the HLR on terminating calls

In the charging section:

        cap-charging:
            imssf:
                imcsi-fetching:
                    terminating-tdp: 2

Related section: IM-CSI

Use VT-IM-CSI data from the HLR on terminating calls

In the charging section:

        cap-charging:
            imssf:
                imcsi-fetching:
                    terminating-tdp: 12

Related section: IM-CSI

Disable retrieval of IM-CSI data from the HLR

In the imssf section, remove or comment out the entire imcsi-fetching section:

            imssf:
#               imcsi-fetching:
#                   originating-tdp: 2
#                   terminating-tdp: 12

To disable retrieval for only:

Related section: IM-CSI

Charging Data Records

What it does

Charging Data Records (CDRs) can be generated by the Rhino VoLTE TAS to record information about each call it processes. There are two types of CDRs: Interim CDRs and Session CDRs.

Interim CDRs

Interim CDRs are generated while a call is in progress, with multiple CDRs being generated during a single call. The Rhino VoLTE TAS can write the CDRs to the file system, send them to a CDF using Diameter Rf offline charging, or both.

There are two ways to control when interim CDRs should be generated:

  • You can change the maximum time to wait between creating each CDR.

  • You can instruct that a new CDR is created whenever the SDP for a call is modified.

In addition, one interim CDR is always generated when the call is answered and another when the call ends.

If you want to use Diameter Rf offline charging, interim CDR generation must be enabled.

Session CDRs

Session CDRs are generated at the completion of a call, with only one being produced for each call. They are written out to the file system.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to CDRs in the sentinel-volte/charging/cdr section.

What you need

  • ❏ Whether to generate a session CDR at the end of each call.

  • ❏ Whether to generate interim CDRs during a call.

When you are using interim CDRs:

  • ❏ Whether an interim CDR should be created any time the SDP in a call changes.

  • ❏ The maximum period to wait between creating interim CDRs.

  • ❏ Whether the Rhino VoLTE TAS should write copies of each interim CDR to the file system.

Setting up CDRs

I want to…​
Enable session CDR generation

In the charging, cdr section, set session-cdrs-enabled to true:

        session-cdrs-enabled: true

Related section: Session CDRs

Disable session CDR generation

In the charging, cdr section, set session-cdrs-enabled to false:

        session-cdrs-enabled: false

Related section: Session CDRs

Enable interim CDR generation

In the charging, cdr section, add an interim-cdrs section:

            interim-cdrs:
                write-cdrs-in-filesystem: true
                write-cdr-on-sdp-change: true
                interim-cdrs-period-seconds: 300

Related section: Interim CDRs

Disable interim CDR generation

In the charging, cdr section, remove or comment out the entire interim-cdrs section:

#            interim-cdrs:
#                write-cdrs-in-filesystem: true
#                write-cdr-on-sdp-change: true
#                interim-cdrs-period-seconds: 300

Related section: Interim CDRs

Generate an interim CDR whenever the SDP for a call changes

In the interim-cdrs section, set write-cdr-on-sdp-change to true:

                write-cdr-on-sdp-change: true

Related section: Interim CDRs

Prevent generation of interim CDRs when the SDP for a call changes

In the interim-cdrs section, set write-cdr-on-sdp-change to false:

                write-cdr-on-sdp-change: false

Related section: Interim CDRs

Change the maximum time to wait between generating interim CDRs

In the interim-cdrs section, set interim-cdrs-period-seconds to the desired maximum wait time in seconds:

                interim-cdrs-period-seconds: 350

Related section: Interim CDRs

Write copies of interim CDRs to the file system

In the interim-cdrs section, set write-cdrs-in-filesystem to true:

                write-cdrs-in-filesystem: true

Related section: Interim CDRs

Stop writing copies of interim CDRs to the file system

In the interim-cdrs section, set write-cdrs-in-filesystem to false:

                write-cdrs-in-filesystem: false

Related section: Interim CDRs

Home networks and roaming

The Rhino VoLTE TAS requires configuration of its home network details in order to handle number normalization and roaming properly. This section describes how to set the home network information for the Rhino VoLTE TAS. Furthermore, there are details on how to handle behavior concerning home network configuration, such as number normalization and roaming determination.

Setting the address handling and home network information for the Rhino VoLTE TAS requires editing of specific YAML configuration files.

For further information on how to edit YAML configuration files, see Declarative configuration.

In this section

Home network dialing

The Rhino VoLTE TAS requires information about the home network to correctly run number analysis.

How it works

The home network dialing configuration is composed of:

  • The home network’s domain name.

  • The country code dialing code, which is the home network’s code for dialing from external international networks.

  • The country’s ISO country code, which specifies the home network’s country in the two letter ISO 3166-1 alpha-2 format.

  • The home PLMN (Public Land Mobile Network) IDs, which defines the operator’s home network codes in a country.

Using the home network dialing configuration, the Rhino VoLTE TAS runs number analysis to support:

  • designating multiple home PLMN IDs in the home network

  • normalization of international, national, unknown, or subscriber NADI format addresses into either national or international formats

  • determining a call’s roaming status.

Number normalization requires additional configuration to operate. More details on this configuration is in Number normalization.

Roaming determination has additional configurability available. More details of this configuration is in Roaming and international status determination.

Configuration

What you need

  • ❏ The home network’s home domain.

  • ❏ The home network’s country dialing code.

  • ❏ The home network’s two letter ISO country code.

  • ❏ The home network’s PLMN ID(s).

Setting up home network dialing

I want to …​
Set my home network domain name

In the home-network section, set home-domain to your home network’s home domain:

    home-domain: example.com
Set my country dialing code for my network

In the home-network section, set home-network-country-dialing-code to your home network’s country dialing code:

    home-network-country-dialing-code: "64"
Set the ISO country code for my network

In the home-network section, set home-network-iso-country-code to your home network’s ISO country code:

    home-network-iso-country-code: NZ
Set the PLMN IDs for my network
    home-plmn-ids:
      - mcc: "001"
        mncs:
          - "01"
          - "001"
    correlation-ra-plmnid:
        mcc: "001"
        mnc: "01"

Number normalization

The Rhino VoLTE TAS supports number normalization to either the international format or the national format. The Rhino VoLTE TAS invokes the normalization process for number comparison, normalizing numbers on outgoing requests, checking if numbers are normalizable.

How it works

The Rhino VoLTE TAS may normalize numbers into the international format or the national format. The original number may be in one of the following formats:

  • International

  • National

  • Subscriber NADI format

  • an unknown format

When normalizing numbers to the international format:

When normalizing numbers to the national format:

Interactions with other services

Number normalization in used by several features of the Rhino VoLTE TAS for number comparison, checking if numbers are normalizable, or determining the status of a call. Since normalization is widespread in the Rhino VoLTE TAS, this section discusses only a selection of features that interact with number normalization.

MMTel services

MMTel services use the normalization to make URIs comparable and for call retarget destination.

For call barring services (ICB and OCB), normalization occurs for both an originating/terminating URI and the provisioned URI it is compared against.

For Communications Diversion (CDIV), normalization is used to check if a forwarding destination is valid by running a comparison. In addition, the forwarded target is set in the specified normalized format.

XCAP service

The XCAP service uses the configured normalization process to normalize numbers in MMTel CDIV rule targets and ICB/OCB conditions.

Short codes and vertical service codes

Request URIs may include short codes or vertical service codes. For an international format number prefixed by the home country code, the Rhino VoLTE TAS will normalize the number to remove the country code prefix before acting on the code. Normalization will not occur if the dialed string’s length is less than the configured min-normalizable-length value.

Configuration

The example number-analysis-config.yaml file shows example configuration for the home network’s number normalization rules in the normalization section.

The normalize-to variable is an enum. The valid values for this field are described in the reference guide’s section on normalize-to.

What you need

  • ❏ The home network’s country dialing code.

  • ❏ A minimum normalizable length for dialed numbers.

  • ❏ The national prefix number (escape code) for dialed national numbers.

  • ❏ The international prefix number (escape code) of dialed international numbers.

  • ❏ The network’s dialing code — this will act as the MNC for normalizing from the subscriber NADI format.

  • ❏ Whether to normalize numbers to an international or national format in the home network.

Setting up number normalization

I want to …​
Set up the home network settings for normalization

The normalization process in the Rhino VoLTE TAS requires details about the home network for it to work properly. These apply for normalizing for both national and international formats.

To configure the home network specific settings for number normalization:

        network-dialing-code: "6"
        international-prefix: "00"
        national-prefix: "0"
        min-normalizable-length: "0"
Normalize numbers to the international format

To set the Rhino VoLTE TAS to normalize numbers into the international format, in the normalization section, set normalize-to to international:

        normalize-to: international
Normalize numbers to the national format

To set the Rhino VoLTE TAS to normalize numbers into the national format, in the normalization section, set normalize-to to national:

        normalize-to: national

Roaming and international status determination

The Rhino VoLTE TAS requires configuration of how it determines whether addresses are international and/or roaming on the home network.

How it works

The Rhino VoLTE TAS determines if a session is roaming and if it represents an international call based on:

  • the location of the calling party, and

  • the destination address.

Determining international status

The Rhino VoLTE TAS uses the home network configuration to determine the international status of a subscriber.

If the checked address is not in an international format and non-international-format-number-is-national is set to true, the Rhino VoLTE TAS determines the number is not an international or international-exHC number.

Otherwise, the Rhino VoLTE TAS analyzes the call alongside the home network information to determine international status.

The Rhino VoLTE TAS determines the call’s international status according to the definitions given by 3GPP 24.611:

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.

Determining roaming status

The Rhino VoLTE TAS determines roaming status of a subscriber by checking the following:

  • Firstly, the home-plmn-ids MCCs and MNCs are checked with the subscriber address’s respective MCC and MNC.

    • If a home network MCC and MNC (PLMN ID) match with the address’s MCC and MNC respectively, the call is NOT-ROAMING.

    • If a home network MCC and address’s MCC match, but there is no MNC match, the call is NATIONAL roaming.

    • If a home network MCC does not match with the address’s MCC, the call is INTERNATIONAL roaming.

  • If the address has no MCC present, the ISO country code of the party is compared with the network’s configured home-network-iso-country-code.

    • If the ISO country codes match, the call is NOT-ROAMING, otherwise, it is INTERNATIONAL roaming.

  • If there is no ISO country code present, the Visited Network ID of the party is compared with the network’s configured home-domain.

    • If the network IDs match, the call is NOT-ROAMING, otherwise it is INTERNATIONAL roaming.

  • Finally, if the call’s visited MCC nor visited network are not present, the roaming status is UNKNOWN.

Using the visited network ID

The Rhino VoLTE TAS determines the visited network ID on an incoming request with the following techniques:

  • Firstly, if the Rhino VoLTE TAS has already loaded on the visited network ID for the session, it uses that.

  • Otherwise, the Rhino VoLTE TAS uses the P-Visited-Network-Id header for originating sessions or OC-Term-P-Visited-Network-Id for terminating sessions on the incoming request.

  • Finally, the Rhino VoLTE TAS will query for the third party registration data stored in subscriber data.

Interactions with other services

Call Barring

The Rhino VoLTE TAS uses the roaming and international status for MMTel communication barring features. For further information on barring feature configuration, see Call barring.

International Call Management

The outcome of international status determination is used to decide whether the International Call Management service should run.

Configuration

Roaming determination depends on number normalization and home network dialing configurations.

It is possible to configure a list of addresses that will have roaming determination skipped. Contact Metaswitch support for more information on how to configure roaming determination skip lists.

What you need

  • ❏ Whether to treat non-international numbers as national numbers.

  • ❏ Whether to end a call if there is no visited network information on the incoming call request.

  • ❏ The minimum length of the destination address required to set international and roaming status.

  • ❏ For a GSM network, whether to use the HLR to determine roaming.

Setting up roaming and international status

I want to …​
Treat any non-international format number as a national number

To set the Rhino VoLTE TAS to treat any non-international format number as a national number for roaming, in the international-and-roaming section, set non-international-format-number-is-national to true:

            non-international-format-number-is-national: true
End a call if no visited network can be determined

To set the Rhino VoLTE TAS to end an incoming call if the P-Visited-Network-Id cannot be determined, in the international-and-roaming section, set end-call-if-no-visited-network to true:

            end-call-if-no-visited-network: true
Not determine roaming and international status for dialed digits below a certain length

To set the Rhino VoLTE TAS to not determine roaming or international status for short dialed digit strings (such as any length below 7 for example), in the international-and-roaming section, set min-length to 7:

            min-length: 7
Use the HLR for determining roaming with the GSM network

To set the Rhino VoLTE TAS to query the HLR for determining roaming using GSM network information, in the mmtel section, set determine-roaming-from-hlr to true:

        determine-roaming-from-hlr: true

Non-provisionable URIs

There will be URIs in the network that should not be provisioned for a subscriber.

How it works

The non-provisionable URIs specified in the Rhino VoLTE TAS are used for denying a call forward. If a non-provisionable URI matches a target URI (after normalization), any call forwarding rules related to this are ignored. For further information on call forwarding, see Communications Diversion (CDIV).

In addition, any XCAP request to create a forwarding rule which contains a non-provisonable URI is rejected.

Interactions with other services

The configured non-provisionable URIs interacts with call forwarding and limits what call forwarding rules can be provisioned.

Configuration

The non-provisionable-uris field designates what the Rhino VoLTE TAS will not provision, as shown in the example number-analysis-config.yaml file.

Setting up non-provisionable URIs configuration

I want to …​
Specify a series of URIs that the Rhino VoLTE TAS will reject call forwarding rules for

To set the Rhino VoLTE TAS to disable provisioning for certain URIs, in the number-analysis section, set non-provisionable-uris with a list of non-provisionable URIs.

    non-provisionable-uris:
        - "tel:111"
        - "sip:111@example.com"

Managing the subscriber data

Subscriber data document schemas

MMTel supplementary services schema

The Rhino VoLTE TAS supports all of GSMA IR.92 MMTel supplementary services except for Message Waiting Indication 3GPP TS 24.606.

The details of the MMTel-Services Schema are detailed in 3GPP 29.364 Section 7.2.

Supported services

The supported services in the MMTel Services schema for the Rhino VoLTE TAS are detailed in the following table.

Table 3. Supported Services in MMTel Services Document
Service XPath

Originating Identity Presentation (OIP)

/MMTELServices/complete-originating-identity-presentation/originating-identity-presentation

Originating Identity Restriction (OIR)

/MMTELServices/complete-originating-identity-restriction/originating-identity-presentation-restriction

Terminating Identity Presentation (TIP)

/MMTELServices/complete-terminating-identity-presentation/terminating-identity-presentation

Terminating Identity Restriction (TIR)

/MMTELServices/complete-terminating-identity-restriction/terminating-identity-presentation-restriction

Incoming Call Barring (ICB)

/MMTELServices/complete-communication-barring/incoming-communication-barring

Outgoing Call Barring (OCB)

/MMTELServices/complete-communication-barring/outgoing-communication-barring

Communications Diversion (CDIV)

/MMTELServices/complete-communication-diversion/communication-diversion

Conferencing (CONF)

/MMTELServices/complete-conference/operator-conference

Communication Waiting (CW)

/MMTELServices/complete-communication-waiting/communication-waiting

Communication Hold (HOLD)

/MMTELServices/complete-communication-hold/operator-communication-hold

Flexible Alerting (FA)

/MMTELServices/complete-flexible-alerting/operator-flexible-alerting-group

Explicit Communication Transfer (ECT)

/MMTelServices/complete-explicit-communication-transfer/operator-explicit-communication-transfer

IMS-ODB-Information schema

The IMS-ODB-Information document allows for Operator Determined Barring rules to be defined in the network.

The IMS-ODB-Information Schema is detailed in 3GPP 29.364 Section 10.2.

Metaswitch-TAS-Services schema

The Rhino VoLTE TAS uses a non-standard user document to support additional functionality beyond the MMTel supplementary services. This user document has the service indicator Metaswitch-TAS-Services.

This page details the schema for the Metaswitch-TAS-Services document.

Document overview

The Metaswitch-TAS-Services document stores non-standard subscriber service data for certain Rhino VoLTE TAS functionality.

The services that use this non-standard user document are described in:

Schema structure

The schema for the Metaswitch-TAS-Services document is defined in several xsd files.

There are two types of files that define the schema. These files establish the components such as elements and types that are either:

  • shared across the schema

  • specific for each service that is configured in the document

General schema files

The Metaswitch-TAS-Services document defines elements and types that are shared across the Rhino VoLTE TAS’s services that require non-standard subscriber data. These are defined in the following files:

  • metaswitch-tas-services.xsd

  • basic-settings.xsd

  • additional-attributes.xsd

metaswitch-tas-services.xsd

The metaswitch-tas-services.xsd file serves as the basis of the schema definition. It includes within its definition the xsd files for the basic-settings.xsd and each of the service specific schema definitions.

metaswitch-tas-services.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cp="urn:ietf:params:xml:ns:common-policy"
           xmlns:ocp="urn:oma:xml:xdm:common-policy"
           xmlns:mt="http://metaswitch.com/XMLSchema/tas"
           targetNamespace="http://metaswitch.com/XMLSchema/tas"
           elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- the standardised schemas are in another namespace, so use xs:import -->
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../XCAP.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-common-data.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../originating-identity-presentation.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../terminating-identity-presentation.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../communication-diversion.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../communication-waiting.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../communication-barring.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-originating-identity-presentation.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-terminating-identity-presentation.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-malicious-communication-identification.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-communication-diversion.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-communication-waiting.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-communication-hold.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-communication-barring.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-completion-of-communication.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-message-waiting-indication.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-conference.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-advice-of-charge.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-explicit-communication-transfer.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-customized-alerting-tone.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-flexible-alerting.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../flexible-alerting.xsd" />

    <!-- tas-types is the same namespace, so use xs:include -->
    <xs:include schemaLocation="basic-settings.xsd" />
    <xs:include schemaLocation="location-based-dialling.xsd" />
    <xs:include schemaLocation="forward-to-voicemail.xsd" />
    <xs:include schemaLocation="companion-device.xsd" />

    <xs:element name="metaswitch-services" type="mt:metaswitch-services-type"/>

    <xs:complexType name="metaswitch-services-type">
        <xs:sequence>
            <xs:element name="complete-basic-settings" type="mt:completeBasicSettingsType" minOccurs="0"/>
            <xs:element name="complete-location-based-dialling" type="mt:completeLocationBasedDiallingType" minOccurs="0"/>
            <xs:element name="complete-forward-to-voicemail" type="mt:completeForwardToVoicemailType" minOccurs="0"/>
            <xs:element name="complete-companion-device" type="mt:completeCompanionDeviceType" minOccurs="0"/>

            <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

</xs:schema>

basic-settings.xsd

The basic-settings.xsd file includes the non-standard additional-attributes.xsd file.

basic-settings.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mt="http://metaswitch.com/XMLSchema/tas"
           targetNamespace="http://metaswitch.com/XMLSchema/tas"
           elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- the standardised schemas are in another namespace, so use xs:import -->
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../XCAP.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-common-data.xsd" />

    <xs:include schemaLocation="additional-attributes.xsd" />

    <xs:complexType name="completeBasicSettingsType">
        <xs:sequence>
            <xs:element name="basic-settings" type="mt:basicSettingsType" minOccurs="0"/>
            <xs:element name="operator-basic-settings" type="mt:operatorBasicSettingsType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="basicSettingsType">
        <xs:complexContent>
            <xs:extension base="ss:simservType">
                <xs:sequence>
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="operatorBasicSettingsType">
        <xs:complexContent>
            <xs:extension base="ss:operatorServiceConfigType">
                <xs:sequence>
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

additional-attributes.xsd

The additional-attributes.xsd file defines a key-value pair type to store additional attributes.

additional-attributes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mt="http://metaswitch.com/XMLSchema/tas"
           targetNamespace="http://metaswitch.com/XMLSchema/tas"
           elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xs:element name="additional-attributes">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="attribute" type="mt:keyValuePairType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="keyValuePairType">
        <xs:sequence>
            <xs:element name="key" type="xs:string"/>
            <xs:element name="value" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

</xs:schema>

Service specific schema files

companion-device.xsd

See Companion device subscriber data for more information on managing the subscriber data for the companion device service.

companion-device.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mt="http://metaswitch.com/XMLSchema/tas"
           targetNamespace="http://metaswitch.com/XMLSchema/tas"
           elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- the standardised schemas are in another namespace, so use xs:import -->
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../XCAP.xsd"/>
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
               schemaLocation="../operator-common-data.xsd"/>

    <xs:include schemaLocation="additional-attributes.xsd"/>

    <xs:complexType name="completeCompanionDeviceType">
        <xs:sequence>
            <xs:element name="companion-device" type="mt:companionDeviceType" minOccurs="0"/>
            <xs:element name="operator-companion-device" type="mt:operatorCompanionDeviceType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="companionDeviceType">
        <xs:complexContent>
            <xs:extension base="ss:simservType">
                <xs:sequence>
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="operatorCompanionDeviceType">
        <xs:complexContent>
            <xs:extension base="ss:operatorServiceConfigType">
                <xs:sequence>
                    <!-- The shared identity of the subscriber, this maybe a SIP or TEL URI, or both -->
                    <xs:element name="shared-identity-sip" type="xs:anyURI"/>
                    <xs:element name="shared-identity-tel" type="xs:anyURI"/>
                    <!-- Whether or not to hide/block undisclosed numbers -->
                    <xs:element name="hide-companion-identity" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="devices" type="mt:devicesType"/>
                    <!-- Add additional-attributes to keep consistent with other metaswitch xml schema types -->
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="devicesType">
        <xs:sequence>
            <xs:element name="device" minOccurs="0" maxOccurs="unbounded" type="mt:deviceType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="deviceType">
        <xs:complexContent>
          <xs:extension base="ss:simservType">
            <xs:sequence>
                <xs:element name="model" type="xs:string"/>
                <xs:element name="radio-access" type="mt:radioAccessType"/>
                <xs:element name="impi" type="xs:string" minOccurs="0" />
                <xs:element name="imsi" type="xs:string" minOccurs="0" />
                <xs:element name="imei" type="xs:string" minOccurs="0" />
                <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
    </xs:complexType>


    <xs:complexType name="radioAccessType">
        <xs:all>
            <xs:element name="PS" type="mt:networkTypePS"/>
            <xs:element name="CS" type="mt:networkTypeCS"/>
        </xs:all>
    </xs:complexType>

    <xs:complexType name="networkType">
        <xs:sequence>
            <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="networkTypePS">
        <xs:complexContent>
            <xs:extension base="mt:networkType"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="networkTypeCS">
        <xs:complexContent>
            <xs:extension base="mt:networkType">
                <xs:attribute name="msisdn" type="xs:string" use="required"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

location-based-dialling.xsd

See Location based dialing subscriber data for more information on managing the subscriber data for the location based dialing service.

location-based-dialling.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mt="http://metaswitch.com/XMLSchema/tas"
           targetNamespace="http://metaswitch.com/XMLSchema/tas"
           elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- the standardised schemas are in another namespace, so use xs:import -->
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../XCAP.xsd"/>
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
               schemaLocation="../operator-common-data.xsd"/>

    <xs:include schemaLocation="additional-attributes.xsd"/>

    <xs:complexType name="completeCompanionDeviceType">
        <xs:sequence>
            <xs:element name="companion-device" type="mt:companionDeviceType" minOccurs="0"/>
            <xs:element name="operator-companion-device" type="mt:operatorCompanionDeviceType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="companionDeviceType">
        <xs:complexContent>
            <xs:extension base="ss:simservType">
                <xs:sequence>
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="operatorCompanionDeviceType">
        <xs:complexContent>
            <xs:extension base="ss:operatorServiceConfigType">
                <xs:sequence>
                    <!-- The shared identity of the subscriber, this maybe a SIP or TEL URI, or both -->
                    <xs:element name="shared-identity-sip" type="xs:anyURI"/>
                    <xs:element name="shared-identity-tel" type="xs:anyURI"/>
                    <!-- Whether or not to hide/block undisclosed numbers -->
                    <xs:element name="hide-companion-identity" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="devices" type="mt:devicesType"/>
                    <!-- Add additional-attributes to keep consistent with other metaswitch xml schema types -->
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="devicesType">
        <xs:sequence>
            <xs:element name="device" minOccurs="0" maxOccurs="unbounded" type="mt:deviceType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="deviceType">
        <xs:complexContent>
          <xs:extension base="ss:simservType">
            <xs:sequence>
                <xs:element name="model" type="xs:string"/>
                <xs:element name="radio-access" type="mt:radioAccessType"/>
                <xs:element name="impi" type="xs:string" minOccurs="0" />
                <xs:element name="imsi" type="xs:string" minOccurs="0" />
                <xs:element name="imei" type="xs:string" minOccurs="0" />
                <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
    </xs:complexType>


    <xs:complexType name="radioAccessType">
        <xs:all>
            <xs:element name="PS" type="mt:networkTypePS"/>
            <xs:element name="CS" type="mt:networkTypeCS"/>
        </xs:all>
    </xs:complexType>

    <xs:complexType name="networkType">
        <xs:sequence>
            <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="networkTypePS">
        <xs:complexContent>
            <xs:extension base="mt:networkType"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="networkTypeCS">
        <xs:complexContent>
            <xs:extension base="mt:networkType">
                <xs:attribute name="msisdn" type="xs:string" use="required"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

forward-to-voicemail.xsd

See Forward to voicemail subscriber data for more information on managing the subscriber data for the forward to voicemail service.

forward-to-voicemail.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mt="http://metaswitch.com/XMLSchema/tas"
           targetNamespace="http://metaswitch.com/XMLSchema/tas"
           elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- the standardised schemas are in another namespace, so use xs:import -->
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../XCAP.xsd" />
    <xs:import namespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" schemaLocation="../operator-common-data.xsd" />

    <xs:include schemaLocation="additional-attributes.xsd" />

    <xs:complexType name="completeForwardToVoicemailType">
        <xs:sequence>
            <xs:element name="forward-to-voicemail" type="mt:forwardToVoicemailType" minOccurs="0"/>
            <xs:element name="operator-forward-to-voicemail" type="mt:operatorForwardToVoicemailType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="forwardToVoicemailType">
        <xs:complexContent>
            <xs:extension base="ss:simservType">
                <xs:sequence>
                    <xs:element name="voicemail-server" type="xs:string" minOccurs="0"/>
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="operatorForwardToVoicemailType">
        <xs:complexContent>
            <xs:extension base="ss:operatorServiceConfigType">
                <xs:sequence>
                    <xs:element name="allow-subscriber-update" type="xs:boolean" default="false"/>
                    <xs:element ref="mt:additional-attributes" minOccurs="0"/>
                    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

Companion device subscriber data

The companion device service uses data configured in the subscriber’s Metaswitch-TAS-Services document. To see what operator-wide service configuration is available for the companion device service, check Companion device.

Example document

This example subscriber data document specifies that:

  • The companion device service is active for the subscriber and authorized by the operator.

  • The shared identities of all companion devices declared is sip:bob@home1.opencloud.co.nz

  • A PS-only companion device is configured for the subscriber.

<metaswitch-services xmlns="http://metaswitch.com/XMLSchema/tas">
    <complete-basic-settings>
        <basic-settings active="true"/>
        <operator-basic-settings authorized="true"/>
    </complete-basic-settings>
    <complete-companion-device>
        <companion-device active="true"/>
        <operator-companion-device authorized="true">
            <shared-identity-sip>sip:bob@home1.opencloud.co.nz</shared-identity-sip>
            <devices>
                <device active="true">
                    <model>companion-device-1</model>
                    <impi/>
                    <imsi/>
                    <imei/>
                    <radio-access>
                        <PS/>
                    </radio-access>
                </device>
            </devices>
        </operator-companion-device>
    </complete-companion-device>
</metaswitch-services>

Setting up the companion device service

I want to …​

Authorize and activate the companion device service for the subscriber

In the element at /metaswitch-services/complete-companion-device/operator-companion-device, set the authorized attribute to true:

<operator-companion-device authorized="true">

In the element at /metaswitch-services/complete-companion-device/companion-device, set the active attribute to true:

 <companion-device active="true"/>
Set the shared SIP identity for the subscriber’s companion devices

In the element at /metaswitch-services/complete-companion-device/operator-companion-device/shared-identity-sip, set the shared-identity-sip element to the SIP identity for the subscriber’s companion devices:

<shared-identity-sip>sip:bob@home1.opencloud.co.nz</shared-identity-sip>
Add a PS domain only companion device

In the element at /metaswitch-services/complete-companion-device/operator-companion-device/devices, add the following device type element to it:

<devices>
    <device active="true">
        <model>companion-device-1</model>
        <impi/>
        <imsi/>
        <imei/>
        <radio-access>
            <PS/>
        </radio-access>
    </device>
</devices>
Add a PS and CS domain capable companion device

In the element at /metaswitch-services/complete-companion-device/operator-companion-device/devices, add the following device type element to it:

<devices>
    <device active="true">
        <model>companion-device-1</model>
        <impi/>
        <imsi/>
        <imei/>
        <radio-access>
            <PS/>
            <CS msisdn="641234567"/>
        </radio-access>
    </device>
</devices>
Add a PS and CS domain capable companion device with a defined IMPI, IMSI, and IMEI

In the element at /metaswitch-services/complete-companion-device/operator-companion-device/devices, add the following device type element to it:

<devices>
    <device active="true">
        <model>companion-device-1</model>
        <impi>234150999999999@ims.mnc015.mcc234.3gppnetwork.org</impi>
        <imsi>234150999999999</imsi>
        <imei>90420156-025763-0</imei>
        <radio-access>
            <PS/>
            <CS msisdn="1234567"/>
        </radio-access>
    </device>
</devices>

Schema

The schema definition dedicated to the companion device service is stored in the companion-device.xsd.

Location based dialing subscriber data

The location based dialing service uses data configured in the subscriber’s Metaswitch-TAS-Services document. To see what operator-wide service configuration is available for the location based dialing service, check Location based dialing (LBD).

Example document

This example subscriber data document specifies that:

  • The location based dialing service is active for the subscriber and authorized by the operator.

  • The location based dialing configured group ID for the subscriber is PremiumGroup. This configured group ID may affect the destination address the subscriber is redirected to by the location based dialing service.

<metaswitch-services xmlns="http://metaswitch.com/XMLSchema/tas">
    <complete-basic-settings>
        <basic-settings active="true"/>
        <operator-basic-settings authorized="true"/>
    </complete-basic-settings>
    <complete-location-based-dialling>
        <location-based-dialling active="true"/>
        <operator-location-based-dialling authorized="true">
            <group-id>PremiumGroup</group-id>
        </operator-location-based-dialling>
    </complete-location-based-dialling>
</metaswitch-services>

Setting up the location based dialing service

I want to …​

Authorize and activate the location based dialing service for the subscriber

In the element at /metaswitch-services/location-based-diallingl/operator-location-based-dialling set the authorized attribute to true:

<operator-location-based-dialling authorized="true">

In the element at /metaswitch-services/complete-location-based-dialling/location-based-dialling set the active attribute to true:

<location-based-dialling active="true"/>
Set the subscriber’s group ID used to decide location based dialing behavior

The configured group ID may affect the destination address the subscriber is redirected to by the location based dialing service. Contact Metaswitch support for more information on configuring the location based dialing service.

In the element at /metaswitch-services/location-based-diallingl/operator-location-based-dialling/group-id set the element content to the group ID configured for the location based dialing service:

<group-id>PremiumGroup</group-id>

Schema

The schema definition dedicated to the location based dialing service is stored in the location-based-dialling.xsd.

Forward to voicemail subscriber data

The forward to voicemail service uses data configured in the subscriber’s Metaswitch-TAS-Services document. To see what operator-wide service configuration is available for the forward to voicemail service, check Voicemail forwarding.

Configuring the voicemail server URI

All subscribers using the Voicemail Forwarding service need to be configured with a voicemail server URI in the metaswitch-services section of their subscriber profile. This would normally be the single entry from the list of known voicemail servers.

Rhino VoLTE TAS has configuration to allow a subscriber to change their voicemail server URI. This is controlled by setting Allow Subscriber Update to true or false in the metaswitch-services section of their subscriber profile. The default deployment does not support subscribers being allowed to change their voicemail server URI. This is because there are policing and network routing issues related to user supplied URIs, especially Internet and email style URIs without user=phone.

Example document

This example subscriber data document specifies that:

  • The forward to voicemail service is active for the subscriber and authorized by the operator.

  • The voicemail server for which calls to the subscriber are forwarded to is sip:vms@home1.opencloud.co.nz

  • The subscriber is permitted to update and set their own voicemail server URI to forward calls to.

<metaswitch-services xmlns="http://metaswitch.com/XMLSchema/tas">
    <complete-basic-settings>
        <basic-settings active="true"/>
        <operator-basic-settings authorized="true"/>
    </complete-basic-settings>
    <complete-forward-to-voicemail>
        <forward-to-voicemail active="true">
            <voicemail-server>sip:vms@home1.opencloud.co.nz</voicemail-server>
        </forward-to-voicemail>
        <operator-forward-to-voicemail authorized="true">
            <allow-subscriber-update>true</allow-subscriber-update>
        </operator-forward-to-voicemail>
    </complete-forward-to-voicemail>
</metaswitch-services>

Setting up the forward to voicemail service

I want to …​

Authorize and activate the companion device service for the subscriber

In the element at /metaswitch-services/complete-forward-to-voicemail/operator-forward-to-voicemail, set the authorized attribute to true:

<operator-forward-to-voicemail authorized="true">

In the element at /metaswitch-services/complete-forward-to-voicemail/forward-to-voicemail, set the active attribute to true:

<forward-to-voicemail active="true">
Set the subscriber’s forwarding destination voicemail server URI

In the element at /metaswitch-services/complete-forward-to-voicemail/forward-to-voicemail/voicemail-server, set it to the destination voicemail server URI:

<voicemail-server>sip:vms@home1.opencloud.co.nz</voicemail-server>
Permit subscribers to update and set their own voicemail server URI to forward calls to

In the element at /metaswitch-services/complete-forward-to-voicemail/operator-forward-to-voicemail/allow-subscriber-update, set it to true:

<allow-subscriber-update>true</allow-subscriber-update>

Schema

The schema definition dedicated to the forward to voicemail device service is stored in the forward-to-voicemail.xsd.

Accessing subscriber data

This page discusses the different parts of the Rhino VoLTE TAS that may access subscriber data stored in the network’s HSS and/or HLR.

Data stored on the HSS

The HSS stores the subscribers' service and subscription data used by the Rhino VoLTE TAS for IMS networking.

For running services that are dependent on the subscriber’s configuration profile, the Rhino VoLTE TAS accesses the HSS through the Diameter Sh interface.

What accesses the subscriber data

The Rhino VoLTE TAS retrieves a subscriber’s data via the internal Sh Cache Microservice (ShCM) node. Configuration of the Sh interface and ShCM is detailed in HSS integration.

Through the ShCM node, the following Rhino VoLTE TAS nodes access the HSS subscriber data:

  • The MMT node for data used by services on the MMTel TAS and SCC-AS.

  • The SMO node for data used by services on the IP-SM-GW.

  • The MAG node for features that manage subscriber data such as the XCAP server, REST API, or an internal web user interface. Provisioning subscriber data describes these features in further detail.

A UE may use the XCAP protocol to manage service specific data through the Rhino VoLTE TAS.

Data stored on the HLR

Service data used by the Rhino VoLTE TAS for GSM or CDMA networking is stored on the HLR. The Rhino VoLTE TAS uses the MAP protocol to access the HLR.

Access to service data in the HLR is necessary for many services to operate using GSM and CDMA networking.

Configuration of the MAP interface is detailed in HLR integration.

Provisioning subscriber data

IMS-defined subscriber data

The subscriber’s IMS subscription in the HSS needs to be provisioned to utilize IMS subscription data. This is not something that the Rhino VoLTE TAS can do. This must be performed by the operator using the tools or APIs provided by the HSS vendor.

Service-specific subscriber data

Service-specific subscriber data determines a subscriber’s service profile, services enabled for the subscribers, and calls they are allowed to make.

The following tools are available for managing service specific subscriber data.

Subscriber access via XCAP

The Rhino VoLTE TAS allows a UE to configure subscriber service data via the XCAP protocol on the Ut interface. This includes support for bootstrap authentication and NAF XCAP interactions on the Rhino VoLTE TAS’s MAG nodes. For detailed information on configuring the interfaces that use XCAP, see RVT XCAP.

Rhino TAS REST API framework

The Rhino TAS REST API allows for managing per-subscriber service data configurations. This supports the operations to Create, Read, Modify and Delete a subscriber’s service data.

For further information, see the Sentinel VoLTE Provisioning REST API documentation.

Web GUI provisioning and editing

There is support for an operator to manually manage subscriber data with the Rhino VoLTE TAS via a Web GUI. Contact Metaswitch support for more details.

HSS or HLR vendor’s tools

The service-specific subscriber data may be provisioned by an operator using the HSS or HLR vendor’s supplied tools and APIs given a service template.

Using the alternate Cassandra schema

This section describes the procedures for changing the schema that Sentinel Registrar components of MMT and SMO nodes use.

The default schema for storing third-party registration data in the TSN may have high disk usage. This disk usage is a consequence of decisions about table schema used by Registrar components and data handling in the Cassandra database engine. Under some circumstances disk usage may become unpredicatable.

To reduce overall disk space usage and to improve predictablility an alternative Cassandra schema is provided. The instructions here allow you to change the MMT and SMO nodes to use the alternative schema.

Both the MMT and SMO nodes store third-party registration data on the TSN node. Separate instructions are provided for the MMT and SMO nodetypes. Parts of the proceedure require a maintenance window. Each nodetype may be done in a separate maintenance window.

Change the schema for MMT nodes

The default schema uses the first-party REGISTER callID field as a part of the primary key. RFC 3261 Section 10.2 states that User Equipment (UE) should use the same callID for the duration of the time it is registered. As the specification allows UE to use different CALLID values for the same registration, this requires proper handling.

As the callID is a part of the primary key, one row is used per unique callID, which may result in multiple rows representing the same logical registration. In cases where a significant proportion of UE on the network do not reuse their callID significantly more disk space is required to hold registration records. This contributes to the disk space for registration records being unpredictable under some circumstances.

The alternate schema uses the IMS private identity (hereafter deviceID) in place of callID in the schema. Per 3gpp 24.229 specification this must be set on all REGISTER attempts. As the deviceID does not change from registration attempt to registration attempt, the size of the database is more predictable.

See Data Schema for details of the Registrar schemas.

The following sections provide instructions for switching to the alternate schema on the MMT node. The required tables already exist on the TSN. You will change MMT configuration to use the alternate tables.

Impacts

During the change of the schema, the system may be affected as follows:

  1. There will be an increase in the number of HSS queries. This is because the third-party registrations serve as a cache, and in their absence, devices can only be verified through queries to the HSS. After the procedure is complete, the number of HSS queries should gradually return to the pre-maintenance window level.

    Note The speed at which the number of HSS queries returns to normal depends on the registration validity period. It can be very quick or fairly slow. It is anticipated to be very quick on average.
  2. When you run the TRUNCATE command, disk usage will not drop immediately. Disk usage will only drop after the nodetool clearsnapshot command is run. This is because the TRUNCATE command moves the data to a snapshot instead of deleting. The snapshot is only removed when the nodetool clearsnapshot command is run.

Note If you encounter any impacts that are not listed, contact Metaswitch technical support.

Pre-maintenance window steps for changing the Cassandra schema

Before entering the maintenance window you need to take some steps to get prepared. Performing these beforehand ensures that changing the Cassandra schema is a smooth exercise. Some steps can be done well in advance. Other steps need to bedone immediately before entering the maintenance window, as they are a final check to ensure everything is ready for the change.

Pre-maintenance window steps that can be done in advance

Verify the deployed MMT version

Make sure that the MMT VMs have already been upgraded to at least the maintenance version of RVT 4.1-1-1.0.0. The configuration changes that are being made will only work if the MMT is at least this version.

Create file with commands to run

There are commands that will need to be run in preparation for and during the Cassandra schema change. These commands requires specific arguments that need to be prepared beforehand. Creating a file of commands ready to be copy/pasted and run beforehand ensures smooth running of the steps. Placeholder values are of the form <…​>. <a|b> means a choice of either a or b. For example, mmt-<gsm|cdma> means mmt-gsm or mmt-cdma.

The file of commands can be stored anywhere that is convenient.

Many of the commands are rvtconfig commands. Further information can be found in the rvtconfig reference.

Determine the following arguments:

  1. tsn-mgmt-address - The management IP address of at least one TSN node. The TSN management IP addresses can be found in the TSN section of the SDF. If multiple addresses are used, they should be formatted as -c <address1> <address2>…​.

  2. deployment-id - This can be found in the SDF under the key deployment-id.

  3. site-id - The site-id of the site you are changing config for. This can be found in the SDF as site-id.

  4. group-id - Either RVT-mmt-gsm.<site-id> or RVT-mmt-cdma.<site-id> depending on whether the MMTs are of the GSM or CDMA variant. If you are unsure, this can be determined from the rvtconfig-path below.

  5. sdf-path - The path to the SDF file on your SIMPL VM.

  6. rvtconfig-path - The path to the rvtconfig on your SIMPL VM. This is expected to be something like: /home/admin/.local/share/csar/mmt-gsm/<version>/resources

If Cassandra authentication is enabled, then two additional arguments will be required for every rvtconfig command.

  1. cds-username - Username to authenticate with Cassandra. You can find it in the SDF under cassandra-username.

  2. cds-password-secret-name - Password identifier to authenticate with Cassandra. You can find it in the SDF under cassandra-password-id.

They are added in the format --cds-username <cds-username> --cds-password-secret-name <cds-password-secret-name> as the last two arguments to every rvtconfig command.

Create a text file containing all the subsequent commands with substitutions completed.

Take a backup of the current configuration

In case you need to roll back later, prepare a copy of the current configuration. Otherwise, you may have to recreate your configuration files manually.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

    $ cd <rvtconfig-path>
    $ rvtconfig dump-config -c <tsn-mgmt-address> -d <deployment-id> --group-id <group-id> --vm-version-source this-rvtconfig --output-dir ~/yamls-rollback
    Note --output-dir is the output directory for the rvtconfig dump-config command. Any easily accessible directory can be chosen and the command will create the directory if it does not exist. The recommendation is to maintain ~/yamls-rollback, as this value is referenced in the rollback procedure. In the event that a different folder is used, substitute that value for ~/yamls-rollback in the rollback procedure.
Create the new configuration file

The new configuration needs to be written for upload. The configuration points to change are located in the mmt-<gsm|cdma>-overrides.yaml file in ~/yamls. Create the file if it does not exist.

MMT configuration change
Caution Contact Metaswitch technical support for assistance with writing the new configuration.
Warning Yaml uses semantic whitespace. The resulting file must be valid yaml that rvtconfig can accept.

If mmt-<gsm|cdma>-overrides.yaml does not exist, create it with the following content:

rhino-config:rhino-configuration:
  namespaces:
  - name: ''
    profile-tables:
    - name: RegistrarConfigurationTable
      profiles:
        - name: 'Metaswitch::::'
          present: true
          attributes:
            - name: usePrivateIdAsRegistrarDataPrimaryKey
              content: 'true'

If mmt-<gsm|cdma>-overrides.yaml exists and does not contain the string RegistrarConfigurationTable, insert the following contents immediately below the line profile-tables::

    - name: RegistrarConfigurationTable
      profiles:
        - name: 'Metaswitch::::'
          present: true
          attributes:
            - name: usePrivateIdAsRegistrarDataPrimaryKey
              content: 'true'

If mmt-<gsm|cdma>-overrides.yaml exists and contains the string RegistrarConfigurationTable, insert the following into the attributes key of RegistrarConfigurationTable:

            - name: usePrivateIdAsRegistrarDataPrimaryKey
              content: 'true'

Pre-maintenance window steps to be done immediately prior to entering the maintenance window

Caution Before performing these steps, ensure that you have:
  1. A file with all the commands that need to be run for changing the Cassandra schema. The commands will have all the required arguments substituted.

  2. Two sets of .yaml configuration files - the new configuration (~/yamls), the current config (~/yamls-rollback).

  3. Verified that the deployment consists of the right version of the VMs.

Compare live configuration on MMTs with configuration on SIMPL
  1. Use SSH to access the SIMPL VM.

  2. Verify that the directory /tmp/checkdiff does not exist. If the directory does exist, remove it.

  3. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig compare-config -c <tsn-mgmt-address> -t mmt-<gsm|cdma> -i ~/yamls-rollback --output-dir /tmp/checkdiff --vm-version-source this-rvtconfig
Caution --output-dir is the output directory for the rvtconfig compare-config command. The command will create the directory if it does not exist and will return an error if the directory does exist.
  1. Verify that the command completes with:

No differences found in yaml files.
Uploading this configuration will have no effect unless secrets, certificates or licenses have changed, or --reload-resource-adaptors is specified.

If the output returned does not include "No differences found in yaml files.", contact Metaswitch technical support.

Perform health checks on MMTs in the deployment

The deployment needs to be in a healthy state. To verify that the deployment is healthy, run the following tests.

Run validation tests with CSAR validate
  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ csar validate --vnf mmt-<gsm|cdma> --sdf <sdf-path>
  1. Verify that the command completes with:

All tests passed for CSAR 'mmt-<gsm|cdma>/<version-number>'!
Enter the maintenance window

If all the healthchecks above pass, start a maintenance window and then run through the steps for changing the Cassandra schema. To enter a maintenance window:

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig enter-maintenance-window -c <tsn-mgmt-address> -d <deployment-id> -S <site-id>

Procedure

This section describes the steps for changing the primary key for MMT nodes. These steps are expected to take 30 minutes to complete.

Note Before beginning these steps, ensure that the placeholder values in commands listed here have been substituted with the required values. Placeholder values are of the form <…​>.

Truncate the registrations and assocuris tables on Cassandra

The existing registrations and assocuris tables take up some space on disk. Truncate these tables to ensure free disk space is over 50%. Truncation must be run on one TSN node.

  1. Use SSH to access the TSN as the primary user (sentinel).

  2. Start the Cassandra CLI by running the command:

$ cqlsh
  1. Truncate the tables by running the command:

TRUNCATE opencloud_thirdparty_reg.REGISTRATIONDATA;
TRUNCATE opencloud_thirdparty_reg.ASSOCURIS;
  1. Verify that there are no messages printed to the console after running the TRUNCATE command.

  2. Exit the Cassandra CLI by running:

$ exit
Note If the TRUNCATE command fails, run the next command (nodetool clearsnapshot), before attempting to run the TRUNCATE command and the nodetool command again.

Clear snapshots on all TSN nodes

  1. SSH as the primary user (sentinel) into each of the TSNs sequentially and run the command:

$ nodetool clearsnapshot opencloud_thirdparty_reg --all

Verify that the truncation has been successful

  1. Run the command:

$ df -h
  1. Verify that for the following two rows in the output, the <use>% values are less than 50%:

Filesystem                             Size    Used      Avail  Use% Mounted on
[...]
/dev/sda3                             <size>  <used>   <avail> `<use>%` /
[...]
/home/sentinel/cassandra-ramdisk/data <size>  <used>   <avail> `<use>%` /home/sentinel/cassandra-ramdisk/data
Caution If the disk usage is over 50%, do not proceed with the rest of the steps and contact Metaswitch technical support.
  1. Exit the TSN by running:

$ exit

Upload the configuration

The new configuration written during the pre-maintenance window steps, is required to change the schema that is in use.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig upload-config -c <tsn-mgmt-address> -t mmt-<gsm|cdma> -i ~/yamls --vm-version-source this-rvtconfig
Verify that the configuration has uploaded successfully
  1. Verify that the output after the command has completed running includes the following sentence:

Wrote config for version <version>, deployment ID <deployment-id>, and group ID <group-id>
  1. Exit the SIMPL VM by running:

$ exit
  1. Use SSH as the primary user (sentinel) to access each of the MMTs.

  2. From the home directory, run the command:

$ report-initconf status

until the following is displayed in the output:

status=vm_converged
Note If after 15 minutes, the status of the VMs is not converged, proceed to Rollback.

Test the new tables

  1. Perform a test call to force a registration.

Note If the test call does not succeed, proceed to Rollback.

Exit the maintenance window

Take the deployment out of maintenance window mode.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig leave-maintenance-window -c <tsn-mgmt-address> -d <deployment-id> -S <site-id>
  1. verify the command output includes the following:

Maintenance window has been terminated.
The VMs will resume running scheduled tasks as per their configured schedules.

Rollback

This section describes the steps for rolling back the change of primary key for MMT nodes. These steps are expected to take 30 minutes to complete.

Truncate the registrations_v2 and assocuris_v2 tables on Cassandra

The existing registrations_v2 and assocuris_v2 tables take up some space on disk. Truncate these tables to ensure free disk space is over 50%. Truncation must be run on one TSN node.

  1. Use SSH to access the TSN as the primary user (sentinel).

  2. Start the Cassandra CLI by running the command:

$ cqlsh
  1. Truncate the tables by running the command:

    TRUNCATE opencloud_thirdparty_reg.REGISTRATIONDATA_V2;
    TRUNCATE opencloud_thirdparty_reg.ASSOCURIS_V2;
  2. Verify that there are no messages printed to the console after running the TRUNCATE command.

  3. Exit the Cassandra CLI by running:

$ exit
Note If the TRUNCATE command fails, run the next command (nodetool clearsnapshot), before attempting to run the TRUNCATE command and the nodetool command again.

Clear snapshots on all TSN nodes

  1. SSH as the primary user (sentinel) into each of the TSNs sequentially and run the command:

$ nodetool clearsnapshot opencloud_thirdparty_reg --all

Verify that the truncation has been successful

  1. Run the command:

$ df -h
  1. Verify that for the following two rows in the output, the <use>% values are less than 50%:

Filesystem                             Size    Used      Avail  Use% Mounted on
[...]
/dev/sda3                             <size>  <used>   <avail> `<use>%` /
[...]
/home/sentinel/cassandra-ramdisk/data <size>  <used>   <avail> `<use>%` /home/sentinel/cassandra-ramdisk/data
Caution If the disk usage is over 50%, do not proceed with the rest of the steps and contact Metaswitch technical support.
  1. Exit the TSN by running:

$ exit

Upload the config

The backup config, which was taken during the pre-maintenance window steps, is required to change the schema that is in use.

  1. Use SSH to access the SIMPL VM.

  2. Copy the backup over ~/yamls:

    cp -f ~/yamls-rollback/* ~/yamls/
  3. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig upload-config -c <tsn-mgmt-address> -t mmt-<gsm|cdma> -i ~/yamls --vm-version-source this-rvtconfig
Verify that the configuration has uploaded successfully
  1. Verify that the output after the command has completed running includes the following sentence:

Wrote config for version <version>, deployment ID <deployment-id>, and group ID <group-id>
  1. Exit the SIMPL VM by running:

$ exit
  1. Use SSH as the primary user (sentinel) to access each of the MMTs.

  2. From the home directory, run the command:

$ report-initconf status

until the following is displayed in the output:

status=vm_converged
Note If after 15 minutes, the status of the VMs is not converged, contact Metaswitch technical support.

Test the rollback

  1. Perform a test call to force a registration.

Note If the test call does not succeed, contact Metaswitch technical support.

Exit the maintenance window

Take the deployment out of maintenance window mode.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

    $ cd <rvtconfig-path>
    $ ./rvtconfig leave-maintenance-window -c <tsn-mgmt-address> -d <deployment-id> -S <site-id>
  3. verify the command output includes the following:

Maintenance window has been terminated.
The VMs will resume running scheduled tasks as per their configured schedules.

Change the schema for SMO nodes

The default schema uses the first-party REGISTER callID field as a part of the primary key. RFC 3261 Section 10.2 states that User Equipment (UE) should use the same callID for the duration of the time it is registered. As the specification allows UE to use different CALLID values for the same registration, this requires proper handling.

As the callID is a part of the primary key, one row is used per unique callID, which may result in multiple rows representing the same logical registration. In cases where a significant proportion of UE on the network do not reuse their callID significantly more disk space is required to hold registration records. This contributes to the disk space for registration records being unpredictable under some circumstances.

The alternate schema uses the IMS private identity (hereafter deviceID) in place of callID in the schema. Per 3gpp 24.229 specification this must be set on all REGISTER attempts. As the deviceID does not change from registration attempt to registration attempt, the size of the database is more predictable.

See Data Schema for details of the Registrar schemas.

The following sections provide instructions for switching to the alternate schema on the SMO node. The required tables already exist on the TSN. You will change SMO configuration to use the alternate tables.

Impacts

During the change of the schema, the system may be affected as follows:

  1. There will be an increase in the number of HSS queries. This is because the third-party registrations serve as a cache, and in their absence, devices can only be verified through queries to the HSS. After the procedure is complete, the number of HSS queries should gradually return to the pre-maintenance window level.

    Note The speed at which the number of HSS queries returns to normal depends on the registration validity period. It can be very quick or fairly slow. It is anticipated to be very quick on average.
  2. When you run the TRUNCATE command, disk usage will not drop immediately. Disk usage will only drop after the nodetool clearsnapshot command is run. This is because the TRUNCATE command moves the data to a snapshot instead of deleting. The snapshot is only removed when the nodetool clearsnapshot command is run.

Note If you encounter any impacts that are not listed, contact Metaswitch technical support.

Pre-maintenance window steps for changing the Cassandra schema

Before entering the maintenance window you need to take some steps to get prepared. Performing these beforehand ensures that changing the Cassandra schema is a smooth exercise. Some steps can be done well in advance. Other steps need to bedone immediately before entering the maintenance window, as they are a final check to ensure everything is ready for the change.

Pre-maintenance window steps that can be done in advance

Verify the deployed SMO version

Make sure that the SMO VMs have already been upgraded to at least the maintenance version of RVT 4.1-1-1.0.0. The configuration changes that are being made will only work if the SMO is at least this version.

Create file with commands to run

There are commands that will need to be run in preparation for and during the Cassandra schema change. These commands requires specific arguments that need to be prepared beforehand. Creating a file of commands ready to be copy/pasted and run beforehand ensures smooth running of the steps. Placeholder values are of the form <…​>. <a|b> means a choice of either a or b. For example, mmt-<gsm|cdma> means mmt-gsm or mmt-cdma.

The file of commands can be stored anywhere that is convenient.

Many of the commands are rvtconfig commands. Further information can be found in the rvtconfig reference.

Determine the following arguments:

  1. tsn-mgmt-address - The management IP address of at least one TSN node. The TSN management IP addresses can be found in the TSN section of the SDF. If multiple addresses are used, they should be formatted as -c <address1> <address2>…​.

  2. deployment-id - This can be found in the SDF under the key deployment-id.

  3. site-id - The site-id of the site you are changing config for. This can be found in the SDF as site-id.

  4. group-id - The group-id of the SMO vnf, RVT-smo.<site-id>.

  5. sdf-path - The path to the SDF file on your SIMPL VM.

  6. rvtconfig-path - The path to the rvtconfig on your SIMPL VM. This is expected to be something like: /home/admin/.local/share/csar/smo/<version>/resources

If Cassandra authentication is enabled, then two additional arguments will be required for every rvtconfig command.

  1. cds-username - Username to authenticate with Cassandra. You can find it in the SDF under cassandra-username.

  2. cds-password-secret-name - Password identifier to authenticate with Cassandra. You can find it in the SDF under cassandra-password-id.

They are added in the format --cds-username <cds-username> --cds-password-secret-name <cds-password-secret-name> as the last two arguments to every rvtconfig command.

Create a text file containing all the subsequent commands with substitutions completed.

Take a backup of the current configuration

In case you need to roll back later, prepare a copy of the current configuration. Otherwise, you may have to recreate your configuration files manually.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

    $ cd <rvtconfig-path>
    $ rvtconfig dump-config -c <tsn-mgmt-address> -d <deployment-id> --group-id <group-id> --vm-version-source this-rvtconfig --output-dir ~/yamls-rollback
    Note --output-dir is the output directory for the rvtconfig dump-config command. Any easily accessible directory can be chosen and the command will create the directory if it does not exist. The recommendation is to maintain ~/yamls-rollback, as this value is referenced in the rollback procedure. In the event that a different folder is used, substitute that value for ~/yamls-rollback in the rollback procedure.
Create the new configuration file

The new configuration needs to be written for upload. The configuration points to change are located in the smo-overrides.yaml file in ~/yamls. Create the file if it does not exist.

SMO configuration change
Caution Contact Metaswitch technical support for assistance with writing the new configuration.
Warning Yaml uses semantic whitespace. The resulting file must be valid yaml that rvtconfig can accept.

If smo-overrides.yaml does not exist, create it with the following content:

rhino-config:rhino-configuration:
  namespaces:
  - name: ''
    profile-tables:
    - name: RegistrarConfigurationTable
      profiles:
        - name: 'Metaswitch::::'
          present: true
          attributes:
            - name: usePrivateIdAsRegistrarDataPrimaryKey
              content: 'true'

If smo-overrides.yaml exists and does not contain the string RegistrarConfigurationTable, insert the following contents immediately below the line profile-tables::

    - name: RegistrarConfigurationTable
      profiles:
        - name: 'Metaswitch::::'
          present: true
          attributes:
            - name: usePrivateIdAsRegistrarDataPrimaryKey
              content: 'true'

If smo-overrides.yaml exists and contains the string RegistrarConfigurationTable, insert the following into the attributes key of RegistrarConfigurationTable:

            - name: usePrivateIdAsRegistrarDataPrimaryKey
              content: 'true'

Pre-maintenance window steps to be done immediately prior to entering the maintenance window

Caution Before performing these steps, ensure that you have:
  1. A file with all the commands that need to be run for changing the Cassandra schema. The commands will have all the required arguments substituted.

  2. Two sets of .yaml configuration files - the new configuration (~/yamls), the current config (~/yamls-rollback).

  3. Verified that the deployment consists of the right version of the VMs.

Compare live configuration on SMOs with configuration on SIMPL
  1. Use SSH to access the SIMPL VM.

  2. Verify that the directory /tmp/checkdiff does not exist. If the directory does exist, remove it.

  3. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig compare-config -c <tsn-mgmt-address> -t smo -i ~/yamls-rollback --output-dir /tmp/checkdiff --vm-version-source this-rvtconfig
Caution --output-dir is the output directory for the rvtconfig compare-config command. The command will create the directory if it does not exist and will return an error if the directory does exist.
  1. Verify that the command completes with:

No differences found in yaml files.
Uploading this configuration will have no effect unless secrets, certificates or licenses have changed, or --reload-resource-adaptors is specified.

If the output returned does not include "No differences found in yaml files.", contact Metaswitch technical support.

Perform health checks on SMOs in the deployment

The deployment needs to be in a healthy state. To verify that the deployment is healthy, run the following tests.

Run validation tests with CSAR validate
  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ csar validate --vnf smo --sdf <sdf-path>
  1. Verify that the command completes with:

All tests passed for CSAR 'smo/<version-number>'!
Enter the maintenance window

If all the healthchecks above pass, start a maintenance window and then run through the steps for changing the Cassandra schema. To enter a maintenance window:

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig enter-maintenance-window -c <tsn-mgmt-address> -d <deployment-id> -S <site-id>

Procedure

This section describes the steps for changing the primary key for SMO nodes. These steps are expected to take 30 minutes to complete.

Note Before beginning these steps, ensure that the placeholder values in commands listed here have been substituted with the required values. Placeholder values are of the form <…​>.

Truncate the registrations and assocuris tables on Cassandra

The existing registrations and assocuris tables take up some space on disk. Truncate these tables to ensure free disk space is over 50%. Truncation must be run on one TSN node.

  1. Use SSH to access the TSN as the primary user (sentinel).

  2. Start the Cassandra CLI by running the command:

$ cqlsh
  1. Truncate the tables by running the command:

TRUNCATE opencloud_ipsmgw_thirdparty_reg.REGISTRATIONDATA;
TRUNCATE opencloud_ipsmgw_thirdparty_reg.ASSOCURIS;
  1. Verify that there are no messages printed to the console after running the TRUNCATE command.

  2. Exit the Cassandra CLI by running:

$ exit
Note If the TRUNCATE command fails, run the next command (nodetool clearsnapshot), before attempting to run the TRUNCATE command and the nodetool command again.

Clear snapshots on all TSN nodes

  1. SSH as the primary user (sentinel) into each of the TSNs sequentially and run the command:

$ nodetool clearsnapshot opencloud_ipsmgw_thirdparty_reg --all

Verify that the truncation has been successful

  1. Run the command:

$ df -h
  1. Verify that for the following two rows in the output, the <use>% values are less than 50%:

Filesystem                             Size    Used      Avail  Use% Mounted on
[...]
/dev/sda3                             <size>  <used>   <avail> `<use>%` /
[...]
/home/sentinel/cassandra-ramdisk/data <size>  <used>   <avail> `<use>%` /home/sentinel/cassandra-ramdisk/data
Caution If the disk usage is over 50%, do not proceed with the rest of the steps and contact Metaswitch technical support.
  1. Exit the TSN by running:

$ exit

Upload the configuration

The new configuration written during the pre-maintenance window steps, is required to change the schema that is in use.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig upload-config -c <tsn-mgmt-address> -t smo -i ~/yamls --vm-version-source this-rvtconfig
Verify that the configuration has uploaded successfully
  1. Verify that the output after the command has completed running includes the following sentence:

Wrote config for version <version>, deployment ID <deployment-id>, and group ID <group-id>
  1. Exit the SIMPL VM by running:

$ exit
  1. Use SSH as the primary user (sentinel) to access each of the SMOs.

  2. From the home directory, run the command:

$ report-initconf status

until the following is displayed in the output:

status=vm_converged
Note If after 15 minutes, the status of the VMs is not converged, proceed to Rollback.

Test the new tables

  1. Perform a test SMS to force a registration.

Note If the test SMS does not succeed, proceed to Rollback.

Exit the maintenance window

Take the deployment out of maintenance window mode.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig leave-maintenance-window -c <tsn-mgmt-address> -d <deployment-id> -S <site-id>
  1. verify the command output includes the following:

Maintenance window has been terminated.
The VMs will resume running scheduled tasks as per their configured schedules.

Rollback

This section describes the steps for rolling back the change of primary key for SMO nodes. These steps are expected to take 30 minutes to complete.

Truncate the registrations_v2 and assocuris_v2 tables on Cassandra

The existing registrations_v2 and assocuris_v2 tables take up some space on disk. Truncate these tables to ensure free disk space is over 50%. Truncation must be run on one TSN node.

  1. Use SSH to access the TSN as the primary user (sentinel).

  2. Start the Cassandra CLI by running the command:

$ cqlsh
  1. Truncate the tables by running the command:

    TRUNCATE opencloud_ipsmgw_thirdparty_reg.REGISTRATIONDATA_V2;
    TRUNCATE opencloud_ipsmgw_thirdparty_reg.ASSOCURIS_V2;
  2. Verify that there are no messages printed to the console after running the TRUNCATE command.

  3. Exit the Cassandra CLI by running:

$ exit
Note If the TRUNCATE command fails, run the next command (nodetool clearsnapshot), before attempting to run the TRUNCATE command and the nodetool command again.

Clear snapshots on all TSN nodes

  1. SSH as the primary user (sentinel) into each of the TSNs sequentially and run the command:

$ nodetool clearsnapshot opencloud_ipsmgw_thirdparty_reg --all

Verify that the truncation has been successful

  1. Run the command:

$ df -h
  1. Verify that for the following two rows in the output, the <use>% values are less than 50%:

Filesystem                             Size    Used      Avail  Use% Mounted on
[...]
/dev/sda3                             <size>  <used>   <avail> `<use>%` /
[...]
/home/sentinel/cassandra-ramdisk/data <size>  <used>   <avail> `<use>%` /home/sentinel/cassandra-ramdisk/data
Caution If the disk usage is over 50%, do not proceed with the rest of the steps and contact Metaswitch technical support.
  1. Exit the TSN by running:

$ exit

Upload the config

The backup config, which was taken during the pre-maintenance window steps, is required to change the schema that is in use.

  1. Use SSH to access the SIMPL VM.

  2. Copy the backup over ~/yamls:

    cp -f ~/yamls-rollback/* ~/yamls/
  3. Run the command:

$ cd <rvtconfig-path>
$ ./rvtconfig upload-config -c <tsn-mgmt-address> -t smo -i ~/yamls --vm-version-source this-rvtconfig
Verify that the configuration has uploaded successfully
  1. Verify that the output after the command has completed running includes the following sentence:

Wrote config for version <version>, deployment ID <deployment-id>, and group ID <group-id>
  1. Exit the SIMPL VM by running:

$ exit
  1. Use SSH as the primary user (sentinel) to access each of the SMOs.

  2. From the home directory, run the command:

$ report-initconf status

until the following is displayed in the output:

status=vm_converged
Note If after 15 minutes, the status of the VMs is not converged, contact Metaswitch technical support.

Test the rollback

  1. Perform a test SMS to force a registration.

Note If the test SMS does not succeed, contact Metaswitch technical support.

Exit the maintenance window

Take the deployment out of maintenance window mode.

  1. Use SSH to access the SIMPL VM.

  2. Run the command:

    $ cd <rvtconfig-path>
    $ ./rvtconfig leave-maintenance-window -c <tsn-mgmt-address> -d <deployment-id> -S <site-id>
  3. verify the command output includes the following:

Maintenance window has been terminated.
The VMs will resume running scheduled tasks as per their configured schedules.

RVT service centralization and continuity configuration

This section describes how to set up the service centralization and continuity (SCC) services.

In this section

Terminating Access Domain Selection (T-ADS)

What it does

Terminating Access Domain Selection (T-ADS) is a component of the terminating SCC AS that determines whether a call should be delivered over the circuit-switched (CS) or the packet-switched (PS) network. It adjusts the SIP signaling as required to deliver the call over the CS or PS network.

Routing mode

T-ADS supports several different modes which determine how it will prioritize its attempts to connect to the CS and/or PS networks. The mode to use for any given call is not determined by T-ADS configuration, but instead by a parameter on the Route header of the incoming SIP INVITE request. The parameter’s name is oc-tads-routing. It can have the following values:

Table 4. T-ADS routing modes
Parameter value Behavior
ps-cs

T-ADS first attempts to connect the call over the PS network, and falls back to the CS network if that fails.

cs-ps

T-ADS first attempts to connect the call over the CS network, and falls back to the PS network if that fails.

ps-only

T-ADS only attempts to connect the call over the PS network.

cs-only

T-ADS only attempts to connect the call over the CS network.

parallel

T-ADS forks the call and attempts to connect the call over the CS and PS networks simultaneously; the first fork to be successfully answered is selected.

If the parameter is absent, the ps-cs behavior is used.

All modes other than parallel are collectively known as "sequential" modes.

Note Route header parameters can be set in the subscriber’s initial filter criteria (iFC) on the HSS.
Request disposition

In one particular case, the Request-Disposition header (defined in RFC 3841) can alter the behavior selected by the oc-tads-routing parameter. If the Request-Disposition header contains the value no-fork and does not also contain the value redirect, then:

  • ps-cs and parallel use the ps-only behavior

  • cs-ps uses the cs-only behavior.

CS routing

When T-ADS attempts to route the call over the CS network, it will generate a CS Domain Routing Number (CSRN). This number is used in the Request-URI of the outbound INVITE request. There are a few options for how T-ADS should generate the CSRN.

The basic number can be taken from any of the following numbers:

  • Correlation Mobile Station International Subscriber Directory Number (C-MSISDN), which is retrieved from the HSS

  • Mobile Station Roaming Number (MSRN), which is retrieved from the HLR (for GSM networks only)

  • Temporary Local Directory Number (TLDN), which is retrieved from the HLR (for CDMA networks only).

An optional prefix can be specified that will be added to that number to create the final CSRN.

Routing via the I-CSCF

When routing to the CS network, it may be desirable to send the outbound INVITE request directly to the I-CSCF, bypassing the S-CSCF and thus any further IMS services that it might try to invoke. This can be configured with the cs-routing-via-icscf field.

PS routing

T-ADS supports three different modes for determining where to route requests to the PS network. It may route to:

  • the subscriber’s IMS public identity

  • the SIP instance(s) that are recorded in pub-gruu information in the subscriber’s registration data

  • the SIP instance(s) that are recorded in pub-gruu and Path information in the subscriber’s registration data.

Both modes that use SIP instances can result in multiple different attempts to connect the call over the PS network (one attempt for each acceptable SIP instance).

Route validation and voice over PS support

Unless there is an oc-blindpsrouting parameter present on the Route header of the initial INVITE request for a call, T-ADS will do additional validation on each PS route before deciding to use it.

The method for doing this validation depends on the setting for voice-over-ps-support.

If voice over PS support is required, the route will be validated by explicitly asking the HSS if voice over PS is supported for that route. If voice over PS support is not required, the route will be validated by checking access network information in the subscriber’s registration data.

When querying the HSS for voice over PS support, there are several different options for which subscriber identity to query the information for. The option to use varies depending on the network. The options are listed here.

Table 5. Subscriber identities for HSS queries
Setting Description
IMPU

The IMS public identity

MSISDN

The C-MSISDN

IMPU_IMPI

A combination of the IMS public and private identities

MSISDN_IMPI

A combination of the C-MSISDN and the IMS private identity

Voice over Wi-Fi

By default, T-ADS will select PS routes that go through the PS cellular network. The system also supports PS routes that go through the internet and Wi-Fi. You can configure this with the wlan-allowed field.

Deciding on a route

This section describes the approach T-ADS uses to decide whether a particular routing attempt has been successful. The routing mode determines the order in which routes are attempted (or whether they should all be attempted at the same time in the case of parallel mode). It is important to note that even if a particular route receives a SIP error response, T-ADS may still determine it was a successful routing attempt and forward the response to the caller, thus ending the call.

In sequential routing modes

Usually, a route is selected and T-ADS completes once a non-100 SIP response is received from a connection attempt on that route (which is true even if the response is an error response that will cause the call to be terminated). A route is usually only rejected if no response is received within the maximum wait time period specified in the tads-timer-max-wait-milliseconds setting. However, there are exceptions to this:

  • If a provisional SIP response is received that has an SDP body with a disabled audio stream and the subscriber is known to have multiple devices on the current route, the response will be ignored and the maximum wait time will be reset.

  • If a SIP error response with a 488 status code is received, the route is rejected.*

  • If attempting a PS route and a SIP error response is received with a status code matching a code in ps-fallback-response-codes, the route is rejected.*

* If all PS routes have been exhausted and the error response has an SDP body with no PSTN audio streams, the call will be terminated instead.

When a route is rejected, T-ADS aborts the connection attempt and attempts to connect the call on the next available route. If all available routes have been rejected, the call is terminated.

In parallel routing mode

The first route to receive a SIP success response is selected. If all routes respond with a SIP error response or the maximum wait time period specified in the parallel-timer-max-wait-milliseconds setting is exceeded, the call is terminated.

As a special case when the companion device service is in use, if a 486 Busy SIP response is received from any route it is possible to end the call immediately. You can configure this with the release-all-legs-on-busy setting.

Interactions with other services

Communications Diversion (CDIV)

If an attempt to connect the call over the CS network fails, it is possible that communication forwarding could be triggered twice; the first time downstream of the SCC AS in the CS core network, the second time in the IMS core upstream in the MMTel AS.

T-ADS can be configured to suppress communication forwarding services in the CS network. It does this by imposing a limit on the number of times the call may be forwarded, then indicating that the limit has been reached. SIP Diversion headers are used to send this information to the CS network, with limit parameters used to set the limit. One of the following methods is used to indicate that the limit has been reached:

  • including a pair of Diversion headers that each have a counter parameter which, between the two, sums to the diversion limit, or

  • including a number of Diversion headers that matches the limit.

For configuration instructions, see Suppress call forwarding services in the CS network.

For details of how to suppress forwarding in the MMTel AS, see Communications Diversion (CDIV).

Companion device

The companion device service may force T-ADS to ignore the requested routing mode and use parallel instead. Restrictions imposed by the Request-Disposition header will still apply in this case.

The companion device service may also provide its own set of CSRNs for T-ADS to use when attempting to connect the call over the CS network.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to T-ADS in the sentinel-volte/tads section.

What you need

  • ❏ The source for generating the CSRN for CS delivery; one of: C-MSISDN, MSRN, or TLDN.

  • ❏ The source for generating potential PS routes; one of: IMS_PUBLIC_IDENTITY, SIP_INSTANCE, or PATH_FROM_SIP_INSTANCE.

  • ❏ If checking for Voice Over PS support before routing over PS to a subscriber, the identity to use when querying the HSS; one of: IMPU, MSISDN, IMPU_IMPI, or MSISDN_IMPI

  • ❏ Whether or not calls outbound to the CS network should bypass the S-CSCF and go directly to the I-CSCF.

  • ❏ Whether or not calls are allowed to be delivered over a Wi-Fi network.

  • ❏ What error code to send to the caller if the call is terminated due to no routes being found.

If using the parallel routing mode:

  • ❏ The maximum time to wait for a call to be answered.

  • ❏ Whether or not to abort the call if any routing attempt receives a 486 Busy response.

If using any sequential routing modes:

  • ❏ The maximum time to wait for a response during a particular routing attempt.

  • ❏ Any SIP error codes that you would like to trigger an attempt on the next available route, instead of ending the call.

Setting up CS routing behavior

I want to…​
Generate the CSRN from the C-MSISDN when routing to the CS network
Warning Ensure that HSS integration has been configured.

In the tads section, set address-source-for-scc-tads to CMSISDN:

            address-source-for-scc-tads: CMSISDN

Related section: CS routing

Generate the CSRN from the MSRN when routing to the CS network
Warning Ensure that HLR integration has been configured.
Note Be aware that the MSRN is only available on GSM networks.

In the tads section, set address-source-for-scc-tads to MSRN:

            address-source-for-scc-tads: MSRN

Related section: CS routing

Generate the CSRN from the TLDN when routing to the CS network
Warning Ensure that HLR integration has been configured.

Be aware that the TLDN is only available on CDMA networks.

In the tads section, set address-source-for-scc-tads to TLDN:

            address-source-for-scc-tads: TLDN

Related section: CS routing

Include a number prefix (steering digits) on the generated CSRN

In this example 00 is used as the prefix.

In the tads section, set csrn-prefix to "00":

            csrn-prefix: "00"

Related section: CS routing

Have no prefix (steering digits) on the generated CSRN

In the tads section, set csrn-prefix to "":

            csrn-prefix: ""

Related section: CS routing

Prevent T-CSI information from being requested from the HLR
Note This is only relevant on GSM networks when using the MSRN to generate the CSRN.

In the tads section, in sri-requests-to-hlr, set set-suppress-tcsi-flag to true:

            sri-requests-to-hlr:
                set-suppress-tcsi-flag: true
Prevent announcement information from being requested from the HLR

This is only relevant on GSM networks when using the MSRN to generate the CSRN.

In the tads section, in sri-requests-to-hlr, set set-suppress-announcement-flag to true:

            sri-requests-to-hlr:
                set-suppress-announcement-flag: true
Route calls to the CS network directly through the I-CSCF
Warning Ensure that I-CSCF integration has been configured.

In the tads section, set cs-routing-via-icscf to true:

            cs-routing-via-icscf: true

Related section: Routing via the I-CSCF

Route calls to the CS network through the S-CSCF

In the tads section, set cs-routing-via-icscf to false:

            cs-routing-via-icscf: false

Related section: Routing via the I-CSCF

Suppress call forwarding services in the CS network

In the tads section, ensure that the suppress-cs-domain-call-diversion section is present and not commented out.

            suppress-cs-domain-call-diversion:
                use-diversion-counter-parameter: true
                cs-domain-diversion-limit: 1
  • Set use-diversion-counter-parameter to:

    • true to indicate that the limit has been reached using the counter parameter on the SIP Diversion header, or

    • false to indicate that the limit has been reached using the number of Diversion headers present.

  • Set cs-domain-diversion-limit to the maximum number of times you want to indicate that call forwarding was allowed (note that no matter what this setting is, T-ADS will still indicate that the limit has been reached).

Allow call forwarding services in the CS network

In the tads section, remove or comment out the entire suppress-cs-domain-call-diversion section.

 #           suppress-cs-domain-call-diversion:
 #               use-diversion-counter-parameter: true
 #               cs-domain-diversion-limit: 1

Setting up PS routing behaviour

I want to…​
Route the PS attempt to the subscriber’s IMS public identity
            tads-identity-for-terminating-device: IMS_PUBLIC_IDENTITY

Related section: PS routing

Route PS attempts to the SIP instance of the terminating device(s)
            tads-identity-for-terminating-device: SIP_INSTANCE

Related section: PS routing

Route PS attempts to the SIP instance path of the terminating device(s)
            tads-identity-for-terminating-device: PATH_FROM_SIP_INSTANCE

Related section: PS routing

Check that a subscriber has support for Voice Over PS before attempting to route over the PS network
Warning Ensure that HSS integration has been configured.

In the tads section, ensure that the voice-over-ps-support section is present and not commented out.

            voice-over-ps-support:
                request-user-identity-type: IMPU

Set which subscriber identity to use when querying the HSS for the voice over PS support information. See request-user-identity-type for the list of options.

Skip the check that the subscriber has voice over PS support before attempting to route the call over the PS network

In the tads section, remove or comment out the entire voice-over-ps-support section.

#            voice-over-ps-support:
#                request-user-identity-type: IMPU
Allow calls to be connected over Wi-Fi networks

In the tads section, set wlan-allowed:

            wlan-allowed: true

Related section: Voice over Wi-Fi

Setting up route selection behavior

I want to…​
Change the SIP response code used to end the call if no valid route to the called party can be found

In this example the call will be ended with a 410 Gone response.

In the tads section, set end-session-error-code:

            end-session-error-code: 410
End all companion device connection attempts if any one of them returns a 486 Busy response
                release-all-legs-on-busy: true
Change the maximum time to wait to get a final response from any parallel connection attempt

This example sets the maximum wait time to 15 seconds.

In the tads , on-parallel-routing section, set parallel-timer-max-wait-milliseconds to the desired value in milliseconds:

                parallel-timer-max-wait-milliseconds: 15000
Try the next available route if a PS attempt results in a particular SIP response status code or codes
Note A 488 response will always cause the next available route to be attempted, and does not need to be included in this field.

This example lists 408, 480, and 481 as the codes that should trigger the next routing attempt.

In the tads, on-sequential-routing section, set ps-fallback-response-codes with the list of desired response codes:

                ps-fallback-response-codes: [ 408, 480, 481 ]
Change the maximum time to wait for a response before trying the next route
Note This setting is only relevant when using a sequential routing mode and is subject to the provisional response condition described in Deciding on a route in sequential routing modes.

In the tads, on-sequential-routing section, set tads-timer-max-wait-milliseconds to the value in milliseconds:

                tads-timer-max-wait-milliseconds: 5000

Access transfer

What it does

Access transfer is a Rhino VoLTE TAS SCC service that is responsible for managing the handover of a call from a packet switched (PS) network to a circuit switched (CS) network when a subscriber moves out of PS network coverage. It works by replacing the existing access leg (that is, the SIP leg between the Rhino VoLTE TAS and the served user) with a new one.

Access transfer is initiated on receipt of a new initial INVITE request that has a Request-URI which aligns with either the configured ATU-STI or STN-SR. Initially this request is not directly associated with the call it applies to, and initially may not even be processed by the same Rhino VoLTE TAS node that is handling the original call. Information in the new INVITE request is used to correlate it with the original call so that it can be injected into that call, where it is used to establish the new access leg.

Supported cases

The Rhino VoLTE TAS supports Single Radio Voice Call Continuity (SRVCC) for PS to CS transfer of sessions in the following cases:

  • a single active session with media anchored in the Access Transfer Gateway (eSRVCC)

  • a single active session with media not anchored in the Access Transfer Gateway (standard SRVCC)

  • a single alerting session (aSRVCC)

  • a single originating session in the pre-alerting state (bSRVCC).

If a device initiates access transfer while it has multiple sessions in progress (for example, if the subscriber has someone on hold while talking on another call), only the most recently active session will be transferred. All other sessions are treated as superfluous and are ended as part of the transfer procedure.

Enabling access transfer

Access transfer is not enabled through configuration. Instead, it is enabled per-call if both of the following requirements are met:

  • The served subscriber’s registration data indicates that their device has UE-SRVCC-Capability.

  • The served subscriber has an assigned C-MSISDN in the HSS.

There are additional requirements for alerting and pre-alerting access transfer. These take the form of media feature tags in the SIP Contact header from the subscriber. For the calling subscriber this head will be checked on the initial INVITE request, for the called subscriber the first SIP 18x response will be checked. To enable alerting access transfer there must be a +g.3gpp.srvcc-alerting tag, and for pre-alerting access transfer there must be a +g.3gpp.ps2cs-srvcc-orig-pre-alerting tag. Note that pre-alerting access transfer is only applicable to the calling subscriber.

Access Transfer Control Function

Access Transfer Control Function (ATCF) is a signalling anchor that is used for eSRVCC procedures. It is responsible for initiating access transfer procedures in the Rhino VoLTE TAS by sending a INVITE request using the ATU-STI as the Request-URI.

To determine where to send access transfer requests, the ATCF must know the ATU-STI to use for a given subscriber. The Rhino VoLTE TAS is responsible for notifying the ATCF of the ATU-STI, which it does by sending it in a SIP MESSAGE request when the subscriber registers with the network. The maximum time that the Rhino VoLTE TAS should wait for a response to the MESSAGE request can be configured in the atcf-update-timeout-milliseconds field.

STN-SR and ATU-STI

The STN-SR (Session Transfer Number for SRVCC) and ATU-STI (Access Transfer Update - Session Transfer Identifier) serve the same purpose of identifying that an incoming request is for access transfer. The main difference between the two is that they are used to trigger different versions of the access transfer procedure.

The STN-SR is used for access transfer as defined in the Rel-8 3GPP specifications, where signalling is not anchored in the ATCF, therefore the Rhino VoLTE TAS receives the transfer request directly from the MSC (Mobile Switching Center, part of the CS core network). It takes the form of a number prefix on the Request-URI of the incoming access transfer request. The only requirement for picking an STN-SR is that it must cause messages to be delivered to the Rhino VoLTE TAS. When a subscriber registers with the network, the Rhino VoLTE TAS will update their STN-SR in the HSS to match what is configured here.

The ATU-STI is used for access transfer, as defined in the Rel-10 3GPP specifications, where signalling is anchored in the ATCF, therefore the transfer request comes from the ATCF. It is a fixed URI that is used as the Request-URI on access transfer requests. As the Rhino VoLTE TAS tells the ATCF what ATU-STI to use for a subscriber, the only requirement for its value is that it resolves to the Rhino VoLTE TAS.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to access transfer in the sentinel-volte/scc/service-continuity section.

What you need

  • ❏ The STN-SR that will trigger Rel-8 access transfer.

  • ❏ Optionally, a custom timeout period to wait for a response from the ATCF when updating the ATU-STI for a subscriber.

Setting up access transfer

I want to…​
Set the STN-SR for triggering Rel-8 access transfer

In the service-continuity section, set stn-sr with the desired number prefix:

            stn-sr: "123456"

Related section: STN-SR and ATU-STI

Change how long to wait for the ATCF to respond to a request to update a subscriber’s ATU-STI

In the service-continuity section, set atcf-update-timeout-milliseconds with the desired time period, in milliseconds:

            atcf-update-timeout-milliseconds: 5000

Reorigination

What it does

Reorigination enables CS calls to be processed in the SCC-AS. SS7 triggers received by the Rhino VoLTE TAS are forwarded to a number within a pre-defined range, which causes the call to be rerouted into the IMS. The SCC-AS then acts as a B2BUA between the I-CSCF and the subscriber’s assigned S-CSCF.

Routing through the I-CSCF

The SCC-AS will add a CSCF address to the route header of the outgoing INVITE message. This address can be either the calling party’s S-CSCF address retrieved from the HSS, or it can be the I-CSCF address configured in i-cscf-uri.

Anti-fraud measures

To guard against fraud, the P-Asserted-Identity from the incoming INVITE can be compared to the normalized calling party number from the InitialDP. If they do not match, the request is rejected with a 403 response.

The P-Visited-Network-Information header

The SCC-AS will add a P-Visited-Network-Information header to the outgoing INVITE. It is recommended that this is set according to IR.65, section 6.2.1, that is, that the format for this is epc.ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org if the version followed is 12 or less, or ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org if a later version is used. The values of <MCC> and <MNC> are extracted from the triggering SS7 message.

The IP Multimedia Routing Number pool

The number used as the interchange between the SS7 and IP networks (the IMRN) must belong to a pre-allocated, reserved range of values. These numbers must be reserved to prevent overlap with numbers in use by subscribers. The pre-allocated range must be configured within the Rhino VoLTE TAS.

The pool of values does not need to be overly large, as values will only be reserved for the time between the receipt of the SS7 trigger and the processing of the INVITE. As an approximation, with normal error rates and a 20 ms interval between IMRN reservation (on the SS7 end) and IMRN return-to-pool, a range of 1000 values will accommodate 50,000 calls per second. Adjust the pool sizings to meet network requirements accordingly.

The simple-imrn-pool defines the digit string, with the cdma-imrn-formation and gsm-imrn-formation sections defining the protocol-specific digit formatting details.

Bypass reorigination for unregistered subscribers

If a subscriber is not registered in the IMS network, reorigination from SS7 to IMS can be skipped to avoid unnecessary processing. This bypass can be enabled for all unregistered subscribers, or for only non-roaming subscribers (to support terminating charging of roaming subscribers through the IMS).

Interactions with other services

The reoriginated call will be subjected to standard SCC call processing.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to reorigination in the sentinel-volte/scc/service-centralisation section.

What you need

  • ❏ The expected format of the P-Visited-Network-Information header.

  • ❏ The range of numbers available to be used as the IMRN.

  • ❏ The expected format of the IMRN.

Setting up reorigination

I want to…​
Use the configured I-CSCF address and prevent the HSS from being queried

To include the configured I-CSCF address in the route header of the outgoing INVITE, in the service-centralisation section, set use-direct-icscf-routing:

            use-direct-icscf-routing: true

Related section: Routing through the I-CSCF

Set the format of the PVNI header to the later standard

To set the P-Visited-Network-Information header template to the later format, in the service-centralisation section, set generated-pvni-template:

            generated-pvni-template: "ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org"
Reject messages sent to an IMRN where the P-Asserted-Identity does not match the recorded calling party digits

To enable comparing the P-Asserted-Identity header to the normalized calling party number, in the service-centralisation section, set police-originating-requests:

            police-originating-requests: true

Related section: Anti-fraud measures

Set a 1000 element IMRN range

To create a 1000 element range with 10-digit numbers from 5550000000 to 5550000999, in the service-centralisation section, set the values in simple-imrn-pool as follows:

            simple-imrn-pool:
                minimum-correlation-id: 5550000000
                maximum-correlation-id: 5550000999
                number-of-digits-in-correlation-id: 10
Configure the CDMA responses sent in error conditions

In CDMA networks, the responses sent in error conditions are configured in the scc-cdma-actions section.

                scc-cdma-actions:
                    action-on-unsupported-trigger: accessDeniedReason_terminationDenied
                    action-on-failed-to-allocate-routing-number: accessDeniedReason_busy
                    default-failure-action: accessDeniedReason_serviceDenied

To configure the error response:

Set the format of the GSM IMRN

In GSM networks, the non-digitstring section of the IMRN is configured in the scc-gsm-service-centralisation, gsm-imrn-formation section.

                gsm-imrn-formation:
                    routing-to-internal-network-number-allowed: true
                    nature: NATIONAL
                    numbering-plan: ISDN

To configure the GSM IMRN information:

Set the format of the CDMA IMRN

In CDMA networks, the non-digitstring section of the IMRN is configured in the scc-cdma-service-centralisation, cdma-imrn-formation section.

                cdma-imrn-formation:
                    imrn-type-of-digits: DIALED_OR_CALLED_PARTY_NUMBER
                    imrn-nature-of-number: INTERNATIONAL
                    imrn-numbering-plan: TELEPHONY

To configure the CDMA IMRN information, set:

Bypass terminating reorigination for unregistered subscribers on GSM networks

In GSM networks, the terminating reorigination trigger can be bypassed for subscribers that are not registered in the IMS.

                bypass-terminating-forwarding-if-served-user-not-ims-registered: true
Bypass terminating reorigination for unregistered, non-roaming subscribers on GSM networks

In GSM networks, the terminating reorigination bypass can be enabled for all unregistered subscribers, or for only non-roaming subscribers.

To bypass reorigination for unregistered subscribers while still reoriginating roaming traffic, in the scc-gsm-service-centralisation section, set bypass-terminating-forwarding-if-served-user-not-ims-registered and always-term-reoriginate-if-served-user-is-roaming:

This will result in only unregistered, non-roaming subscribers bypassing reorigination. Registered subscribers and roaming subscribers will still reoriginate to the IMS.

                bypass-terminating-forwarding-if-served-user-not-ims-registered: true
                always-term-reoriginate-if-served-user-is-roaming: true
Bypass reorigination for unregistered subscribers on CDMA networks

In CDMA networks, to bypass reorigination for subscribers that are not registered in the IMS, in the scc-cdma-service-centralisation section, set bypass-forwarding-if-served-user-not-ims-registered:

                bypass-forwarding-if-served-user-not-ims-registered: true

RVT MMTel configuration

Announcements

What it does

Defines the announcements that are available to be played by the MMTel services.

The announcements themselves are played on the Media Resource Function (MRF) node, which should already be provisioned with the announcements before they are configured here.

Interactions with other services

Other services can use the announcements defined here by referencing them using their ID value.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to announcements in the sentinel-volte/mmtel/announcement section.

What you need

  • ❏ The SIP: or Tel: URI of the media server (MRF) that plays the announcements.

  • ❏ Details of the announcements available on that media server:

    • ❏ their URI

    • ❏ their mime type

    • ❏ which locales are available for each announcement.

  • ❏ Details of how those announcements will be used:

    • ❏ Whether to repeat the announcement:

      • ❏ and if so, the maximum number of times to repeat

      • ❏ and the delay between repetitions.

    • ❏ Whether or not the announcement can be interrupt by user actions.

    • ❏ Whether or not the media stream should be forced to be one way between the MRF and the user during the announcement.

    • ❏ Whether to suspend charging while the announcement is playing.

    • ❏ Whether to end the call if the announcement cannot be played.

Setting up the MRF connection

I want to…​
Specify the address of the MRF to use for announcements
            announcements-media-server-uri: sip:annc-audio@mrf-announcements:5260;lr;transport=tcp
Change the timeout when signaling the MRF

The default timeout is 1000 ms.

To set a new value, in the mmtel, announcement section, ensure that the announcements-no-response-timeout-milliseconds parameter is present and not commented out. Set the desired value, in milliseconds.

            announcements-no-response-timeout-milliseconds: 1500

Setting up each announcement

I want to…​
Repeat an announcement indefinitely until interrupted by user actions

For the desired announcement in the mmtel, announcement section, announcements list:

              - id: 20
                description: "MMTel - Outgoing Call Barring"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 13000
                repeat: -1
                delay-milliseconds: 1000
                mimetype: "audio/3gpp"
                interruptable: true
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: false
  • Set the repeat value to -1, which will send a repeat=forever parameter to the MRF.

  • Set interruptable to true.

Let the MRF determine how often to repeat the announcement

For the desired announcement in the mmtel, announcement section, announcements list, set the repeat value to 0, so it is not sent to the MRF.

              - id: 20
                description: "MMTel - Outgoing Call Barring"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 13000
                repeat: 0
                delay-milliseconds: 1000
                mimetype: "audio/3gpp"
                interruptable: false
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: false
Let the MRF determine the delay between announcement repetitions

For the desired announcement in the mmtel, announcement section, announcements list, set the delay-milliseconds value to 0, so it is not sent to the MRF.

              - id: 20
                description: "MMTel - Outgoing Call Barring"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 13000
                repeat: 2
                delay-milliseconds: 0
                mimetype: "audio/3gpp"
                interruptable: false
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: false
Let the MRF determine the duration of the announcement

For the desired announcement in the mmtel, announcement section, announcements list, set the duration-milliseconds value to 0, so it is not sent to the MRF.

              - id: 20
                description: "MMTel - Outgoing Call Barring"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 0
                repeat: 2
                delay-milliseconds: 1000
                mimetype: "audio/3gpp"
                interruptable: false
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: false
Let the MRF determine the media type of the announcement

For the desired announcement in the mmtel, announcement section, announcements list, comment out or delete the mimetype entry.

              - id: 20
                description: "MMTel - Outgoing Call Barring"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 13000
                repeat: 2
                delay-milliseconds: 1000
                # mimetype: "audio/3gpp"
                interruptable: false
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: false
Reuse an existing announcement which does not suspend charging, but suspend charging

Duplicate an entire announcement definition in the mmtel, announcement section, announcements list, then change the appropriate values in the new announcement.

              - id: 20
                description: "MMTel - Outgoing Call Barring"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 13000
                repeat: 2
                delay-milliseconds: 1000
                mimetype: "audio/3gpp"
                interruptable: false
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: false

              - id: 201
                description: "MMTel - Outgoing Call Barring - uncharged"
                announcement-url: "file://mmtel_ocb.3gp"
                duration-milliseconds: 13000
                repeat: 2
                delay-milliseconds: 1000
                mimetype: "audio/3gpp"
                interruptable: false
                end-session-on-failure: false
                enforce-one-way-media: false
                suspend-charging: true
  • Change the id of the copy to a previously unused value, for example, 201.

  • Change the description as appropriate.

  • Change suspend-charging to true.

Announcements on call failure

What it does

When a call fails with an error response code (a SIP response code in the range 400 …​ 699), an announcement may be played to the caller, and the status code may be changed to 487 to hide the true status code.

Interactions with other services

This service will only play an announcement if no other announcements are to be played, because all other service announcements will take priority.

This feature can add an announcement when a call is terminated with an error code by another service.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to call failure announcements in the sentinel-volte/mmtel/announcement/announcements/ section.

What you need

  • ❏ A status code for which you want to play an announcement.

  • ❏ The announcement ID of the announcement you wish to play.

  • ❏ Whether you want to hide the true status code.

  • ❏ Default handling of error codes.

Setting up each announcement

I want to…​
Play an announcement when a call fails with a response code 404

Within the mmtel, announcement section, error-code-announcements list, add a new error code announcement entry like this:

            error-code-announcements:
                - error-code: 404
                  announcement-id: 24
                  end-call-with-487-response: false
Play a default announcement for all other failure response codes

Within the mmtel, announcement section:

            default-error-code-announcement:
                announcement-id: 22
                end-call-with-487-response: false
Only play an announcement for the specified error codes

In the mmtel, announcement section, remove or comment out the entire default-error-code-announcement section.

            #default-error-code-announcement:
            #    announcement-id: 22
            #    end-call-with-487-response: false
Play an announcement when a call fails with a response code 488 and change it to a 487 response

Within the mmtel, announcement section, error-code-announcements list, add a new announcement entry like this:

            error-code-announcements:
                - error-code: 488
                  announcement-id: 22
                  end-call-with-487-response: true
Not play any announcements triggered solely by an error code

Directly under the mmtel, announcement section, completely remove or comment out both the default-error-code-announcement and error-code-announcements list sections.

        announcement:
            #default-error-code-announcement:
            #    announcement-id: 22
            #    end-call-with-487-response: false
            #error-code-announcements:
            #    - error-code: 486
            #      announcement-id: 24
            #      end-call-with-487-response: false
            #    - error-code: 488
            #      announcement-id: 22
            #      end-call-with-487-response: true
Play the same announcement for all error codes except for 404, which has no announcement

In the mmtel, announcement section, set up a default-error-code-announcement as described in Play a default announcement for all other failure response codes, then set up an error-code-announcements list entry for error code 404 with disable-announcement set to true.

        announcement:
            default-error-code-announcement:
                announcement-id: 22
                end-call-with-487-response: false
            error-code-announcements:
                - error-code: 404
                  # announcement-id: 24
                  disable-announcement: true
                  end-call-with-487-response: false

PSAP callback

What it does

Public Safety Answering Point (PSAP) callback is a service that helps emergency services call back a subscriber after an emergency call has ended. On the Rhino VoLTE TAS, the PSAP callback service ensures that none of a subscriber’s terminating MMTel TAS services (for example, Incoming Call Barring) hinder the callback attempt.

PSAP callback detection

There are two mechanisms available for detecting when a PSAP callback could be occurring:

  • direct notification from the Emergency Call Session Control Function (E-CSCF), or

  • analysis of the Priority header on incoming initial INVITE requests.

Both mechanisms can be used simultaneously. If either mechanism indicates a PSAP callback attempt, then the call will be handled as such.

E-CSCF notification

The Rhino VoLTE TAS can be configured to receive SIP MESSAGE requests from the E-CSCF when a subscriber calls an emergency number. If this behavior is enabled, upon receiving a such a request, the TAS makes a record of the subscriber’s identity that expires after a period of time determined by the expiry-time-seconds configuration field. Until the record expires, all incoming calls to the subscriber are handled as if they are a PSAP callback attempt and many MMTel services will be disabled.

Depending on network requirements, the SIP MESSAGE from the E-CSCF can either be allowed to continue on to its next destination, or the Rhino VoLTE TAS can stop the MESSAGE and generate a final response to the E-CSCF.

Priority header analysis

The Rhino VoLTE TAS can be configured to check for the presence of a Priority header on all incoming SIP initial INVITE requests. If the header is found with the value psap-callback, that call is handled as a PSAP callback attempt and many MMTel services will be disabled.

Interactions with other services

MMTel terminating services in general

The PSAP callback service’s purpose is to bypass any terminating MMTel TAS services that could potentially prevent emergency services from calling back a subscriber.

When a call is handled as a PSAP callback, the following terminating MMTel services are disabled:

  • Announcements

  • All types of call barring

  • Communication diversion

  • Voicemail forwarding

  • Explicit communication transfer

  • Communication hold

The following terminating MMTel services remain active for PSAP callbacks:

  • Session transfer to own device

  • Flexible alerting

  • Privacy (OIP and TIR)

  • Communication waiting

Online charging

Online charging is handled as a special case. The Rhino VoLTE TAS continues to communicate with the online charging server as normal for the duration of the call, but if the subscriber requires credit to receive the call and it cannot be allocated, the call is still allowed to continue.

Companion device

Certain functions of the companion device service that could interfere with emergency calls are disabled when an emergency call is detected:

  • When a companion device initiates an emergency call, its undisclosed identity will not be hidden.

  • When a PSAP callback attempt is made to the undisclosed identity, the companion device service will not block the call.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to PSAP callback in the sentinel-volte/mmtel/psap-callback section.

What you need

  • ❏ Whether or not to use the Priority header to detect PSAP callback attempts.

  • ❏ Whether or not to use the notifications from the E-CSCF to detect PSAP callback attempts.

If using notifications from the E-CSCF:

  • ❏ How long after receiving a notification from the E-CSCF to handle incoming calls for a subscriber as PSAP callbacks.

  • ❏ Whether or not to forward the notification onwards after processing it.

Setting up PSAP callback

I want to…​
Use the Priority header to detect PSAP callbacks

In the psap-callback section, set use-priority-header to true:

            use-priority-header: true

Related section: PSAP callback detection

Disable use of the Priority header to detect PSAP callbacks

In the psap-callback section, set use-priority-header to false:

            use-priority-header: false

Related section: PSAP callback detection

Use notifications from the E-CSCF to detect PSAP callbacks

In the psap-callback section, add a sip-message-options section:

            sip-message-options:
                expiry-time-seconds: 86400
                terminate-message: true
  • The expiry-time-seconds field must be set to the period of time in seconds that incoming calls for a subscriber should be treated as PSAP callback attempts.

  • The terminate-message field must be set to indicate whether the notification message should be answered by the Rhino VoLTE TAS or forwarded on.

Related section: PSAP callback detection

Disable use of notifications from the E-CSCF to detect PSAP callbacks

In the psap-callback section, remove or comment out the sip-message-options section:

#            sip-message-options:
#                expiry-time-seconds: 86400
#                terminate-message: true

Related section: PSAP callback detection

Change how long after receiving an E-CSCF notification that incoming calls for a subscriber should be handled as PSAP callbacks

In the sip-message-options section, set the expiry-time-seconds to the desired time period in seconds:

                expiry-time-seconds: 10000

Related section: E-CSCF notification

Forward E-CSCF notifications onwards to their destination after processing them

In the sip-message-options section, set the terminate-message to false.

                terminate-message: false

Related section: E-CSCF notification

Not forward E-CSCF notifications onwards and instead send a final response for them

In the sip-message-options section, set the terminate-message to true.

                terminate-message: true

Related section: E-CSCF notification

Dial plan enforcement (DPE)

What it does

The dial plan enforcement (DPE) service ensures that a subscriber has dialed a valid number before allowing a call to proceed.

Number analysis

The service works by confirming that the length of the dialed number is within an expected range. The allowed range can vary based on prefixes that the service detects on the number.

For example, the configuration for the service might specify that:

  • a number starting with 087 can be between 4 and 9 digits long (not including the prefix itself), and

  • all other numbers must be between 4 and 7 digits long.

In this case:

  • 12345678 would be rejected by the DPE service for having more than 7 digits, but

  • 08712345678 would be allowed since the 087 prefix means the number can have up to 9 digits after the prefix.

The service may be configured to detect any number of different prefixes with different ranges for each one. If a single number has multiple potential prefix matches, the service will choose the longest matching prefix.

There is a special case for numbers that are in international format. If one begins with either the configured national-prefix or the configured international-prefix, then the DPE service is bypassed. All other international format numbers will be subject to the same enforcement checks as non-international numbers. See the Number normalization section for information about configuring the national and international prefixes.

Call handling

If a number is allowable according to the DPE service configuration, then the call proceeds as normal.

If a number is rejected, then the call will be refused with a SIP error response. It is possible to configure an announcement to play to the calling party when this happens.

Interactions with other services

Vertical service codes (VSC)

If the VSC service modifies the dialed number by stripping certain prefixes from it, the DPE service will do its analysis on the modified version of the dialed number.

Configuration

Currently, the declarative configuration for the DPE service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

MMTel privacy settings

MMTel privacy is a set of services that allow for a calling party identity to be presented and/or restricted.

  • The Originating Identity Restriction (OIR) service adjusts the privacy restrictions for the originating user to restrict its identity.

  • The Originating Identity Presentation (OIP) service enforces the privacy presentation restrictions of the originating user to the terminating user.

  • The Terminating Identity Restriction (TIR) service adjusts the privacy restrictions for the terminating user.

  • The Terminating Identity Presentation (TIP) service enforces the privacy presentation restrictions of the terminating user to the originating user.

These services are subscriber specific and are configured in the HSS inside the MMTel-Services XML document for the subscriber.

System wide defaults are configured for OIR and OIP services using declarative configuration for when the subscriber’s services are not defined/active in the MMTel-Services XML document. No configuration is required for TIR and TIP services.

In this section

Originating Identification Restriction (OIR)

What it does

Originating Identification Restriction (OIR) service enables the originating user to prevent presentation of its identity to the terminating user. This allows the network to insert a privacy header field into the originating user’s SIP messages.

The declarative configuration for the OIR applies calling party identity restriction rules network wide for all OIR subscribed parties. Whether the OIR service is active and if it may diverge from this network default is determined by how the subscribers involved are provisioned in the MMTel Services document. The OIR service depends on the originating user’s provisioned settings for OIR.

Interactions with other services

Originating Identity Presentation (OIP)

OIP is directly impacted by the configuration and subscriber provisioning for the OIR service. The OIP service uses the privacy header adjustments made by the OIR service to remove data accordingly.

Setting identity restrictions

The OIR service adjusts the privacy header of the originating party’s outgoing requests. The privacy header designates to the OIP service what should be removed from the request before it reaches the terminating user. The OIP service configuration determines how the privacy header is interpreted and used to remove identifying information.

The provisioned OIR settings for the originating user stored in the HSS MMTel Service document take precedence where relevant. Otherwise, the default network configuration given in the declarative configuration of the Rhino VoLTE TAS is used for all OIR subscribers.

The provided table OIR configurability describes how the user’s provisioned settings and the network wide configuration interact with each other.

Table 6. Configurability of the OIR service
Configurable option Network configurable options Subscriber configurable options

When identity restriction occurs for an OIR subscriber

Specific details of when identity restriction occurs are given in 3GPP 24.607 Section 4.5.2.4

Mode

  • Permanent mode

    OIR processes all outgoing requests

  • Temporary mode

    OIP processes only outgoing requests that include a Privacy header

N/A

Temporary Mode Default Action

N/A

For when temporary mode is active:

  • Presentation Restricted

    Enact restriction unless the Privacy header contains 'none'

  • Presentation Not Restricted

    Enact restriction if and only if the outgoing request’s Privacy header contains 'id' or 'header'

What is restricted by OIR on a subscriber’s outgoing requests

Presentation Restriction

  • Restrict ONLY-IDENTITY

    • OIR adds 'id' to the Privacy header

      • Therefore, OIP to anonymize the network associated id

  • Restrict ALL-PRIVATE-INFORMATION

    • OIR adds 'header' to Privacy header

      • Therefore, OIP to anonymize possible identifying fields

  • Restrict ONLY-IDENTITY

    • OIR adds 'id' to the Privacy header

      • Therefore, OIP set to anonymize the network associated id

  • Restrict ALL-PRIVATE-INFORMATION

    • OIR adds 'header' to Privacy header

      • Therefore, OIP set to anonymize possible identifying fields

User Policy

  • NONE

  • ANONYMIZE_FROM

    • OIR anonymizes the From field on the outgoing request

  • ADD_USER_PRIVACY

    • OIR adds 'user' to the Privacy header

      • Therefore, OIP to anonymize user configurable fields

    • OIR anonymizes the From field on the outgoing request

N/A

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to OIR in the sentinel-volte/mmtel/privacy/originating-identification-restriction section.

What you need

  • ❏ Whether to set the default presentation restriction for an OIR subscriber to:

    • restrict all private information (Privacy:header), or

    • only restrict the identity (Privacy:id) of the originating party.

  • ❏ Whether to set the default OIR subscriber’s OIR user policy to:

    • anonymize the from header in the originating party’s requests,

    • restrict all user data in a request (Privacy:user) and anonymize the from in the originating party’s requests, or

    • to specify no default user policy.

You will also need to configure the OIP service as well to enforce these identity restrictions to the terminating user.

Setting up subscriber data

There are subscriber provisioned restriction rules configured in the HSS inside the MMTel-Services XML document for the subscriber.

The presentation-restriction-type subscriber defined restriction rule directly overrides the network’s default configuration.

Setting up service codes

The Rhino VoLTE TAS standard deployment includes service code actions for subscribers to activate OIR.

Table 7. Supplied service code actions
Display name Action

Set Dialled Caller ID Restriction Type

Used to override the OIR service’s PRESENTATION_RESTRICTION for a subscriber.

There are 3 valid values:

* OIR_AS_CONFIGURED — use OIR as configured by the network configuration and the subscriber provisioned configuration.

* OIR_CALLER_ID_BLOCK — override configured OIR to restrict identity.

* OIR_CALLER_ID_UNBLOCK — override configured OIR to not restrict identity.

For more information, see Vertical service codes.

Setting up OIR

I want to…​
Restrict only network defined user identity information for OIR subscribers
Note If a subscriber has provisioned the presentation-restriction-type in the MMTel Services Document, their setting will override this configuration.

In the privacy, originating-identification-restriction section, set presentation-restriction-type to ONLY_IDENTITY:

                presentation-restriction-type: ONLY_IDENTITY
Restrict all network defined private user information for OIR subscribers
Note If a subscriber has provisioned the presentation-restriction-type in the MMTel Services Document, their setting will override this configuration.

In the privacy, originating-identification-restriction section, set presentation-restriction-type to ALL_PRIVATE_INFORMATION:

                presentation-restriction-type: ALL_PRIVATE_INFORMATION
Anonymize the from for OIR subscribers by default

In the privacy, originating-identification-restriction section, set user-policy to ANONYMIZE_FROM:

                user-policy: ANONYMIZE_FROM
Remove all user configurable identifying information for OIR subscribers
Note This includes anonymizing the from header for OIR subscribers.

In the privacy, originating-identification-restriction section, set user-policy to ADD_USER_PRIVACY:

                user-policy: ADD_USER_PRIVACY

Originating Identification Presentation (OIP)

What it does

Originating Identification Presentation (OIP) service allows the terminating user to receive identity information from the originating user. The OIP service removes and anonymizes headers based on the originating user’s SIP message privacy header.

The declarative configuration for the OIP applies calling party identity presentation rules network wide for all OIP subscribed subscribers. Whether the OIP service is active and if it may diverge from this network default is determined by how the subscribers are provisioned in the MMTel Services document. The OIP service depends on the terminating user’s provisioned settings for OIP.

Applying identification presentation rules

The OIP service uses the privacy header on the originating user’s requests and responses to decide what is presented to the terminating subscriber.

If the privacy header field is set to:

  • id, the privacy header will not be removed. The Rhino VoLTE TAS does not anonymize anything, the S-CSCF would remove the P-Asserted-Identity header.

  • header, all headers containing private information are anonymized per RFC 3323 Section 5.1.

  • user, all user configurable headers are anonymized per RFC 3323 Section 5.3.

There are other privacy headers supported, they are enforced as per RFC 3323.

Also, if the terminating subscriber does not subscribe to the OIP service, then:

  • any P-Asserted-Identity or Privacy header is removed from the originating user’s request

  • if anonymize-from-header is set true, the from header is anonymized

Interactions with other services

Originating Identity Presentation (OIR)

The OIR service directly impacts on how the OIP applies presentation restrictions to the terminating user. The OIR adjusts the privacy header from the originating user’s request that is used to apply privacy changes to that request.

B2BUA

The Rhino VoLTE TAS B2BUA functionality automatically anonymizes the Call-Id, Record-Route, and Via headers on the originating user’s request.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to OIP in the sentinel-volte/mmtel/privacy/originating-identification-presentation section.

What you need

  • ❏ Whether to anonymize the originating user’s from header when OIP is not active for a subscriber.

  • ❏ Whether to allow the History-Info header to be deleted when using OIP.

You will also need to configure the OIR service as well to determine how the privacy header may be pre-processed when OIR is active.

Setting up subscriber data

There are subscriber provisioned OIP settings configured in the HSS inside the MMTel-Services XML document for the subscriber.

Setting up OIP

I want to…​
Anonymize the from header for non-active OIP subscribers

In the originating-identification-presentation, originating-identification-presentation section, set anonymize-from-header to true:

                anonymize-from-header: true
Allow deletion of the History-Info header

In the originating-identification-presentation, originating-identification-presentation section, set allow-history-info-header-deletion to true:

                allow-history-info-header-deletion: true

Conference (CONF)

What it does

The ad-hoc conferencing (CONF) functionality in Rhino VoLTE TAS allows a subscriber to add multiple parties to a voice or video session. The conference is initiated by a subscriber (the conference moderator) making a call toward the conference factory Public Service Identity (PSI). The Rhino VoLTE TAS will process this call and begin a session with the media server (MRFC/MRFP). As the moderator adds more participants to the conference, the Rhino VoLTE TAS instructs the media server to join or mix the media of the new participant with the conference session media. The moderator controls the conference, and sessions are terminated when the moderator disconnects.

Participants 'subscribe' to the conference to be notified of changes, such as members joining or leaving. Each subscription is valid for a specified length of time.

Operators can control whether the MRF is contacted directly from the Rhino VoLTE TAS, or whether the I-CSCF is added to the route header of messages sent to the MRF.

Conference media

Every conference participant establishes signaling and media sessions with the media server, facilitated by the Rhino VoLTE TAS. The specifics of the media sessions (and of the message flows used during conferencing) are dependent on the endpoints in use and on the MRF itself, so there are a number of configuration options to control details of the conference media settings. Operators can also control value-add features such as the maximum number of conference participants and whether video-conferencing is allowed.

Interactions with other services

Each participant’s session is treated by the Rhino VoLTE TAS as a regular call, subject to normal call processing in addition to conference treatment. This means that standard Rhino VoLTE TAS functionality, such as access transfer, mid-call announcements, and hold-and-resume functionality, are all supported during conferencing.

Online charging

Charging is correlated to the moderator session.

Configuration

What you need

  • ❏ The URI of the conference MRF.

  • ❏ A list of conference factory PSIs to use in addition to the PSIs defined in 3GPP TS 23.003.

  • ❏ The vendor of the Media Server Markup Language in use.

  • ❏ Whether the root element in the MSML is a child of the selector element or of the videolayout element.

  • ❏ The maximum number of participants in the call.

  • ❏ Whether video conferences are allowed.

Setting up conferencing

Warning Ensure that conferencing media server integration has been configured.

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to conferencing in the sentinel-volte/mmtel/conferencing section.

I want to…​
Set the URI of the Media Resource Function

In the conferencing section, set conference-mrf-uri to the URI:

                conference-mrf-uri: sip:mrf@mrfhost.example.com:5060
Route messages to the MRF via the IMS

In the conferencing section, set route-to-mrf-via-ims to true:

                route-to-mrf-via-ims: true
Set the MSML schema vendor name

In the conferencing section, set msml-vendor to the vendor name:

                msml-vendor: Dialogic
Attach the MSML root element as a child of videolayout

In the conferencing section, set root-on-selector to false:

                root-on-selector: false
Add a conference PSI alias

In the conferencing section, add the conference PSI alias to the list of conference-factory-psi-aliases:

                conference-factory-psi-aliases:
                    -   sip:conf-factory@ims.mnc<MNC>.mcc<MCC>.com
Set the maximum number of participants in a conference

In the conferencing section, set maximum-participants:

                maximum-participants: 4
Allow video-conferencing

In the conferencing section, set allow-video-conference-calls to true:

                allow-video-conference-calls: true
Set the default expiry time on conference subscriptions
                default-subcription-expiry-seconds: 1800
Set the minimum allowed subscription time
                min-subscription-expiry-seconds: 10
Notify participants about subscription changes every 10 seconds

In the subscription section, set polling-interval-seconds:

                polling-interval-seconds: 10

Call barring

What it does

Call barring is a set of MMTel services that conditionally bar calls using a combination of system-wide and per subscriber rules.

  • Incoming Call Barring (ICB) bars incoming calls based on per subscriber rules written using common-policy schema (for example, a subscriber may set up Do Not Disturb, to bar all calls).

    • Anonymous Call Rejection (ACR) bars incoming calls from anonymous callers.

  • Outgoing Call Barring (OCB) bars outgoing calls based on per subscriber rules written using common-policy schema.

  • Operator Determined Barring (ODB) is a fixed set of barring conditions, each enabled or not per subscriber.

    • Operator Specific Barring (OSB) is a subset of ODB containing four rules each enabled or not per subscriber, but where the system-wide conditions and actions are configured using common-policy schema. Additionally, the action when these rules trigger may be augmented to retarget the call, with an ability to disable charging, and/or use a rule-specific announcement in this case.

    • Prefix barring uses dialed number rules to either explicitly allow or bar an outgoing call, or to effectively force a match condition for some of the ODB conditions, including the OSB rules.

Announcements may be set to be played to the caller when a call is barred.

Interactions with other services

Communications Diversion (CDIV)

Call barring for incoming calls is applied before MMTel CDIV, so any barred incoming call will not be subject to forwarding.

However, an inbound call which is not barred but then forwarded will have outbound barring processing applied to the outbound forwarded call.

Vertical service codes with XCAP data update

Vertical service codes in combination with XCAP data update may change subscriber data, affecting subscriber ICB and OCB rules, and enabling or disabling ODB rules for a subscriber.

ODB rules may prevent changes to subscriber data, both via vertical service codes with XCAP data update, and when using XCAP directly from user equipment.

International Call Management (ICM)

Call barring takes precedence over the ICM service. This means that if the call barring service does bar the call, the ICM service announcements will not be played.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to call barring in the sentinel-volte/mmtel/communication-barring section.

What you need

  • ❏ Whether the system should process or ignore international and international-exHC barring rules based on the reliability of determining that an incoming call is international.

  • ❏ The ID of an optional announcement to play when an incoming call is barred due to an anonymous caller.

  • ❏ The ID of an optional announcement to play when an incoming call is barred otherwise.

  • ❏ The ID of an optional announcement to play when an outgoing call is barred.

  • ❏ For up to four operator specific barring rules:

    • ❏ The common policy ruleset which defines the conditions and action for the rule.

    • ❏ Whether to retarget the call and if so:

      • ❏ the URL target

      • ❏ the ID of an optional announcement to play

      • ❏ whether to disable charging.

Setting up announcements

Call barring configuration only needs the announcement ID of the announcements that should be played. The details of those announcements should be configured beforehand. For details about how to do this, see Announcements.

Setting up call barring

I want to…​

Enable ODB

In the hss-queries-enabled section, set odb to true:

            odb: true
Disable ODB

In the hss-queries-enabled section, set odb to false:

            odb: false

Setting up incoming call barring

I want to…​
Use the same announcement for all incoming barred calls

In the incoming-communication-barring, announcement section, set the same announcement ID for both announcements:

                 announcement:
                    announcement-id: 21
                    anonymous-call-rejection-announcement-id: 21
Use a different announcement for barred incoming anonymous calls

In the incoming-communication-barring, announcement section, set separate announcement IDs for the two announcements:

                 announcement:
                    announcement-id: 21
                    anonymous-call-rejection-announcement-id: 22
For barred incoming calls, only play an announcement when it is anonymously barred

In the incoming-communication-barring, announcement section, remove or comment out the announcement-id.

                 announcement:
                    # announcement-id: 21
                    anonymous-call-rejection-announcement-id: 22
For barred incoming calls, only play an announcement when it is not anonymously barred
                 announcement:
                    announcement-id: 21
                    # anonymous-call-rejection-announcement-id: 22
Enable evaluation of incoming international barring rules
                international-rules-active: true

Setting up outbound call barring

I want to…​
Play an announcement for barred outgoing calls
                announcement:
                    announcement-id: 20
Not play an announcement for barred outgoing calls

In the outgoing-communication-barring section, delete or comment out the whole announcement section.

                # announcement:
                #    announcement-id: 20
Bar a suspended subscriber from making any calls, redirecting them to a specific number
  • Ensure ODB is enabled. See Enable ODB above.

  • Choose an OSB rule number to use.

    (considering what types are spare and the desired priority of this and existing rules)

  • Ensure this OSB rule is disabled for all subscribers.

    out of scope of this document

  • Set the OSB rule to:

    • bar all outbound calls

    • retarget any outbound call to the call center

    • optionally set up a specific announcement to play to the subscriber before retargeting the call

    • disable online charging for the call.

            operator-communication-barring:
                operator-barring-rules:
                    type1:
                        rule: # Bar outgoing calls
                            <cp:ruleset
                                xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
                                xmlns:cp="urn:ietf:params:xml:ns:common-policy"
                            >
                                <cp:rule id="bar-outgoing--enabled-when-out-of-credit">
                                    <cp:conditions>
                                        <outgoing/>
                                    </cp:conditions>
                                    <cp:actions>
                                        <allow>false</allow>
                                    </cp:actions>
                                </cp:rule>
                            </cp:ruleset>
                        retarget:
                            retarget-uri: sip:payments@pay.your.bill.com
                            disable-online-charging-on-retarget: true
                            announcement:
                                announcement-id: 23
  • Enable this OSB rule in subscriber data for suspended subscribers.

    out of scope of this document

Setting up prefix based barring

Prefix based barring provides a mechanism for an operator to augment the implicit or explicit condition of a MMTel OCB barring rule, so that the rule will also apply when the called party number matches some prefix with optional length criteria.

Because the same prefix can be treated differently (for example, depending on whether it is national or international), and multiple prefixes may all need to be treated the same way, the configuration is split into a list of prefixes and a list of classifications.

Each prefix has a list of classifications that may apply.

Each classification has further predicates to see if the classification is applicable to the call (minimum-number-length, maximum-number-length and match-international). If it is, the classification specifies the barring treatment of that call, and can optionally override the normal barring announcements.

Prefix barring interactions with other OCB features

There are different types of OCB rules, in the following overall order of priority:

  • Prefix based OperatorAllow

  • Operator-specific ODB rules that allow a call, regardless whether applied by matching their defined condition, or by prefix based treatment

  • Prefix based OperatorBar

  • Operator-specific ODB rules that bar a call, regardless whether applied by matching their defined condition, or by prefix based treatment

  • Prefix based premium-rate communication barring

  • Standard ODB rules

  • OCB rules

Within rules of the same type, an allow action will always take precedence over a barring or retargeting action.

If multiple operator-specific ODB rules apply and have conflicting retarget or barring actions, then the rule with the lower number will take precedence. (There are four slots available for operator-specific ODB rules, numbered one through four).

I want to…​
Treat 90077xxxxx numbers as premium rate entertainment for barring purposes and use a custom announcement when barred

In outgoing-prefix-barring, add a classification and map that prefix to it. In this case we use the maximum value for maximum-number-length to prevent this barring rule being circumvented by overdialing.

              outgoing-prefix-barring:
                  prefixes:
                      - prefix: '90077'
                        classifications:
                            - 'premium rate entertainment'
                  classifications:
                      - name: 'premium rate entertainment'
                        minimum-number-length: 10
                        maximum-number-length: 20
                        match-international: false
                        barring-treatment: 'PremiumRateEntertainment'
                        announcement:
                          announcement-id: 27
Treat all other 9007xxxxxx numbers as premium rate information services for barring purposes

In outgoing-prefix-barring, extend the above scenario by adding a new prefix and a new classification. This works because a call will match the longest prefix.

              outgoing-prefix-barring:
                  prefixes:
                      - prefix: '90077'
                        classifications:
                            - 'premium rate entertainment'
                      - prefix: '9007'
                        classifications:
                            - 'premium rate info'
                  classifications:
                      - name: 'premium rate entertainment'
                        minimum-number-length: 10
                        maximum-number-length: 20
                        match-international: false
                        barring-treatment: 'PremiumRateEntertainment'
                      - name: 'premium rate info'
                        minimum-number-length: 10
                        maximum-number-length: 20
                        match-international: false
                        barring-treatment: 'PremiumRateInformation'
Bar all calls to 8xx numbers without playing an announcement, but with no prefix barring handling for calls to 801

In outgoing-prefix-barring, we need to be explicit about all the 80x prefixes excluding 801, and all the remaining 8x prefixes, mapping them all to the same classification.

              outgoing-prefix-barring:
                  prefixes:
                      - prefix: '800'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '802'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '803'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '804'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '805'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '806'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '807'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '808'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '809'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '81'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '82'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '83'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '84'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '85'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '86'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '87'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '88'
                        classifications:
                            - 'barred shortcodes'
                      - prefix: '89'
                        classifications:
                            - 'barred shortcodes'
                  classifications:
                      - name: 'barred shortcodes'
                        minimum-number-length: 3
                        maximum-number-length: 3
                        match-international: false
                        barring-treatment: 'OperatorBar'
                        disable-ocb-announcement: true
Override any other barring rules to always allow calls to one specific number

In outgoing-prefix-barring, add a classification with barring-treatment set to OperatorAllow and matching exact number length, and map this from the complete number to that classification.

              outgoing-prefix-barring:
                  prefixes:
                      - prefix: '900123456'
                        classifications:
                            - 'explicit allowed 9 digit numbers'
                  classifications:
                      - name: 'explicit allowed 9 digit numbers'
                        minimum-number-length: 9
                        maximum-number-length: 9
                        match-international: false
                        barring-treatment: 'OperatorAllow'
Bar calls to 60000 whether or not the call is international

In outgoing-prefix-barring, add two classifications, one for national and one for international, but otherwise the same, then map the prefix to both classifications.

              outgoing-prefix-barring:
                  prefixes:
                      - prefix: '60000'
                        classifications:
                            - 'bar me'
                            - 'bar me - intl'
                  classifications:
                      - name: 'bar me'
                        minimum-number-length: 5
                        maximum-number-length: 5
                        match-international: false
                        barring-treatment: 'OperatorBar'
                      - name: 'bar me - intl'
                        minimum-number-length: 5
                        maximum-number-length: 5
                        match-international: true
                        barring-treatment: 'OperatorBar'

Communication Waiting (CW)

What it does

MMTel Communication Waiting (CW) is a service that alerts the subscriber when a new call arrives while a call is already in progress. The called party can accept, ignore, or reject the call. If accepted, the existing call can be put on hold.

This service can also play an announcement to the caller. See Announcements.

Interactions with other services

Call barring

The MMTel call barring services always take precedence over call waiting. If an incoming call is barred, the call will be terminated without waiting. See Call barring.

Communications Diversion (CDIV)

The MMTel CDIV takes precedence over communication waiting. If the called subscriber is already on a call, the call will be forwarded without waiting. See Communications Diversion (CDIV).

Communication Hold (HOLD)

If the subscriber accepts the new call, the call of current caller can be put on hold.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to call waiting in the sentinel-volte/mmtel/communication-waiting section.

What you need

  • ❏ The ID of the announcement to play to the caller.

  • ❏ The time in seconds to give the called party to answer the call before giving up and tearing down the call.

Setting up call waiting

I want to…​
Play an announcement to the caller that the call is waiting

Call waiting configuration only needs the announcement ID of the announcement to be played. The details of that announcement should be configured beforehand. For details about how to do this, see Announcements.

        communication-waiting:

            announcement:
                announcement-id: 24
Change the number of seconds to give the called party to answer the call

In the communication-waiting section, set timer-seconds to the desired limit:

                timer-seconds: 30

Communication Hold (HOLD)

What it does

MMTel Communication Hold (HOLD) is a service that lets a user suspend reception of the media stream(s) of an established IP multimedia session, and resume the media stream(s) at a later time.

This service provides a way for the operator to:

  • restrict bandwidth for held calls

  • play announcements to the held party

  • determine how media streams for the holding party are handled while an announcement to the held party is in progress.

Bandwidth controls

Bandwidth controls allow the Rhino VoLTE TAS to restrict the bandwidth available to media streams to the holding party for the duration of the hold. The call hold service allows you to set three different bandwidth parameters. The values for all of these parameters are set in kilobits per second.

Table 8. Bandwidth parameters
Parameter Config field Description

AS

b-as-parameter

Sets the bandwidth available for application specific data. It is safe to set this to 0.

RS

b-rs-parameter

Sets the bandwidth available for RTCP (Real-time Transport Control Protocol) for participants that are sending data. This should be set high enough to allow RTCP messages to continue while the call is on hold.

RR

b-rr-parameter

Sets the bandwidth available for RTCP for participants that are not sending data. This should be set high enough to allow RTCP messages to continue while the call is on hold.

Announcements

The call hold service can play an announcement to the party that has been put on hold. Call hold configuration only needs the announcement ID of the announcement that should be played. For instructions on how to configure the details of the announcement, see announcements.

Media handling during announcement

While an announcement to the held party is in progress, there are three options on how to deal with the media streams to the holding party. The behavior is configured in the holding-party-media-mode field with the following options.

Table 9. Holding party media modes
Field value Behavior
NO_HOLD

No change is made to the media streams to the holding party.

BLACK_HOLE_ONLY

The media streams to the holding party are directed to a black hole IP address (0.0.0.0 for IPv4 and :: for IPv6) for the duration of the announcement.

FULL_HOLD

The media streams to the holding party are put on a two-way hold for the duration of the announcement.

Interactions with other services

Conference (CONF)

If a participant of a conference invokes the HOLD service, it is not desirable to provide an announcement to the conference.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to call hold in the sentinel-volte/mmtel/communication-hold section.

What you need

  • ❏ The ID of the announcement to play when the session is held.

Setting up call hold

I want to…​
Set the bandwidth for held media streams

In the communication-hold section, change the values, in kilobits per second, of the bandwidth-adjustment parameters.

           bandwidth-adjustment:
                b-as-parameter: 0
                b-rr-parameter: 500
                b-rs-parameter: 500

Related section: Bandwidth controls

Play an announcement to the held party that the call is on hold
        communication-hold:

            announcement:
                announcement-id: 25

Related section: Announcements

Leave media streams to the holding party unchanged while an announcement is in progress

In the communication-hold section, set the holding-party-media-mode to NO_HOLD.

            holding-party-media-mode: NO_HOLD
Direct media streams to the holding party to a black hole IP address while an announcement is in progress

In the communication-hold section, set the holding-party-media-mode to BLACK_HOLE_ONLY.

            holding-party-media-mode: BLACK_HOLE_ONLY
Put media streams to the holding party on a two-way hold while an announcement is in progress

In the communication-hold section, set the holding-party-media-mode to FULL_HOLD.

            holding-party-media-mode: FULL_HOLD

Communications Diversion (CDIV)

What it does

MMTel Communications Diversion (CDIV) is a service that redirects incoming calls according to rules set by the network operator and/or the subscriber. Each of these rules specifies the particular condition or conditions that should trigger it, and the destination to forward to when the rule is triggered. The rules are subscriber specific and are therefore configured in the HSS rather than the Rhino VoLTE TAS.

Forwarding rules

Each forwarding rule must correspond to one of five different types of forwarding. Each forwarding type is triggered under different circumstances. The types are:

Table 10. Forwarding types
Name Acronym Trigger Condition

Communication Forwarding Unconditional

CFU

Triggers immediately upon receipt of an incoming call.

Communication Forwarding on Busy user

CFB

Receipt of a 486 Busy Here SIP response from the called party.

Communication Forwarding on no Reply

CFNR

A 180 Ringing response followed by a 408 Request Timeout response, or the no reply timer expiring after receiving a 180 Ringing response.

Communication Forwarding on Subscriber Not Reachable

CFNRc

Receipt of a SIP response with any of these status codes: 500 Internal Server Error, 503 Service Unavailable, 408 Request Timeout, or another code configured in additional-not-reachable-status-codes. Normally these responses must be received before a 180 Ringing response to trigger CFNRc, but this can be configured in the allow-not-reachable-during-alerting field (except for 408 Request Timeout response, which always triggers CFNR after a 180 Ringing response).

Communication Forwarding on Not Logged-in

CFNL

Receipt of an incoming call when the called party is not currently registered on the network.

Additional conditions

In addition to the basic types above, additional conditions can be placed on forwarding rules:

Table 11. Additional forwarding conditions
Name Description
media

Makes a forwarding rule conditional on the specific media types appearing in the SDP for the call.

validity

Makes a forwarding rule conditional on the date and time the call is received.

Forwarding action

In addition to its conditions, each forwarding rule should have a forward-to action. This action contains a number of parameters that detail how to handle forwarding when the rule’s conditions are met. The supported fields are:

Table 12. Supported forward-to parameters
Name Description
target

The URI to forward to.

notify-caller

Determines whether to send a 181 Call is Being Forwarded response to the calling party.

reveal-identity-to-caller

Determines whether the identity of the forward-to target should be revealed to the calling party.

reveal-served-user-identity-to-caller

Determines whether the identity of the original called party should be revealed to the calling party.

reveal-identity-to-target

Determines whether the identity of the original called party should be revealed to the forward-to target.

Communication Deflection

Communication Deflection (CD) is another type of MMTel call forwarding that, unlike the others, is not triggered through forwarding rules. Instead it is triggered by receipt of a 302 Moved Temporarily SIP response from the called party. For this type of forwarding, the response itself contains the destination to forward to.

No reply timer

As described above, CFNR is triggered after a 180 Ringing response, either by a 408 Request Timeout response or by the no reply timer expiring. The no reply timer is started on receipt of the 180 Ringing response, and expires after a period of time derived from either:

  • the communication-forwarding-on-no-reply-timer setting in subscriber HSS configuration (this option takes priority) or

  • the period of time specified in global configuration in the no-reply-timeout-seconds field.

Forwarding limits

The number of times that a single call can be forwarded can be limited with the max-diversions field.

If the limit is reached, there are several options for how to handle the call. This is configured in the max-diversion-action field. The options are:

Table 13. Options for handling too many forwarding attempts
Option Behaviour
REJECT

Terminates the call.

DELIVER_TO_FIXED_DESTINATION

Makes a final attempt to forward the call to the destination given in the max-diversion-fixed-destination field.

DELIVER_TO_SUBSCRIBERS_VOICEMAIL_SERVER

Makes a final attempt to forward the call to the subscriber’s specified voicemail server. This option requires that the subscriber’s voicemail server URI has been set in their Metaswitch-TAS-Services document in the HSS.

It is also possible to specify a list of known URIs in the diversion-limit-exempt-uris field that can be forwarded to, even when the forwarding limit is reached.

Interactions with other services

Call barring

The MMTel call barring service always takes precedence over call forwarding. If an incoming call is barred, the call will be terminated without forwarding.

Voicemail forwarding

Voicemail forwarding is closely related to the MMTel call forwarding service. There are certain situations that can trigger either service, for example, if the called party is already on a call. In such cases MMTel call forwarding takes precedence, and will evaluate the provisioned forwarding rules for the called party. Voicemail forwarding will be triggered if there are no forwarding rules that result in the call being forwarded.

Warning There are certain situations where the MMTel call forwarding service may be suppressed, for example, when routing to a CS network where MSC is expected to handle call forwarding. In these situations the Voicemail Forwarding service will also be suppressed.
Terminating Access Domain Selection (T-ADS)

If T-ADS attempts to connect the call over the circuit switched (CS) network and the attempt fails, it is possible that call forwarding could be triggered twice. The first time for call forwarding behavior in the CS core network, the second time for MMTel call forwarding.

For this reason it is possible to disable MMTel call forwarding for calls that are terminating in a CS network, see below.

Terminating SCC services in general

When a call is forwarded, the terminating SCC service will be skipped for the forwarded SIP INVITE request. This is because the forwarded call is treated as a new originating call.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to call forwarding in the sentinel-volte/mmtel/call-diversion/mmtel-call-diversion section.

What you need

  • ❏ The maximum limit for the number of forwards that should be allowed for a single call.

  • ❏ The preferred option for handling a call that has reached the maximum number of forwards.

  • ❏ Any URIs that can be forwarded to, even when forwarding limits have been reached.

  • ❏ Optionally, a default URI to forward to if a rule without an explicit target is triggered.

  • ❏ The default length of time to allow the call to ring before triggering CFNR.

  • ❏ Whether MMTel call forwarding should be disabled for calls that terminate in a CS network.

  • ❏ Whether subscribers' forwarding rules should take precedence over the operator’s rules.

  • ❏ Whether CFNRc should be allowed to trigger after the call starts ringing.

  • ❏ Any SIP response status codes that should trigger CFNRc besides the standard ones.

  • ❏ Whether an orig tag should be added to outbound forwarded SIP INVITE requests.

  • ❏ Whether a hi-target-param of type mp should be included in the History-Info for a forwarded message.

Setting up subscriber data

Both subscriber and operator defined forwarding rules, along with a subscriber specific setting for the no reply timer are configured in the HSS inside the MMTel-Services XML document for the subscriber.

You can find a detailed description of what this configuration looks like in the 3GPP technical specification for the MMTel call forwarding service, see section 4.9 of 3GPP TS 24.604.

Not all of the rule conditions listed in the technical specification are supported by the Rhino VoLTE TAS. Only the following conditions may be used: busy, not-registered, cp:validity, media, no-answer, rule-deactivated, and not-reachable.

Similarly there are also forward-to action parameters listed in the specification that are not supported by the Rhino VoLTE TAS. The following parameters may be used: target, notify-caller, reveal-identity-to-caller, reveal-served-user-identity-to-caller, and reveal-identity-to-target.

Setting up call forwarding

I want to…​
Set the limit for how many times a call can be forwarded

In the mmtel-call-diversion section, set max-diversions to the desired limit:

                max-diversions: 10
Reject calls that exceed the forwarding limit

In the mmtel-call-diversion section, set max-diversion-action to reject the call:

                max-diversion-action: REJECT
Forward calls that exceed the forwarding limit to a fixed URI
                max-diversion-action: DELIVER_TO_FIXED_DESTINATION
                max-diversion-fixed-destination: tel:+123456789
Allow forwarding to special URIs even when forwarding limits have been reached

In the mmtel-call-diversion section, add the desired SIP and/or tel URIs to the list of diversion-limit-exempt-uris:

                diversion-limit-exempt-uris:
                    - sip:voicemail@example.com
                    - tel:+123456789
Add to the set of SIP error response codes that trigger the CFNRc

In the mmtel-call-diversion section, add the desired codes to the list of additional-not-reachable-status-codes:

                additional-not-reachable-status-codes:
                    - 404
                    - 480
Allow CFNRc to still be triggered after receiving an 180 Ringing response
                allow-not-reachable-during-alerting: true
Set a default destination to use if a subscriber’s forwarding rule does not specify a destination

In the mmtel-call-diversion section, set default-target-uri to the desired SIP or tel URI:

                default-target-uri: sip:default-target@example.com
Set the default timeout for triggering CFNR

In the mmtel-call-diversion section, set no-reply-timeout-seconds to the desired timeout:

                no-reply-timeout-seconds: 15
Disable the MMTel call forwarding service when the call is being delivered over a circuit-switched network
                suppress-for-cs-terminating-domain: true
Allow the subscriber’s forwarding rules to override the operator’s rules

In the mmtel-call-diversion section, set prefer-subscriber to true:

                prefer-subscriber: true
Play an announcement to the caller when the call is forwarded

MMTel call forwarding configuration only needs the announcement ID of the announcement to be played. The details of that announcement should be configured beforehand. For details about how to do this, see Announcements.

        call-diversion:

            announcement:
                announcement-id: 12
Add the 'orig' tag to the Route header of forwarded SIP INVITE requests

In the mmtel-call-diversion section, set add-orig-tag to true:

                add-orig-tag: true
Prevent the 'orig' tag from being added to the Route header of forwarded SIP INVITE requests

In the mmtel-call-diversion section, set add-orig-tag to false:

                add-orig-tag: false
Include a 'hi-target-param' of type 'mp' in the History-Info header that is added to forwarded SIP INVITE requests

In the mmtel-call-diversion section, set add-mp-param to true:

                add-mp-param: true

Voicemail forwarding

What it does

When enabled for a subscriber, the voicemail forwarding service can forward an incoming call to a voicemail server. Depending on the selected configuration, this can happen under any of these conditions:

  • The call has waited longer than a specified timeout for a successful response.

  • The called subscriber is unavailable and has no provisioned diversion rules for the MMTel call forwarding service.

  • The called subscriber has provisioned diversion rules, but none of them cause the call to be forwarded.

  • The called subscriber uses online charging and credit cannot be allocated.

For details about diversion rules, see Communications Diversion (CDIV).

The URI of the voicemail server to forward to is provisioned per subscriber. It is possible to allow a subscriber to choose their own voicemail server.

The voicemail forwarding configuration includes a list of URIs for known voicemail servers on the network.

Important If a subscriber’s chosen voicemail server does not appear in this list, it can change which announcement they will hear before the call is forwarded. It can also potentially disable voicemail forwarding when credit cannot be allocated.

The voicemail forwarding service only runs on the terminating instance of the Rhino VoLTE TAS, and can be triggered at any time during call setup.

Voicemail forwarding can be used with the Metaswitch Voicemail Server. See the VMS product documentation for details of how to set up the server.

Playing announcements

The Rhino VoLTE TAS supports playing an operator specified announcement to the calling party before forwarding to voicemail. If a subscriber’s voicemail server is on the list of known voicemail servers, the announcement can be specified for voicemail forwarding. If not, the standard Communications Diversion (CDIV) announcement will play instead.

These announcements are distinct from any announcement that the voicemail server itself might play to the calling party.

Forwarding to voicemail without credit

If the subscriber is using Diameter Ro based online charging and they will be charged for the incoming call, forwarding to voicemail can be invoked if credit could not be allocated. The policy for when this is allowed is part of the Voicemail Forwarding configuration.

Voicemail service codes

The Rhino VoLTE TAS supports a subscriber dialing a service code (for example *123) to retrieve voicemail by forwarding the originating call to their configured voicemail server. This function uses the same voicemail server URI in subscriber config as the voicemail forwarding service, but it runs on the originating Rhino VoLTE TAS instance.

There is also support for setting up a service code that a subscriber can use to set their voicemail server URI (if they are permitted to do so).

Interactions with other services

Call barring

The MMTel call barring services (ICB and OCB) always take precedence over voicemail forwarding. If barring is triggered, the call will be terminated without forwarding to voicemail.

Communications Diversion (CDIV)

Voicemail forwarding is closely related to the MMTel CDIV service. There are certain situations that can trigger either service, for example, if the called subscriber is already on a call. In such cases MMTel call forwarding takes precedence, and will evaluate the provisioned diversion rules for the called subscriber. Voicemail forwarding will be triggered if there are no diversion rules that result in the call being forwarded.

If a subscriber is allowed to provision their own diversion rules for the MMTel call forwarding service, they can use that functionality to forward the call to their own voicemail server. This is true even when they are not permitted to choose their own voicemail server for the voicemail forwarding service.

Important There are certain situations where the MMTel CDIV service may be suppressed, for example, when routing to a CS network where MSC is expected to handle call forwarding. In these situations the voicemail forwarding service will also be suppressed.
Online charging

When using online charging, voicemail forwarding can be configured to activate when credit cannot be allocated for the call (for any reason). If this behavior is triggered, voicemail forwarding will finalize the online charging session. After this, there will be no further communication with the online charging system.

Configuration

What you need

  • ❏ The wait time for a call to be successfully connected before it is forwarded to voicemail.

  • ❏ A list of URIs for known voicemail servers on the network.

  • ❏ Whether to allow forwarding to voicemail if credit cannot be allocated for a subscriber that uses online charging. If allowed, forwarding can either be restricted to URIs on the known voicemail servers list or permitted for any URI.

  • ❏ Optionally, the ID of the announcement to be played before forwarding to any of the known voicemail servers.

  • ❏ Subscriber configuration set up with the Metaswitch-TAS-Services section enabled and the voicemail server URI field populated.

Setting up announcements

Voicemail forwarding configuration only needs the announcement ID of the announcement that should be played. The details of that announcement should be configured beforehand. For details about how to do this, see Announcements.

Setting up subscriber configuration

All subscribers using the Voicemail Forwarding service need to be configured with a voicemail server URI in the Metaswitch-TAS-Services section of their subscriber profile. Further information on configuring the subscriber data for the voicemail forwarding service is given in Forward to voicemail subscriber data.

Note

For standard Rhino VoLTE TAS deployments, the Metaswitch-TAS-Services document is disabled. This must be enabled to activate voicemail forwarding using subscriber data.

Setting up service codes

The Rhino VoLTE TAS standard deployment includes service code actions for subscribers to retrieve voicemail and update their voicemail server URI (if permitted to do so).

Table 14. Supplied service code actions
Display name Action

Connect Subscriber To Voicemail Provider

Execute dialing for voicemail.

Set Default Forward Voicemail Server Number

Update the default forward voicemail number for the subscriber data (MetaswitchForwardToVoicemail.voicemailServer).

For more information, see Vertical service codes.

Setting up voicemail forwarding

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to voicemail forwarding in the sentinel-volte/mmtel/call-diversion/forward-to-voicemail section.

I want to…​
Activate voicemail forwarding

Ensure the entire forward-to-voicemail section is present and not commented out in the configuration file.

            forward-to-voicemail:
                voicemail-uris:
                    - sip:vms1@example.com
                    - sip:vms2@example.com
                forward-to-voicemail-timeout-seconds: 0
                forward-to-voicemail-without-ocs-credit: NEVER_ALLOW
Set time to forward calls to voicemail after processing the initial INVITE
                forward-to-voicemail-timeout-seconds: 30
Disable forwarding to voicemail due to timeout
                forward-to-voicemail-timeout-seconds: 0
Disallow forwarding to voicemail if unable to allocate credit to the subscriber
Important This only applies to subscribers using Diameter Ro based online charging.

In the forward-to-voicemail section, set forward-to-voicemail-without-ocs-credit to never allow forwarding:

                forward-to-voicemail-without-ocs-credit: NEVER_ALLOW
Allow forwarding to voicemail regardless of being able to allocate credit to subscriber
Important This only applies to subscribers using Diameter Ro based online charging.

In the forward-to-voicemail section, set forward-to-voicemail-without-ocs-credit to always allow forwarding:

                forward-to-voicemail-without-ocs-credit: ALWAYS_ALLOW
Allow forwarding to a known voicemail server regardless of the credit status of a subscriber using online charging
Important This only applies to subscribers using Diameter Ro based online charging.

In the forward-to-voicemail section, set the following:

                forward-to-voicemail-without-ocs-credit: ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS
                voicemail-uris:
                    - sip:vms1@example.com
Play a voicemail announcement (announcement id=7) to the calling party when voicemail forwarding occurs
                voicemail-uris:
                    - sip:vms1@example.com
                    voicemail-announcement-id: 7
Play the default forwarding announcement to the calling party when voicemail forwarding occurs

In the call-diversion, announcement section, remove or comment out voicemail-announcement-id:

                    # voicemail-announcement-id: 7

Companion device

What it does

Companion devices are VoLTE UEs that are linked to a primary device such as a smart phone. Smart watches are a common type of companion device. The companion device service enables companion devices to share a phone number with the primary device. This means:

  • calls to the shared number will cause both devices to ring, and

  • calls from the companion device will appear to come from the shared number.

This type of service is sometimes referred to as "One Number", "Multi-SIM", or "Multi-Device".

The companion device will still have its own number called the "undisclosed identity". Depending on service configuration, it may still be possible to use this number to contact the companion device, but the Rhino VoLTE TAS will always attempt to hide and replace it with the shared number.

The companion device service can function for devices connecting over both packet switched (PS) and circuit switched (CS) networks.

Outbound calls

For outbound calls, the companion device will usually use the shared number to identify itself. However, if it uses its undisclosed identity instead, the companion device service will replace it with the shared number before allowing the call to proceed.

Inbound calls

When an incoming call is targeted at the shared number, the companion device service will force the T-ADS service to use parallel routing mode. This ensures that both the primary and companion device will ring at the same time, regardless of whether they are connected to a PS or CS network. When the subscriber answers the call on either device, the other device will stop ringing.

When companion devices are in use, T-ADS may use special handling if one of the devices indicates the subscriber is busy. If the release-all-legs-on-busy field in the T-ADS configuration is set to true, a single busy response from either device will cause the call to be terminated. If the field is false, T-ADS will wait for a response from the other device as per normal behavior.

The companion device service can also be configured to block incoming calls to the undisclosed identity.

Companion device provisioning

Per-subscriber companion device data is provisioned in two places:

  • IMS subscription data in the HSS, and

  • the Metaswitch-TAS-Services document stored in HSS transparent data.

Provisioning of IMS subscription data is not done using the Rhino VoLTE TAS. Contact your HSS provider for more information.

Note

For standard Rhino VoLTE TAS deployments, the Metaswitch-TAS-Services document is disabled. This must be enabled to activate the companion device service.

Further information on configuring the companion device service subscriber data is given in the managing companion device subscriber data page.

Interactions with other services

Terminating Access Domain Selection (T-ADS)

When a companion device is in use, the companion device service will force the T-ADS service to use its parallel routing mode. However, restrictions imposed by the Request-Disposition header will still apply. See Request disposition in the T-ADS section for details.

The companion device service may also provide CS routing numbers (CSRNs) for the T-ADS service to use on its CS network connection attempts.

CAP charging

If CAP charging is in use, on inbound calls there will be a separate session between the Rhino VoLTE TAS and the service control point (SCP) providing the charging service for each forked PS and CS leg for each device. The leg that is answered by the called subscriber will be charged, and the other legs will be recorded as zero length calls with the SCP.

PSAP callback

Certain functions of the companion device service that could interfere with emergency calls are disabled when an emergency call is detected:

  • When a companion device initiates an emergency call, its undisclosed identity will not be hidden.

  • When a PSAP callback attempt is made to the undisclosed identity, the companion device service will not block the call.

Configuration

Currently, the declarative configuration for the companion device service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

Vertical service codes (VSC)

What it does

The vertical service code (VSC) service provides support for carrying out a wide variety of actions based on the number dialed by a subscriber.

Number analysis

The VSC service is capable of invoking other services based on matching either a prefix on the dialed number or the full number.

In the event that there are multiple possible matches for the same number, the longest match takes priority. So for example, if two VSC prefixes were specified:

  • 520 to hide the caller’s identity for this call, and

  • 52 to reveal the caller’s identity for this call.

For the dialed number 5205551234, the caller’s identity would be hidden for the call. This also means that a full number match will always take precedence over any possible prefix match.

When a prefix is found on a dialed number, it can optionally be stripped from the number before invoking its corresponding service. Using the numbers for the privacy example above, this would cause 5205551234 to become 5551234 on the outbound leg of the call.

It is also possible to seek further matches in the remaining part of a number after a prefix has been matched. This can be done regardless of whether the prefix is stripped from the outbound number. So if 1234 was a full number vertical service code that invoked the Location based dialing service to call a nearby visitor information center, then again using the numbers from the privacy example above, a caller dialing 5201234 would call the information center and have their identity hidden.

Vertical service codes are only supported for numbers in the network’s home country. If a dialed number is in international format but has the home country code, it will be removed prior to matching.

Service code actions

The Rhino VoLTE TAS comes preconfigured with a number of actions that can be assigned to a vertical service code. It is also possible to set up an announcement to be played before the action is carried out.

The available actions are:

  • Enable identity restriction for the current call.

  • Disable identity restriction for the current call.

  • Enable identity restriction permanently.

  • Disable identity restriction permanently.

  • Enable identity presentation.

  • Disable identity presentation.

  • Enable call forwarding for busy and no answer.

  • Disable call forwarding for busy and no answer.

  • Enable unconditional forwarding to specified number.

  • Disable unconditional forwarding.

  • Enable busy call forwarding to specified number.

  • Disable busy call forwarding.

  • Enable no answer call forwarding to specified number.

  • Disable no answer call forwarding.

  • Enable not logged in call forwarding to specified number.

  • Disable not logged in call forwarding.

  • Enable not reachable call forwarding to specified number.

  • Disable not reachable call forwarding.

  • Enable the call forwarding service.

  • Disable the call forwarding service.

  • Execute location based dialling.

  • Connect the subscriber to their voicemail server.

  • Set the subscriber’s voicemail server number.

  • Continue searching for more service codes.

  • Stop searching for more service codes.

  • Strip this service code and continue searching for others.

  • Strip this service code and stop searching for others.

  • Reject the call with 603 decline response.

It is also possible to create custom actions. For guidance on how to do this, contact Metaswitch support.

Interactions with other services

The VSC service finds a service code in a dialed number, so it can have broad reaching effects that can impact other services.

There are two key points to note:

  • The VSC service can be used to invoke other services outside of their usual operating procedures or to override their usual behavior.

  • When the VSC service strips a prefix from a dialed number, other services that analyze the dialed number will not see that prefix. This is different from most services that manipulate the outbound dialed number, and is of particular note for the call barring service.

Configuration

Currently, the declarative configuration for the VSC service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

International Call Management

What it does

The International Call Management service provides support for barring and playing announcements for international calls based on the format of the dialed digits, and the identified country of the destination address.

Outbound calls can be barred if a call is determined to be international and the international dialing prefix is not explicitly present in the dialed digits. An announcement can be played before the call is barred. Additionally, if a call is determined to be international a pre-call announcement can be played to the calling party. The default options can be overridden based on the destination country.

Note

The international dialing prefix refers to either the + character or to the international-prefix.

Restrictions

The destination country can only be identified if the country uses the North American Numbering Plan (ie international prefix is 1). Countries outside the NANP will be treated with the default handling.

Interactions with other services

Roaming and international status determination

If North American Numbering Plan (NANP) analysis is enabled, the details determined by NANP will be used to establish the international and roaming status of the call (by comparing the access network country code, the home network country code, and the destination country code).

Call Barring

The MMTel Outgoing call barring service (OCB) always takes precedence over international call management. If barring is triggered, the call will be terminated without playing an international call management announcement.

Number translation services in general

International Call Management looks at the original dialed number as received by the RVT when doing its analysis. This means that changes to the number by services that provide number translation (such as Location Based Dialing) will not be considered by this service.

Configuration

The example for sentinel-volte-gsm-config.yaml and example for sentinel-volte-cdma-config.yaml show example configuration relevant to international call management in the sentinel-volte/mmtel/international-call-management and sentinel-volte/mmtel/north-american-numbering-plan sections.

What you need

  • ❏ Whether the system should bar international calls dialed without an international prefix.

  • ❏ Optionally, the ID of the announcement to be played before barring calls.

  • ❏ Optionally, the ID of the announcement to be played before international calls are connected.

  • ❏ Optionally, per-country overrides for the above, along with the 2 digit upper case ISO country code for countries to be overridden.

Setting up announcements

International Call Management configuration only needs the announcement ID of the announcement that should be played. The details of that announcement should be configured beforehand. For details about how to do this, see Announcements.

I want to…​
Bar and play an announcement to international calls dialed without the international call prefix

In the default-international-call-management section, set bar-calls-with-missing-prefix to true and set bar-calls-with-missing-prefix-announcement-id to the ID of the selected announcement.

    international-call-management:
      default-international-call-management:
        bar-calls-with-missing-prefix: true
        bar-calls-with-missing-prefix-announcement-id: 200
Play an announcement before international calls

In the default-international-call-management section, set international-call-announcement-id to the ID of the selected announcement.

    international-call-management:
      default-international-call-management:
        international-call-announcement-id: 200
Bar international calls dialed without the international call prefix, except calls to Canada

Ensure the call-management-by-country-code list is present and uncommented.

Add a list item with an iso-country-code of CA and a bar-calls-with-missing-prefix value of false.

    north-american-numbering-plan-analysis:
      enable-nanp-analysis: true

    international-call-management:
      default-international-call-management:
        bar-calls-with-missing-prefix: true
      call-management-by-country-code:
        - iso-country-code: "CA"
          bar-calls-with-missing-prefix: false
Play an announcement before international calls, except calls to Canada

In the default-international-call-management section, set international-call-announcement-id to the ID of the selected announcement.

Ensure the call-management-by-country-code list is present and uncommented.

Add a list item with an iso-country-code of CA. Ensure that the international-call-announcement-id within the country code list is unset.

The unset value in the CA profile will not fall back to the default value - a missing international-call-announcement-id at any level means that no announcement will be played at that level.

    north-american-numbering-plan-analysis:
      enable-nanp-analysis: true

    international-call-management:
      default-international-call-management:
        international-call-announcment-id: 200
      call-management-by-country-code:
        - iso-country-code: "CA"
Allow international calls dialed without the international call prefix, except calls to the US,

Ensure the call-management-by-country-code list is present and uncommented.

Add a list item with an iso-country-code of US and a bar-calls-with-missing-prefix value of true.

    north-american-numbering-plan-analysis:
      enable-nanp-analysis: true

    international-call-management:
      default-international-call-management:
        bar-calls-with-missing-prefix: false
      call-management-by-country-code:
        - iso-country-code: "US"
          bar-calls-with-missing-prefix: true
          bar-calls-with-missing-prefix-announcement-id: 101
          international-call-announcement-id: 102

Location based dialing (LBD)

What it does

Location based dialing (LBD) is a service that allows a subscriber to dial a number that redirects to a different number depending on the subscriber’s location.

LBD is invoked when the Vertical service codes service detects that a subscriber has dialed a number that requires it. When invoked, LBD retrieves the dialed number and attempts to determine the subscriber’s location. Using this information, it consults a database to get a new number. If one is found, the call will be redirected to it.

If the service can’t determine the subscriber’s location or the database doesn’t have an entry for their location, the service can instead take any of the following actions:

  • play an announcement to the subscriber

  • end the call

  • redirect the call to a default destination.

Subscriber data

Per-subscriber location based dialing service data is provisioned in the Metaswitch-TAS-Services document stored in HSS transparent data.

Note

For standard Rhino VoLTE TAS deployments, the Metaswitch-TAS-Services document is disabled. This must be enabled to activate the location based dialing service.

Further information on configuring the location based dialing service subscriber data is given in Location based dialing subscriber data.

Interactions with other services

Vertical service codes (VSC)

LBD depends on the vertical service code service to identify when a number requiring LBD has been dialed.

Call barring

Call barring operates based on the original number dialed by the subscriber, not the new number targeted by the LBD service.

International Call Management

When it does number analysis the International Call Management service will look at the original dialed number, not the new number targeted by the LBD service. This means that if the LBD service directs the call to an international number, International Call Management may bar the call if the original number was not dialed with a country code.

Configuration

Currently, the declarative configuration for the location based dialing service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

Explicit Communication Transfer (ECT)

What it does

Explicit Communication Transfer (ECT) is an MMTel service that enables a party involved in a communication to transfer their role to a third party.

For this service there are three actors involved:

  • The transferor initiates the call transfer

  • The transferee is the other party on the call

  • The transfer target is the party that replaces the transferor in a call transfer.

The transferor invokes the ECT and the transferee replies back accordingly to transfer to the transfer target. The Rhino VoLTE TAS processes these messages to handle the call transfer while maintaining charging.

The Rhino VoLTE TAS’s ECT service supports either a consultative transfer or a blind transfer:

  • A consultative transfer is where the transferor has consultative communication with the transfer target before a transfer. This may involve an existing session between the transferor and transfer target before a call transfer.

  • A blind transfer is where the transferor has no consultative communication with the transfer target. The transferor invokes a call transfer with no current session between the transferor and the transfer target.

The Rhino VoLTE TAS supports a response timeout for requests generated by the transfer service.

If the parties' dialog is interrupted or removed during a call transfer, the Rhino VoLTE TAS’s ECT service initiates a new dialog to continue the transfer using third party call control procedures.

Interactions with other services

Charging

The use of an ECT triggers charging action for CDR generation and online charging. This charging occurs for all parties involved in the call transfer.

Configuration

Currently, the declarative configuration for the ECT service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

Flexible Alerting (FA)

What it does

The MMTel Flexible Alerting (FA) service allows the creation of a group of member identities bound to a single number, called the Pilot Number.

When a call to the pilot number is identified, the service will alert all the members of the group and the caller is bound to the first member of the group that answers the call.

When a member answers the call with 200 (OK), the service cancels all other sessions towards the other members and finishes the call setup procedures between the calling party and the member that answered.

The service can be set to alert the group members:

  • sequentially - sequentially alerts the group members in order, with each member sending a final response or timing out before the next is alerted.

  • in parallel - alerts all the group members at once.

3GPP defines flexible alerting in TS 24.239 and the flexible alerting subscriber data schema is defined in TS 24.239 and TS 29.364.

Group members

The group of identities that may be contacted by the Flexible Alerting feature is called the FA Group.

There can be two types of FA Group:

  • single-user - one user, who may have one or more devices.

  • multiple-users - more than one user. An example would be the devices of more than person in the same office.

Interactions with other services

CAP charging

If CAP charging is in use, on inbound calls there will be a separate session between the Rhino VoLTE TAS and the service control point (SCP) providing the charging service for each forked PS and CS leg for each device. The leg that is answered by the called subscriber will be charged, and the other legs will be recorded as zero length calls with the SCP.

PSAP callback

Certain functions of the flexible alerting service that could interfere with emergency calls are disabled when an emergency call is detected:

  • When a PSAP callback attempt is made to the undisclosed identity, the flexible alerting service will not block the call.

Communications Diversion (CDIV)
Communication Forwarding Unconditional (CFU)

If CFU is active for the Pilot Identity, the procedures will be applied and no group member will be alerted.

Communication Forwarding on Busy user (CFB)

If CFB is active for the Pilot Identity, the procedures will be applied if the pilot number is considered busy.

The definition of Busy for the pilot number depends on the group type:

  • For single-user, when one member is busy the pilot number is busy.

  • For multiple-uses all group members have to be busy for the pilot number to be considered busy.

Communication Forwarding on no Reply (CFNR) and Communication Forwarding on Subscriber Not Reachable (CFNRc)

If the FA Pilot Identity is considered in a state of CFNR or CFNRc, the procedures for those MMTel services will be applied.

The pilot number is considered in a state of:

  • No Reply when all group members are in a state of no reply.

  • Not Reachable when all group members are in a state of not reachable.

Communication Forwarding on Not Logged-in (CFNL)

If the FA Pilot Identity has CFNL active, the procedures will be applied.

Privacy settings
Originating Identification Presentation (OIP)

If OIP is active for the FA Pilot Identity, OIP is applied to any FA group member.

Terminating Identity Presentation (TIP)

If the FA Pilot Identity did not apply TIR, the termination identification is the FA Pilot Identity.

Terminating Identity Restriction (TIR)

If the FA Pilot Identity has TIR activated, the termination identification is not presented.

Call barring
Incoming Call Barring (ICB)

If the FA Pilot Identity has ICB activated, the procedures for ICB will be applied.

Outgoing Call Barring (OCB)

If any FA group member has OCB activated, the procedures for OCB will be applied for that member.

Configuration

Currently, the declarative configuration for the flexible alerting service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

Session transfer to own device

What it does

The Rhino VoLTE TAS allows a subscriber to transfer an active call from their current active registered device (UE1) to another of their registered devices (UE2). This active call is maintained while the communication session between the A and B party’s devices has changed. Sessions can be transferred between devices that share the same IMS Public User Identity (IMPU). This service is supported for either originating or terminating users.

In the originating case, The A party subscriber can initiate a session transfer during an active session by pulling the call on to the UE2 device. For example, the calling party may transfer a call from a phone (UE1) to a tablet (UE2).

The Rhino VoLTE TAS verifies that the UE2 device is configured for a session transfer for the A party subscriber. If the configuration is verified, then the Rhino VoLTE TAS pulls the UE2 device into the call with the B party. Once the connection has been established, the UE1 device is disconnected from the session.

The service makes an SDP remote update on the existing called leg to guarantee SDP integrity and correctness on all involved dialogs.

The terminating case is also supported. This would be where the B party subscriber can use another registered device with the same IMPU to pull the call. The service makes an SDP remote update on the existing calling leg to ensure SDP integrity.

Interactions with other services

Charging

The charging vector of the call is updated due to the change in the transfer party’s new device on the session.

Configuration

Currently, the declarative configuration for the session transfer to own device service is only available through low-level overrides, which require the guidance of Metaswitch support.

To configure the service, contact your Metaswitch customer care representative.

Note Full declarative configuration support for this service may become available in a later version.

NGINX Rate Limiter

What it does

The Rhino VoLTE TAS XCAP server utilizes NGINX as a reverse proxy for handling XCAP requests. By implementing rate limiting within NGINX, the XCAP server gains DDoS protection. The rate limiting is based on the number of requests per second. Configuration for this rate limiting is specified in the mag-nginx-config.yaml file.

This configuration is then applied to the NGINX server via the nginx.conf file. Specifically, the rate limiting rules are enforced for XCAP requests. It’s important to note that this configuration is optional. If rate limiting is not explicitly configured, the NGINX server will not apply any rate limiting to the XCAP requests.

Configuration

The NGINX Rate Limiting section in the mag-nginx-config.yaml file contains the following parameters:

The example for mag-nginx-config.yaml shows example configuration relevant to NGINX rate limiting.

Enabling / disbaling / changing Rate limiting

To activate rate limiting, the mag-nginx-config.yaml file must be added. If any parameters are undefined in the yaml file, the default values will be used. To deactivate rate limiting, the mag-nginx-config.yaml file must be removed. For changes to take effect, the updated config must be uploaded using rvtconfig, and the NGINX server or the initconf in the MAG nodes must be restarted by executing the following command:

  • sudo systemctl restart nginx or

  • sudo systemctl restart initconf

RVT XCAP

What it does

The Rhino VoLTE TAS XCAP server is a web application that implements the XCAP (XML Configuration Access Protocol) towards the UE, and supports the XML schemas for user and operator data defined in TS 29.364. It stores and retrieves this information in the HSS using Sh Transparent Data, according to TS 29.364.

A subscriber can use the XCAP Ut interface from their UE to retrieve and modify their MMTel call settings, such as diversion and blocking, stored in the HSS.

Configuration

For configuration details, see XCAP domains.

Shared configuration

The XCAP server takes the rest of its configuration from some of the shared system configuration files.

Number analysis

To validate that all URIs updated via XCAP are normalizable, the XCAP server uses:

Additionally, when a UE updates call diversion rules, the XCAP server checks the target URIs against the list of non-provisionable URIs from number-analysis-config.yaml.

BSF and NAF configuration

The BSF (Bootstrapping Server Function) and NAF (Network Application Function) must be configured to allow UEs to authenticate requests to the XCAP server. See RVT Authentication Gateway for details.

To configure any parts of the XCAP server not mentioned here, contact Metaswitch support.

XCAP domains

The list of domains in the mag-vmpool-config.yaml file is the complete set of domains that the XCAP server should handle for UEs making XCAP requests in the network.

How it works

The XCAP domains specified in the mag-vmpool-config.yaml file are used by initconf to generate or validate the XCAP and BSF certificates. For the BSF certificate, the domains are the configured XCAP ones with the initial xcap. prefix replaced with bsf..

If a custom BSF and/or XCAP certificate was provided (see REM certificates) then initconf will validate that the certificate(s) apply to all the configured domains. If a custom BSF or XCAP certificate was not provided, initconf will generate a self-signed certificate that applies to all the configured domains.

Configuration

The xcap-domains field lists the domains for which the Rhino VoLTE TAS XCAP server will accept requests, as shown in the Example for mag-vmpool-config.yaml

You will likely have at least one domain per mcc-mnc in your network, as configured in the PLMN IDs for my network.

Setting up XCAP domains configuration

I want to …​
Specify a set of domains the Rhino VoLTE TAS XCAP server will accept request for

To configure the Rhino VoLTE TAS XCAP server to accept request for a set of domains, in the mag-virtual-machine-pool section, set the xcap-domains list to a list of domain names.

    xcap-domains:
        - xcap.site1.ims.mnc123.mcc530.pub.3gppnetwork.org
        - xcap.site1.ims.mnc124.mcc530.pub.3gppnetwork.org

RVT Authentication Gateway

The Authentication Gateway is responsible for handling general authentication architecture (GAA) behavior in the Rhino VoLTE TAS. There are two main components of the Authentication Gateway:

  • the bootstrap security function (BSF)

  • the network application function (NAF) filter

Configuration for the BSF is limited to setting up the Diameter Zh connection to the home subscriber server (HSS). For information about this, see the Diameter Zh interface section of the HSS integration instructions.

In this section

NAF filter

What it does

In the Rhino VoLTE TAS, the purpose of the network application function (NAF) authentication filter is to verify a subscriber’s identity before allowing them to view or modify their subscriber configuration using XCAP.

The NAF filter is part of the 3GPP specified general authentication architecture (GAA).

Service information

The configuration for the NAF filter includes a number of settings that provide information about the service it’s providing.

  • The service-type is a number that identifies the type of service the NAF filter is providing within the GAA. Recognized values for this setting are defined in Annex B of 3GPP TS 29.109. The default value for the NAF filter is 0, which indicates an "unspecific service".

  • The service-id is a number that uniquely identifies the exact service the NAF filter is providing within an operator’s network. The value that should be used is operator specific, but must match the service ID in the subscriber’s Generic Bootstrapping Architecture User Security Settings (GUSS) in the HSS.

  • The naf-group is a name that identifies the group that the NAF filter instance is a part of. The group name is decided by the operator and it is optional to use this field. The NAF group provides an additional layer of control on top of the service type and ID over what part of the GUSS is used by the NAF filter instance.

Cassandra database

The Rhino VoLTE TAS’s implementation of the NAF filter differs from the 3GPP specification in the way that it communicates with the Bootstrap Security Function (BSF). Rather than communicating directly using the Diameter Zn interface, a Cassandra database is used as an intermediary. This allows the BSF and NAF nodes to be stateless, making it easy to scale out horizontally.

The NAF filter also uses a Cassandra database to track all nonce values that are currently in use; see Nonce values for details. The Cassandra keyspace to use for nonce storage must be specified in the nonce-cassandra-keyspace field.

Nonce values

When generating an authentication challenge for the subscriber’s handset, the NAF filter must create a nonce value to include as part of it. This nonce value is one part of the mechanism used by the handset to verify its identity in subsequent messages. For this reason, the NAF filter must keep track of the values used for each subscriber for each authentication challenge.

Nonce values are tracked in a Cassandra database. This allows the NAF filter to operate statelessly, meaning that if there are multiple NAF filter nodes in use, messages from a given subscriber do not always need to go to the same node. The Cassandra keyspace to use must be specified in the nonce-cassandra-keyspace field.

Normally, a single nonce should never be used more than once, but to avert the need to send a new challenge every time the handset wants to send a message, a separate nonce count number is included in each message. This allows the same nonce to be reused up to a number of times determined by the reuse-count field. The count starts at 1 in the first message and is incremented in each subsequent message.

A nonce can become invalid under a number of circumstances, if this happens the subscriber’s handset must restart authentication procedures. The nonce will become invalid when any of the following conditions are met:

  • Too much time has passed since the nonce was generated. The time period can be configured in the lifetime-milliseconds field.

  • The IP address of the subscriber’s handset changes.

  • The nonce count exceeds the maximum count configured in the reuse-count field.

  • A message with the same nonce and nonce-count as a previous message is received.

Configuration

What you need

  • ❏ The service type for the NAF filter.

  • ❏ The service ID for the NAF filter.

  • ❏ Optionally, the name of the group that the NAF filter instance is a part of.


  • ❏ The Cassandra keyspace to use for storing nonce values.

  • ❏ The maximum amount of time a nonce should remain valid.

  • ❏ The maximum number of times a nonce can be reused by incrementing the nonce count.

Setting up the NAF filter

I want to…​
Set the service type

In the naf-filter section, set the service-type to the desired value:

  service-type: 1

Related section: Service information

Set the service ID

In the naf-filter section, set the service-id to the desired value:

  service-id: 2

Related section: Service information

Set the NAF group name

In the naf-filter section, set the naf-group to the desired value:

  naf-group: "nafgroup1"

Related section: Service information

Change the number of times a single nonce can be reused by incrementing the nonce count

In the nonce-options section, set reuse-count to the required maximum:

    reuse-count: 100

Related section: Nonce values

Change how long a single nonce will remain valid after it is created

In the nonce-options section, set lifetime-milliseconds to the required time period in milliseconds:

    lifetime-milliseconds: 180000

Related section: Nonce values

Enable debug logging
Warning Never enable debug logging on production systems.

In the naf-filter section, set debug-logging-enabled to true:

  debug-logging-enabled: true
Disable debug logging

In the naf-filter section, set debug-logging-enabled to false:

  debug-logging-enabled: false

RVT IP Short Message Gateway (IP-SM-GW)

What it does

The IP Short Message Gateway (IP-SM-GW) translates SMS traffic between GSM and LTE networks.

The Rhino VoLTE TAS IP-SM-GW is based on 3GPP TS 24.341, and implements suitable SMS interworking as part of GSMA IR.92 version 9.0.

Note The IP-SM-GW only supports MAP-based SS7 protocols. CDMA networks are not supported.

MO and MT

The IP-SM-GW handles both Mobile Originating (MO) and Mobile Terminating (MT) messages. In MO scenarios, the short message is received over a packet-switched (PS) network and submitted to a Short Message Service Center (SMSC) over a circuit-switched (CS) network. In MT scenarios, the short message is received from a Gateway Message Switching Center (GMSC) and delivered to the subscriber over either the PS or CS network.

Charging

The IP-SM-GW can control Diameter Ro charging for both MO and MT scenarios. The IP-SM-GW acts as the Charging Trigger Function, and uses Immediate Event Charging. Charging can be enabled separately for each of MO, PS MT, and CS MT traffic scenarios.

Routing modes

The IP-SM-GW supports four different modes which determine how it will prioritize its attempts to deliver MT traffic.

Table 15. IP-SM-GW delivery modes
Parameter value Behavior
PS_THEN_CS

Try packet-switched network first, then fall back to the circuit-switched network.

CS_THEN_PS

Try circuit-switched network first, then fall back to the packet-switched network.

PS_ONLY

Only try delivery over the packet-switched network.

CS_ONLY

Only try delivery over the circuit-switched network.

In the case of the CS_THEN_PS and PS_THEN_CS modes, message delivery can be controlled further through the use of avoidance codes, which allow you to avoid fallback based on the response to the initial delivery attempt.

PS fallback avoidance codes

When PS delivery fails, the CP-Cause parameter in the resulting RP-Error is checked against the entries in the avoidance-codes-ps-to-cs list. The numeric causes and their meanings can be found in TS 24.011 Section 8. If the CP-Cause received is present in the configured list, CS delivery will not be attempted.

The table below lists the avoidance values.

Table 16. PS to CS fallback avoidance codes
Cause Value

UNASSIGNED_NUMBER

1

OPERATOR_DETERMINED_BARRING

8

CALL_BARRED

10

RESERVED

11

SHORT_MESSAGE_TRANSFER_REJECTED

21

MEMORY_CAPACITY_EXCEEDED

22

DESTINATION_OUT_OF_ORDER

27

UNIDENTIFIED_SUBSCRIBER

28

FACILITY_REJECTED

29

UNKNOWN_SUBSCRIBER

30

NETWORK_OUT_OF_ORDER

38

TEMPORARY_FAILURE

41

CONGESTION

42

RESOURCES_UNAVAILABLE

47

REQUESTED_FACILITY_NOT_SUBSCRIBED

50

REQUESTED_FACILITY_NOT_IMPLEMENTED

69

INVALID_SHORT_MESSAGE_REFERENCE_VALUE

81

INVALID_MESSAGE

95

INVALID_MANDATORY_INFORMATION

96

MESSAGE_TYPE_NONEXISTENT_OR_NOT_IMPLEMENTED

97

MESSAGE_NOT_COMPATIBLE_WITH_SHORT_MESSAGE_PROTOCOL_STATE

98

INFORMATION_ELEMENT_NONEXISTENT_OR_NOT_IMPLEMENTED

99

PROTOCOL_ERROR

111

INTERWORKING

127

CS fallback avoidance codes

When CS delivery fails, the SM-EnumeratedDeliveryFailureCause parameter in the error response is checked against the entries in the avoidance-codes-cs-to-ps list. The numeric causes and their meanings can be found in TS 29.002 Section 17.7.7 Error data types. If the value is present in the list, PS delivery will not be attempted. The values of the avoidance codes used when avoiding fallback from CS to PS are listed below.

Table 17. CS to PS fallback avoidance codes
Cause Value

memoryCapacityExceeded

0

equipmentProtocolError

1

equipmentNotSM_Equipped

2

unknownServiceCentre

3

sc_Congestion

4

invalidSME_Address

5

subscriberNotSC_Subscriber

6

UE reachability notifications

The IP-SM-GW supports UE Reachability Notifications in the case where an MT message sent over a PS network cannot be delivered due to the UE becoming unavailable. In this situation, the IP-SM-GW will request a notification from the HSS in the event that the UE comes back online. When this notification is received from the HSS, the IP-SM-GW will notify the HLR that UE is ready for SM delivery.

Multiple sites and geo-redundancy

The IP-SM-GW can be deployed at multiple geographically distributed sites. To configure full geographic redundancy including cross-site failover, contact support.

Networking considerations

The IP-SM-GW interfaces with network elements from a variety of different vendors. A number of configuration options are available to control the interactions with these elements, particularly the HLR and MSCs.

Modifying SCCP-layer addressing

When accepting an OpenRequest, the SCCP responder address in the OpenAccept will, by default, be set to the value of the SCCP called party in the OpenRequest. If use-gt-as-calling-party is set to true, and if the received sccp-called-party contains a global title, the responder address will be modified in the following way:

  • the Translation Type is set to 0

  • the Routing Indicator will be set to gt

  • the Point Code will be unset

  • the National indicator will be set to false.

This is useful when the inbound sccp-called-party has been modified by a network element to use PC/SSN routing, but GT routing is required for establishing the TCAP dialog.

Use allow listing for incoming SCCP global titles

The IP-SM-GW can filter incoming SCCP messages on global title prefix, to help control the network elements permitted to initiate CS connections.

Suppress HLR interaction

The IP-SM-GW supports the suppression of all HLR interactions. This removes the CS capability and dependencies from the product, allowing it to work as a purely PS to PS platform.

Content size threshold

During MO message delivery, the IP-SM-GW will either include the ForwardSM in the TC-BEGIN message, or send the ForwardSM separately. This determination is configurable based on message content size.

Setting DeliveryNotIntended during SMMA flows

When the IP-SM-GW sends a SendRoutingInfoForSM request to the HLR which is not part of an MT delivery flow, the DeliveryNotIntended flag may be used to indicate that the HLR should not expect follow-up messages. This should be adjusted based on HLR capabilities.

Configuration

Example IP-SM-GW configuration can be found in the example for sentinel-ipsmgw-config.yaml and in the example for hlr-config.yaml.


What you need

  • ❏ The number of geographically distributed sites in use.

  • ❏ The SCCP addressing format in use.

  • ❏ The externally-visible global title of the SMO cluster.

  • ❏ The domain to use for outgoing SIP messages.

  • ❏ Whether all HLR interaction should be suppressed.

  • ❏ The PLMN ID ranges in use.

  • ❏ The MT message delivery order, and any fallback avoidance codes.

  • ❏ A DNS record pointing at all SMO node signalling interfaces.

  • ❏ The Ro charging configuration in use.

Setting up network integration

Initial configuration

Network integration must be configured before further configuration of the system can take place.

1. Adjust the georedundancy setting to suit your deployment

In the georedundancy section, uncomment the georedundancy and total-sites lines, and set total-sites to 2.

        # The number of IPSMGW sites
        total-sites: 2
Note To configure full geographic redundancy, including cross-site failover, contact support.
2. Configure the SCCP address format used when connecting to an SMSC.

The template-smsc-address is used to specify the non-digit string portions of the SMSC’s SCCP address, which MT CS messages will be sent to.

In the map-messaging section, set the template-smsc-address as appropriate for your network.

        template-smsc-address: "type=C7,ri=gt,digits=0,ssn=8,national=false,nature=INTERNATIONAL,numbering=ISDN,gti=4,tt=0"
3. Set the SCCP address used as the calling party address in SS7 messages initiated by the IP-SM-GW.

In the map-messaging section, set the originating-address as appropriate for your network.

        originating-address: "type=C7,ri=pcssn,pc=5,ssn=148"
Warning If the originating-address contains a pc= parameter, that parameter’s value must be the same as the point-code value in sgc-config.yaml. See M3UA interface configuration.
4. Set the address that GMSCs will use to contact the IP-SM-GW

The ipsmgw-as-msc-address is the address that the IP-SM-GW will return to the GMSC during the SendRoutingInformation phase of the MT message procedure, so that subsequent messages will be delivered to the IP-SM-GW. TCAP messages with this address should be routeable to an IP-SM-GW node.

In the map-messaging section, set the ipsmgw-as-msc-address to an address which will route to the IP-SM-GW.

        ipsmgw-as-msc-address: "address=653333333,nature=INTERNATIONAL,numberingPlan=ISDN"
5. Configure how to determine the address of the HLR

When processing MT messages, the IP-SM-GW can determine the address of an HLR in two ways. The HLR address can be fixed and set in the hlr section of hlr-config.yaml, or alternatively the MSISDN of the called party can be used as the digit portion of the HLR address.

  • If you are using a fixed HLR address:

In hlr-config.yaml, confirm that the hlr-address is set correctly.

hlr-config.yaml
        hlr-address: "type=C7,ri=gt,digits=123456789,ssn=8,national=false,nature=INTERNATIONAL,numbering=ISDN,gti=4,tt=0"

In sentinel-ipsmgw.yaml, in the map-messaging section, set use-msisdn-as-hlr-address to false.

sentinel-ipsmgw-config.yaml
        use-msisdn-as-hlr-address: false
  • If you are using dynamic routing for the HLR address:

In hlr-config.yaml, in the hlr section, ensure that the hlr-address field is set to use global title addressing.

hlr-config.yaml
        hlr-address: "type=C7,ri=gt,digits=0,ssn=8,national=false,nature=INTERNATIONAL,numbering=ISDN,gti=4,tt=0"

In sentinel-ipsmgw.yaml, in the map-messaging section, set use-msisdn-as-hlr-address to true.

sentinel-ipsmgw-config.yaml
        use-msisdn-as-hlr-address: true
6. Configure the terminating SIP URI domain

Outbound SIP messages generated by the IP-SM-GW require a configured value to use as the domain portion of the SIP URI. Set this to a network-appropriate SIP domain.

Set the terminating-domain value to an appropriate SIP domain.

    terminating-domain: example.com
I want to…​
Deploy the IP-SM-GW in an environment without an HLR

In hlr-config.yaml, in the hlr section, ensure that the hlr-address field is set to the default value.

hlr-config.yaml
        hlr-address: "type=C7,ri=pcssn,pc=5,ssn=6"

In sentinel-ipsmgw.yaml, set delivery_order to PS_ONLY. In sentinel-ipsmgw.yaml, in the map-messaging section, set suppress-hlr-interaction to true.

sentinel-ipsmgw-config.yaml
    map-messaging:
        use-msisdn-as-hlr-address: true
    delivery-order: PS_THEN_CS
Prefer GT addressing for SCCP calling party in OpenResponse messages

In the map-messaging section, set the use-gt-as-calling-party value to true.

        use-gt-as-calling-party: true
Send ForwardSM messages with 120 characters in a separate TCAP message

In the map-messaging section, set the sms-content-size-threshold value to 119.

        sms-content-size-threshold: 119

Related section: Content size threshold

Disable the delivery-not-intended flag in SendRoutingInformationForSM requests

In the map-messaging section, set the sri-sm-delivery-not-intended value to false.

        sri-sm-delivery-not-intended: false
Set the PLMN ID used when generating correlation IMSIs

The PLMN ID used when generating correlation IMSIs must be part of the Home Network PLMN ID set. See Set the PLMN IDs for my network for details.

Setting up Mobile Terminating scenarios

I want to…​
Attempt delivery over PS first, falling back to CS unless there are network problems

First, reference the table in PS fallback avoidance codes to determine the numeric codes relevant to the fallback avoidance scenarios. In this case, codes 42 and 38 are appropriate (CONGESTION and NETWORK_OUT_OF_ORDER respectively).

Set the delivery-order to PS_THEN_CS. In the fallback-settings section, set avoidance-codes-ps-to-cs to a list containing these values:

    delivery-order: PS_THEN_CS
    fallback-settings:
        avoidance-codes-ps-to-cs:
          - 42
          - 38

Related section: :Routing modes

Attempt delivery over CS first, falling back to PS unless there are network problems

First, reference the table in CS fallback avoidance codes to determine the numeric codes relevant to the fallback avoidance scenarios. In this case, code 4 is appropriate (sc_Congestion).

Set the delivery-order to CS_THEN_PS. In the fallback-settings section, set avoidance-codes-cs-to-ps to a list containing 4.

    delivery-order: CS_THEN_PS
    fallback-settings:
        avoidance-codes-cs-to-ps:
          - 4

Related section: Routing modes

Subscribe to UE reachability notifications

In the ue-reachability-notifications section, set the notification-host parameter to an appropriate hostname value. This hostname must be configured in DNS to point at the signalling IPs of all SMO nodes in the cluster.

        notification-host: smo.site1.mnc123.mcc530.3gppnetwork.org

Setting up charging

I want to…​
Configure charging for MO and MT PS traffic

In the charging-options section, uncomment and configure the diameter-ro section.

        # You must also specify the per-node-diameter-ro configuration in smo-vmpool-config.yaml
        diameter-ro:
            diameter-ro-release: Vcb0
            origin-realm: metaswitch.com
            destination-realm: metaswitch.com
            destination-peers:
                - destination-hostname: peer.metaswitch.com
                  port: 3868
                  protocol-transport: aaa
                  metric: 1

In the charging-options section, set mt-ps-enabled and mo-ps-enabled to true.

        mt-ps-enabled: true
        mt-cs-enabled: false
        mo-ps-enabled: true

In smo-vmpool-config.yaml, you must ensure that all per-node-diameter-ro sections are present and not commented out.

          # Uncomment this if diameter-ro is enabled
          per-node-diameter-ro:
              diameter-ro-origin-host: smo1.smo.site1.mnc123.mcc530.3gppnetwork.org

Related section: Charging

= RVT USSD over IM CN subsystem (USSI) :indexpage: :sortorder: 80 :toc: macro :toclevels: 4 :toc-title: On this page

== What it does

The Rhino VoLTE TAS acts as a gateway for USSI (Unstructured Supplementary Service Data over IM CN subsystem) messages. SIP messages containing USSD payloads are processed by the Rhino VoLTE TAS and forwarded to the HLR over the MAP protocol. Responses are then encoded back into SIP and sent to the invoking subscriber.

This feature is enabled alongside the IP-SM-GW, and will be present if that service is configured.

Aside from network integration, the only configuration possible for USSI is to reject all incoming traffic.

Note The USSI only supports MAP-based SS7 protocols. CDMA networks are not supported.

== Configuration

The example for sentinel-ipsmgw-config.yaml shows example configuration relevant to USSI in the sentinel-ipsmgw/map-messaging and sentinel-ipsmgw/ussi sections.


=== What you need

  • ❏ The text of the USSI rejection message, if disabling the service.

=== Initial configuration

As the USSI service runs alongside the IP-SM-GW, the IP-SM-GW service must be configured following the instructions in Initial configuration.

=== Setting up USSI ==== I want to…​ ===== Reject all USSI messages

Uncomment the entire ussi block.

Set the language and message as desired.

  ussi:
      reject-all-with-default-message:
          language: "en"
          message: "USSD messages are not supported - check your balance on example.com"

RVT declarative configuration reference

node-type choice

The VM node type.

Context

The context of node-type choice within the schema tree is shown. Italicised links are to other pages.

node-type choice
  mag
    deployment-config:mag-virtual-machine-pool (in mag-vmpool-config.yaml)
    deployment-config:naf-filter (in naf-filter-config.yaml)
    deployment-config:bsf (in bsf-config.yaml)
    deployment-config:mag-nginx (in mag-nginx-config.yaml)
  mmt-cdma
  mmt-gsm
  shcm
    deployment-config:shcm-virtual-machine-pool (in shcm-vmpool-config.yaml)
    deployment-config:shcm-service (in shcm-service-config.yaml)
  tsn
  smo
    deployment-config:smo-virtual-machine-pool (in smo-vmpool-config.yaml)
    deployment-config:sentinel-ipsmgw (in sentinel-ipsmgw-config.yaml)
  infra

A Choice between one of the following:

  • mag Configure MAG node(s).

  • mmt-cdma Configure MMT CDMA node(s).

  • mmt-gsm Configure MMT GSM node(s).

  • shcm Configure ShCM node(s).

  • tsn Configure TSN node(s).

  • smo Configure SMO node(s).

  • infra Configure infrastructure node(s).

mag

See mag for details of this node and its descendants.

mmt-cdma

See mmt-cdma for details of this node and its descendants.

mmt-gsm

See mmt-gsm for details of this node and its descendants.

shcm

See shcm for details of this node and its descendants.

tsn

See tsn for details of this node and its descendants.

smo

See smo for details of this node and its descendants.

infra

See infra for details of this node and its descendants.

mag

Configure MAG node(s).

Context

The context of mag within the schema tree is shown. Italicised links are to other pages.

node-type choice
  mag
    deployment-config:mag-virtual-machine-pool (in mag-vmpool-config.yaml)
    deployment-config:naf-filter (in naf-filter-config.yaml)
    deployment-config:bsf (in bsf-config.yaml)
    deployment-config:mag-nginx (in mag-nginx-config.yaml)

mag-virtual-machine-pool

See mag-virtual-machine-pool for details of this node and its descendants.

naf-filter

See naf-filter for details of this node and its descendants.

bsf

See bsf for details of this node and its descendants.

mag-nginx

See mag-nginx for details of this node and its descendants.

mag-virtual-machine-pool

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

cassandra-contact-points list

Explicit list of Cassandra contact points. This should only be specified for testing or special use cases. When left unspecified, the Cassandra contact points will be automatically determined from the TSN VM pool IP addresses.

List Structure

management.ipv4 ipv4-address-no-zone
signaling.ipv4 ipv4-address-no-zone

The keys are management.ipv4 and signaling.ipv4.

management.ipv4

The IPv4 address of the management interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

signaling.ipv4

The IPv4 address of the signaling interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

xcap-domains list

The list of domains used to generate or validate XCAP and BSF certificates. For the BSF certificate, the domains are derived from these XCAP ones with the initial xcap. prefix replaced with bsf..

Each domain must start with the string 'xcap.'.

Warning

Metaswitch support should be contacted for advice on how changes to this value can be made to take effect.

Must contain at least 1 element.

Type List of domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

Internet domain names are only loosely specified. Section 3.5 of RFC 1034 recommends a syntax (modified in Section 2.1 of RFC 1123). The pattern above is intended to allow for current practice in domain name use, and some possible future expansion. It is designed to hold various types of domain names, including names used for A or AAAA records (host names) and other records, such as SRV records. Note that Internet host names have a stricter syntax (described in RFC 952) than the DNS recommendations in RFCs 1034 and 1123, and that systems that want to store host names in schema nodes using the domain-name type are recommended to adhere to this stricter standard to ensure interoperability.

The encoding of DNS names in the DNS protocol is limited to 255 characters. Since the encoding consists of labels prefixed by a length bytes and there is a trailing NULL byte, only 253 characters can appear in the textual dotted notation.

The description clause of schema nodes using the domain-name type MUST describe when and how these names are resolved to IP addresses. Note that the resolution of a domain-name value may require to query multiple DNS records (e.g., A for IPv4 and AAAA for IPv6). The order of the resolution process and which DNS record takes precedence can either be defined explicitly or may depend on the configuration of the resolver.

Domain-name values use the US-ASCII encoding. Their canonical format uses lowercase US-ASCII characters. Internationalized domain names MUST be A-labels as per RFC 5890.

Reference

RFC 952: DoD Internet Host Table Specification

RFC 1034: Domain Names - Concepts and Facilities

RFC 1123: Requirements for Internet Hosts — Application

and Support

RFC 2782: A DNS RR for specifying the location of services

(DNS SRV)

RFC 5890: Internationalized Domain Names in Applications

(IDNA): Definitions and Document Framework
Values

a string with length 1 to 253 matching xcap\..*

additional-rhino-jvm-options list

Additional JVM options to use when running Rhino. Should normally be left blank.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

name string
value string

The key is name.

name

Name of the JVM option. Do not include '-D'.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type string

Value

a string

value

Value for the JVM option.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

rhino-auth list

List of Rhino users and their plain text passwords.

Must contain at least 1 element.

List Structure

username string
password secret
role enumeration

The key is username.

username

The user’s username. Must consist of between 3 and 16 alphanumeric characters.

Type string

Value

a string with length 3 to 16 matching [a-zA-Z0-9]+

password

The user’s password. Will be automatically encrypted at deployment using the deployment’s 'secret-private-key'.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more matching [a-zA-Z0-9_@!$%^/.=-]+

role

The user’s role.

Type enumeration

Value

one of the following

Value Description

admin

Administrator role. Can make changes to Rhino configuration.

view

Read-only role. Cannot make changes to Rhino configuration.

Default value

'view'

rem-auth list

List of REM users and their plain text passwords.

Must contain at least 1 element.

List Structure

username string
real-name string
password secret
role enumeration

The key is username.

username

The user’s username. Must consist of between 3 and 16 alphanumeric characters.

Type string

Value

a string with length 3 to 16 matching [a-zA-Z0-9]+

real-name

The user’s real name.

Type string

Value

a string

password

The user’s password. Will be automatically encrypted at deployment using the deployment’s 'secret-private-key'.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more matching [a-zA-Z0-9_@!$%^/.=-]+

role

The user’s role.

Type enumeration

Value

one of the following

Value Description

em-admin

Administrator role. Can make changes to REM configuration. Also has access to the HSS Subscriber Provisioning REST API.

em-user

Read-only role. Cannot make changes to REM configuration. Note: Rhino write permissions are controlled by the Rhino credentials used to connect to Rhino, NOT the REM credentials.

Default value

'em-user'

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

diameter-zh-origin-host

The origin host to use when sending Diameter Zh requests from this node to the HSS.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

scheduled-sbb-cleanups

Cleanup leftover SBBs and activities on specified schedules. If omitted, SBB cleanups will be scheduled for every day at 02:00.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

rhino-node-id

The Rhino node identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type rhino-node-id-type

Description

The Rhino node identifier type.

Value

a number in the range 1 to 32767

scheduled-rhino-restarts

Restart Rhino on a specified schedule, for maintenance purposes. If omitted, no Rhino restarts will be enabled.

Note: Please ensure there are no Rhino restarts within one hour of a scheduled Cassandra repair.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

rem-debug-logging-enabled

Enable extensive logging for verification and issue diagnosis during acceptance testing. Must not be enabled in production.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type boolean

Value

'true' or 'false'

Default value

false

naf-filter

Context

The context of naf-filter within the schema tree is shown. Italicised links are to other pages.

The Network Address Function (NAF) filter configuration.

This node and its descendants are configured in naf-filter-config.yaml.

Related Constraints

../home-network has a Data Validation Constraint which references this node. The validation expression refers to this node as ../naf-filter.

Conditional node ../number-analysis depends on this node. The Conditional expression refers to this node as ../naf-filter.

Conditional node ../common depends on this node. The Conditional expression refers to this node as ../naf-filter.

Conditional node ../home-network depends on this node. The Conditional expression refers to this node as ../naf-filter.

service-type

Identifies the type of service the NAF filter is providing. Recognized values for this setting are defined in Annex B of 3GPP TS 29.109. Affects which settings are selected from the GUSS.

Type uint8

Value

a number in the range 0 or more

Default value

0

service-id

An operator specific identifier that uniquely identifies the service the NAF filter is providing within the network. Affects which settings are selected from the GUSS.

Type uint16

Value

a number in the range 0 or more

Default value

0

naf-group

Identifies the group that the NAF filter belongs to. Affects which settings are selected from the GUSS.

Type string

Value

a string

Default value

''

force-auth-on-paths list

A list of URL path prefixes for which authentication should always be enforced, even for requests from trusted entities.

Type List of string

Values

a string

reconnection-policy

The reconnection policy: 'constant' or 'exponential'.

Related Constraints

Conditional node ../reconnection-initial-delay-seconds depends on this node. The Conditional expression refers to this node as ../reconnection-policy.

Conditional node ../reconnection-interval-seconds depends on this node. The Conditional expression refers to this node as ../reconnection-policy.

Conditional node ../reconnection-max-delay-seconds depends on this node. The Conditional expression refers to this node as ../reconnection-policy.

Type enumeration

Value

one of the following

Value Description

constant

The time between reconnect attempts is constant.

exponential

The time between reconnect attempts increases exponentially to an upper limit.

Default value

'constant'

reconnection-interval-seconds

The reconnection interval (in seconds) to be used when the reconnection policy is set to 'constant'.

Conditional

This leaf is only valid when ../reconnection-policy = 'constant'.

Type uint32

Value

a number in the range 5 to 60

Default value

10

reconnection-initial-delay-seconds

The initial reconnection delay (in seconds) to be used when the reconnection policy is set to 'exponential'.

Conditional

This leaf is only valid when ../reconnection-policy = 'exponential'.

Type uint32

Value

a number in the range 1 to 24

Default value

1

reconnection-max-delay-seconds

The longest permitted interval (in seconds) between reconnect attempts when the reconnection policy is set to 'exponential'.

Conditional

This leaf is only valid when ../reconnection-policy = 'exponential'.

Type uint32

Value

a number in the range 16 to 128

Default value

32

socket-connect-timeout-milliseconds

The socket connection timeout (in milliseconds).

Type uint32

Value

a number in the range 0 or more

Default value

4000

socket-read-timeout-milliseconds

The socket read timeout (in milliseconds).

Type uint32

Value

a number in the range 0 or more

Default value

4000

socket-keepalive

The socket 'keepalive' option value. 'true' will enable the sending of keepalive messages. 'false' disables the sending of these messages. A value of 'not-set' indicates that the operating system default should be used.

Type enumeration

Value

one of the following

Value Description

true

Enable the 'keepalive' socket option.

false

Disable the 'keepalive' socket option.

not-set

Use the operating system default value for the 'keepalive' socket option.

Default value

'not-set'

socket-reuse-address

The socket 'reuse-address' option value. 'true' enables this option which allows reuse of the local address provided that there is no active socket already bound to the address. 'false' disables this option. A value of 'not-set' indicates that the operating system default should be used.

Type enumeration

Value

one of the following

Value Description

true

Enable the 'reuse-address' socket option.

false

Disable the 'reuse-address' socket option.

not-set

Use the operating system default value for 'reuse-address'.

Default value

'not-set'

socket-linger-seconds

If set to a value greater than '0' activates the 'linger' socket option. When activated, a close or shutdown of a socket will not return until all queued messages have been sent or the timeout (in seconds) has expired.

Setting this to '0' disables the 'linger' socket option.

A value of '-1' uses the operating system default.

Type int32

Value

a number in the range -1 or more

Default value

-1

socket-tcp-nodelay

A value of 'true' disables Nagle’s algorithm. All messages will be sent immediately. A value of 'false' enables Nagle’s algorithm. When Nagle’s algorithm is enabled the operating system may temporarily queue outbound data pending the arrival of further data to the same destination. This can reduce network overhead when many small TCP messages are generated by an application. A transmission delay of up to 500ms may occur as a result.

Type boolean

Value

'true' or 'false'

Default value

true

socket-receive-buffer-size-bytes

The socket receive buffer size (in bytes). A value of '-1' uses the operating system default.

Type int32

Value

a number in the range -1 or more

Default value

-1

socket-send-buffer-size-bytes

The socket send buffer size (in bytes). A value of '-1' uses the operating system default.

Type int32

Value

a number in the range -1 or more

Default value

-1

lb-recipe

The load balancing recipe.

Type enumeration

Value

one of the following

Value Description

round-robin

Use round robin load balancing.

dc-aware-round-robin

Use data center (DC) aware round robin load balancing.

latency-aware-round-robin

Use latency aware round robin load balancing.

latency-aware-dc-aware-round-robin

Use latency and data center (DC) aware round robin load balancing.

use-default

Use the default load balancing mechanism.

Default value

'use-default'

lb-latency-aware-exclusion-threshold

The load balancing latency aware exclusion threshold.

Type decimal64

Value

a number with up to 1 decimal digits in the range 0.0, 1.0 or more

Default value

0.0

lb-latency-aware-scale

The load balancing latency aware scale.

Type decimal64

Value

a number with up to 1 decimal digits in the range 0.0 or more

Default value

0.0

use-ssl

The SSL implementation to use. 'none' means do not use SSL.

Type enumeration

Value

one of the following

Value Description

jdk

Use the JDK’s SSL implementation.

netty

Use Netty’s SSL implementation.

none

Do not use SSL.

Default value

'none'

nonce-options

Settings for how the NAF filter handles nonce values

reuse-count

The maximum number of times a nonce can be reused by incrementing the nonce count.

Type uint32

Value

a number in the range 0 or more

Default value

100

lifetime-milliseconds

The time that a nonce remains valid for after being generated (in milliseconds).

Type uint32

Value

a number in the range 0 or more

Default value

180000

cache-capacity

Obsolete in RVT 4.1 series and later. The capacity of the nonce cache. This setting is only relevant when using the local storage mechanism.

Type uint32

Value

a number in the range 1 or more

Default value

100000

storage-mechanism

Obsolete in RVT 4.1 series and later. The storage mechanism to use for the nonce cache.

Type enumeration

Value

one of the following

Value Description

cassandra

Use Cassandra storage.

local

Use local storage.

Default value

'local'

nonce-cassandra-keyspace

Obsolete in RVT 4.1 series and later. The Cassandra keyspace for the nonce cache. This setting is only relevant when using the Cassandra storage mechanism.

Type string

Value

a string

Default value

'opencloud_nonce_info'

debug-logging-enabled

Enable extensive logging for verification and issue diagnosis during acceptance testing. Must not be enabled in production.

Type boolean

Value

'true' or 'false'

Default value

false

intercept-tomcat-errors

OBSOLETE in RVT 4.1 series and later. Whether to let NGINX replace Tomcat errors with default errors. Use only on advice of your Customer Care Representative.

Warning

Metaswitch support should be contacted for advice on how changes to this value can be made to take effect.

Type boolean

Value

'true' or 'false'

Default value

false

http-version

HTTP version to use on the Ub (BSF) and Ua/Ut (NAF) interfaces.

Warning

Metaswitch support should be contacted for advice on how changes to this value can be made to take effect.

Type enumeration

Value

one of the following

Value Description

1.0

Use HTTP version 1.0.

1.1

Use HTTP version 1.1.

Default value

'1.1'

bsf

Context

The context of bsf within the schema tree is shown. Italicised links are to other pages.

The Bootstrap Security Function (BSF) configuration.

This node and its descendants are configured in bsf-config.yaml.

destination-realm

The Diameter destination realm.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

origin-realm

The Diameter origin realm.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-peers list

Diameter destination peer(s).

Must contain at least 1 element.

List Structure

protocol-transport enumeration
destination-hostname domain-name
port port-number
metric uint32

The key is destination-hostname.

protocol-transport

The combined Diameter protocol and transport.

Type enumeration

Value

one of the following

Value Description

aaa

The Authentication, Authorization and Accounting (AAA) protocol over tcp

aaas

The Authentication, Authorization and Accounting with Secure Transport (AAAS) protocol over tcp. IMPORTANT: this protocol is currently not supported.

sctp

The Authentication, Authorization and Accounting (AAA) protocol over Stream Control Transmission Protocol (SCTP) transport. Will automatically be configured multi-homed if multiple signaling interfaces are provisioned.

Default value

'aaa'

destination-hostname

The destination hostname.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

port

The destination port number.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

3868

metric

The metric to use for this peer. Peers with lower metrics take priority over peers with higher metrics. If all peers have the same metric, traffic is round-robin load balanced over all peers.

Type uint32

Value

a number in the range 0 or more

Default value

1

debug-logging-enabled

Enable extensive logging for verification and issue diagnosis during acceptance testing. Must not be enabled in production.

Type boolean

Value

'true' or 'false'

Default value

false

mag-nginx

Context

The context of mag-nginx within the schema tree is shown. Italicised links are to other pages.

NGINX rate limit configuration for ddos.

This node and its descendants are configured in mag-nginx-config.yaml.

nginx-perip-rate-limit

The request rate per sec for an IP.

Type uint32

Value

a number in the range 1 to 500

nginx-perip-burst-limit

The burst rate for an IP.

Type uint32

Value

a number in the range 1 to 500

nginx-server-rate-limit

The request rate per sec for the server.

Type uint32

Value

a number in the range 1 to 500

nginx-server-burst-limit

The burst rate for the server.

Type uint32

Value

a number in the range 1 to 500

nginx-perip-conn-limit

The no of simultaneous conn per IP.

Type uint32

Value

a number in the range 1 to 500

nginx-server-conn-limit

The no of simultaneous conn for server.

Type uint32

Value

a number in the range 1 to 500

mmt-cdma

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

cassandra-contact-points list

A list of Cassandra contact points. These should normally not be specified as this option is intended for testing and/or special use cases.

List Structure

management.ipv4 ipv4-address-no-zone
signaling.ipv4 ipv4-address-no-zone

The keys are management.ipv4 and signaling.ipv4.

management.ipv4

The IPv4 address of the management interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

signaling.ipv4

The IPv4 address of the signaling interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

additional-rhino-jvm-options list

Additional JVM options to use when running Rhino. Should normally be left blank.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

name string
value string

The key is name.

name

Name of the JVM option. Do not include '-D'.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type string

Value

a string

value

Value for the JVM option.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

rhino-auth list

List of Rhino users and their plain text passwords.

Must contain at least 1 element.

List Structure

username string
password secret
role enumeration

The key is username.

username

The user’s username. Must consist of between 3 and 16 alphanumeric characters.

Type string

Value

a string with length 3 to 16 matching [a-zA-Z0-9]+

password

The user’s password. Will be automatically encrypted at deployment using the deployment’s 'secret-private-key'.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more matching [a-zA-Z0-9_@!$%^/.=-]+

role

The user’s role.

Type enumeration

Value

one of the following

Value Description

admin

Administrator role. Can make changes to Rhino configuration.

view

Read-only role. Cannot make changes to Rhino configuration.

Default value

'view'

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

The key is vm-id.

The values of rhino-node-id must be unique.

The values of per-node-diameter-ro/diameter-ro-origin-host must be unique.

The values of per-node-diameter-rf/diameter-rf-origin-host must be unique.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

per-node-diameter-ro

Configuration for Diameter Ro.

Conditional

This container is only valid when ../../../sentinel-volte/charging/cdma-online-charging-enabled = 'true'.

Container Structure

diameter-ro-origin-host

The Diameter Ro origin host.

The value that will be used for the Origin-Host AVP when sending messages to the OCS

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

per-node-diameter-rf

Configuration for Diameter Rf.

Conditional

This container is only valid when ../../../sentinel-volte/charging/rf-charging.

Container Structure

diameter-rf-origin-host

The Diameter Rf origin host.

The value that will be used for the Origin-Host AVP when sending messages to the CDF

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

scheduled-sbb-cleanups

Cleanup leftover SBBs and activities on specified schedules. If omitted, SBB cleanups will be scheduled for every day at 02:00.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

rhino-node-id

The Rhino node identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type rhino-node-id-type

Description

The Rhino node identifier type.

Value

a number in the range 1 to 32767

scheduled-rhino-restarts

Restart Rhino on a specified schedule, for maintenance purposes. If omitted, no Rhino restarts will be enabled.

Note: Please ensure there are no Rhino restarts within one hour of a scheduled Cassandra repair.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

mmt-gsm

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

cassandra-contact-points list

Explicit list of Cassandra contact points. This should only be specified for testing or special use cases. When left unspecified, the Cassandra contact points will be automatically determined from the TSN VM pool IP addresses.

List Structure

management.ipv4 ipv4-address-no-zone
signaling.ipv4 ipv4-address-no-zone

The keys are management.ipv4 and signaling.ipv4.

management.ipv4

The IPv4 address of the management interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

signaling.ipv4

The IPv4 address of the signaling interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

additional-rhino-jvm-options list

Additional JVM options to use when running Rhino. Should normally be left blank.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

name string
value string

The key is name.

name

Name of the JVM option. Do not include '-D'.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type string

Value

a string

value

Value for the JVM option.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

rhino-auth list

List of Rhino users and their plain text passwords.

Must contain at least 1 element.

List Structure

username string
password secret
role enumeration

The key is username.

username

The user’s username. Must consist of between 3 and 16 alphanumeric characters.

Type string

Value

a string with length 3 to 16 matching [a-zA-Z0-9]+

password

The user’s password. Will be automatically encrypted at deployment using the deployment’s 'secret-private-key'.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more matching [a-zA-Z0-9_@!$%^/.=-]+

role

The user’s role.

Type enumeration

Value

one of the following

Value Description

admin

Administrator role. Can make changes to Rhino configuration.

view

Read-only role. Cannot make changes to Rhino configuration.

Default value

'view'

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

The key is vm-id.

The values of rhino-node-id must be unique.

The values of per-node-diameter-ro/diameter-ro-origin-host must be unique.

The values of per-node-diameter-rf/diameter-rf-origin-host must be unique.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

diameter-ro-origin-host

The Diameter Ro origin host.

The value that will be used for the Origin-Host AVP when sending messages to the OCS

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

per-node-diameter-rf

Configuration for Diameter Rf.

Conditional

This container is only valid when ../../../sentinel-volte/charging/rf-charging.

Container Structure

diameter-rf-origin-host

The Diameter Rf origin host.

The value that will be used for the Origin-Host AVP when sending messages to the CDF

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

scheduled-sbb-cleanups

Cleanup leftover SBBs and activities on specified schedules. If omitted, SBB cleanups will be scheduled for every day at 02:00.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

rhino-node-id

The Rhino node identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type rhino-node-id-type

Description

The Rhino node identifier type.

Value

a number in the range 1 to 32767

scheduled-rhino-restarts

Restart Rhino on a specified schedule, for maintenance purposes. If omitted, no Rhino restarts will be enabled.

Note: Please ensure there are no Rhino restarts within one hour of a scheduled Cassandra repair.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

shcm

Configure ShCM node(s).

Context

The context of shcm within the schema tree is shown. Italicised links are to other pages.

node-type choice
  shcm
    deployment-config:shcm-virtual-machine-pool (in shcm-vmpool-config.yaml)
    deployment-config:shcm-service (in shcm-service-config.yaml)

shcm-virtual-machine-pool

See shcm-virtual-machine-pool for details of this node and its descendants.

shcm-service

See shcm-service for details of this node and its descendants.

shcm-virtual-machine-pool

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

cassandra-contact-points list

A list of Cassandra contact points. These should normally not be specified as this option is intended for testing and/or special use cases.

List Structure

management.ipv4 ipv4-address-no-zone
signaling.ipv4 ipv4-address-no-zone

The keys are management.ipv4 and signaling.ipv4.

management.ipv4

The IPv4 address of the management interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

signaling.ipv4

The IPv4 address of the signaling interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

additional-rhino-jvm-options list

Additional JVM options to use when running Rhino. Should normally be left blank.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

name string
value string

The key is name.

name

Name of the JVM option. Do not include '-D'.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type string

Value

a string

value

Value for the JVM option.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

rhino-auth list

List of Rhino users and their plain text passwords.

Must contain at least 1 element.

List Structure

username string
password secret
role enumeration

The key is username.

username

The user’s username. Must consist of between 3 and 16 alphanumeric characters.

Type string

Value

a string with length 3 to 16 matching [a-zA-Z0-9]+

password

The user’s password. Will be automatically encrypted at deployment using the deployment’s 'secret-private-key'.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more matching [a-zA-Z0-9_@!$%^/.=-]+

role

The user’s role.

Type enumeration

Value

one of the following

Value Description

admin

Administrator role. Can make changes to Rhino configuration.

view

Read-only role. Cannot make changes to Rhino configuration.

Default value

'view'

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

diameter-sh-origin-host

Diameter Sh origin host.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

scheduled-sbb-cleanups

Cleanup leftover SBBs and activities on specified schedules. If omitted, SBB cleanups will be scheduled for every day at 02:00.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

rhino-node-id

The Rhino node identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type rhino-node-id-type

Description

The Rhino node identifier type.

Value

a number in the range 1 to 32767

scheduled-rhino-restarts

Restart Rhino on a specified schedule, for maintenance purposes. If omitted, no Rhino restarts will be enabled.

Note: Please ensure there are no Rhino restarts within one hour of a scheduled Cassandra repair.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

shcm-service

destination-realm

The Diameter destination realm.

Warning

Changing this value will require consistent changes to external systems also.

Changing this value will converge automatically.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

origin-realm

The Diameter origin realm.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-peers list

Diameter destination peer(s).

Warning

Adding or removing entries in this list will require consistent changes to external systems also.

Adding or removing entries in this list will converge automatically.

Must contain at least 1 element.

List Structure

protocol-transport enumeration
destination-hostname domain-name
port port-number
metric uint32

The key is destination-hostname.

protocol-transport

The combined Diameter protocol and transport.

Warning

Changing this value will require consistent changes to external systems also.

Changing this value will converge automatically.

Type enumeration

Value

one of the following

Value Description

aaa

The Authentication, Authorization and Accounting (AAA) protocol over tcp

aaas

The Authentication, Authorization and Accounting with Secure Transport (AAAS) protocol over tcp. IMPORTANT: this protocol is currently not supported.

sctp

The Authentication, Authorization and Accounting (AAA) protocol over Stream Control Transmission Protocol (SCTP) transport. Will automatically be configured multi-homed if multiple signaling interfaces are provisioned.

Default value

'aaa'

destination-hostname

The destination hostname.

Warning

Changing this value will require consistent changes to external systems also.

Changing this value will converge automatically.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

port

The destination port number.

Warning

Changing this value will require consistent changes to external systems also.

Changing this value will converge automatically.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

3868

metric

The metric to use for this peer. Peers with lower metrics take priority over peers with higher metrics. If all peers have the same metric, traffic is round-robin load balanced over all peers.

Warning

Changing this value will require consistent changes to external systems also.

Changing this value will converge automatically.

Type uint32

Value

a number in the range 0 or more

Default value

1

health-check-user-identity

The health check user identity. This should match a test user configured in the HSS.

This node is mandatory.

Type sip-uri-type

Description

The SIP URI type.

Value

a string with length 0 or more matching sip:.*

additional-client-addresses list

Optional list of additional allowed ShCM client IP addresses. These addresses may access the ShCM API port, in addition to TAS and REM nodes which automatically have access.

Type List of ipv4-address

Description

The ipv4-address type represents an IPv4 address in dotted-quad notation.

See RFC 6991 for full details.

Values

a string with length 0 or more matching (([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?

diameter-request-timeout-milliseconds

The Diameter request timeout (in milliseconds).

Type uint32

Value

a number in the range 909 to 27273

Default value

5000

cassandra-locking

Cassandra locking configuration.

backoff-time-milliseconds

The time (in milliseconds) to backoff before re-attempting to obtain the lock in Cassandra.

Type uint32

Value

a number in the range 50 to 5000

Default value

5000

backoff-limit

The limit of times to backoff and re-attempt to obtain a lock in Cassandra.

Type uint32

Value

a number in the range 1 to 10

Default value

5

hold-time-milliseconds

The time (in milliseconds) to hold a lock in Cassandra.

Type uint32

Value

a number in the range 1000 to 30000

Default value

12000

service-indications list

Service indications.

List Structure

The key is service-indication.

service-indication

Service indication.

This node is mandatory.

Type string

Value

a string

cache-strategy

Cache strategy.

Related Constraint

Conditional node ../cache-parameters depends on this node. The Conditional expression refers to this node as ../cache-strategy.

Type cache-strategy-type

Description

The type used to define the caching strategy.

Value

one of the following

Value Description

no-cache

Do not use a cache.

simple-cache

Use a simple cache.

subscription-cache

Use a subscription cache.

Default value

'subscription-cache'

cache-parameters

Parameters describing the configuration for this cache.

Conditional

This container is only valid when ../cache-strategy != 'no-cache'.

Container Structure

cache-validity-time-seconds

Cache validity time (in seconds).

This node is mandatory.

Type uint32

Value

a number in the range 1 to 172800

data-references-subscription-allowed list

List of data references for which subscription is permitted, and their caching strategy configuration

List Structure

The key is data-reference.

data-reference

The data reference.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

ims-public-identity

IMS public identity

s-cscfname

S-CSCF Name

initial-filter-criteria

Initial filter criteria

service-level-trace-info

Service level trace info

ip-address-secure-binding-information

IP address secure binding information

service-priority-level

Service priority level

extended-priority

Extended priority

cache-strategy

The cache strategy.

Related Constraint

Conditional node ../cache-parameters depends on this node. The Conditional expression refers to this node as ../cache-strategy.

Type cache-strategy-type

Description

The type used to define the caching strategy.

Value

one of the following

Value Description

no-cache

Do not use a cache.

simple-cache

Use a simple cache.

subscription-cache

Use a subscription cache.

Default value

'subscription-cache'

cache-parameters

Parameters describing the configuration for this cache.

Conditional

This container is only valid when ../cache-strategy != 'no-cache'.

Container Structure

cache-validity-time-seconds

Cache validity time (in seconds).

This node is mandatory.

Type uint32

Value

a number in the range 1 to 172800

data-references-subscription-not-allowed list

List of data references for which subscription is not permitted, and their caching strategy configuration.

List Structure

The key is data-reference.

data-reference

The data reference.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

charging-information

Charging information

msisdn

MS-ISDN

psiactivation

PSI activation

dsai

DSAI

sms-registration-info

SMS registration info

tads-information

TADS information

stn-sr

STN SR

ue-srvcc-capability

UE SRV CC capability

csrn

CSRN

reference-location-information

Reference location information

cache-strategy

The cache strategy.

Related Constraint

Conditional node ../cache-parameters depends on this node. The Conditional expression refers to this node as ../cache-strategy.

Type enumeration

Value

one of the following

Value Description

no-cache

Do not use a cache.

simple-cache

Use a simple cache.

Default value

'simple-cache'

cache-parameters

Parameters describing the configuration for this cache.

Conditional

This container is only valid when ../cache-strategy != 'no-cache'.

Container Structure

cache-validity-time-seconds

Cache validity time (in seconds).

This node is mandatory.

Type uint32

Value

a number in the range 1 to 172800

debug-logging-enabled

Enable extensive logging for verification and issue diagnosis during acceptance testing. Must not be enabled in production.

Type boolean

Value

'true' or 'false'

Default value

false

tsn

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

vm-id string

The key is vm-id.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

scheduled-cassandra-repairs

Repair Cassandra on specified schedules, for maintenance purposes. If omitted, Cassandra repairs will be scheduled on the leader node every day at 02:00.

Note: Please ensure there are no Rhino restarts within one hour of a scheduled Cassandra repair.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly

No description available

Container Structure

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly

No description available

Container Structure

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

smo

Configure SMO node(s).

Context

The context of smo within the schema tree is shown. Italicised links are to other pages.

node-type choice
  smo
    deployment-config:smo-virtual-machine-pool (in smo-vmpool-config.yaml)
    deployment-config:sentinel-ipsmgw (in sentinel-ipsmgw-config.yaml)

smo-virtual-machine-pool

See smo-virtual-machine-pool for details of this node and its descendants.

sentinel-ipsmgw

See sentinel-ipsmgw for details of this node and its descendants.

smo-virtual-machine-pool

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

sentinel-ipsmgw-enabled

Whether Sentinel IPSMGW will be installed and enabled on SMO nodes.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Related Constraints

Conditional node ../additional-rhino-jvm-options depends on this node. The Conditional expression refers to this node as ../sentinel-ipsmgw-enabled.

Conditional node ../rhino-auth depends on this node. The Conditional expression refers to this node as ../sentinel-ipsmgw-enabled.

Conditional node ../../sentinel-ipsmgw depends on this node. The Conditional expression refers to this node as ../smo-virtual-machine-pool/sentinel-ipsmgw-enabled.

Type boolean

Value

'true' or 'false'

cassandra-contact-points list

A list of Cassandra contact points. These should normally not be specified as this option is intended for testing and/or special use cases.

List Structure

management.ipv4 ipv4-address-no-zone
signaling.ipv4 ipv4-address-no-zone

The keys are management.ipv4 and signaling.ipv4.

management.ipv4

The IPv4 address of the management interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

signaling.ipv4

The IPv4 address of the signaling interface.

This node is mandatory.

Type ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Value

a string with length 0 or more matching [0-9\.]*

additional-rhino-jvm-options list

Additional JVM options to use when running Rhino. Should normally be left blank.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

Conditional

This list is only valid when ../sentinel-ipsmgw-enabled = 'true'.

List Structure

name string
value string

The key is name.

name

Name of the JVM option. Do not include '-D'.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type string

Value

a string

value

Value for the JVM option.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

rhino-auth list

List of Rhino users and their plain text passwords.

Conditional

This list is only valid when ../sentinel-ipsmgw-enabled = 'true'.

Must contain at least 1 element.

List Structure

username string
password secret
role enumeration

The key is username.

username

The user’s username. Must consist of between 3 and 16 alphanumeric characters.

Type string

Value

a string with length 3 to 16 matching [a-zA-Z0-9]+

password

The user’s password. Will be automatically encrypted at deployment using the deployment’s 'secret-private-key'.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more matching [a-zA-Z0-9_@!$%^/.=-]+

role

The user’s role.

Type enumeration

Value

one of the following

Value Description

admin

Administrator role. Can make changes to Rhino configuration.

view

Read-only role. Cannot make changes to Rhino configuration.

Default value

'view'

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

per-node-diameter-ro

Configuration for Diameter Ro.

If sentinel-ipsmgw-enabled is set to false, omit this.

Conditional

This container is only valid when ../../../sentinel-ipsmgw/charging-options/diameter-ro.

Container Structure

diameter-ro-origin-host

The Diameter Ro origin host.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

sip-local-uri

SIP URI for this node.

If sentinel-ipsmgw-enabled is set to false, specify an arbitrary placeholder value here.

This node is mandatory.

Type sip-uri-type

Description

The SIP URI type.

Value

a string with length 0 or more matching sip:.*

scheduled-sbb-cleanups

Cleanup leftover SBBs and activities on specified schedules. If omitted, SBB cleanups will be scheduled for every day at 02:00.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

rhino-node-id

Rhino node identifier.

If sentinel-ipsmgw-enabled is set to false, specify an arbitrary placeholder value here.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type rhino-node-id-type

Description

The Rhino node identifier type.

Value

a number in the range 1 to 32767

scheduled-rhino-restarts

Restart Rhino on a specified schedule, for maintenance purposes. If omitted, no Rhino restarts will be enabled.

Note: Please ensure there are no Rhino restarts within one hour of a scheduled Cassandra repair.

When present

This container is optional, but has mandatory descendants.

scheduling-rule choice

Whether the scheduled task runs once or multiple times per interval.

A Choice between one of the following:

frequency choice

Frequency options for running a scheduled task.

Note: running a scheduled task in the single-entry format is deprecated.

A Choice between one of the following:

daily

No description available

Container Structure

 
         

weekly

No description available

Container Structure

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

monthly

No description available

Container Structure

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

frequency-list choice

Frequency options for running a scheduled task.

A Choice between one of the following:

weekly list

A list of schedules that specifies the days of the week and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-week enumeration
time-of-day string

The key is day-of-week.

day-of-week

The day of the week on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type enumeration

Value

one of the following

Value Description

Monday

Every Monday.

Tuesday

Every Tuesday.

Wednesday

Every Wednesday.

Thursday

Every Thursday.

Friday

Every Friday.

Saturday

Every Saturday.

Sunday

Every Sunday.

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

monthly list

A list of schedules that specifies the days of the month and times of day to run the scheduled task

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

day-of-month uint8
time-of-day string

The key is day-of-month.

day-of-month

The day of the month (from the 1st to the 28th) on which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type uint8

Value

a number in the range 1 to 28

time-of-day

The time of day (24hr clock in the system’s timezone) at which to run the scheduled task.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string with length 0 or more matching ([0-1][0-9]|2[0-3]):[0-5][0-9]

sentinel-ipsmgw

Context

The context of sentinel-ipsmgw within the schema tree is shown. Italicised links are to other pages.

IPSMGW configuration.

This node and its descendants are configured in sentinel-ipsmgw-config.yaml.

Conditional

This container is only valid when ../smo-virtual-machine-pool/sentinel-ipsmgw-enabled = 'true'.

Related Constraints

Conditional node ../hlr depends on this node. The Conditional expression refers to this node as ../sentinel-ipsmgw.

../home-network has a Data Validation Constraint which references this node. The validation expression refers to this node as ../sentinel-ipsmgw.

Conditional node ../common depends on this node. The Conditional expression refers to this node as ../sentinel-ipsmgw.

Conditional node ../home-network depends on this node. The Conditional expression refers to this node as ../sentinel-ipsmgw.

Conditional node ../icscf depends on this node. The Conditional expression refers to this node as ../sentinel-ipsmgw.

georedundancy

Geo-redundancy configuration.

When present

Enables geo-redundancy for IPSMGW.

Container Structure

total-sites

The number of geo-redundant sites.

This node is mandatory.

Type uint32

Value

a number in the range 2 to 32

template-smsc-address

The 'digits' parameter value in this template is replaced by the value of that parameter from the received SMSC address to create a return address to the SMSC.

This node is mandatory.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

originating-address

The SCCP address used as the calling party address in SS7 messages initiated by the IP-SM-GW.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

ipsmgw-as-msc-address

The ipsmgw-as-msc-address is the address that the IP-SM-GW will return to the GMSC during the SendRoutingInformation phase of the MT message procedure, so that subsequent messages will be delivered to the IP-SM-GW. TCAP messages with this address should be routeable to an IP-SM-GW node.

This node is mandatory.

Type ss7-address-string-type

Description

The SS7 address string type.

Value

a string with length 0 or more matching (.,)*address=. and matching .=.(,.=.)*

use-msisdn-as-hlr-address

Indicates if 'hlr/hlr-address' should be used as the actual HLR address, or have its digits replaced with the MSISDN of the subscriber.

This node is mandatory.

Type boolean

Value

'true' or 'false'

suppress-hlr-interaction

If true, no MAP messages will be sent to the HLR. Useful in LTE-only networks. Can only be set to true when 'delivery-order' is 'PS_ONLY'

This node is mandatory.

Data Validation Constraint

. = 'true' and ../../delivery-order = 'PS_ONLY' or . = 'false'

Validation Error:

'suppress-hlr-interaction' can only be 'true' when 'delivery-order' is set to 'PS_ONLY'

Type boolean

Value

'true' or 'false'

use-gt-as-calling-party

When accepting an OpenRequest, the SCCP responder address in the OpenAccept will, by default, be set to the value of the SCCP called party in the OpenRequest. If UseGtAsCallingParty is set to true, and if the received sccp-called-party contains a global title, then the global title will be used.

This node is mandatory.

Type boolean

Value

'true' or 'false'

sms-content-size-threshold

If the length of the message content falls within the configured maximum then send the ForwardSM as part of the TC-BEGIN. As a special case a configured max size of 0 disables this functionality regardless of the actual content length.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

sri-sm-delivery-not-intended

If true, specify the SmDeliveryNotIntended flag when performing an SRI for SM IMSI-only query (i.e. during SMMA callflows).

This node is mandatory.

Type boolean

Value

'true' or 'false'

discard-inform-sc

If true, discard outbound InformSC components from requests sent to the HLR.

Type boolean

Value

'true' or 'false'

Default value

true

force-sm-rp-pri

If true, force Sm_RP_PRI to be set to true in SendRoutingInfoForSM requests sent to the HLR.

Type boolean

Value

'true' or 'false'

Default value

true

invoke-timeout-milliseconds

Timeout (in milliseconds) when invoking MAP operations.

Type uint32

Value

a number in the range 0 or more

Default value

4500

terminating-domain

Domain defined by the operator to compose SIP URIs from the MSISDN.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

sip-transport

The SIP transport to use for IPSMGW’s own SIP URI in outbound requests.

Type enumeration

Value

one of the following

Value Description

tcp

TCP.

udp

UDP.

Default value

'udp'

delivery-order

The delivery order for mobile-terminating messages.

This node is mandatory.

Related Constraint

../map-messaging/suppress-hlr-interaction has a Data Validation Constraint which references this node. The validation expression refers to this node as ../../delivery-order.

Type enumeration

Value

one of the following

Value Description

PS_THEN_CS

Try IMS network first, then circuit-switched network second.

CS_THEN_PS

Try circuit-switched network first, then IMS network second.

PS_ONLY

Only try delivery over the IMS network.

CS_ONLY

Only try delivery over the circuit-switched network.

mt-ps-enabled

Whether charging is enabled for mobile-terminating PS messages.

This node is mandatory.

Related Constraint

Conditional node ../diameter-ro depends on this node. The Conditional expression refers to this node as ../mt-ps-enabled.

Type boolean

Value

'true' or 'false'

mt-cs-enabled

Whether charging is enabled for mobile-terminating CS messages.

This node is mandatory.

Related Constraint

Conditional node ../diameter-ro depends on this node. The Conditional expression refers to this node as ../mt-cs-enabled.

Type boolean

Value

'true' or 'false'

mo-ps-enabled

Whether charging is enabled for mobile-originating PS messages.

This node is mandatory.

Related Constraint

Conditional node ../diameter-ro depends on this node. The Conditional expression refers to this node as ../mo-ps-enabled.

Type boolean

Value

'true' or 'false'

diameter-ro

Diameter Ro configuration.

Conditional

This container is only valid when ../mt-ps-enabled = 'true' or ../mt-cs-enabled = 'true' or ../mo-ps-enabled = 'true'.

Related Constraint

Conditional node ../../../smo-virtual-machine-pool/virtual-machines/per-node-diameter-ro depends on this node. The Conditional expression refers to this node as ../../../sentinel-ipsmgw/charging-options/diameter-ro.

diameter-ro-release

The Diameter Ro release to use.

Type enumeration

Value

one of the following

Value Description

V8d0

Release V8d0

V960

Release V960

Va00

Release Va00

Vb80

Release Vb80

Vcb0

Release Vcb0

Default value

'Vcb0'

realm-choice choice

Whether to use a single realm or multiple realms.

A Choice between one of the following:

single-realm

No description available

Container Structure

destination-realm

The Diameter destination realm.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-realms list

List of Diameter destination realms.

Must contain at least 1 element.

List Structure

The key is destination-realm.

destination-realm

The destination realm.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

charging-function-address

The value that must appear in a P-Charging-Function-Addresses header in order to select this destination realm. If omitted, this will be the same as the destination-realm value.

Type string

Value

a string

peers list

List of Diameter peers for the realm.

Must contain at least 1 element.

Type List of string

Values

a string

origin-realm

The Diameter origin realm.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-peers list

Diameter destination peer(s).

Must contain at least 1 element.

List Structure

protocol-transport enumeration
destination-hostname domain-name
port port-number
metric uint32

The key is destination-hostname.

protocol-transport

The combined Diameter protocol and transport.

Type enumeration

Value

one of the following

Value Description

aaa

The Authentication, Authorization and Accounting (AAA) protocol over tcp

aaas

The Authentication, Authorization and Accounting with Secure Transport (AAAS) protocol over tcp. IMPORTANT: this protocol is currently not supported.

sctp

The Authentication, Authorization and Accounting (AAA) protocol over Stream Control Transmission Protocol (SCTP) transport. Will automatically be configured multi-homed if multiple signaling interfaces are provisioned.

Default value

'aaa'

destination-hostname

The destination hostname.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

port

The destination port number.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

3868

metric

The metric to use for this peer. Peers with lower metrics take priority over peers with higher metrics. If all peers have the same metric, traffic is round-robin load balanced over all peers.

Type uint32

Value

a number in the range 0 or more

Default value

1

max-size-bytes

Approximate maximum size in bytes before a new CDR file is started. After a CDR is written, the total file size is compared to MaxSize. If the current file size is larger, it is completed. If set to 0, no size-based rollover is done.

Type uint64

Value

a number in the range 0 or more

Default value

100000000

max-cdrs

Number of records to be written to a CDR file before a new file is started. If set to 0, no record-based rollover is done.

Type uint32

Value

a number in the range 0 or more

Default value

0

max-interval-milliseconds

The length of time (in milliseconds) before time-based file rollover. If a CDR file is used for more than max-interval-milliseconds without being rolled over due to record- or size-based limits, it is completed anyway. If set to 0, no time-based rollover is done.

Type uint32

Value

a number in the range 0, 1000 or more

Default value

0

registrar-audit-cdrs-enabled

'true' enables the creation of Registrar audit CDRs, 'false' disables.

Type boolean

Value

'true' or 'false'

Default value

false

ue-reachability-notifications

Settings regarding UE reachability subscriptions.

When present

Enables UE reachability notifications.

Container Structure

subscription-expiry-time-seconds

The UE reachability subscription expiry time (in seconds).

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

correlation-ra-plmnid

The PLMNID used by the correlation RA to generate MT correlation IMSIs when the routing info for the terminating subscriber cannot be determined. Must match one of the PLMNIDs defined in the home network configuration.

Container Structure

mcc

The Mobile Country Code (MCC).

This node is mandatory.

Type leafref

mnc

The Mobile Network Code (MNC).

This node is mandatory.

Type leafref

fallback-timer-milliseconds

Timeout (in milliseconds) before attempting message delivery fallback.

Type uint32

Value

a number in the range 0 or more

Default value

5000

avoidance-codes-ps-to-cs list

List of error codes which will prevent fallback from PS to CS.

Type List of uint32

Values

a number in the range 0 or more

avoidance-codes-cs-to-ps list

List of error codes which will prevent fallback from CS to PS.

Type List of uint32

Values

a number in the range 0 or more

sccp-allowlist list

List of allowed GT prefixes. If non-empty, then requests from any GT originating addresses not on the list will be rejected. If empty, then all requests will be allowed. Requests from non-GT addresses are always allowed.

Type List of string

Values

a string

routing-info-cassandra-ttl-seconds

Timeout (in seconds) that routing info is stored in Cassandra.

Type uint32

Value

a number in the range 0 or more

Default value

120

ussi

USSI configuration.

reject-all-with-default-message

Should all USSI messages be rejected with a default message.

When present

Reject all USSI messages with a default message

Container Structure

language

The language that will be set in the USSI response message.

This node is mandatory.

Type string

Value

a string with length 2 matching [a-zA-Z]*

message

The text that will be set in the USSI response message.

This node is mandatory.

Type string

Value

a string

debug-logging-enabled

Enable extensive logging for verification and issue diagnosis during acceptance testing. Must not be enabled in production.

Type boolean

Value

'true' or 'false'

Default value

false

infra

Context

The context of infra within the schema tree is shown. Italicised links are to other pages.

Configure infrastructure node(s).

infra-virtual-machine-pool

The infrastructure node virtual machine pool.

This node and its descendants are configured in infra-vmpool-config.yaml.

deployment-id

The deployment identifier. Used to form a unique VM identifier within the VM host.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type deployment-id-type

Description

Deployment identifier type. May only contain upper and lower case letters 'a' through 'z', the digits '0' through '9' and hyphens. Must be between 1 and 20 characters in length, inclusive.

Value

a string with length 0 or more matching [a-zA-Z0-9-]{1,20}

site-id

Site ID for the site that this VM pool is a part of.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type site-id-type

Description

Site identifier type. Must be the letters DC followed by one or more digits 0-9.

Value

a string with length 0 or more matching DC[0-9]+

node-type-suffix

Suffix to add to the node type when deriving the group identifier. Should normally be left blank.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

Type node-type-suffix-type

Description

Node type suffix type. May only contain upper and lower case letters 'a' through 'z' and the digits '0' through '9'. May be empty.

Value

a string with length 0 or more matching [a-zA-Z0-9]*

Default value

''

virtual-machines list

Configured virtual machines.

Warning

This list should not have entries added or removed for an existing live deployment. The deployment must be deleted and redeployed for a change to this list to take effect.

List Structure

vm-id string

The key is vm-id.

vm-id

The unique virtual machine identifier.

Warning

This value should never be changed for an existing live deployment. The deployment must be deleted and redeployed for a change to this value to take effect.

This node is mandatory.

Type string

Value

a string

snmp

SNMP configuration.

This node and its descendants are configured in snmp-config.yaml.

When present

Always.

Context

The context of snmp within the schema tree is shown. Italicised links are to other pages.

v1-enabled

Enables the use of SNMPv1 if set to 'true'. Note that support for SNMPv1 is deprecated and SNMP v2c should be used instead. Use of v1 is limited to Rhino only and may cause some Rhino statistics to fail to appear correctly or not at all. Set to 'false' to disable SNMPv1.

Type boolean

Value

'true' or 'false'

Default value

false

v2c-enabled

Enables the use of SNMPv2c if set to 'true'. Set to 'false' to disable SNMPv2c.

Related Constraints

Conditional node ../community depends on this node. The Conditional expression refers to this node as ../v2c-enabled.

Conditional node ../notifications/system-notifications-enabled depends on this node. The Conditional expression refers to this node as ../../v2c-enabled.

Conditional node ../agent-details depends on this node. The Conditional expression refers to this node as ../v2c-enabled.

Conditional node ../trap_type depends on this node. The Conditional expression refers to this node as ../v2c-enabled.

Conditional node ../notifications/rhino-notifications-enabled depends on this node. The Conditional expression refers to this node as ../../v2c-enabled.

Conditional node ../notifications/sgc-notifications-enabled depends on this node. The Conditional expression refers to this node as ../../v2c-enabled.

Conditional node ../sgc/v2c-port depends on this node. The Conditional expression refers to this node as ../../v2c-enabled.

Type boolean

Value

'true' or 'false'

Default value

true

v3-enabled

Enables the use of SNMPv3 if set to 'true'. Set to 'false' to disable SNMPv3.

Related Constraints

Conditional node ../agent-details depends on this node. The Conditional expression refers to this node as ../v3-enabled.

Conditional node ../sgc/v3-port depends on this node. The Conditional expression refers to this node as ../../v3-enabled.

Conditional node ../notifications/rhino-notifications-enabled depends on this node. The Conditional expression refers to this node as ../../v3-enabled.

Conditional node ../notifications/system-notifications-enabled depends on this node. The Conditional expression refers to this node as ../../v3-enabled.

Conditional node ../notifications/sgc-notifications-enabled depends on this node. The Conditional expression refers to this node as ../../v3-enabled.

Conditional node ../v3-authentication depends on this node. The Conditional expression refers to this node as ../v3-enabled.

Type boolean

Value

'true' or 'false'

Default value

false

trap_type

Configure the notification type to use when SNMPv2c is enabled.

Conditional

This leaf is only valid when ../v2c-enabled = 'true'.

Type enumeration

Value

one of the following

Value Description

trap

Generate TRAP type notifications.

inform

Generate INFORM type notifications.

Default value

'trap'

community

The SNMPv2c community name.

Conditional

This leaf is only valid when ../v2c-enabled = 'true'.

Type string

Value

a string

Default value

'clearwater'

v3-authentication

See v3-authentication for details of this node and its descendants.

agent-details

See agent-details for details of this node and its descendants.

notifications

See notifications for details of this node and its descendants.

sgc

See sgc for details of this node and its descendants.

v3-authentication

Context

The context of v3-authentication within the schema tree is shown. Italicised links are to other pages.

SNMPv3 authentication configuration. Only used when 'v3-enabled' is set to 'true'.

Conditional

This container is only valid when ../v3-enabled = 'true'.

username

The SNMPv3 user name.

This node is mandatory.

Type string

Value

a string

authentication-protocol

The authentication mechanism to use.

Type enumeration

Value

one of the following

Value Description

SHA

SHA

MD5

MD5 message digest.

Default value

'SHA'

authentication-key

The authentication key.

This node is mandatory.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more

privacy-protocol

The privacy mechanism to use.

Type enumeration

Value

one of the following

Value Description

DES

Data Encryption Standard (DES)

3DES

Triple Data Encryption Standard (3DES).

AES128

128 bit Advanced Encryption Standard (AES).

AES192

192 bit Advanced Encryption Standard (AES).

AES256

256 bit Advanced Encryption Standard (AES).

Default value

'AES128'

privacy-key

The privacy key.

This node is mandatory.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string with length 8 or more

agent-details

Context

The context of agent-details within the schema tree is shown. Italicised links are to other pages.

deployment-config:snmp (in snmp-config.yaml)
  agent-details
    location
    contact

The configurable SNMP agent details. The VM ID is used as the agent’s name, and the human readable node description from the metadata is used as the description.

Conditional

This container is only valid when ../v2c-enabled = 'true' or ../v3-enabled = 'true'.

location

The physical location of the SNMP agent.

This node is mandatory.

Type string

Value

a string

contact

The contact email address for this SNMP agent.

This node is mandatory.

Type string

Value

a string

notifications

Context

The context of notifications within the schema tree is shown. Italicised links are to other pages.

Notification configuration.

Data Validation Constraints

Validation Error:

You must specify whether to enable system notifications. If enabled, you must also specify at least one system notification target.

Validation Error:

You must specify whether to enable Rhino notifications. If enabled, you must also specify at least one Rhino notification target.

Validation Error:

You must specify whether to enable SGC notifications. If enabled, you must also specify at least one SGC notification target.

system-notifications-enabled

Specifies whether or not system SNMP v2c/3 notifications are enabled. System notifications are: high memory and CPU usage warnings, and system boot notifications.

If you use MetaView Server to monitor your platform, then it is recommended to set this to 'false'.

This node is mandatory.

Conditional

This leaf is only valid when ../../v2c-enabled = 'true' or ../../v3-enabled = 'true'.

Related Constraints

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as system-notifications-enabled.

Conditional node ../targets/send-system-notifications depends on this node. The Conditional expression refers to this node as ../../system-notifications-enabled.

Type boolean

Value

'true' or 'false'

rhino-notifications-enabled

Specifies whether or not Rhino SNMP v2c/3 notifications are enabled.

Applicable only when there is a Rhino node in your deployment and SNMPv2c and/or SNMPv3 are enabled.

This node is mandatory.

Conditional

This leaf is only valid when ../../v2c-enabled = 'true' or ../../v3-enabled = 'true'.

Related Constraints

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as rhino-notifications-enabled.

Conditional node ../targets/send-rhino-notifications depends on this node. The Conditional expression refers to this node as ../../rhino-notifications-enabled.

Conditional node ../categories depends on this node. The Conditional expression refers to this node as ../rhino-notifications-enabled.

Type boolean

Value

'true' or 'false'

sgc-notifications-enabled

Specifies whether or not OCSS7 SGC SNMP v2c/3 notifications are enabled.

Applicable only when there is an SMO or an SGC node in your deployment and SNMPv2c and/or SNMPv3 are enabled.

This node is mandatory.

Conditional

This leaf is only valid when ../../v2c-enabled = 'true' or ../../v3-enabled = 'true'.

Related Constraints

Conditional node ../targets/send-sgc-notifications depends on this node. The Conditional expression refers to this node as ../../sgc-notifications-enabled.

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as sgc-notifications-enabled.

Type boolean

Value

'true' or 'false'

targets list

The list of SNMP notification targets.

Note that you can specify targets even if not using Rhino or system notifications - the targets are also used for the disk and service monitor alerts.

List Structure

version enumeration
host host
port port-number
send-rhino-notifications boolean
send-system-notifications boolean
send-sgc-notifications boolean

The keys are version and host and port.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as targets.

version

The SNMP notification version to use for this target.

Type enumeration

Value

one of the following

Value Description

v1

SNMPv1

v2c

SNMPv2c

v3

SNMPv3

host

The target host.

Type host

Description

The host type represents either an IP address or a DNS domain name.

See RFC 6991 for full details.

Value
ip-address

The ip-address type represents an IPv4 address in dotted-quad notation or an IPv6 address in full, mixed, shortened, and shortened-mixed notation.

See RFC 6991 for full details.

or domain-name

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

port

The target port, normally 162.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

send-rhino-notifications

Specifies whether or not to send Rhino SNMP v2c/3 notifications to this target.

Can only be specified if ../rhino-notifications-enabled is true.

Conditional

This leaf is only valid when ../../rhino-notifications-enabled = 'true'.

Type boolean

Value

'true' or 'false'

Default value

true

send-system-notifications

Specifies whether or not to send system SNMP v2c/3 notifications to this target.

Can only be specified if ../system-notifications-enabled is true.

Conditional

This leaf is only valid when ../../system-notifications-enabled = 'true'.

Type boolean

Value

'true' or 'false'

Default value

true

send-sgc-notifications

Specifies whether or not to send SGC SNMP v2c/3 notifications to this target.

Can only be specified if ../sgc-notifications-enabled is true.

Conditional

This leaf is only valid when ../../sgc-notifications-enabled = 'true'.

Type boolean

Value

'true' or 'false'

Default value

true

categories list

Rhino notification categories to enable or disable.

Conditional

This list is only valid when ../rhino-notifications-enabled = 'true'.

List Structure

category enumeration
enabled boolean

The key is category.

category

Notification category.

If you are using MetaView Server, only the alarm-notification category of Rhino SNMP notifications is supported. Therefore, all other notification categories should be disabled.

Type enumeration

Value

one of the following

Value Description

alarm-notification

Alarm related notifications.

log-notification

Log related notifications.

log-rollover-notification

Log rollover notifications.

resource-adaptor-entity-state-change-notification

Resource adaptor entity state change notifications.

service-state-change-notification

Service state change notifications.

slee-state-change-notification

SLEE state change notifications.

trace-notification

Trace notifications.

usage-notification

Usage notifications.

enabled

Set to 'true' to enable this category. Set to 'false' to disable.

This node is mandatory.

Type boolean

Value

'true' or 'false'

sgc

Context

The context of sgc within the schema tree is shown. Italicised links are to other pages.

deployment-config:snmp (in snmp-config.yaml)
  sgc
    v2c-port
    v3-port

SGC-specific SNMP configuration.

v2c-port

The port to bind to for v2c SNMP requests.

Conditional

This leaf is only valid when ../../v2c-enabled = 'true'.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

11100

v3-port

The port to bind to for v3 SNMP requests.

Conditional

This leaf is only valid when ../../v3-enabled = 'true'.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

11101

sgc

OCSS7 SGC configuration.

This node and its descendants are configured in sgc-config.yaml.

When present

Used on SMO and SGC nodes.

Conditional

This container is only valid when ../sgc-virtual-machine-pool or ../smo-virtual-machine-pool.

Context

The context of sgc within the schema tree is shown. Italicised links are to other pages.

hazelcast

See hazelcast for details of this node and its descendants.

sgcenv

See sgcenv for details of this node and its descendants.

sgc-properties

See sgc-properties for details of this node and its descendants.

m3ua

See m3ua for details of this node and its descendants.

hazelcast

Context

The context of hazelcast within the schema tree is shown. Italicised links are to other pages.

deployment-config:sgc (in sgc-config.yaml)
  hazelcast
    backup-count
    password

Cluster-wide Hazelcast configuration.

backup-count

Hazelcast 'backup-count' parameter.

Leave unset to automatically derive this value from the number of VMs deployed. This is recommended to prevent data loss.

If it must be set, set the variable to 'number of nodes - 1' to avoid data loss.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 1 to 6

password

The optional Hazelcast cluster password.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type secret

Description

A secret, which will be automatically encrypted using the secrets-private-key configured in the Site Definition File (SDF).

Value

a string

sgcenv

Context

The context of sgcenv within the schema tree is shown. Italicised links are to other pages.

deployment-config:sgc (in sgc-config.yaml)
  sgcenv
    jmx-port

Values to be placed in the sgcenv configuration file.

jmx-port

The port to bind to for JMX service, used by the CLI and MXBeans.

The SGC’s jmx-host will be set to localhost

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

10111

sgc-properties

Context

The context of sgc-properties within the schema tree is shown. Italicised links are to other pages.

deployment-config:sgc (in sgc-config.yaml)
  sgc-properties
    properties list
      name
      value

Values to be placed in the SGC.properties configuration file.

When present

This container is optional, but has mandatory descendants.

properties list

List of name,value property pairs.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

name string
value string

The key is name.

name

Property name.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

value

Property value.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

m3ua

M3UA configuration.

Context

The context of m3ua within the schema tree is shown. Italicised links are to other pages.

local-port

The port to bind for this local M3UA endpoint.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

2905

per-node-local-port list

Allows the 'local-port' to be overridden on a per-node basis. Only required for deployments where each SGC cluster member needs to have its local M3UA endpoint listen on a different port to the other members.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

node-index int16
local-port port-number

The key is node-index.

node-index

The index of the node within the cluster. '1' is the first node, '2' is the second, and so on.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type int16

Value

a number in the range 1 or more

local-port

The port to bind for this node’s local M3UA endpoint.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

point-code

This SGC cluster’s signaling point code.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type ss7-point-code-type

Description

A type representing an SS7 point code. When ANSI variant is in use, specify this in network-cluster-member format, such as 1-2-3, where each element is between 0 and 255. When ITU variant is in use, specify this as an integer between 0 and 16383. Note that for ITU you will need to quote the integer, as this field takes a string rather than an integer.

Value

a string with length 0 or more matching (([0-2]?[0-9]?[0-9]-){2}[0-2]?[0-9]?[0-9])|([0-1]?[0-9]{1,4})

sccp-variant

The SCCP variant to configure this SGC to use.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

ITU

ITU-T SCCP

ANSI

ANSI SCCP

Default value

'ITU'

national

The value of the 'national indicator' SCCP address indicator bit for SCMG messages sent by this node.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

AUTO

Uses the SCCP variant to determine the best national value to use for SCMG messages. ITU SCCP implies INTERNATIONAL and ANSI SCCP implies NATIONAL.

NATIONAL

Set the national value in SCMG messages to NATIONAL.

INTERNATIONAL

Set the national value in SCMG messages to INTERNATIONAL.

Default value

'AUTO'

network-indicator

The value of the 'network indicator' field in M3UA messages generated by this cluster.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

INTERNATIONAL

Set the M3UA 'network indicator' field to the value INTERNATIONAL.

SPARE

Set the M3UA 'network indicator' field to the value SPARE.

NATIONAL

Set the M3UA 'network indicator' field to the value NATIONAL.

RESERVED

Set the M3UA 'network indicator' field to the value RESERVED.

Default value

'INTERNATIONAL'

remote

See remote for details of this node and its descendants.

global-title

See global-title for details of this node and its descendants.

remote

peers list

Connection configuration.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

id string
remote-ips list
   node-index int16
   ips list ipv4-address-no-zone
port port-number
state-maintenance-role enumeration
conn-type enumeration
is-ipsp boolean
asp-id uint32
application-servers list
   as-id string
   daud-on-asp-ac boolean

The key is id.

id

Unique connection identifier.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

remote-ips list

Remote IP configuration to connect this SGC cluster to this remote peer.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Must contain at least 1 element.

List Structure

node-index int16
ips list ipv4-address-no-zone

The key is node-index.

node-index

The index of the SMO node that hosts the SGC that will be connected to this IP set. '1' is the first SMO node, '2' is the second, and so on. '-1' indicates that all SGC nodes in the cluster will use this remote IP set.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type int16

Value

a number in the range -1, 1 or more

ips list

The remote IP address(es) that belong to this IP set.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Must contain at least 1 element.

Type List of ipv4-address-no-zone

Description

An IPv4 address without a zone index.

See RFC 6991 for full details.

Values

a string with length 0 or more matching [0-9\.]*

port

The remote port for this M3UA association.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

2905

state-maintenance-role

The role to perform in M3UA state maintenance.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

active

The SGC takes an active role in M3UA state maintenance.

passive

The SGC takes a passive role in M3UA state maintenance.

Default value

'active'

conn-type

The connection type to establish: client or server.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

client

The SGC connects to the remote peer.

server

The SGC waits for a connection from the remote peer.

Default value

'client'

is-ipsp

true if the SGC is an IPSP, otherwise false.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type boolean

Value

'true' or 'false'

Default value

true

asp-id

The ASP identifier to use in ASP-UP/DOWN messages.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint32

Value

a number in the range 0 or more

application-servers list

The application servers to which this connection belongs.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Must contain at least 1 element.

List Structure

as-id string
daud-on-asp-ac boolean

The key is as-id.

as-id

The AS to which this connection belongs, as identified by that application server’s id field.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

daud-on-asp-ac

Send DAUD when the ASP goes ACTIVE in this AS.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type boolean

Value

'true' or 'false'

Default value

true

application-servers list

Application server configuration.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

The key is id.

id

Uniquely identifies this list entry.

Not referred to anywhere else in the configuration. Any unique value is permitted.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

traffic-maintenance-role

The traffic-maintenance role to assume in this application server.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

active

Assume an active traffic-maintenance role.

passive

Assume a passive traffic-maintenance role.

Default value

'active'

routing-context

The routing context of this application server. No value specified means null.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint32

Value

a number in the range 0 or more

routes

The routing configuration for this application server.

default-priority

The default priority to apply to any routes in this application server where a specific priority has not been configured.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type uint8

Value

a number in the range 0 or more

dpc-ids list

A list of DPCs that may be accessible from this application server.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Must contain at least 1 element.

List Structure

id string
priority uint8

The key is id.

id

The DPC identifier applicable to this route.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

priority

This DPC’s priority. Overrides any value configured in ../default-priority

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

precond-ssns list

This application server will not become active until there is at least one connected TCAP stack for each SSN specified here.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type List of uint8

Values

a number in the range 0 or more

dpcs list

Configured DPCs.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

id string
dpc ss7-point-code-type
network-appearance uint8
muss uint8
mss uint8
pudt enumeration

The key is id.

id

An identifier used to reference this DPC from an application server’s routing configuration.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

dpc

The destination point code.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type ss7-point-code-type

Description

A type representing an SS7 point code. When ANSI variant is in use, specify this in network-cluster-member format, such as 1-2-3, where each element is between 0 and 255. When ITU variant is in use, specify this as an integer between 0 and 16383. Note that for ITU you will need to quote the integer, as this field takes a string rather than an integer.

Value

a string with length 0 or more matching (([0-2]?[0-9]?[0-9]-){2}[0-2]?[0-9]?[0-9])|([0-1]?[0-9]{1,4})

network-appearance

The network appearance.

Absent means null. 0 and null have different meanings in the network.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

muss

The MUSS.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

mss

The MSS.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

pudt

The preferred unitdata message type.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

UDT

Use UDT messages where possible.

XUDT

Use XUDT messages even if the data would fit within a UDT message.

Default value

'UDT'

cpcs list

Notify the specified destination point code if the local SSN status changes.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

dpc ss7-point-code-type
ssns list uint8

The key is dpc.

dpc

The destination point code to inform if the monitored SSN changes state.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type ss7-point-code-type

Description

A type representing an SS7 point code. When ANSI variant is in use, specify this in network-cluster-member format, such as 1-2-3, where each element is between 0 and 255. When ITU variant is in use, specify this as an integer between 0 and 16383. Note that for ITU you will need to quote the integer, as this field takes a string rather than an integer.

Value

a string with length 0 or more matching (([0-2]?[0-9]?[0-9]-){2}[0-2]?[0-9]?[0-9])|([0-1]?[0-9]{1,4})

ssns list

The local SSNs to monitor.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Must contain at least 1 element.

Type List of uint8

Values

a number in the range 0 or more

global-title

Global title configuration.

Context

The context of global-title within the schema tree is shown. Italicised links are to other pages.

inbound list

The set of inbound global title translations to apply.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

id string
addrinfo string
is-prefix boolean
natofaddr uint8
numplan uint8
ssn uint8
trtype uint8

The key is id.

id

Uniquely identifies this list entry.

Not referred to anywhere else in the configuration. Any unique value is permitted.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

addrinfo

The address information to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

is-prefix

true if the addrinfo should be considered a prefix. false if the addrinfo must be an exact match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type boolean

Value

'true' or 'false'

natofaddr

The nature of address to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

numplan

The numbering plan to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

ssn

The local Sub-System Number (SSN) to route matches towards.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

trtype

The translation type to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

outbound

See outbound for details of this node and its descendants.

outbound

Outbound global title configuration.

Context

The context of outbound within the schema tree is shown. Italicised links are to other pages.

matchers

See matchers for details of this node and its descendants.

translations list

See translations list for details of this node and its descendants.

rewriters list

See rewriters list for details of this node and its descendants.

matchers

Context

The context of matchers within the schema tree is shown. Italicised links are to other pages.

Outbound global title matchers.

defaults

Default values to apply to matchers if use-default is set to True or is unset in an individual matcher.

Container Structure

natofaddr

The nature of address to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

numplan

The numbering plan to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

trtype

The translation type to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

rules list

List of outbound global title matchers to configure.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

id string
use-defaults boolean
addrinfo string
is-prefix boolean
natofaddr uint8
numplan uint8
trtype uint8
translations list string

The key is id.

id

Uniquely identifies this list entry. Not referred to anywhere else in the configuration. Any unique value is permitted.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

use-defaults

If set to true (or unset) use any defaults in the ../defaults section when creating matchers. If set to false then only the values specified here will be used.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type boolean

Value

'true' or 'false'

Default value

true

addrinfo

The address information to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

is-prefix

true if the ‘addrinfo’ should be considered a prefix. false if the ‘addrinfo’ must be an exact match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type boolean

Value

'true' or 'false'

Default value

true

natofaddr

The nature of address to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

numplan

The numbering plan to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

trtype

The translation type to match.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

translations list

List of translations to apply to this match. Use the id field of a translation to identify to translation(s) to apply.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type List of string

Values

a string

translations list

Context

The context of translations list within the schema tree is shown. Italicised links are to other pages.

The set of outbound global title translations available to matchers.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Must contain at least 1 element.

List Structure

id string
dpc ss7-point-code-type
prefer-local boolean
priority uint16
rewriter-id string

The key is id.

id

The unique identifier of this translation. Referred to by one or more outbound matchers.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

dpc

The destination point code to route matching messages to.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type ss7-point-code-type

Description

A type representing an SS7 point code. When ANSI variant is in use, specify this in network-cluster-member format, such as 1-2-3, where each element is between 0 and 255. When ITU variant is in use, specify this as an integer between 0 and 16383. Note that for ITU you will need to quote the integer, as this field takes a string rather than an integer.

Value

a string with length 0 or more matching (([0-2]?[0-9]?[0-9]-){2}[0-2]?[0-9]?[0-9])|([0-1]?[0-9]{1,4})

prefer-local

true if routes local to this SGC node are preferred over routes via other SGC cluster members, otherwise false

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type boolean

Value

'true' or 'false'

Default value

true

priority

The translation priority.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint16

Value

a number in the range 0 or more

rewriter-id

The ../rewriters/id rule to use to transform any address that this translation is applied to.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

rewriters list

Context

The context of rewriters list within the schema tree is shown. Italicised links are to other pages.

The rules specifying which SCCP address parameters to alter when this replace-gt rule is activated.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

List Structure

id string
addrinfo string
gtencoding uint8
gti uint8
natofaddr uint8
numplan uint8
route-on enumeration
ssn uint8
trtype uint8

The key is id.

id

Identifier used to reference this replace-gt rule in outbound and inbound translations.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

This node is mandatory.

Type string

Value

a string

addrinfo

The replacement address digits.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type string

Value

a string

gtencoding

The replacement GT encoding.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

gti

The replacement global title indicator.

ITU-T SCCP valid values: 1-4.

ANSI SCCP valid values: 1-2.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

natofaddr

The replacement nature of address.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

numplan

The replacement numbering plan.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

route-on

The action to perform on the routing indicator when this replace-gt rule is activated.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type enumeration

Value

one of the following

Value Description

SSN

Set to route on Sub-System Number (SSN).

GT

Set to route on Global Title (GT).

RI

Leave the routing indicator unchanged.

ssn

The replacement SSN.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

trtype

The replacement translation type.

Warning

See 'Reconfiguring the SGC' in 'Rhino VoLTE TAS Configuration and Management Guide' for how to activate changes to this value.

Type uint8

Value

a number in the range 0 or more

routing

Context

The context of routing within the schema tree is shown. Italicised links are to other pages.

deployment-config:routing  (in routing-config.yaml)
  routing-rules list
    name
    target
    interface
    gateway
    node-types list

Routing configuration.

This node and its descendants are configured in routing-config.yaml.

When present

Always.

routing-rules list

The list of routing rules.

List Structure

name string
target union
interface traffic-type
gateway ip-address
node-types list enumeration

The key is name.

The values of target must be unique.

name

The name of the routing rule.

This node is mandatory.

Type string

Value

a string

target

The target for the routing rule. Can be either an IP address or a block of IP addresses.

This node is mandatory.

Type union

Value
ip-address

The ip-address type represents an IPv4 address in dotted-quad notation or an IPv6 address in full, mixed, shortened, and shortened-mixed notation.

See RFC 6991 for full details.

or ip-prefix

The ip-prefix type represents an IPv4 prefix (eg 192.168.0.0/24) or an IPv6 prefix similarly.

See RFC 6991 for full details.

interface

The interface to use to connect to the specified endpoint. This must be one of the allowed traffic types, corresponding to the interface carrying the traffic type.

This node is mandatory.

Type traffic-type

Description

The name of the traffic type.

Value
signaling-traffic-type

The name of the signaling traffic type.

one of the following

Value Description

internal

Internal signaling traffic.

diameter

Diameter signaling traffic.

ss7

SS7 signaling traffic.

sip

SIP signaling traffic.

http

HTTP signaling traffic.

custom-signaling

Applies to custom VMs only. Custom signaling traffic.

custom-signaling2

Applies to custom VMs only. Second custom signaling traffic.

or multihoming-signaling-traffic-type

The name of the multihoming signaling traffic type.

one of the following

Value Description

diameter-multihoming

Second Diameter signaling traffic.

ss7-multihoming

Second SS7 signaling traffic.

or enumeration

one of the following

Value Description

management

Management traffic.

cluster

Cluster traffic.

access

Access traffic.

gateway

The IP address of the gateway to route through.

This node is mandatory.

Type ip-address

Description

The ip-address type represents an IPv4 address in dotted-quad notation or an IPv6 address in full, mixed, shortened, and shortened-mixed notation.

See RFC 6991 for full details.

Value
ipv4-address

The ipv4-address type represents an IPv4 address in dotted-quad notation.

See RFC 6991 for full details.

or ipv6-address

The ipv6-address type represents an IPv6 address in full, mixed, shortened, and shortened-mixed notation.

See RFC 6991 for full details.

node-types list

The node-types this routing rule applies to.

Type List of enumeration

Values

one of the following

Value Description

shcm

Apply this routing rule to the shcm nodes.

mag

Apply this routing rule to the mag nodes.

mmt-gsm

Apply this routing rule to the mmt-gsm nodes.

mmt-cdma

Apply this routing rule to the mmt-cdma nodes.

smo

Apply this routing rule to the smo nodes.

tsn

Apply this routing rule to the tsn nodes.

max

Apply this routing rule to the max nodes.

rem

Apply this routing rule to the rem nodes.

sgc

Apply this routing rule to the sgc nodes.

custom

Apply this routing rule to the custom nodes.

custom-data

Context

The context of custom-data within the schema tree is shown. Italicised links are to other pages.

deployment-config:custom-data  (in custom-config-data.yaml)
  custom-config

Custom configuration.

This node and its descendants are configured in custom-config-data.yaml.

When present

Always.

custom-config

Type YAML data as specified.

common

Context

The context of common within the schema tree is shown. Italicised links are to other pages.

deployment-config:common  (in common-config.yaml)
  platform-operator-name

Common configuration. Used on MAG, MMT GSM, MMT CDMA, ShCM, and MAX nodes.

This node and its descendants are configured in common-config.yaml.

When present

Used on MAG, MMT GSM, MMT CDMA, ShCM, and MAX nodes.

Conditional

This container is only valid when ../sentinel-volte or ../sentinel-ipsmgw or ../naf-filter or ../shcm-service or ../max-service.

platform-operator-name

The platform operator name.

This node is mandatory.

Type string

Value

a string with length 0 or more matching [a-zA-Z0-9_-]+

home-network

Context

The context of home-network within the schema tree is shown. Italicised links are to other pages.

Home network configuration. Used on MMT GSM, MMT CDMA, and SMO nodes.

This node and its descendants are configured in home-network-config.yaml.

When present

Used on MMT GSM, MMT CDMA, and SMO nodes.

Conditional

This container is only valid when ../sentinel-volte or ../sentinel-ipsmgw or ../naf-filter.

Data Validation Constraint

Validation Error:

'home-domain' must be specified for MMT configuration.

home-domain

Identifier for the home network.

Should match the value in the SIP: p-visited-network-id header inserted by the S-CSCF or P-CSCF.

Used for determining whether a call is roaming or not.

Reference

RFC 3455 section 4.3

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as home-domain.

Type string

Value

a string with length 0 or more matching [a-zA-Z0-9@.:_/-]+

home-network-country-dialing-code

The home network country dialing code.

This node is mandatory.

Type number-string

Description

A type that permits a non-negative integer value.

Value

a string with length 1 to 4

home-network-iso-country-code

The home network ISO country code.

Type string

Value

a string with length 2 matching [A-Z]*

home-plmn-ids list

The home Public Land Mobile Network (PLMN) identifiers.

List Structure

mcc number-string
mncs list number-string

The key is mcc.

mcc

The Mobile Country Code (MCC).

This node is mandatory.

Type number-string

Description

A type that permits a non-negative integer value.

Value

a string with length 3

mncs list

The list of Mobile Network Codes (MNCs).

Must contain at least 1 element.

Type List of number-string

Description

A type that permits a non-negative integer value.

Values

a string with length 2 to 3

hlr

Context

The context of hlr within the schema tree is shown. Italicised links are to other pages.

deployment-config:hlr  (in hlr-config.yaml)
  hlr-address

Home Location Register configuration. Used on MMT GSM, MMT CDMA, and SMO nodes.

This node and its descendants are configured in hlr-config.yaml.

When present

Used on MMT GSM, MMT CDMA, and SMO nodes.

Conditional

This container is only valid when ../sentinel-volte or ../sentinel-ipsmgw.

hlr-address

The HLR SCCP address. This is typically in the form of a Global Title

This node is mandatory.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

icscf

Context

The context of icscf within the schema tree is shown. Italicised links are to other pages.

deployment-config:icscf  (in icscf-config.yaml)
  i-cscf-uri

Interrogating Call Service Control Function configuration. Used on MMT GSM, MMT CDMA, and SMO nodes.

This node and its descendants are configured in icscf-config.yaml.

When present

Used on MMT GSM, MMT CDMA, and SMO nodes.

Conditional

This container is only valid when ../sentinel-volte or ../sentinel-ipsmgw.

i-cscf-uri

The URI of the Interrogating Call Session Control Function (I-CSCF).

For MMT, the Conf and ECT features will automatically add an 'lr' parameter to it. The hostname part should either be a resolvable name or the IP address of the I-CSCF.

This node is mandatory.

Type sip-uri-type

Description

The SIP URI type.

Value

a string with length 0 or more matching sip:.*

number-analysis

Number analysis configuration. Used on MMT GSM, MMT CDMA, and MAG nodes.

This node and its descendants are configured in number-analysis-config.yaml.

When present

Used on MMT GSM, MMT CDMA, and MAG nodes.

Conditional

This container is only valid when ../sentinel-volte or ../naf-filter.

Context

The context of number-analysis within the schema tree is shown. Italicised links are to other pages.

deployment-config:number-analysis  (in number-analysis-config.yaml)
  normalization
  non-provisionable-uris list
  assume-sip-uris-are-phone-numbers

normalization

See normalization for details of this node and its descendants.

non-provisionable-uris list

List of URIs that cannot be provisioned.

Type List of union

Values
sip-or-tel-uri-type

A type allowing either a SIP URI or a Tel URI.

sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

or phone-number-type

A type that represents a phone number.

a string with length 0 or more matching +?[*0-9]+

assume-sip-uris-are-phone-numbers

Set to 'true' to attempt to extract phone numbers from SIP URIs even if they don’t contain the 'user=phone' parameter. Set to 'false' to disable this behaviour.

Type boolean

Value

'true' or 'false'

Default value

true

normalization

Context

The context of normalization within the schema tree is shown. Italicised links are to other pages.

Normalization configuration.

international-prefix

The international prefix. 1 to 5 digits in length.

This node is mandatory.

Type dialing-code-type

Description

A type that represents a dialing code.

Value

a string with length 1 to 5

min-normalizable-length

The minimum normalizable length.

This node is mandatory.

Type uint8

Value

a number in the range up to 31

national-prefix

The national prefix. 1 to 5 digits in length.

This node is mandatory.

Type dialing-code-type

Description

A type that represents a dialing code.

Value

a string with length 1 to 5

network-dialing-code

The network dialing code. 1 to 3 digits in length.

This node is mandatory.

Type dialing-code-type

Description

A type that represents a dialing code.

Value

a string with length 1 to 3

normalize-to

The format to normalize to when comparing numbers, sending outgoing requests and checking whether numbers are normalizable.

Type enumeration

Value

one of the following

Value Description

international

Normalize to international format.

national

Normalize to national format.

Default value

'international'

sas

Context

The context of sas within the schema tree is shown. Italicised links are to other pages.

deployment-config:sas  (in sas-config.yaml)
  enabled
  sas-connection
    system-type
    system-version
    servers list

SAS configuration.

This node and its descendants are configured in sas-config.yaml.

When present

Always.

Data Validation Constraint

enabled

'true' enables the use of SAS, 'false' disables.

Related Constraint

Conditional node ../sas-connection depends on this node. The Conditional expression refers to this node as ../enabled.

Type boolean

Value

'true' or 'false'

Default value

true

sas-connection

Configuration for connecting to SAS.

Conditional

This container is only valid when ../enabled = 'true'.

system-type

The SAS system type. Only valid for custom nodes. Defaults to the image name if not specified.

Related Constraint

../.. has a Data Validation Constraint which references this node. The validation expression refers to this node as sas-connection/system-type.

Type string

Value

a string with length 1 to 255 matching [a-zA-Z0-9.\-_@:"', ]+

system-version

The SAS system version. Defaults to the VM version if not specified.

Type string

Value

a string

servers list

The list of SAS servers to send records to.

Must contain at least 1 element.

Type List of union

Values
ipv4-address-no-zone

An IPv4 address without a zone index.

See RFC 6991 for full details.

or domain-name

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

sentinel-volte

Sentinel VoLTE configuration. Used on MMT GSM and MMT CDMA nodes.

This node and its descendants are configured in sentinel-volte-gsm-config.yaml or sentinel-volte-cdma-config.yaml.

When present

Used on MMT GSM and MMT CDMA nodes.

Conditional

Context

The context of sentinel-volte within the schema tree is shown. Italicised links are to other pages.

Related Constraints

Conditional node ../common depends on this node. The Conditional expression refers to this node as ../sentinel-volte.

Conditional node ../icscf depends on this node. The Conditional expression refers to this node as ../sentinel-volte.

Conditional node ../home-network depends on this node. The Conditional expression refers to this node as ../sentinel-volte.

../home-network has a Data Validation Constraint which references this node. The validation expression refers to this node as ../sentinel-volte.

Conditional node ../hlr depends on this node. The Conditional expression refers to this node as ../sentinel-volte.

Conditional node ../number-analysis depends on this node. The Conditional expression refers to this node as ../sentinel-volte.

session-replication-enabled

When enabled, SIP dialogs and charging sessions can be failed over to other cluster nodes if the original node fails.

Set to 'true' to enable session replication. Set to 'false' to disable.

Warning

A restart is required for changes to this value to take effect.

Type boolean

Value

'true' or 'false'

Default value

true

scc

See scc for details of this node and its descendants.

mmtel

See mmtel for details of this node and its descendants.

registrar

See registrar for details of this node and its descendants.

sis

See sis for details of this node and its descendants.

hlr-connectivity-origin

See hlr-connectivity-origin for details of this node and its descendants.

charging

See charging for details of this node and its descendants.

session-refresh

See session-refresh for details of this node and its descendants.

debug-logging-enabled

Enable extensive logging for verification and issue diagnosis during acceptance testing. Must not be enabled in production.

Type boolean

Value

'true' or 'false'

Default value

false

scc

SCC configuration.

Context

The context of scc within the schema tree is shown. Italicised links are to other pages.

Data Validation Constraint

fetch-cmsisdn-source != 'EXTENDED_MSISDN' or udr-included-identities = 'IMPU_AND_IMPI'

Validation Error:

When fetch-cmsisdn-source is set to EXTENDED_MSISDN, udr-included-identities MUST be set to IMPU_AND_IMPI.

scc-mobile-core-type

The SCC mobile core type: 'GSM' or 'CDMA'.

This node is mandatory.

Related Constraints

Conditional node ../../hlr-connectivity-origin/cdma depends on this node. The Conditional expression refers to this node as ../../scc/scc-mobile-core-type.

Conditional node ../../registrar/data-storage-type depends on this node. The Conditional expression refers to this node as ../../scc/scc-mobile-core-type.

Conditional node ../../charging/gsm-online-charging-type depends on this node. The Conditional expression refers to this node as ../../scc/scc-mobile-core-type.

Conditional node ../tads/sri-requests-to-hlr depends on this node. The Conditional expression refers to this node as ../../scc-mobile-core-type.

Conditional node ../../charging/cdma-online-charging-enabled depends on this node. The Conditional expression refers to this node as ../../scc/scc-mobile-core-type.

Conditional node ../../mmtel/determine-roaming-from-hlr depends on this node. The Conditional expression refers to this node as ../../scc/scc-mobile-core-type.

Conditional node ../service-centralisation/scc-cdma-service-centralisation depends on this node. The Conditional expression refers to this node as ../../scc-mobile-core-type.

Conditional node ../service-centralisation/scc-gsm-service-centralisation depends on this node. The Conditional expression refers to this node as ../../scc-mobile-core-type.

../tads/address-source-for-scc-tads has a Data Validation Constraint which references this node. The validation expression refers to this node as ../../scc-mobile-core-type.

Conditional node ../../hlr-connectivity-origin/gsm depends on this node. The Conditional expression refers to this node as ../../scc/scc-mobile-core-type.

Type enumeration

Value

one of the following

Value Description

gsm

GSM

cdma

CDMA

fetch-cmsisdn-source

The fetch Correlation Mobile Station ISDN (CMS-ISDN) source. If set to 'EXTENDED_MSISDN', udr-included-identities MUST be set to 'IMPU_AND_IMPI'.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as fetch-cmsisdn-source.

Type enumeration

Value

one of the following

Value Description

MSISDN

MS-ISDN

EXTENDED_MSISDN

Extended MS-ISDN

Default value

'MSISDN'

udr-included-identities

Defines which IMS user identities to include in outgoing user data requests. Can be either 'IMPU' or 'IMPU_AND_IMPI'. Must be set to 'IMPU_AND_IMPI' if fetch-cmsisdn-source is set to 'EXTENDED_MSISDN'

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as udr-included-identities.

Type enumeration

Value

one of the following

Value Description

IMPU

IMPU

IMPU_AND_IMPI

IMPU_AND_IMPI

service-continuity

Service continuity configuration.

atcf-update-timeout-milliseconds

The Access Transfer Control Function (ATCF) update timeout

Type uint32

Value

a number in the range 0 or more

Default value

2000

stn-sr

The Session Transfer Number for SRVCC (STN-SR).

This node is mandatory.

Type number-string

Description

A type that permits a non-negative integer value.

Value

a string with length 0 or more matching [0-9]+

service-centralisation

See service-centralisation for details of this node and its descendants.

tads

See tads for details of this node and its descendants.

service-centralisation

SCC Service Centralisation Configuration.

Context

The context of service-centralisation within the schema tree is shown. Italicised links are to other pages.

inbound-ss7-address

The originating SCCP address.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

use-direct-icscf-routing

If 'true', the configured I-CSCF URI will be added to the route header of the reoriginated INVITE. If 'false', the HSS will be queried for the S-CSCF URI to use for the subscriber.

This node is mandatory.

Type boolean

Value

'true' or 'false'

generated-pvni-template

A template string for the P-Visited-Network-Information header generated in the reorigination, where {mnc} and {mcc} are replaced with the MNC and MCC respectively.

This node is mandatory.

Type string

Value

a string

police-originating-requests

Police incoming originating requests, and reject attempts to hijack the call.

This node is mandatory.

Type boolean

Value

'true' or 'false'

simple-imrn-pool

See simple-imrn-pool for details of this node and its descendants.

scc-gsm-service-centralisation

See scc-gsm-service-centralisation for details of this node and its descendants.

scc-cdma-service-centralisation

See scc-cdma-service-centralisation for details of this node and its descendants.

simple-imrn-pool

Context

The context of simple-imrn-pool within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  scc
    service-centralisation
      simple-imrn-pool
        minimum-correlation-id
        maximum-correlation-id
        number-of-digits-in-correlation-id

Simple IMRN pool config for mainline case.

Data Validation Constraint

Validation Error:

When configuring simple-imrn-pool config, minimum-correlation-id must be less than maximum-correlation-id.

minimum-correlation-id

The minimum correlation ID value used in the cluster. 0 to maximum-correlation-id.

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as minimum-correlation-id.

Type uint64

Value

a number in the range up to 999999999999999999

maximum-correlation-id

The maximum correlation ID value used in the cluster. 0 to (10^18-1).

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as maximum-correlation-id.

Type uint64

Value

a number in the range up to 999999999999999999

number-of-digits-in-correlation-id

The number of digits the correlation ID should have. Minimum of number of digits in maximum-correlation-id to 18 maximum.

This node is mandatory.

Type uint8

Value

a number in the range 1 to 18

scc-gsm-service-centralisation

Context

The context of scc-gsm-service-centralisation within the schema tree is shown. Italicised links are to other pages.

SCC GSM Service Centralisation Configuration.

Conditional

This container is only valid when ../../scc-mobile-core-type = 'gsm'.

routing-to-internal-network-number-allowed

If set to 'true', routing to an internal network number is allowed.

This node is mandatory.

Type boolean

Value

'true' or 'false'

nature

The type of call. Used when forwarding a call.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

SUBSCRIBER

Subscriber

UNKNOWN

Unknown

NATIONAL

National

INTERNATIONAL

International

NETWORK_SPECIFIC

Network specific

NETWORK_ROUTING_NATIONAL

Network routing national

NETWORK_ROUTING_NETWORK_SPECIFIC

Network routing network specific

NETWORK_ROUTING_WITH_CALLED_DIRECTORY

Network routing with call directory

numbering-plan

The numbering plan to be used when forwarding a call.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

SPARE_0

Spare 0

ISDN

ISDN

SPARE_2

Spare 2

DATA

Data

TELEX

Telex

NATIONAL_5

National 5

NATIONAL_6

National 6

SPARE_7

Spare 7

bypass-terminating-forwarding-if-served-user-not-ims-registered

If true, reorigination is skipped if the subscriber is not registered in the IMS network.

This node is mandatory.

Type boolean

Value

'true' or 'false'

always-term-reoriginate-if-served-user-is-roaming

If true, roaming terminating sessions will always be reoriginated (regardless of IMS registration).

Type boolean

Value

'true' or 'false'

Default value

false

scc-cdma-service-centralisation

Context

The context of scc-cdma-service-centralisation within the schema tree is shown. Italicised links are to other pages.

SCC CDMA Service Centralisation Configuration.

Conditional

This container is only valid when ../../scc-mobile-core-type = 'cdma'.

action-on-unsupported-trigger

Action to take when an unexpected trigger is received.

This node is mandatory.

Type action

Description

SCC CDMA actions

Value

one of the following

Value Description

accessDenied_notUsed

Access Denied - Not Used

accessDenied_unassignedDirectoryNumber

Access Denied - Unassigned Directory Number

accessDeniedReason_inactive

Access Denied, Reason - Inactive

accessDeniedReason_busy

Access Denied, Reason - Busy

accessDeniedReason_terminationDenied

Access Denied, Reason - Termination Denied

accessDeniedReason_noPageResponse

Access Denied, Reason - No Page Response

accessDeniedReason_unavailable

Access Denied, Reason - Unavailable

accessDeniedReason_serviceRejectedByMS

Access Denied, Reason - Service Rejected By MS

accessDeniedReason_serviceRejectedByTheSystem

Access Denied, Reason - Service Rejected By The System

accessDeniedReason_serviceTypeMismatch

Access Denied, Reason - Service Type Mismatch

accessDeniedReason_serviceDenied

Access Denied, Reason - Service Denied

allowCallToContinue

Allow Call To Continue

action-on-failed-to-allocate-routing-number

Action to take when there is a failure generating a routing number.

This node is mandatory.

Type action

Description

SCC CDMA actions

Value

one of the following

Value Description

accessDenied_notUsed

Access Denied - Not Used

accessDenied_unassignedDirectoryNumber

Access Denied - Unassigned Directory Number

accessDeniedReason_inactive

Access Denied, Reason - Inactive

accessDeniedReason_busy

Access Denied, Reason - Busy

accessDeniedReason_terminationDenied

Access Denied, Reason - Termination Denied

accessDeniedReason_noPageResponse

Access Denied, Reason - No Page Response

accessDeniedReason_unavailable

Access Denied, Reason - Unavailable

accessDeniedReason_serviceRejectedByMS

Access Denied, Reason - Service Rejected By MS

accessDeniedReason_serviceRejectedByTheSystem

Access Denied, Reason - Service Rejected By The System

accessDeniedReason_serviceTypeMismatch

Access Denied, Reason - Service Type Mismatch

accessDeniedReason_serviceDenied

Access Denied, Reason - Service Denied

allowCallToContinue

Allow Call To Continue

default-failure-action

Default action to take on error.

This node is mandatory.

Type action

Description

SCC CDMA actions

Value

one of the following

Value Description

accessDenied_notUsed

Access Denied - Not Used

accessDenied_unassignedDirectoryNumber

Access Denied - Unassigned Directory Number

accessDeniedReason_inactive

Access Denied, Reason - Inactive

accessDeniedReason_busy

Access Denied, Reason - Busy

accessDeniedReason_terminationDenied

Access Denied, Reason - Termination Denied

accessDeniedReason_noPageResponse

Access Denied, Reason - No Page Response

accessDeniedReason_unavailable

Access Denied, Reason - Unavailable

accessDeniedReason_serviceRejectedByMS

Access Denied, Reason - Service Rejected By MS

accessDeniedReason_serviceRejectedByTheSystem

Access Denied, Reason - Service Rejected By The System

accessDeniedReason_serviceTypeMismatch

Access Denied, Reason - Service Type Mismatch

accessDeniedReason_serviceDenied

Access Denied, Reason - Service Denied

allowCallToContinue

Allow Call To Continue

imrn-type-of-digits

The type of digits used in the generated IMRN.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

DIALED_OR_CALLED_PARTY_NUMBER

Dialed Number or Called Party Number

CALLING_PARTY_NUMBER

Calling Party Number

CALLER_INTERACTION

Caller Interaction

ROUTING_NUMBER

Routing Number

BILLING_NUMBER

Billing Number

DESTINATION_NUMBER

Destination Number

LATA

LATA

CARRIER

Carrier Number

imrn-nature-of-number

The nature field of the IMRN generated.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

NATIONAL

National

INTERNATIONAL

International

imrn-numbering-plan

The numbering plan field of the IMRN generated.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

UNKNOWN

Unknown Numbering Plan

ISDN

ISDN Numbering

TELEPHONY

Telephony Numbering (ITU-T E.164, E.163)

DATA

Data Numbering (ITU-T X.121)

TELEX

Telex Numbering (ITU-T F.69)

MARITIME_MOBILE

Maritime Mobile Numbering

LAND_MOBILE

Land Mobile Numbering (ITU-T E.212)

PRIVATE

Private Numbering Plan (service provider defined)

PC_SSN

SS7 Point Code and Subsystem Number

IP_ADDRESS

Internet Protocol Address

bypass-forwarding-if-served-user-not-ims-registered

If true, reorigination is skipped if the subscriber is not registered in the IMS network.

This node is mandatory.

Type boolean

Value

'true' or 'false'

tads

csrn-prefix

The Circuit Switched Routing Number (CSRN) prefix.

Type string

Value

a string

address-source-for-scc-tads

Which value should be used for routing TADS requests to. Valid values are 'CMSISDN', 'MSRN' (GSM only), and 'TLDN' (CDMA only)

This node is mandatory.

Data Validation Constraints

. != 'MSRN' and ../../scc-mobile-core-type = 'cdma' or ../../scc-mobile-core-type = 'gsm'

Validation Error:

'address-source-for-scc-tads' cannot be set to 'MSRN' when 'scc-mobile-core-type' is set to 'cmda'.

. != 'TLDN' and ../../scc-mobile-core-type = 'gsm' or ../../scc-mobile-core-type = 'cdma'

Validation Error:

'address-source-for-scc-tads' cannot be set to 'TLDN' when’scc-mobile-core-type' is set to 'gsm'

Related Constraint

Conditional node ../../../hlr-connectivity-origin depends on this node. The Conditional expression refers to this node as ../scc/tads/address-source-for-scc-tads.

Type enumeration

Value

one of the following

Value Description

CMSISDN

Use the Correlation Mobile Station International Subscriber Directory Number (CMSISDN) for SCC TADS.

MSRN

Use the Mobile Station Roaming Number (MSRN) for SCC TADS. Only valid when the scc-mobile-core-type is 'gsm'.

TLDN

Use the Temporary Local Directory Number (TLDN) for SCC TADS. Only valid when the scc-mobile-core-type is 'cdma'.

voice-over-ps-support

Configuration for voice over PS support.

When present

Indicates that voice over PS support is required.

Container Structure

request-user-identity-type

The user identity type to use in requests.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

IMPU

The IMS Public ID user identity type.

MSISDN

The MS-ISDN user identity type.

IMPU_IMPI

The IMPU IMPI user identity type.

MSISDN_IMPI

The MS-ISDN IMPI user identity type.

wlan-allowed

Set to 'true' if W-LAN is allowed. Set to 'false' to disallow.

Type boolean

Value

'true' or 'false'

Default value

false

tads-identity-for-terminating-device

The identity of the terminating device that TADS will send the request to.

Type enumeration

Value

one of the following

Value Description

IMS_PUBLIC_IDENTITY

Send TADS requests to the IMS public identity of the terminating device

SIP_INSTANCE

Send TADS requests to the 'sip.instance' of the terminating device

PATH_FROM_SIP_INSTANCE

Send TADS requests to the 'path' header within the 'sip.instance' of the terminating device

Default value

'IMS_PUBLIC_IDENTITY'

end-session-error-code

The SIP response code that is returned when a session is ended due to an error.

Type uint32

Value

a number in the range 400 to 699

Default value

480

cs-routing-via-icscf

When enabled INVITE requests destined for the CS network will be sent directly via the I-CSCF, bypassing the S-CSCF.

Type boolean

Value

'true' or 'false'

Default value

true

on-sequential-routing

Configuration for TADS sequential routing

tads-timer-max-wait-milliseconds

Time to wait (in milliseconds) for a potentially better forked response.

This node is mandatory.

Type uint32

Value

a number in the range 500 to 5000

ps-fallback-response-codes list

List of SIP response codes that will trigger attempts of more routes after a PS attempt.

Type List of sip-status-code

Description

SIP response status code type.

Values

a number in the range 400 to 699

on-parallel-routing

Configuration for TADS parallel routing

parallel-timer-max-wait-milliseconds

Time to wait (in milliseconds) for a final response.

This node is mandatory.

Type uint32

Value

a number in the range up to 30000

release-all-legs-on-busy

When enabled TADS will end all parallel forks on the first busy response (486).

This node is mandatory.

Type boolean

Value

'true' or 'false'

sri-requests-to-hlr

Configuration for SRI requests sent to the HLR

Conditional

This container is only valid when ../../scc-mobile-core-type = 'gsm'.

set-suppress-tcsi-flag

If enabled, when sending an SRI request to the HLR the feature will set the suppress T-CSI flag on the request

Type boolean

Value

'true' or 'false'

Default value

false

set-suppress-announcement-flag

If enabled, when sending an SRI request to the HLR on a terminating call the feature will set the 'Suppression of Announcement' flag on the request.

Type boolean

Value

'true' or 'false'

Default value

false

suppress-cs-domain-call-diversion

When present, requests destined to the CS domain will contain a Diversion header to suppress call diversion in the CS domain side of the call.

When present

Suppress call diversion in CS domain

use-diversion-counter-parameter

When true, use diversion counter parameter, otherwise use number of headers.

This node is mandatory.

Type boolean

Value

'true' or 'false'

cs-domain-diversion-limit

The configured diversion limit in the CS network to suppress further call diversion.

This node is mandatory.

Type uint32

Value

a number in the range 1 or more

mmtel

Configuration for MMTel services.

announcement

See announcement for details of this node and its descendants.

hss-queries-enabled

See hss-queries-enabled for details of this node and its descendants.

determine-roaming-from-hlr

Determines whether location information from the GSM HLR should be used to determine the roaming status of the subscriber.

Conditional

This leaf is only valid when ../../scc/scc-mobile-core-type = 'gsm'.

Related Constraint

Conditional node ../../hlr-connectivity-origin depends on this node. The Conditional expression refers to this node as ../mmtel/determine-roaming-from-hlr.

Type boolean

Value

'true' or 'false'

Default value

true

conferencing

See conferencing for details of this node and its descendants.

international-and-roaming

See international-and-roaming for details of this node and its descendants.

north-american-numbering-plan-analysis

See north-american-numbering-plan-analysis for details of this node and its descendants.

international-call-management

See international-call-management for details of this node and its descendants.

call-diversion

See call-diversion for details of this node and its descendants.

communication-hold

See communication-hold for details of this node and its descendants.

communication-waiting

See communication-waiting for details of this node and its descendants.

privacy

See privacy for details of this node and its descendants.

psap-callback

See psap-callback for details of this node and its descendants.

communication-barring

See communication-barring for details of this node and its descendants.

vertical-service-codes

See vertical-service-codes for details of this node and its descendants.

announcement

announcements-media-server-uri

The URI of the media server used to play announcements.

This node is mandatory.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

announcements-no-response-timeout-milliseconds

The maximum time to wait (in milliseconds) for the media server to respond before cancelling an announcement.

Type uint32

Value

a number in the range 1 or more

Default value

1000

announcements list

A list containing the configuration for each announcement that the system can play.

List Structure

The key is id.

Data Validation Constraint

repeat > '-1' or interruptable = 'true'

Validation Error:

'interruptable' must be set to 'true' if 'repeat' is set to '-1'.

id

The ID for this announcement.

This node is mandatory.

Type uint32

Value

a number in the range 1 or more

description

A description of what this announcement is used for.

Type string

Value

a string

announcement-url

The file URL of this announcement on the media server.

This node is mandatory.

Type string

Value

a string

delay-milliseconds

The delay interval (in milliseconds) between repetitions of this announcement.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

duration-milliseconds

The maximum duration (in milliseconds) of this announcement.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

repeat

How many times the media server should repeat this announcement. A value of -1 will cause the announcement to repeat continuously until it is interrupted.

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as repeat.

Type int32

Value

a number in the range -1 or more

mimetype

The MIME content type for this announcement, e.g audio/basic, audio/G729, audio/mpeg, video/mpeg.

Type string

Value

a string

interruptable

Determines whether this announcement can be interrupted. This only applies to announcements played after the call is established.

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as interruptable.

Type boolean

Value

'true' or 'false'

suspend-charging

Determines whether online charging should be suspended while this announcement is in progress. This only applies to announcements played after the call is established.

This node is mandatory.

Type boolean

Value

'true' or 'false'

end-session-on-failure

Determines whether the session should be terminated if this announcement fails to play. This only applies to announcements played during call setup.

This node is mandatory.

Type boolean

Value

'true' or 'false'

enforce-one-way-media

Determines whether to enforce one-way media from the media server to the party hearing the announcement. This only applies to announcements played after the call is established.

This node is mandatory.

Type boolean

Value

'true' or 'false'

locale

The language/language variant used in the announcement.

Type string

Value

a string

default-error-code-announcement

Configuration for the default announcement that is played when an error response is received during call setup.

When present

Enable default error code announcement

announcement-id

The ID of the announcement to be played to the calling party when an error response is received during call setup.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

end-call-with-487-response

Determines whether the call should be ended with a 487 error code rather than the error code that triggered the announcement.

Type boolean

Value

'true' or 'false'

error-code-announcements list

A list containing configuration for assigning specific announcements for specific SIP error response codes received during call setup.

List Structure

error-code uint16
disable-announcement boolean
announcement-id announcement-id-type
end-call-with-487-response boolean

The key is error-code.

error-code

The SIP error response code that this entry applies to.

This node is mandatory.

Type uint16

Value

a number in the range 400 to 699

disable-announcement

If set to 'true', no announcement will be played for this error code, overriding any default error code announcement that has been set.

Related Constraint

Conditional node ../announcement-id depends on this node. The Conditional expression refers to this node as ../disable-announcement.

Type boolean

Value

'true' or 'false'

Default value

false

announcement-id

ID of the announcement to play when this error code is received.

Conditional

This leaf is only valid when ../disable-announcement = 'false'.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

end-call-with-487-response

Determines whether to use the original received error code, or a 487 error code to end the call after the announcement.

Type boolean

Value

'true' or 'false'

hss-queries-enabled

Context

The context of hss-queries-enabled within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    hss-queries-enabled
      odb
      metaswitch-tas-services

Configuration for enabling optional queries for certain types of subscriber data in the HSS.

odb

Determines whether the HSS will be queried for operator determined barring (ODB) subscriber data.

Related Constraint

Conditional node ../../communication-barring/operator-communication-barring/operator-barring-rules depends on this node. The Conditional expression refers to this node as ../../../hss-queries-enabled/odb.

Type boolean

Value

'true' or 'false'

Default value

false

metaswitch-tas-services

Determines whether the HSS will be queried for Metaswitch TAS services subscriber data.

Type boolean

Value

'true' or 'false'

Default value

false

conferencing

Context

The context of conferencing within the schema tree is shown. Italicised links are to other pages.

Configuration for the MMTel conferencing service.

conference-mrf-uri

The URI for the Media Resource Function (MRF) used for conferencing.

This node is mandatory.

Type sip-uri-type

Description

The SIP URI type.

Value

a string with length 0 or more matching sip:.*

route-to-mrf-via-ims

Set to 'true' to add the I-CSCF to the 'route' header of messages towards the MRF. Set to 'false' and the messages will be routed directly to the MRF from the TAS.

This node is mandatory.

Type boolean

Value

'true' or 'false'

msml-vendor

The Media Server Markup Language (MSML) vendor, for Conferencing.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

Dialogic

Dialogic

Radisys

Radisys

enable-scc-conf-handling

Determines the SIP signaling used to draw conference participants from their consulting call into the conference call. When 'false' the 3GPP standard conferencing signaling will be used, when 'true' a more reliable method based on SCC access transfer procedures will be used instead.

Type boolean

Value

'true' or 'false'

Default value

true

root-on-selector

Determines where the root element is placed when generating MSML. When 'false' it will be placed directly on the video layout element, when 'true' its will be set on the selector element on the video layout element.

Type boolean

Value

'true' or 'false'

Default value

true

conference-factory-psi-aliases list

A list of conference factory PSIs to use in addition to the standard conference factory PSIs, as per TS 23.003, which are: - 'sip:mmtel@conf-factory.<HOME-DOMAIN>' - 'sip:mmtel@conf-factory.ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org' - 'sip:mmtel@conf-factory.ics.mnc<MNC>.mcc<MCC>.3gppnetwork.org' Within values '<HOME-DOMAIN>' matches the value defined for /home-network/home-domain. Within values, if both '<MCC>' and '<MNC>' are used in an entry, they will match any MCC/MNC pair defined in /home-network/home-plmn-ids.

Type List of sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Values
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

maximum-participants

The maximum number of participants that are allowed in a single conference call.

This node is mandatory.

Type uint8

Value

a number in the range 3 or more

allow-video-conference-calls

Set to 'true' to allow video to be used in conference calls.

This node is mandatory.

Type boolean

Value

'true' or 'false'

conference-view-removal-delay-milliseconds

Delay (in milliseconds) after a conference ends before conference view information in cleaned up.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

subscription

Configuration for conference event subscriptions.

default-subscription-expiry-seconds

Time (in seconds) for a subscription to last if the SUBSCRIBE message doesn’t contain an Expires header.

Type uint32

Value

a number in the range 0 or more

Default value

3600

min-subscription-expiry-seconds

Minimum time (in seconds) that a subscription is allowed to last for. SUBSCRIBE requests with an Expires value lower than this are rejected.

Type uint32

Value

a number in the range 0 or more

Default value

5

polling-interval-seconds

Interval (in seconds) between of polls for changes to the conference view.

Type uint32

Value

a number in the range 0 or more

Default value

5

international-and-roaming

Context

The context of international-and-roaming within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    international-and-roaming
      non-international-format-number-is-national
      end-call-if-no-visited-network
      use-mcc-specific
      min-length

Configuration for determining international and roaming status.

non-international-format-number-is-national

Set to 'true' to treat non-international numbers (no leading '+') as national. Set to 'false' to disable this behaviour.

Type boolean

Value

'true' or 'false'

Default value

false

end-call-if-no-visited-network

Set to 'true' to end the call if no visited network can be determined. Set to 'false' to allow the call to proceed.

Type boolean

Value

'true' or 'false'

Default value

false

use-mcc-specific

Set to 'true' to determine international status using different configuration for each access network MCC. Set to 'false' to use the default configuration.

Type boolean

Value

'true' or 'false'

Default value

false

min-length

Minimum length that the destination address must be before doing a check for international and roaming status.

This node is mandatory.

Type uint8

Value

a number in the range up to 31

north-american-numbering-plan-analysis

Context

The context of north-american-numbering-plan-analysis within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    north-american-numbering-plan-analysis
      enable-nanp-analysis

Configuration for analysing numbers according to the North American Numbering Plan.

enable-nanp-analysis

Whether to analyse numbers according to the North American Numbering Plan, using this to determine location information.

Related Constraint

Conditional node ../../international-call-management/call-management-by-country-code depends on this node. The Conditional expression refers to this node as ../../north-american-numbering-plan-analysis/enable-nanp-analysis.

Type boolean

Value

'true' or 'false'

Default value

false

international-call-management

Context

The context of international-call-management within the schema tree is shown. Italicised links are to other pages.

Configuration for barring and announcements of calls determined to be international.

default-international-call-management

The default handling of calls determined to be international.

bar-calls-with-missing-prefix

Whether calls dialed without the international prefix are barred.

Related Constraint

Conditional node ../bar-calls-with-missing-prefix-announcement-id depends on this node. The Conditional expression refers to this node as ../bar-calls-with-missing-prefix.

Type boolean

Value

'true' or 'false'

Default value

false

bar-calls-with-missing-prefix-announcement-id

The ID of the announcement to play when calls dialed without the international prefix are barred.

Conditional

This leaf is only valid when ../bar-calls-with-missing-prefix = 'true'.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

international-call-announcement-id

The ID of the announcement to play to the calling party when an international call is made.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

call-management-by-country-code list

The configuration of international NANP calls by destination country. Only available if North American Numbering Plan analysis is enabled.

Conditional

List Structure

The key is iso-country-code.

iso-country-code

The determined ISO country code of the called party if within the NANP.

Type string

Value

a string with length 2 matching [A-Z]*

bar-calls-with-missing-prefix

Whether to bar calls to this destination that were dialled without an international prefix.

Related Constraint

Conditional node ../bar-calls-with-missing-prefix-announcement-id depends on this node. The Conditional expression refers to this node as ../bar-calls-with-missing-prefix.

Type boolean

Value

'true' or 'false'

Default value

false

bar-calls-with-missing-prefix-announcement-id

The ID of the announcement to play if calls to this destination were barred.

Conditional

This leaf is only valid when ../bar-calls-with-missing-prefix = 'true'.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

international-call-announcement-id

The ID of the announcement to play before international calls to this destination are connected.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

call-diversion

Configuration for the MMTel call diversion service.

Context

The context of call-diversion within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    call-diversion
      mmtel-call-diversion
      forward-to-voicemail
      announcement

mmtel-call-diversion

See mmtel-call-diversion for details of this node and its descendants.

forward-to-voicemail

See forward-to-voicemail for details of this node and its descendants.

announcement

See announcement for details of this node and its descendants.

mmtel-call-diversion

Context

The context of mmtel-call-diversion within the schema tree is shown. Italicised links are to other pages.

Configuration for the MMTel call diversion service.

max-diversions

Maximum number of diversions that may be made while attempting to establish a session.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

max-diversion-action

Action to take when the maximum number of diversions is exceeded.

This node is mandatory.

Related Constraint

Conditional node ../max-diversion-fixed-destination depends on this node. The Conditional expression refers to this node as ../max-diversion-action.

Type enumeration

Value

one of the following

Value Description

REJECT

Reject the call.

DELIVER_TO_FIXED_DESTINATION

Direct the call to the address specified in max-diversion-fixed-destination.

DELIVER_TO_SUBSCRIBERS_VOICEMAIL_SERVER

Direct the call to the subscriber’s voicemail server.

max-diversion-fixed-destination

The address to deliver communication to when the maximum number of diversions is exceeded and ../max-diversion-action is set to 'DELIVER_TO_FIXED_DESTINATION'.

Conditional

This leaf is only valid when ../max-diversion-action = 'DELIVER_TO_FIXED_DESTINATION'.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

no-reply-timeout-seconds

Time to wait (in seconds) for a reply before diverting due to a no reply rule. This value is the network default, and can be overridden in subscriber data.

This node is mandatory.

Type uint8

Value

a number in the range 5 to 180

add-orig-tag

Set to 'true' to add an 'orig' tag to the Route header when diverting a call.

Type boolean

Value

'true' or 'false'

Default value

true

diversion-limit-exempt-uris list

List of URIs may still be diverted to after the max diversions limit has been reached.

Type List of sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Values
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

suppress-for-cs-terminating-domain

Set to 'true' to suppress call diversion behaviour for calls terminating in the CS domain.

This node is mandatory.

Type boolean

Value

'true' or 'false'

prefer-subscriber

Set to 'true' to have subscriber configuration take precedence over operator configuration.

This node is mandatory.

Type boolean

Value

'true' or 'false'

default-target-uri

The address to forward to if an operator or subscriber forward-to rule has no target specified.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

additional-not-reachable-status-codes list

List of response codes that can trigger a 'not-reachable' diversion rule (in addition to those outlined in the MMTel call diversion specification). The following status codes cannot be used: 1xx, 2xx, 302, 404, 408, 486, 487.

Type List of sip-status-code

Description

SIP response status code type.

Values

a number in the range 300 to 301, 303 to 399, 400 to 403, 405 to 407, 409 to 485, 488 to 699

allow-not-reachable-during-alerting

Set to 'true' to allow diversion rules with 'not-reachable' conditions to be triggered after a 180 response has been received from the called party.

This node is mandatory.

Type boolean

Value

'true' or 'false'

add-mp-param

Set to 'true' to add a 'hi-target-param' of type 'mp' to the History-Info header entry added by a diversion.

This node is mandatory.

Type boolean

Value

'true' or 'false'

forward-to-voicemail

Context

The context of forward-to-voicemail within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    call-diversion
      forward-to-voicemail
        voicemail-uris list
        forward-to-voicemail-timeout-seconds
        forward-to-voicemail-without-ocs-credit

Configuration for forwarding to a subscriber’s voicemail server.

When present

Enable forwarding to a subscriber’s configured voicemail server if all other connection attempts fail.

Related Constraint

Conditional node ../announcement/voicemail-announcement-id depends on this node. The Conditional expression refers to this node as ../../forward-to-voicemail.

voicemail-uris list

List of URIs for which a voicemail-specific announcement will be played (if specified) and for which forwarding to without allocated credit will be allowed (if enabled).

Type List of sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Values
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

forward-to-voicemail-timeout-seconds

Maximum amount of time to wait (in seconds) for a call to be successfully connected before executing default forward to voicemail behaviour (if enabled). Set to '0' to disable the timer.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

forward-to-voicemail-without-ocs-credit

Determines whether to allow forwarding to voicemail when credit cannot be allocated for a call. Only applies when using Diameter Ro based online charging.

Conditional

Type enumeration

Value

one of the following

Value Description

NEVER_ALLOW

Never forward to voicemail when credit has not been allocated.

ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS

Allow forwarding to voicemail when credit has not been allocated if address matches a known voicemail server.

ALWAYS_ALLOW

Always allow forwarding to voicemail when credit has not been allocated.

announcement

Context

The context of announcement within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    call-diversion
      announcement
        announcement-id
        voicemail-announcement-id

Should an announcement be played

When present

Enables announcements

announcement-id

The announcement to be played.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

voicemail-announcement-id

The ID of the announcement to be played when forwarding to a recognized voicemail server.

Conditional

This leaf is only valid when ../../forward-to-voicemail.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

communication-hold

Context

The context of communication-hold within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    communication-hold
      bandwidth-adjustment
        b-as-parameter
        b-rr-parameter
        b-rs-parameter
      holding-party-media-mode
      announcement
        announcement-id

Configuration for the MMTel communication hold service.

bandwidth-adjustment

Configuration for adjusting the bandwidth of responses when sessions are Held and Resumed.

Parameter definitions: 3GPP TS 24.610 Rel 12.6.0 section 4.5.2.4.

When present

Bandwidth adjustment is enabled.

b-as-parameter

The value to set for the 'b=AS:' parameter to use when processing a Hold response.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

b-rr-parameter

The value to set for the 'b=RR:' parameter to use when processing a Hold response.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

b-rs-parameter

The value to set for the 'b=RS:' parameter to use when processing a Hold response.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

holding-party-media-mode

Determines how media streams for the holding party are handled while an announcement to the held party is in progress.

Type enumeration

Value

one of the following

Value Description

NO_HOLD

The passive party is not put on hold during the announcement, media streams are left as they were.

BLACK_HOLE_ONLY

SDP is renegotiated with the passive party so that for the duration of the announcement, all media streams are directed to a black hole IP.

FULL_HOLD

SDP is renegotiated with the passive party so that for the duration of the announcement, all media streams are directed to a black hole IP; and additionally the passive party is put on hold by setting the stream status to sendonly or inactive.

Default value

'FULL_HOLD'

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

communication-waiting

Context

The context of communication-waiting within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    communication-waiting
      timer-seconds
      announcement
        announcement-id

Configuration for the MMTel communication waiting service.

timer-seconds

The maximum time (in seconds) that the communication waiting service will wait for the call to be answered before abandoning it. Default value is 0, which means the timer does not apply.

This node is mandatory.

Type uint8

Value

a number in the range 0, 30 to 120

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

privacy

Context

The context of privacy within the schema tree is shown. Italicised links are to other pages.

Configuration for the MMTel privacy services.

originating-identification-presentation

Configuration for the Originating Identification Presentation (OIP) feature.

anonymize-from-header

If set to 'true', this typically means that:

  • OIP is authorized for the large majority of subscribers, and that:

  • The OIP active flag is either not present in the subscriber’s data (therefore defaulting to true), or the OIP flag is present in the subscriber’s data (typically set to true).

  • This also implies that the ../../originating-identification-restriction/user-policy is set to 'NONE'.

If set to 'false', this typically means that:

  • OIP is not 'active' or 'authorized' yet the operator desires the called party to see the calling party.

  • This implies that the ../../originating-identification-restriction/user-policy would be set to 'ANONYMIZE_FROM' or 'ADD_USER_PRIVACY'.

Type boolean

Value

'true' or 'false'

Default value

true

allow-history-info-header-deletion

If 'true', allows History-Info header deletion.

Type boolean

Value

'true' or 'false'

Default value

false

originating-identification-restriction

Configuration for the Originating Identification Restriction (OIR) feature.

presentation-restriction-type

Controls the presentation restriction type, influencing what value will be present in the Privacy header.

Type enumeration

Value

one of the following

Value Description

ONLY_IDENTITY

The Privacy header is set to 'Privacy:id'.

ALL_PRIVATE_INFORMATION

The Privacy header is set to 'Privacy:header'.

Default value

'ALL_PRIVATE_INFORMATION'

user-policy

The user policy for OIR.

Type enumeration

Value

one of the following

Value Description

NONE

No user policy.

ANONYMIZE_FROM

User policy is anonymize from.

ADD_USER_PRIVACY

User policy is add user privacy,

Default value

'NONE'

psap-callback

Context

The context of psap-callback within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    psap-callback
      use-priority-header
      sip-message-options
        expiry-time-seconds
        terminate-message

Configuration for PSAP callback service.

use-priority-header

If set to 'true', use the contents of the Priority header in the initial INVITE to determine whether the session is a PSAP callback.

This node is mandatory.

Type boolean

Value

'true' or 'false'

sip-message-options

Configuration for the SIP MESSAGE mechanism for determining whether a session is a PSAP callback.

When present

Use the SIP MESSAGE mechanism to determine whether session is a PSAP callback.

expiry-time-seconds

When a SIP MESSAGE notifying that a PSAP call has taken place, this is the time (in seconds) after receiving that MESSAGE that sessions for the identified user are assumed to be a PSAP callback.

This node is mandatory.

Type uint32

Value

a number in the range 0 or more

terminate-message

If set to true, SIP MESSAGEs notifying a PSAP call will be terminated at the MMTel, otherwise they are propagated through the network.

This node is mandatory.

Type boolean

Value

'true' or 'false'

communication-barring

Configuration for MMTel communication barring service.

Context

The context of communication-barring within the schema tree is shown. Italicised links are to other pages.

incoming-communication-barring

See incoming-communication-barring for details of this node and its descendants.

outgoing-communication-barring

See outgoing-communication-barring for details of this node and its descendants.

operator-communication-barring

See operator-communication-barring for details of this node and its descendants.

incoming-communication-barring

Context

The context of incoming-communication-barring within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    communication-barring
      incoming-communication-barring
        international-rules-active
        announcement
          announcement-id
          anonymous-call-rejection-announcement-id

Configuration for incoming communication barring.

international-rules-active

If 'false', incoming call barring will ignore International and International-exHC rules. This is because it is not possible to accurately determine whether the calling party is international in all circumstances.

Type boolean

Value

'true' or 'false'

Default value

false

announcement

Should an announcement be played

When present

Enables announcements

announcement-id

The announcement to be played.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

anonymous-call-rejection-announcement-id

The ID for a different announcement that can be played if the call is barred because it is from an anonymous user.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

outgoing-communication-barring

Context

The context of outgoing-communication-barring within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    communication-barring
      outgoing-communication-barring
        announcement
          announcement-id

Configuration for outgoing communication barring.

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

operator-communication-barring

Configuration for operator communication barring.

Context

The context of operator-communication-barring within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  mmtel
    communication-barring
      operator-communication-barring
        operator-barring-rules
        outgoing-prefix-barring

operator-barring-rules

See operator-barring-rules for details of this node and its descendants.

outgoing-prefix-barring

See outgoing-prefix-barring for details of this node and its descendants.

operator-barring-rules

Context

The context of operator-barring-rules within the schema tree is shown. Italicised links are to other pages.

Configuration for operator barring rules.

Conditional

This container is only valid when ../../../hss-queries-enabled/odb = 'true'.

retarget

Should the call be retargeted if this barring rule matches.

When present

Indicates that the call should be retargeted when this rule matches.

retarget-uri

The URI to retarget this call to if the barring rule matches.

This node is mandatory.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

disable-online-charging-on-retarget

Should charging be disabled when we retarget.

Type boolean

Value

'true' or 'false'

Default value

false

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

retarget

Should the call be retargeted if this barring rule matches.

When present

Indicates that the call should be retargeted when this rule matches.

retarget-uri

The URI to retarget this call to if the barring rule matches.

This node is mandatory.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

disable-online-charging-on-retarget

Should charging be disabled when we retarget.

Type boolean

Value

'true' or 'false'

Default value

false

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

retarget

Should the call be retargeted if this barring rule matches.

When present

Indicates that the call should be retargeted when this rule matches.

retarget-uri

The URI to retarget this call to if the barring rule matches.

This node is mandatory.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

disable-online-charging-on-retarget

Should charging be disabled when we retarget.

Type boolean

Value

'true' or 'false'

Default value

false

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

retarget

Should the call be retargeted if this barring rule matches.

When present

Indicates that the call should be retargeted when this rule matches.

retarget-uri

The URI to retarget this call to if the barring rule matches.

This node is mandatory.

Type sip-or-tel-uri-type

Description

A type allowing either a SIP URI or a Tel URI.

Value
sip-uri-type

The SIP URI type.

a string with length 0 or more matching sip:.*

or tel-uri-type

The Tel URI type.

a string with length 0 or more matching tel:\+?[-*#.()A-F0-9]+

disable-online-charging-on-retarget

Should charging be disabled when we retarget.

Type boolean

Value

'true' or 'false'

Default value

false

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

announcement-id

The announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

outgoing-prefix-barring

Context

The context of outgoing-prefix-barring within the schema tree is shown. Italicised links are to other pages.

Configuration for outgoing prefix barring.

When present

Outgoing prefix barring is configured

prefixes list

The list of prefixes to match against, and their corresponding classifications to be used for outgoing barring.

List Structure

prefix string
classifications list leafref

The key is prefix.

prefix

The prefix to match against for outgoing barring.

This node is mandatory.

Type string

Value

a string

classifications list

The classification(s) to apply when this prefix is matched.

Type List of leafref

classifications list

The list of classifications that can be applied for a prefix match.

List Structure

The key is name.

Data Validation Constraints

Validation Error:

'minimum-number-length' must be less than or equal to 'maximum-number-length'.

Validation Error:

'disable-ocb-announcement' must be omitted or set to 'false' if an outgoing prefix barring announcement is specified.

name

The name for this barring classification.

This node is mandatory.

Type string

Value

a string with length 0 or more matching [^\t\n\r]+

minimum-number-length

The minimum length the number must be to match this classification.

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as minimum-number-length.

Type uint8

Value

a number in the range 1 to 20

maximum-number-length

The maximum length the number can be to match this classification.

This node is mandatory.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as maximum-number-length.

Type uint8

Value

a number in the range 1 to 20

match-international

When true, the normalized number must be international and not within the Home Country Code to match this classification.

This node is mandatory.

Type boolean

Value

'true' or 'false'

barring-treatment

How to handle a call that this classification applies to.

This node is mandatory.

Type enumeration

Value

one of the following

Value Description

OSBType1

Treat call as a Type1 operator barring rule.

OSBType2

Treat call as a Type2 operator barring rule.

OSBType3

Treat call as a Type3 operator barring rule.

OSBType4

Treat call as a Type4 operator barring rule.

OperatorAllow

Allow call to proceed.

OperatorBar

Bar the call.

PremiumRateInformation

Treat call as premium rate information.

PremiumRateEntertainment

Treat call as premium rate entertainment.

disable-ocb-announcement

Disables the 'outgoing-call-barring' announcement. Cannot be 'true' when an announcement is specified.

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as disable-ocb-announcement.

Type boolean

Value

'true' or 'false'

Default value

false

announcement

Should an announcement be played

When present

Enables announcements

Container Structure

Related Constraint

.. has a Data Validation Constraint which references this node. The validation expression refers to this node as announcement.

announcement-id

The ID of an announcement to play instead of the usual 'outgoing-call-barring' announcement.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

vertical-service-codes

Context

The context of vertical-service-codes within the schema tree is shown. Italicised links are to other pages.

Configuration for vertical service codes.

host

Hostname of XCAP server to send HTTP requests to.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

port

Obsolete in RVT 4.1 series and later. Port of XCAP server to send HTTP requests to. Can be omitted to use the default port for the protocol port.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

use-https

Obsolete in RVT 4.1 series and later. Indicates whether or not to use HTTP over TLS to connect to the XCAP server.

Type boolean

Value

'true' or 'false'

base-uri

Obsolete in RVT 4.1 series and later. Base URI of XCAP server.

Type uri

Description

The uri type represents a Uniform Resource Identifier (URI) as defined by STD 66.

See RFC 6991 for full details.

Value

a string

auid

Obsolete in RVT 4.1 series and later. XCAP application unique identifier to use in request URI.

Type string

Value

a string

document

Obsolete in RVT 4.1 series and later. XCAP document to use in request URI.

Type string

Value

a string

success-response-status-code

Response status code to use following a successful HTTP response.

This node is mandatory.

Type sip-status-code

Description

SIP response status code type.

Value

a number in the range 100 to 699

failure-response-status-code

Response status code to use following a failure HTTP response.

This node is mandatory.

Type sip-status-code

Description

SIP response status code type.

Value

a number in the range 100 to 699

failure-announcement

An announcement be played if the update fails.

When present

Enables announcement on failure

Container Structure

announcement-id

The ID of the announcement to be played.

This node is mandatory.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

registrar

Context

The context of registrar within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  registrar
    data-storage-type
    user-identity-type-for-stn-sr-request
    include-private-id-in-stn-sr-request

Registrar configuration.

data-storage-type

Data storage type.

Conditional

This leaf is only valid when ../../scc/scc-mobile-core-type = 'gsm'.

Type enumeration

Value

one of the following

Value Description

hsscache

HSS cache data storage.

cassandra

Cassandra data storage.

Default value

'cassandra'

user-identity-type-for-stn-sr-request

The type of user identity to use when creating Sh requests for the STN-SR.

Type enumeration

Value

one of the following

Value Description

CMSISDN

The user’s CMS ISDN.

PUBLIC_ID

The user’s public ID.

Default value

'PUBLIC_ID'

include-private-id-in-stn-sr-request

Whether the user’s IMS Private ID should be included in Sh requests for the STN-SR.

Type boolean

Value

'true' or 'false'

Default value

false

sis

Context

The context of sis within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  sis
    unavailable-peer-list-timer-milliseconds
    failover-timer-milliseconds

SIS configuration.

unavailable-peer-list-timer-milliseconds

The duration for which a server will be blocked after a failure is detected. This avoids the RA trying to use the server immediately after a failure, when it is most likely just going to fail again. After this time has passed the failed server may be tried again on subsequent client transactions. If a server specifies a Retry-After duration in a 503 response, that value will be used instead.

Type uint64

Value

a number in the range 0 or more

Default value

60000

failover-timer-milliseconds

Specifies the duration of the failover timer. If this timer expires before any responses were received, the RA treats this as a transport error and tries sending the request to the next available server. This timer should be set to a value smaller than the default Timer B and Timer F timers (32s) so that failures can be detected promptly. A value of zero disables this timer.

Type uint64

Value

a number in the range 0 or more

Default value

4000

hlr-connectivity-origin

Context

The context of hlr-connectivity-origin within the schema tree is shown. Italicised links are to other pages.

Origin HLR connectivity configuration.

Conditional

originating-address

The originating SCCP address. This often is a Point Code and SSN, where the SSN is typically 145 or 146

This node is mandatory.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

gsm

HLR connectivity configuration specific to GSM.

Conditional

This container is only valid when ../../scc/scc-mobile-core-type = 'gsm'.

mlc-address

The MLC SCCP address. This is the logical address of the originator, i.e. this service. Typically a Global Title.

This node is mandatory.

Type ss7-address-string-type

Description

The SS7 address string type.

Value

a string with length 0 or more matching (.,)*address=. and matching .=.(,.=.)*

use-msisdn-as-hlr-address

Indicates if 'hlr/hlr-address' should be used as the actual HLR address, or have its digits replaced with the MSISDN of the subscriber.

This node is mandatory.

Type boolean

Value

'true' or 'false'

msc-originating-address

Originating SCCP address when acting as an MSC, used when establishing the MAP dialog. Will default to the value of 'originating-address' when not present. Typically used to set a different originating SSN when sending a SendRoutingInformation message to the HLR.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

cdma

HLR connectivity configuration specific to CDMA.

Conditional

This container is only valid when ../../scc/scc-mobile-core-type = 'cdma'.

Container Structure

market-id

The market ID (MarketID). Forms part of the Mobile Switching Center Identification (MSCID)

Reference

X.S0004-550-E v3.0 2.161

This node is mandatory.

Type uint32

Value

a number in the range up to 65535

switch-number

The switch number (SWNO). Forms part of the Mobile Switching Center Identification (MSCID)

Reference

X.S0004-550-E v3.0 2.161

This node is mandatory.

Type uint32

Value

a number in the range up to 255

map-invoke-timeout-milliseconds

The Message Application Part (MAP) invoke timeout (in milliseconds).

Type uint32

Value

a number in the range 250 to 45000

Default value

5000

charging

gsm-online-charging-type

The online charging type. Only valid when 'scc-mobile-core-type' is 'gsm'.

Conditional

This leaf is only valid when ../../scc/scc-mobile-core-type = 'gsm'.

Related Constraints

Conditional node ../../../mmt-gsm-virtual-machine-pool/virtual-machines/per-node-diameter-ro depends on this node. The Conditional expression refers to this node as ../../../sentinel-volte/charging/gsm-online-charging-type.

Conditional node ../ro-charging depends on this node. The Conditional expression refers to this node as ../gsm-online-charging-type.

Conditional node ../../mmtel/call-diversion/forward-to-voicemail/forward-to-voicemail-without-ocs-credit depends on this node. The Conditional expression refers to this node as ../../../../charging/gsm-online-charging-type.

Conditional node ../cap-charging depends on this node. The Conditional expression refers to this node as ../gsm-online-charging-type.

Type enumeration

Value

one of the following

Value Description

ro

Use Diameter Ro charging.

cap

Use CAMEL Application Part (CAP) charging.

cap-ro

Use both Diameter Ro and CAMEL Application Part (CAP) charging.

disabled

Disable online charging.

Default value

'ro'

cdma-online-charging-enabled

Set to 'true' to enable online charging. Set to 'false' to disable. Only valid when 'scc-mobile-core-type' is 'cdma'.

Conditional

This leaf is only valid when ../../scc/scc-mobile-core-type = 'cdma'.

Related Constraints

Conditional node ../../mmtel/call-diversion/forward-to-voicemail/forward-to-voicemail-without-ocs-credit depends on this node. The Conditional expression refers to this node as ../../../../charging/cdma-online-charging-enabled.

Conditional node ../../../mmt-gsm-virtual-machine-pool/virtual-machines/per-node-diameter-ro depends on this node. The Conditional expression refers to this node as ../../../sentinel-volte/charging/cdma-online-charging-enabled.

Conditional node ../../../mmt-cdma-virtual-machine-pool/virtual-machines/per-node-diameter-ro depends on this node. The Conditional expression refers to this node as ../../../sentinel-volte/charging/cdma-online-charging-enabled.

Conditional node ../ro-charging depends on this node. The Conditional expression refers to this node as ../cdma-online-charging-enabled.

Type boolean

Value

'true' or 'false'

Default value

true

continue-session-on-ocs-failure

Set to 'true' to permit sessions to continue if there is an OCS (Online Charging System) failure.

Type boolean

Value

'true' or 'false'

Default value

false

diameter-ro-release

The Diameter Ro release to use.

Type enumeration

Value

one of the following

Value Description

V8d0

Release V8d0

V960

Release V960

Va00

Release Va00

Vb80

Release Vb80

Vcb0

Release Vcb0

Default value

'Vcb0'

realm-choice choice

Whether to use a single realm or multiple realms.

A Choice between one of the following:

single-realm

No description available

Container Structure

destination-realm

The Diameter destination realm.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-realms list

List of Diameter destination realms.

Must contain at least 1 element.

List Structure

The key is destination-realm.

destination-realm

The destination realm.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

charging-function-address

The value that must appear in a P-Charging-Function-Addresses header in order to select this destination realm. If omitted, this will be the same as the destination-realm value.

Type string

Value

a string

peers list

List of Diameter peers for the realm.

Must contain at least 1 element.

Type List of string

Values

a string

origin-realm

The Diameter origin realm.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-peers list

Diameter destination peer(s).

Must contain at least 1 element.

List Structure

protocol-transport enumeration
destination-hostname domain-name
port port-number
metric uint32

The key is destination-hostname.

protocol-transport

The combined Diameter protocol and transport.

Type enumeration

Value

one of the following

Value Description

aaa

The Authentication, Authorization and Accounting (AAA) protocol over tcp

aaas

The Authentication, Authorization and Accounting with Secure Transport (AAAS) protocol over tcp. IMPORTANT: this protocol is currently not supported.

sctp

The Authentication, Authorization and Accounting (AAA) protocol over Stream Control Transmission Protocol (SCTP) transport. Will automatically be configured multi-homed if multiple signaling interfaces are provisioned.

Default value

'aaa'

destination-hostname

The destination hostname.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

port

The destination port number.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

3868

metric

The metric to use for this peer. Peers with lower metrics take priority over peers with higher metrics. If all peers have the same metric, traffic is round-robin load balanced over all peers.

Type uint32

Value

a number in the range 0 or more

Default value

1

call-setup-announcement-id

Announcement ID to be played during call setup if the subscriber has low credit.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

mid-call-announcement-id

Announcement ID to be played during a call if the subscriber has low credit.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

charging-reauth-delay-milliseconds

The delay (in milliseconds) for issuing a credit check after a call is connected with low balance (0 indicates immediate reauth).

Type uint32

Value

a number in the range 0 or more

out-of-credit-announcements

Configuration for out of credit announcements.

call-setup-announcement-id

Announcement ID to be played during call setup if the subscriber is out of credit.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

mid-call-announcement-id

Announcement ID to be played during a call if the subscriber is out of credit.

Type announcement-id-type

Description

The announcement-id type, limits use to be one of the configured SIP announcement IDs from '/sentinel-volte/mmtel/announcement/announcements/id'.

Value

one of /sentinel-volte/mmtel/announcement/announcements/id

rf-charging

Rf charging configuration. Presence enables Rf charging.

When present

Enables Rf charging.

Data Validation Constraint

Validation Error:

'interim-cdrs' section must be present when 'rf-charging' is present.

Related Constraints

Conditional node ../../../mmt-cdma-virtual-machine-pool/virtual-machines/per-node-diameter-rf depends on this node. The Conditional expression refers to this node as ../../../sentinel-volte/charging/rf-charging.

Conditional node ../../../mmt-gsm-virtual-machine-pool/virtual-machines/per-node-diameter-rf depends on this node. The Conditional expression refers to this node as ../../../sentinel-volte/charging/rf-charging.

diameter-rf-release

The Diameter Rf release to use.

Type enumeration

Value

one of the following

Value Description

V8d0

Release V8d0

V960

Release V960

Va00

Release Va00

Vb80

Release Vb80

Vcb0

Release Vcb0

Default value

'Vcb0'

destination-realm

The Diameter destination realm.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

origin-realm

The Diameter origin realm.

Warning

A restart is required for changes to this value to take effect.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

destination-peers list

Diameter destination peer(s).

Must contain at least 1 element.

List Structure

protocol-transport enumeration
destination-hostname domain-name
port port-number
metric uint32

The key is destination-hostname.

protocol-transport

The combined Diameter protocol and transport.

Type enumeration

Value

one of the following

Value Description

aaa

The Authentication, Authorization and Accounting (AAA) protocol over tcp

aaas

The Authentication, Authorization and Accounting with Secure Transport (AAAS) protocol over tcp. IMPORTANT: this protocol is currently not supported.

sctp

The Authentication, Authorization and Accounting (AAA) protocol over Stream Control Transmission Protocol (SCTP) transport. Will automatically be configured multi-homed if multiple signaling interfaces are provisioned.

Default value

'aaa'

destination-hostname

The destination hostname.

This node is mandatory.

Type domain-name

Description

The domain-name type represents a DNS domain name. The name SHOULD be fully qualified whenever possible.

See RFC 6991 for full details.

Value

a string with length 1 to 253 matching ((([a-zA-Z0-9_]([a-zA-Z0-9\-]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\.

port

The destination port number.

Type port-number

Description

The port-number type represents a 16-bit port number of an Internet transport-layer protocol such as UDP, TCP, DCCP, or SCTP.

See RFC 6991 for full details.

Value

a number in the range 0 or more

Default value

3868

metric

The metric to use for this peer. Peers with lower metrics take priority over peers with higher metrics. If all peers have the same metric, traffic is round-robin load balanced over all peers.

Type uint32

Value

a number in the range 0 or more

Default value

1

cap-charging

CAP charging configuration. Used when 'gsm-online-charging-type' is set to 'cap' or 'cap-ro'.

Conditional

This container is only valid when ../gsm-online-charging-type = 'cap' or ../gsm-online-charging-type = 'cap-ro'.

imcsi-fetching

IM-CSI fetching configuration.

Container Structure

originating-tdp

The requested Trigger Detection Point for originating calls, which determines whether T_CSI or O_CSI is requested from the HLR. Values of '2' or '3' will request the O_CSI, '12' will request the T_CSI, other values are not valid.

Related Constraint

Conditional node ../../../../../hlr-connectivity-origin depends on this node. The Conditional expression refers to this node as ../charging/cap-charging/imssf/imcsi-fetching/originating-tdp.

Type uint8

Value

a number in the range 2, 3, 12

terminating-tdp

The requested Trigger Detection Point for terminating calls, which determines whether T_CSI or O_CSI is requested from the HLR. Values of '2' or '3' will request the O_CSI, '12' will request the T_CSI, other values are not valid.

Related Constraint

Conditional node ../../../../../hlr-connectivity-origin depends on this node. The Conditional expression refers to this node as ../charging/cap-charging/imssf/imcsi-fetching/terminating-tdp.

Type uint8

Value

a number in the range 2, 3, 12

charging-gt

Configuration for the charging GT (global title) that is sent to the SCP.

format

The format template to use when creating Charging GTs (global title). It must be a digit string except for tokens ('{iso}', '{mcc}', '{mnc}') which are substituted in.

This node is mandatory.

Type string

Value

a string

unknown-location

The Charging GT (global title) to use when one could not be generated because the user’s location could not be determined.

This node is mandatory.

Type number-string

Description

A type that permits a non-negative integer value.

Value

a string with length 0 or more matching [0-9]+

only-charge-terminating-call-if-international-roaming

Should terminating charging only be applied if the served user is roaming internationally.

Type boolean

Value

'true' or 'false'

Default value

false

scf-address

The SCCP address of the GSM charging SCP.

This node is mandatory.

Type sccp-address-type

Description

A type representing an SCCP address in string form. The basic form of an SCCP address is:

type=<variant>,ri=<address type>,<parameter>=<value>,…​

where <variant> is A7 for ANSI-variant SCCP or C7 for ITU-variant SCCP, and <address type> is one of gt or pcssn (for an address specified by Global Title (GT), or Point Code (PC) and Subsystem Number (SSN), respectively).

The <parameter> options are:

  • Point code: pc=<point code in network-cluster-member (ANSI) or integer (ITU) format>

  • Subsystem number: ssn=<subsystem number 0-255>

  • Global title address digits: digits=<address digits, one or more 0-9>

  • Nature of address: nature=<nature> where <nature> is unknown, international, national, or subscriber

  • Numbering plan: numbering=<numbering> where <numbering> is unknown, isdn, generic, data, telex, maritime-mobile, land-mobile, isdn-mobile, or private

  • Global title translation type: tt=<integer 0-255>

  • National indicator: national=<true or false>.

    parameter names are separated from their values by an equals sign, and all <parameter>=<value> pairs are separated by commas. Do not include any whitespace anywhere in the address.

    Only the ssn and national parameters are mandatory; the others are optional, depending on the details of the address - see below.

    Note carefully the following:

  • For ANSI addresses, ALWAYS specify national=true, unless using ITU-format addresses in an ANSI-variant network.

  • For ITU addresses, ALWAYS specify national=false.

  • All SCCP addresses across the deployment’s configuration must use the same variant (A7 or C7).

  • Be sure to update the SGC’s SCCP variant in sgc-config.yaml to match the variant of the addresses.


    For PC/SSN addresses (with ri=pcssn), you need to specify the point code and SSN. For GT addresses (with ri=gt), you must specify the global title digits and SSN in addition to the fields listed below (choose one option).

    There are two options for ANSI GT addresses:

  • translation type only

  • numbering plan and translation type.

    There are four options for ITU GT addresses:

  • nature of address only

  • translation type only

  • numbering plan and translation type

  • nature of address with either or both of numbering plan and translation type.


    Some valid ANSI address examples are:

  • type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

  • type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true

    Some valid ITU address examples are:

  • type=C7,ri=pcssn,pc=1434,ssn=147,national=false

  • type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0, digits=123456,national=false

  • type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false

Value

a string with length 0 or more matching (.,)*type=(A|C)7. and matching (.,)*ri=(gt|pcssn). and matching (.,)*ssn=[0-2]?[0-9]?[0-9]. and matching .=.(,.=.)*

interim-cdrs

Interim CDR configuration. Presence enables Interim CDRs.

When present

Enables interim CDRs.

Related Constraint

../../rf-charging has a Data Validation Constraint which references this node. The validation expression refers to this node as ../cdr/interim-cdrs.

write-cdrs-in-filesystem

'true' means that CDRs are written locally by the application. CDRs are written via Diameter Rf if the Sentinel VoLTE configuration value 'rf-charging' is present.

Type boolean

Value

'true' or 'false'

Default value

true

write-cdr-on-sdp-change

Indicates whether or not to write CDRs on SDP changes.

Type boolean

Value

'true' or 'false'

Default value

true

interim-cdrs-period-seconds

The maximum duration (in seconds) between timer driven interim CDRs.

Setting this to zero will disable timer based interim CDRs.

Type uint32

Value

a number in the range 0 or more

Default value

300

session-cdrs-enabled

'true' enables the creation of session CDRs, 'false' disables.

This node is mandatory.

Type boolean

Value

'true' or 'false'

registrar-audit-cdrs-enabled

'true' enables the creation of Registrar audit CDRs, 'false' disables.

Type boolean

Value

'true' or 'false'

Default value

false

registrar-cdr-stream-name

CDR stream to write Registrar audit CDRs to.

Type string

Value

a string

Default value

'registrar-cdr-stream'

session-refresh

Context

The context of session-refresh within the schema tree is shown. Italicised links are to other pages.

deployment-config:sentinel-volte (in sentinel-volte-gsm-config.yaml and sentinel-volte-cdma-config.yaml)
  session-refresh
    timer-interval-seconds
    refresh-period-seconds
    refresh-with-update-if-allowed
    max-call-duration-seconds

Session Refresh configuration.

timer-interval-seconds

The interval (in seconds) of the periodic timer used to check whether a session needs refreshing.

Type uint32

Value

a number in the range 0 or more

Default value

30

refresh-period-seconds

Period of no activity for leg to refresh (in seconds).

Type uint32

Value

a number in the range 0 or more

Default value

570

refresh-with-update-if-allowed

Whether the session should be refreshed using UPDATE requests, when the endpoint allows UPDATE requests.

Otherwise sessions are refreshed using re-INVITE requests.

Type boolean

Value

'true' or 'false'

Default value

true

max-call-duration-seconds

Maximum allowed duration of a call (in seconds).

Type uint32

Value

a number in the range 0 or more

Default value

86400

system

Context

The context of system within the schema tree is shown. Italicised links are to other pages.

OS-level parameters.

This node and its descendants are configured in system-config.yaml.

When present

Always (but not all settings may be relevant on all nodes).

receive-buffer-size-default

Default socket receive buffer size.

Type uint32

Value

a number in the range 65536 to 16777216

Units

bytes

Default value

512000

receive-buffer-size-max

Maximum socket receive buffer size.

Type uint32

Value

a number in the range 65536 to 16777216

Units

bytes

Default value

2048000

send-buffer-size-default

Default socket send buffer size.

Type uint32

Value

a number in the range 65536 to 16777216

Units

bytes

Default value

512000

send-buffer-size-max

Maximum socket send buffer size.

Type uint32

Value

a number in the range 65536 to 16777216

Units

bytes

Default value

2048000

rto-min

Round trip estimate minimum. Used in SCTP’s exponential backoff algorithm for retransmissions.

Type uint32

Value

a number in the range 10 to 5000

Units

milliseconds

Default value

50

rto-initial

Round trip estimate initial value. Used in SCTP’s exponential backoff algorithm for retransmissions.

Type uint32

Value

a number in the range 10 to 5000

Units

milliseconds

Default value

300

rto-max

Round trip estimate maximum. Used in SCTP’s exponential backoff algorithm for retransmissions.

Type uint32

Value

a number in the range 10 to 5000

Units

milliseconds

Default value

1000

sack-timeout

Timeout within which the endpoint expects to receive a SACK message.

Type uint32

Value

a number in the range 50 to 5000

Units

milliseconds

Default value

100

hb-interval

Heartbeat interval. The longer the interval, the longer it can take to detect that communication with a peer has been lost.

Type uint32

Value

a number in the range 50 to 30000

Units

milliseconds

Default value

1000

path-max-retransmissions

Maximum number of retransmissions on one path before communication via that path is considered to be lost.

Type uint32

Value

a number in the range 1 to 20

Default value

5

association-max-retransmissions

Maximum number of retransmissions to one peer before communication with that peer is considered to be lost.

Type uint32

Value

a number in the range 1 to 20

Default value

10

Example configuration and schemas

In this section

Example configuration YAML files

Example for snmp-config.yaml

deployment-config:snmp:

  # Enable SNMP v1 (not recommended)
  v1-enabled: false

  # Enable SNMP v2c
  v2c-enabled: true

  # Enable SNMP v3
  v3-enabled: false

  # SNMP Community. Required for SNMP v2c
  community: clearwater

  # SNMP agent details
  agent-details:
    location: Unknown location
    contact: support.contact@invalid.com

  # SNMP Notifications
  notifications:

    # Enable Rhino SNMP Notifications
    rhino-notifications-enabled: true

    # Enable System SNMP Notifications
    system-notifications-enabled: true

    # Enable SGC SNMP Notifications
    sgc-notifications-enabled: true

    # SNMP notification targets. Normally this is the address of your MVS
    targets:
      - version: v2c
        host: 127.0.0.1
        port: 162

    # Enable different SNMP notification categories
    categories:
      - category: alarm-notification
        enabled: true

      - category: log-notification
        enabled: false

      - category: log-rollover-notification
        enabled: false

      - category: resource-adaptor-entity-state-change-notification
        enabled: false

      - category: service-state-change-notification
        enabled: false

      - category: slee-state-change-notification
        enabled: false

      - category: trace-notification
        enabled: false

      - category: usage-notification
        enabled: false

Example for routing-config.yaml

# This file is optional. If you do not use any custom routing rules,
# you can omit this file from the configuration bundle uploaded to CDS.

deployment-config:routing:
  routing-rules: []

# To create routing rules, populate the routing-rules list as shown in the example below.
#  routing-rules:
#    - name: Example
#
##     The target for the routing rule.
##     Can be either an IP address or a block of addresses (e.g. 10.0.0.0/8).
#      target: 8.8.8.8
#
##     The interface to use.
##     Can be one of 'management', 'diameter', 'ss7', 'sip', 'internal', 'access', 'cluster',
##     'diameter-multihoming' or 'ss7_multihoming'.
#      interface: management
#
##     The IP address of the gateway to route through.
#      gateway: 0.0.0.0
#
#      The node types this routing rule applies to.
#      If ommitted, this routing rule will be attempt to apply itself to all node types.
#      node-types:
#      - tsn
#      - mag
#
#    - name: Example2
##     ...

Example for system-config.yaml

# This file contains OS-level settings.
# This file is optional. Unless your Metaswitch Customer Care Representative
# has recommended that you override some settings within this file,
# omit this file from the configuration bundle uploaded to CDS.

deployment-config:system:
  networking: {}

# To populate settings, remove the "{}" and fill in the appropriate keys and values.
# For example:
#
# deployment-config:system:
#   networking:
#     sctp:
#       hb-interval: 1000

Example for bsf-config.yaml

# This file contains the configuration for the BSF

deployment-config:bsf:
  # the Zh interface is between the BSF and the HSS only
  # It is a Diameter interface
  # the Destination realm and peers are configured in this file
  # As each Virtual Machine needs to have an origin host, the Zh origin host is present
  # in the MAG VM Pool file rather than this file.
  # I.e, each virtual machine is defined in the MAG VM pool file, with its own origin host
  zh-diameter:

    origin-realm: opencloud.com

    destination-realm: opencloud.com

    destination-peers:
      - destination-hostname: hss.opencloud.com
        port: 3868
        protocol-transport: aaa
        metric: 1

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  debug-logging-enabled: false

Example for naf-filter-config.yaml

# This file contains the configuration for the NAF
#nothing is mandatory as the defaults are always suitable

deployment-config:naf-filter:

  service-type: 0
  service-id: 0

  # By default the naf group is the empty string, but it can be set to something like nafgroup1
  naf-group: ""

  nonce-options:
    reuse-count: 500
    nonce-cassandra-keyspace: opencloud_nonce_info

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  debug-logging-enabled: false

Example for common-config.yaml

# This file contains configuration common to the deployment

deployment-config:common:

  # Platform operator name. Can contain letters, numbers, - and _.
  platform-operator-name: Metaswitch

Example for home-network-config.yaml

# This file contains configuration for the home network.

deployment-config:home-network:

  # Home domain.
  home-domain: metaswitch.com

  # Home network country dialing code.
  home-network-country-dialing-code: "64"

  # Two letter ISO country code for the home network.
  home-network-iso-country-code: NZ

  # Home PLMN IDs.
  home-plmn-ids:
    - mcc: "001"
      mncs:
        - "01"
        - "001"

Example for tsn-vmpool-config.yaml

# this file describes the pool of Virtual Machines that comprise a TSN Cluster
deployment-config:tsn-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vapp parameter
  site-id: DC1

  virtual-machines:
    - vm-id: example-tsn-1

    - vm-id: example-tsn-2

    - vm-id: example-tsn-3

Example for number-analysis-config.yaml

# This config is used for translating from the subscriber format.
# It is used in CDIV and XCAP.
deployment-config:number-analysis:
  normalization:
    # The international prefix of the home network.
    international-prefix: "00"
    # Any number shorter than this will not be normalized.
    min-normalizable-length: 0
    # The national prefix of the home network.
    national-prefix: "0"
    # The network dialing code of the home network.
    network-dialing-code: "6"
    # Whether to normalize to international or national format.
    normalize-to: international

  # When calling the following numbers, any call forwarding rules related to the call are ignored.
  non-provisionable-uris:
    - "tel:111"
    - "sip:111@example.com"

Example for sas-config.yaml

deployment-config:sas:

  # Whether SAS is enabled ('true') or disabled ('false')
  enabled: true

  # Parameters for connecting to SAS
  sas-connection:
    # List of SAS servers. Either IP addresses or DNS hostnames.
    # SAS servers can also be discovered from MDM, so if both this VM and SAS are connected
    # to MDM, these do not have to be specified.
    servers:
      - 10.10.10.10
      - 10.10.10.11

Example for shcm-service-config.yaml

# Service configuration for the Sh Cache Microservice
deployment-config:shcm-service:
  ##
  ## Diameter Sh Configuration
  ##
  diameter-sh:

    # The origin realm to use when sending messages.
    origin-realm: opencloud.com

    # The value to use as the destination realm.
    destination-realm: opencloud

    # The HSS destination peers.
    destination-peers:
      - destination-hostname: hss.opencloud.com
        port: 3868
        protocol-transport: aaa
        metric: 1


  # The user identity that is put in the diameter message to the HSS when a health check is performed
  health-check-user-identity: sip:shcm-health-check@example.com

  ##
  ## Advanced settings - don't change unless specifically instructed
  ## by a Metaswitch engineer
  ##

  # The request timeout (milliseconds) the Sh RA should use
  diameter-request-timeout-milliseconds: 5000

  ##
  ## Cassandra locking configuration
  ##
  cassandra-locking:

    # The time (in milliseconds) to wait before retrying to acquire the cassandra lock. Limited to 50-5000.
    backoff-time-milliseconds: 200

    # The number of times to retry to acquire the cassandra lock. Limited to 1-10.
    backoff-limit: 5

    # The time (in milliseconds) to hold the cassandra lock. Limited to 1000-30000.
    hold-time-milliseconds: 12000


  ##
  ## Caching strategy
  ## Every setting has both no-cache or simple-cache options, and for most settings
  ##   subscription-cache is also available.
  ##
  ##   no-cache:
  ##    The cache functionality will not be used; every read and write will
  ##    always query the HSS for the requested information. Subscription is
  ##    not applicable.
  ##   simple-cache:
  ##    Results from HSS queries will be cached. Updates will always write
  ##    through to the HSS. The cache will not receive updates from the HSS.
  ##   subscription-cache:
  ##    Results from HSS queries will be cached. Updates will always write
  ##    through to the HSS. ShCM will subscribe to data changes in the HSS and
  ##    cache entries will be updated if the data is modified in the HSS.
  ##
  ## Recommendation:
  ##   Don't change the default settings below.
  ##   However, some HSS's don't support subscriptions and for these simple-cache
  ##   should be used.
  ##
  ##   If a Cassandra database isn't available for caching then no-cache can be
  ##   used for test purposes.
  ##
  caching:

    ##
    ## Caching strategy: one of `no-cache, simple-cache, subscription-cache`
    ##
    service-indications:
      # Caching configuration for MMTel-Services
      - service-indication: mmtel-services
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for ims-odb-information
      - service-indication: ims-odb-information
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for opencloud-3rd-party-registrar
      - service-indication: opencloud-3rd-party-registrar
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for metaswitch-tas-services
      - service-indication: metaswitch-tas-services
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

    data-references-subscription-allowed:
      # Caching configuration for ims-public-identity
      - data-reference: ims-public-identity
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for s-cscfname
      - data-reference: s-cscfname
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for initial-filter-criteria
      - data-reference: initial-filter-criteria
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for service-level-trace-info
      - data-reference: service-level-trace-info
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for ip-address-secure-binding-information
      - data-reference: ip-address-secure-binding-information
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for service-priority-level
      - data-reference: service-priority-level
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400

      # Caching configuration for extended-priority
      - data-reference: extended-priority
        cache-strategy: subscription-cache
        cache-parameters:
          cache-validity-time-seconds: 86400


    ##
    ## Caching strategy: one of `no-cache, simple-cache`
    ##
    data-references-subscription-not-allowed:
      # Caching configuration for charging-information
      - data-reference: charging-information
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for msisdn
      - data-reference: msisdn
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for psi-activation
      - data-reference: psiactivation
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for dsai
      - data-reference: dsai
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for sms-registration-info
      - data-reference: sms-registration-info
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for tads-information
      - data-reference: tads-information
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for stn-sr
      - data-reference: stn-sr
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for ue-srvcc-capability
      - data-reference: ue-srvcc-capability
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for csrn
      - data-reference: csrn
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

      # Caching configuration for reference-location-information
      - data-reference: reference-location-information
        cache-strategy: simple-cache
        cache-parameters:
          cache-validity-time-seconds: 3600

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  debug-logging-enabled: false

Example for sentinel-volte-cdma-config.yaml

# This file contains the configuration for Sentinel VoLTE that is not already in a shared file.

deployment-config:sentinel-volte:

  # Whether session replication is enabled.
  session-replication-enabled: true

  # SCC configuration.
  scc:

    # Whether this deployment is 'gsm' or 'cdma'.
    scc-mobile-core-type: cdma

    # Whether to retrieve the MSISDN from 'MSISDN' or 'EXTENDED_MSISDN'.
    # If set to 'EXTENDED_MSISDN', udr-included-identities MUST be set to 'IMPU_AND_IMPI'.
    fetch-cmsisdn-source: MSISDN

    # Defines which IMS user identities to include in outgoing user data requests.
    # Can be either 'IMPU' or 'IMPU_AND_IMPI'.
    # Must be set to 'IMPU_AND_IMPI' if fetch-cmsisdn-source is set to 'EXTENDED_MSISDN'.
    udr-included-identities: IMPU_AND_IMPI

    # Service continuity configuration.
    # This configuration is irrelevant for CDMA, but it is still required to be present.
    service-continuity:

      # Time (in milliseconds) to wait before we consider the ATCF update has failed.
      atcf-update-timeout-milliseconds: 2000

      # STN-SR.
      stn-sr: "6421999999"

    # Service Centralisation configuration.
    service-centralisation:

      # The SCCP address of the Sentinel VoLTE AS.
      # Note that using this also requires setting 'sccp-variant: ANSI' in sgc-config.yaml.
      inbound-ss7-address: type=A7,ri=gt,ssn=146,tt=8,digits=987654,national=true

      # Add the I-CSCF to the route header of the reoriginated invite.
      use-direct-icscf-routing: true

      # A template string for the P-Visited-Network-Information header generated in the reorigination,
      # where {mnc} and {mcc} are replaced with the MNC and MCC respectively.
      # IR 65 versions 12 or earlier define this to be epc.ims.mnc{mnc}.mcc{mcc}.3gppnetwork.org,
      # while later versions define this as ims.mnc{mnc}.mcc{mcc}.3gppnetwork.org.
      generated-pvni-template: "epc.ims.mnc{mnc}.mcc{mcc}.3gppnetwork.org"

      # Police incoming originating requests, and reject attempts to hijack the call. Enabled by default.
      police-originating-requests: true

      # Simple IMRN pool config for mainline case.
      simple-imrn-pool:
        # The minimum correlation ID value used in the cluster. 0 to maximum-correlation-id.
        minimum-correlation-id: "0"

        # The maximum correlation ID value used in the cluster. 0 to (10^18-1).
        maximum-correlation-id: "999"

        # The number of digits the correlation ID should have.
        # Minimum of number of digits in maximum-correlation-id to 18 maximum.
        number-of-digits-in-correlation-id: 10

      # CDMA specific configuration.
      scc-cdma-service-centralisation:
        # CDMA actions to be taken.
        scc-cdma-actions:
          # Action to take when an unexpected trigger is received.
          action-on-unsupported-trigger: accessDeniedReason_terminationDenied

          # Action to take when there is a failure generating a routing number.
          action-on-failed-to-allocate-routing-number: accessDeniedReason_busy

          # Default action to take on error.
          default-failure-action: accessDeniedReason_serviceDenied

        # Config for IMRN formation.
        cdma-imrn-formation:
          # The type of digits field of the IMRN generated.
          imrn-type-of-digits: DIALED_OR_CALLED_PARTY_NUMBER

          # The nature field of the IMRN generated.
          imrn-nature-of-number: INTERNATIONAL

          # The numbering plan field of the IMRN generated.
          imrn-numbering-plan: TELEPHONY

        # If true, reorigination is skipped if the subscriber is not registered in the IMS network.
        bypass-forwarding-if-served-user-not-ims-registered: true

    # TADS configuration.
    tads:
      # (Optional) prefix to append to the CMSISDN, MSRN or TLDN when forming a CSRN.
      # csrn-prefix:

      # By default SCC TADS Routing uses the 'CMSISDN' from the HSS,
      # but it can also be configured to use the 'TLDN' from the HLR.
      # Valid values are 'CMSISDN' and 'TLDN'.
      address-source-for-scc-tads: TLDN

      # If true, the HSS must be queried for voice over PS support as part of
      # the decision to attempt to route via PS.
      voice-over-ps-support:
        # Specifies which identities will be used for the voice over PS support
        # request to the HSS.
        # One of 'IMPU', 'MSISDN', 'IMPU_IMPI' and 'MSISDN_IMPI'.
        request-user-identity-type: IMPU

      # Allow WLAN access.
      wlan-allowed: false

      # The identity of the terminating device that TADS will send the request to.
      # One of 'IMS_PUBLIC_IDENTITY', 'SIP_INSTANCE', and 'PATH_FROM_SIP_INSTANCE'
      tads-identity-for-terminating-device: IMS_PUBLIC_IDENTITY

      # The SIP response code that is returned when a session is ended due to an error.
      end-session-error-code: 480

      # When enabled INVITE requests destined for the CS network will be sent directly via
      # the I-CSCF, bypassing the S-CSCF.
      cs-routing-via-icscf: true

      # Configuration for TADS sequential routing
      on-sequential-routing:
        # Time to wait (in milliseconds) for a potentially better forked response.
        tads-timer-max-wait-milliseconds: 5000

        # List of SIP response codes that will trigger attempts of more routes after a PS attempt.
        ps-fallback-response-codes: []

      # Configuration for TADS parallel routing
      on-parallel-routing:
        # Time to wait (in milliseconds) for a final response.
        parallel-timer-max-wait-milliseconds: 20000

        # When enabled TADS will end all parallel forks on the first busy response (486).
        release-all-legs-on-busy: false

      # When present, requests destined to the CS domain will contain a Diversion header to
      # suppress call diversion in the CS domain side of the call.
#      suppress-cs-domain-call-diversion:
#
#        # When true, use diversion counter parameter, otherwise use number of headers.
#        use-diversion-counter-parameter: true
#
#        # The configured diversion limit in the CS network to suppress further call diversion.
#        cs-domain-diversion-limit: 1

  # Configuration for MMTel services.
  mmtel:

    announcement:

      # Media server URI, used when playing announcements
      # This is distinct from mrf-uri for Conferencing
      announcements-media-server-uri: sip:annc-audio@localhost:5260;lr;transport=tcp

      # Each announcement needs to be configured with the following:
      #   id - The announcement ID that is used to correlate between services and the
      #     announcement that will be played.
      #   description - A human readable string that indicates what the announcement is for.
      #   announcement-url - The URL to the file on the MRF that will be played.
      #   duration-milliseconds - The maximum duration of the announcement (in milliseconds).
      #   repeat - The number of times the announcement will be repeated.
      #   delay-milliseconds - The delay between repeated announcements (in milliseconds).
      #   mimetype - The MimeType of the announcement to be played.
      #   interruptable - Whether or not the announcement can be interrupt by user actions.
      #   end-session-on-failure - Whether or not the current session should be ended if there
      #     is an error while playing the announcement.
      #   enforce-one-way-media - Whether or not the media stream should be forced to be one
      #     way between the MRF and the user during the announcement.
      #   suspend-charging - Whether or not charging should be suspended while the
      #     announcement is being played.
      announcements:
        - id: 20
          description: "MMTel - Outgoing Call Barring"
          announcement-url: "file://mmtel_ocb.3gp"
          duration-milliseconds: 13000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 21
          description: "MMTel - Incoming Call Barring"
          announcement-url: "file://mmtel_icb.3gp"
          duration-milliseconds: 13000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 22
          description: "MMTel - Anonymous Call Rejection"
          announcement-url: "file://mmtel_acr.3gp"
          duration-milliseconds: 21000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 23
          description: "MMTel - Call Diversion"
          announcement-url: "file://mmtel_cdiv.3gp"
          duration-milliseconds: 5000
          repeat: 1
          delay-milliseconds: 0
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 24
          description: "MMTel - Call Waiting"
          announcement-url: "file://mmtel_cw.3gp"
          duration-milliseconds: 600000
          repeat: 500
          delay-milliseconds: 10000
          mimetype: "audio/3gpp"
          interruptable: true
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 25
          description: "MMTel - Call Hold (Hold)"
          announcement-url: "file://mmtel_hold_hold.3gp"
          duration-milliseconds: 10000
          repeat: 500
          delay-milliseconds: 10000
          mimetype: "audio/3gpp"
          interruptable: true
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 100
          description: "OCS - Low Balance"
          announcement-url: "file://charging_low.3gp"
          duration-milliseconds: 4000
          repeat: 1
          delay-milliseconds: 0
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 101
          description: "OCS - Insufficient Balance"
          announcement-url: "file://charging_insuf.3gp"
          duration-milliseconds: 13000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 102
          description: "OCS - Out Of Credit"
          announcement-url: "file://charging_out.3gp"
          duration-milliseconds: 9000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: true
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

      # Default error code announcement config.
      # Presence determines whether an announcement should be played to the calling party on receipt
      # of any error code not explicitly listed in the error-code-announcements configuration.
#      default-error-code-announcement:
#        # ID of the announcement to be played on an error response.
#        announcement-id: 22
#        # Whether the call should be ended with a 487 response rather than the error code that
#        # triggered this announcement.
#        end-call-with-487-response: false

      # Config for whether or not an announcement should be played to calling party on particular error codes
#      error-code-announcements:
#        # Each announcement is configured with the following:
#        #   error-code - The SIP error response code that should trigger this announcement.
#        #   announcement-id - The announcement ID that is to be used for this error code.
#        #     Cannot be specified when disable-announcement is set to true.
#        #   disable-announcement - Optional. If set to true, no announcement
#        #     will be played for the specified error code, overriding any default error
#        #     code announcement that may have been specified. If set to true, then
#        #     announcement-id must not be specified.
#        #   end-call-with-487-response - Once the announcement is finished should the call be
#        #     ended with a 487 response or the original error that triggered this announcement.
#        - error-code: 486
#          announcement-id: 24
#          end-call-with-487-response: false
#        - error-code: 488
#          announcement-id: 22
#          end-call-with-487-response: true
#        - error-code: 489
#          disable-announcement: true
#          end-call-with-487-response: true

    # Support for enabling or disabling specific HSS queries.
    hss-queries-enabled:

      # Whether to query for Operator Determined Barring Information (IMS-ODB-Information).
      odb: false

      # Whether to query for Metaswitch TAS Services (Metaswitch-TAS-Services).
      metaswitch-tas-services: false

    # Configuration for conferencing.
    conferencing:

      # The URI of the Media Resource Function used for Conferencing.
      # This is distinct from the media-server-uri used for Announcements
      # The hostname part should either be a resolvable name or the IP address of the MRF.
      conference-mrf-uri: sip:mrf@mrfhost.example:5060;transport=tcp

      # Should messages to the MRF be routed via the IMS, or are they allowed to be routed
      # direcectly from the TAS to MRF.
      route-to-mrf-via-ims: false

      # The MMTel Conference MSML Schema Vendor Name.
      # Used by the Conf feature to determine mapper selection
      # when creating MSML documents for interaction with the MRF.
      # 'Dialogic' or 'Radisys'.
      msml-vendor: Radisys

      # Whether to use the Re-INVITE based three-party conference flow.
      enable-scc-conf-handling: true

      # Decides whether the 'root' element will be a child of the 'selector' element,
      # otherwise will be a child of 'videolayout'
      root-on-selector: true

      # A list of conference factory PSIs to use in addition to the standard conference
      # factory PSIs, as per TS 23.003. They are as follows:
      # "sip:mmtel@conf-factory.<HOME-DOMAIN>"
      # "sip:mmtel@conf-factory.ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org"
      # "sip:mmtel@conf-factory.ics.mnc<MNC>.mcc<MCC>.3gppnetwork.org"
      conference-factory-psi-aliases: []

      # Maximum number of participants that are allowed in each conference call.
      maximum-participants: 3

      # Should video be allowed during conference calls
      allow-video-conference-calls: false

      # Delay (in milliseconds) after a conference ends before ConferenceView profiles are
      # removed.
      conference-view-removal-delay-milliseconds: 0

      # Conferencing event subscription configuration.
      subscription:
        # Value to be used if the SUBSCRIBE message doesn't contain an Expires header.
        default-subscription-expiry-seconds: 3600

        # SUBSCRIBE requests with an Expires value lower than this are rejected.
        min-subscription-expiry-seconds: 5

        # Frequency of polls for changes to conference view.
        polling-interval-seconds: 5

    # Configuration for determining international and roaming status
    international-and-roaming:

      # Treat non-international format numbers as national.
      non-international-format-number-is-national: false

      # End call if no visited network.
      end-call-if-no-visited-network: false

      # Minimum length of destination address to set international
      # and roaming status for. Destination addresses less than this
      # length will not have international or roaming status set.
      min-length: 0

    # Configuration for analysing numbers according to the North American Numbering Plan.
    north-american-numbering-plan-analysis:
      # Whether to analyse numbers according to the North American Numbering Plan, using
      # this to determine location information.
      enable-nanp-analysis: false

    # Configuration for barring and announcements of calls determined to be international
    international-call-management:

      # The default handling of calls determined to be international
      default-international-call-management:
        # Whether calls dialed without the international prefix are barred.
        bar-calls-with-missing-prefix: false

        # The ID of the announcement to play when calls dialed without the international
        # prefix are barred.
#       bar-calls-with-missing-prefix-announcement-id: 102

        # The ID of the announcement to play to the calling party when an international
        # call is made.
#       international-call-announcement-id: 101

      # The configuration of international NANP calls by destination
      # country. Only available if North American Numbering Plan
      # analysis is enabled.
#      call-management-by-country-code:
         # The determined ISO country code of the called party if within the NANP.
#        - iso-country-code: "CA"

           # Whether to bar calls to this destination that were dialled without an international prefix
#          bar-calls-with-missing-prefix: true

           # The ID of the announcement to play if calls to this destination were barred
#          bar-calls-with-missing-prefix-announcement-id: 102

           # The ID of the announcement to play to the caller before international calls to this
           # destination are connected
#          international-call-announcement-id: 102

    # Configuration for the communication hold feature.
    communication-hold:
      # Parameters for Hold response processing. If one is specified, then all should be.
      # Their presence indicates bandwidth should be adjusted when a session is Held and Resumed.
      # Default values taken from 3GPP TS 24.610 Rel 12.6.0 section 4.5.2.4.
      bandwidth-adjustment:
        # The value of the "b=AS:" parameter to use when processing a Hold response.
        b-as-parameter: 0

        # The value of the "b=RR:" parameter to use when processing a Hold response.
        b-rr-parameter: 800

        # The value of the "b=RS:" parameter to use when processing a Hold response.
        b-rs-parameter: 800

      # Should an announcement be played when a session is held.
      announcement:
        # The announcement to be played when a session is held.
        announcement-id: 25

      # Determines how media streams for the holding party are handled while an announcement
      # to the held party is in progress. Can be set to NO_HOLD, BLACK_HOLE_ONLY, or FULL_HOLD.
      holding-party-media-mode: NO_HOLD


    # Configuration for the communication waiting feature.
    communication-waiting:
      # Should an announcement be played to a calling user when communication waiting is
      # applied.
      announcement:
        # The announcement to be played when communication waiting is applied.
        announcement-id: 24

      # Time (in seconds) for the communication waiting timer.
      timer-seconds: 0

    # Configuration for privacy features.
    privacy:
      # Configuration for the Originating Identification Presentation (OIP) feature.
      originating-identification-presentation:
        # When set to true, the from header of the originating INVITE will be
        # anonymized if the OIP feature is not active for the subscriber.
        #
        # If set to 'true', this typically means that:
        # - OIP is authorized for the large majority of subscribers, and that;
        # - The OIP active flag is either not present in the subscriber's data
        #   (therefore defaulting to true), or the OIP flag is present in the
        #   subscriber's data (typically set to true).
        # - This also implies that the OIR user-policy is set to 'None'.
        #
        # If set to 'false', this typically means that:
        # - OIP is not 'active' or 'authorized' yet the operator desires the
        #   called party to see the calling party.
        # - This implies that the OIR user-policy would be set to
        #   ANONYMIZE_FROM or ADD_USER_PRIVACY.
        anonymize-from-header: true

        # If true, allows History-Info header deletion.
        allow-history-info-header-deletion: false

      # Configuration for the Originating Identification Restriction (OIR) feature.
      originating-identification-restriction:
        # Can be one of two values: ONLY_IDENTITY, and ALL_PRIVATE_INFORMATION.
        # Use of ONLY_IDENTITY means the Privacy header is set to Privacy:id.
        # Use of ALL_PRIVATE_INFORMATION means the Privacy header is set to Privacy:header.
        presentation-restriction-type: ALL_PRIVATE_INFORMATION

        # The user policy for OIR. Must be one of NONE, ANONYMIZE_FROM, and ADD_USER_PRIVACY.
        user-policy: NONE

    # Configuration for PSAP callback functionality.
    psap-callback:
      # Use the contents of the Priority header in the initial INVITE
      # to determine whether the session is a PSAP callback.
      use-priority-header: false

      # Configuration for the SIP MESSAGE mechanism for determining PSAP callbacks.
      # Presence determines whether the mechanism is used or not.
      sip-message-options:
        # For use when use-sip-message is set to true.
        # When a SIP MESSAGE notifying that a PSAP call has taken place, this is the time
        # (in seconds) after receiving that MESSAGE that sessions for the identified user are
        # assumed to be a PSAP callback.
        expiry-time-seconds: 86400

        # For use when use-sip-message is set to true.
        # If set to true, SIP MESSAGEs notifying a PSAP call will be terminated at the MMTel,
        # otherwise they are propagated through the network.
        terminate-message: true

    # Configuration for call diversion (CDIV)
    call-diversion:

      # Play announcement on diversion.
      announcement:
        announcement-id: 23
#        voicemail-announcement-id: 23

      # Standard MMTel call diversion configuration
      mmtel-call-diversion:

        # Maximum number of diversions that may be made while
        # attempting to establish a session.
        max-diversions: 20

        # Action to take when the maximum number of diversions is exceeded.
        max-diversion-action: REJECT

        # Address to divert to when max-diversions limit is reached and
        # max-diversion-action is set to DELIVER_TO_FIXED_DESTINATION.
#        max-diversion-fixed-destination: sip:no-reply@example.com

        # Time to wait (in seconds) for a reply before diverting due to a no reply rule.
        # This value is the network default, and can be overridden in subscriber data.
        no-reply-timeout-seconds: 20

        # Whether to add orig tag when diverting a call.
        add-orig-tag: true

        # URIs allowed to be re-targeted to in case of max-diversions limit being reached.
#        diversion-limit-exempt-uris:
#          - sip:user@example.com

        # Whether diversion should be suppressed if call terminates in CS domain.
        suppress-for-cs-terminating-domain: false

        # Whether subscriber configuration should take precedence over operator
        # configuration.
        prefer-subscriber: false

        # Address to forward to if operator or subscriber forward-to rule has no target
        # specified.
#        default-target-uri: sip:user@example.com

        # Additional response codes that will trigger CDIV Not-Reachable (in addition to
        # those outlined in the MMTel CDIV specification).
#        additional-not-reachable-status-codes:
#          - 488

        # Whether to allow CDIV rules with not-reachable conditions to be triggered after
        # a 180 response has been received from the called-party.
        allow-not-reachable-during-alerting: false

        # Whether to add 'hi-target-param' of type 'mp' to the 'hi-entry' added by a
        # diversion.
        add-mp-param: false

      # Configuration for forwarding to a voicemail server
      # If present, enables forwarding to subscriber's voicemail server if all other
      # connection attempts fail.
#      forward-to-voicemail:
#
#        # URIs of voicemail servers for which a voicemail-specific announcement may be
#        # played (if specified) and for which forwarding to without allocated credit
#        # can be allowed (if enabled).
#        voicemail-uris:
#          - sip:vms1@example.com
#          - sip:vms2@example.com
#
#        # Time to wait (in seconds) for a call to be successfully connected before
#        # forwarding to voicemail (if enabled) or 0 to disable timer.
#        forward-to-voicemail-timeout-seconds: 0
#
#        # When to allow forwarding to voicemail when out of credit.
#        # Only applies when using 'ro' for online charging
#        forward-to-voicemail-without-ocs-credit: NEVER_ALLOW

    # Configuration for communication barring
    communication-barring:

      # Configuration for incoming communication barring
      incoming-communication-barring:

        # Should an announcement be played when an incoming call is barred.
        announcement:
          # The announcement to be played when an incoming call is barred.
          announcement-id: 21

          # (Optional) A different announcement can be played if the call is barred
          # because it is from an anonymous user.
          anonymous-call-rejection-announcement-id: 22

        # If false, incoming call barring will ignore International and International-exHC
        # rules. This is because it is not possible to accurately determine whether the
        # calling party is international in all circumstances.
        international-rules-active: false

#     # Configuration for outgoing communication barring
#     outgoing-communication-barring:
#
#       # Should an announcement be played when an outgoing call is barred.
#       announcement:
#
#         # The announcement to be played when an outgoing call is barred.
#         announcement-id: 20

      # Configuration for operator communication barring
#      operator-communication-barring:
        # The set of operator barring rules that can be applied.
        # (Optional) Only required if '../hss-queries-enabled/odb' is 'true'.
#        operator-barring-rules:
#
#          # Operator barring rule for 'Type1'
#          type1:
#
#            # The barring rule to be applied
#            rule: # Bar domain "example.com"
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="blacklist-domain">
#                  <cp:conditions>
#                    <cp:identity>
#                      <many domain="example.com" />
#                    </cp:identity>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>false</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false
#
#          # Operator barring rule for 'Type2'
#          type2:
#
#            # The barring rule to be applied
#            rule: # Bar international calls
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="bar-international">
#                  <cp:conditions>
#                    <international/>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>false</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false
#
#          # Operator barring rule for 'Type3'
#          type3:
#
#            # The barring rule to be applied
#            rule: # Bar roaming calls
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="bar-roaming">
#                  <cp:conditions>
#                    <roaming/>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>false</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false
#
#          # Operator barring rule for 'Type4'
#          type4:
#
#            # The barring rule to be applied
#            rule: # Allow audio calls
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="allow-audio">
#                  <cp:conditions>
#                    <media>audio</media>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>true</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false

        # Outgoing prefix barring configuration
#        outgoing-prefix-barring:
#
#          # The list of prefixes to match against when doing prefix barring
#          prefixes:
#
#            # The prefix barring rule for prefix '87'
#            - prefix: '87'
#              # List of the classifications to apply when the above prefix is matched.
#              # Must refer to the name of a defined classification.
#              classifications:
#                - 'Operator Bar'
#
#          # The list of classifications that can be applied to a prefix match
#          classifications:
#
#            # A barring configuration called 'Operator Bar'.
#            - name: 'Operator Bar'
#
#              # The minimum length of dialled digits to match against
#              minimum-number-length: 5
#
#              # The maximum length of dialled digits to match against
#              maximum-number-length: 8
#
#              # When true, the normalized number must be international and not
#              # within the Home Country Code to match this classification.
#              match-international: false
#
#              # The barring treatment to apply if this condition matches.
#              # Valid values are: 'OSBType1', 'OSBType2', 'OSBType3', 'OSBType4',
#              # 'OperatorAllow', 'OperatorBar', 'PremiumRateInformation',
#              # and 'PremiumRateEntertainment'.
#              barring-treatment: 'OperatorBar'
#
#              # Disables the outgoing-call-barring (OCB) announcement.
#              # Cannot be specified alongside a prefix barring announcement.
#              #disable-ocb-announcement: true
#
#              # Should a different announcement be used rather than the one
#              # from 'outgoing-communication-barring/announcement'
#              announcement:
#
#                # The announcement ID to use instead of the one from
#                # `outgoing-communication-barring/announcement/announcement-id`
#                announcement-id: 20

    # Configuration for Vertical Service Codes
    vertical-service-codes:
      # Configuration for Vertical Service Codes XCAP Data Update feature
      xcap-data-update:
        # Internally-accessible hostname of the XCAP server.
        host: xcap.internal.example

        # SIP status code to respond with following a successful HTTP response.
        success-response-status-code: 603

        # SIP status code to respond with following an unsuccessful HTTP response.
        failure-response-status-code: 409

        # Whether an announcement should be played on failure.
#        failure-announcement:
#          # ID of the announcement to play on failure.
#          announcement-id: 23

  # Configuration for the SIS.
  sis:

    # RFC3263 unavailable peer list timer (milliseconds).
    unavailable-peer-list-timer-milliseconds: "60000"

    # RFC3263 failover timer (milliseconds).
    failover-timer-milliseconds: "4000"

  # Origin configuration for this application when connecting to the HLR.
  # The actual HLR SCCP address (destination) is in the hlr-configuration.yaml file
  # Uncomment this section if using the TLDN for SCC TADS Routing
  hlr-connectivity-origin:

    # The SCCP address of the Sentinel VoLTE AS.
    originating-address: type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true

    # The timeout value for opening the MAP dialog with the HLR (in milliseconds).
    map-invoke-timeout-milliseconds: 5000

    # CDMA specific configuration.
    cdma:
      # The market ID value to be used in the MSCID set on outgoing CDMA requests to the HLR
      market-id: 1

      # The switch number value to be used in the MSCID set on outgoing CDMA requests to the HLR
      switch-number: 1

  # Charging configuration
  charging:

    # Whether to enable online charging
    # If disabled, then you must also remove or comment out the ro-charging section below.
    cdma-online-charging-enabled: true

    # When not using Diameter Ro, comment out the contents of this file down to the <<<< END ro-charging
    # Also you must remove the lines from mmt-gsm-vmpool-config.yaml
    ro-charging:

      diameter-ro:

        # The Diameter Ro release to use.
        diameter-ro-release: Vcb0

        # The origin realm to use when sending messages.
        origin-realm: metaswitch.com

        # The value to use as the destination realm.
        destination-realms:
          - destination-realm: metaswitch.com
            peers:
              - peer.metaswitch.com

        # The Diameter Ro destination peers.
        destination-peers:
          - destination-hostname: peer.metaswitch.com
            port: 3868
            protocol-transport: aaa
            metric: 1

        # Whether the session is permitted to continue if there is an OCS failure.
        continue-session-on-ocs-failure: false

      charging-announcements:

        # Config for low balance announcements
        low-credit-announcements:

          # Low balance announcement ID to be used during call setup.
          call-setup-announcement-id: 100

          # Low balance announcement ID to be used after call setup.
          mid-call-announcement-id: 100

          # The delay (in milliseconds) before a another credit check should happen after a
          # low balance announcement has occurred.
          charging-reauth-delay-milliseconds: 30000

        # Config for out of credit announcements.
        out-of-credit-announcements:

          # Out of credit announcement ID to be used during call setup.
          call-setup-announcement-id: 101

          # Out of credit announcement ID to be used after call setup.
          mid-call-announcement-id: 102
# <<<< END ro-charging

    # Whether to enable connections to Diameter Rf peer through the Diameter Rf Control RA.
    # If present, Rf is enabled. Comment out to disable Rf.
    # When not using Diameter Rf, comment out the contents of this file down to the <<<< END rf-charging
    # Also you must remove the lines from mmt-gsm-vmpool-config.yaml
#    rf-charging:
#
#      diameter-rf:
#
#        # The Diameter Rf release to use.
#        diameter-rf-release: Vcb0
#
#        # The origin realm to use when sending messages.
#        origin-realm: metaswitch.com
#
#        # The value to use as the destination realm.
#        destination-realm: metaswitch.com
#
#        # The Diameter Rf destination peers.
#        destination-peers:
#          -   destination-hostname: peer.metaswitch.com
#            port: 3868
#            protocol-transport: sctp
#            metric: 1
# <<<< END rf-charging

    # Configuration for CDRs
    cdr:
      # If present, interim CDRs are enabled. If Diameter Rf has been enabled, this is required.
      interim-cdrs:
        # Enable CDRs to go to the local filesystem
        # Diameter Rf is selected separately
        write-cdrs-in-filesystem: true

        # Indicates whether or not to write CDRs on SDP changes.
        write-cdr-on-sdp-change: true

        # The maximum duration (in seconds) between timer driven interim CDRs.
        # Setting this to zero will disable timer based interim CDRs.
        interim-cdrs-period-seconds: 300

      # Enable session CDRs.
      session-cdrs-enabled: true

  # Configuration for the Session Refresh feature.
  session-refresh:
    # The interval of the periodic timer (in seconds).
    timer-interval-seconds: 30

    # Period of no activity for leg tp refresh (in seconds).
    refresh-period-seconds: 570

    # Whether the session should be refreshed using UPDATE requests,
    # as long as the endpoint allows UPDATE requests.
    refresh-with-update-if-allowed: true

    # Maximum allowed duration of a call (in seconds).
    max-call-duration-seconds: 86400

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  debug-logging-enabled: false

Example for sentinel-volte-gsm-config.yaml

# This file contains the configuration for Sentinel VoLTE that is not already in a shared file.

deployment-config:sentinel-volte:

  # Whether session replication is enabled.
  session-replication-enabled: true

  # SCC configuration.
  scc:

    # Whether this deployment is 'gsm' or 'cdma'.
    scc-mobile-core-type: gsm

    # Whether to retrieve the MSISDN from 'MSISDN' or 'EXTENDED_MSISDN'.
    # If set to 'EXTENDED_MSISDN', udr-included-identities MUST be set to 'IMPU_AND_IMPI'.
    fetch-cmsisdn-source: MSISDN

    # Defines which IMS user identities to include in outgoing user data requests.
    # Can be either 'IMPU' or 'IMPU_AND_IMPI'.
    # Must be set to 'IMPU_AND_IMPI' if fetch-cmsisdn-source is set to 'EXTENDED_MSISDN'.
    udr-included-identities: IMPU_AND_IMPI

    # Service continuity configuration.
    service-continuity:

      # Time (in milliseconds) to wait before we consider the ATCF update has failed.
      atcf-update-timeout-milliseconds: 2000

      # STN-SR.
      stn-sr: "6421999999"

    # Service Centralisation configuration.
    service-centralisation:

      # The SCCP address of the Sentinel VoLTE AS.
      inbound-ss7-address: type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0,digits=123456,national=false

      # Add the I-CSCF to the route header of the reoriginated invite.
      use-direct-icscf-routing: true

      # A template string for the P-Visited-Network-Information header generated in the reorigination,
      # where {mnc} and {mcc} are replaced with the MNC and MCC respectively.
      # IR 65 versions 12 or earlier define this to be epc.ims.mnc{mnc}.mcc{mcc}.3gppnetwork.org,
      # while later versions define this as ims.mnc{mnc}.mcc{mcc}.3gppnetwork.org.
      generated-pvni-template: "epc.ims.mnc{mnc}.mcc{mcc}.3gppnetwork.org"

      # Police incoming originating requests, and reject attempts to hijack the call. Enabled by default.
      police-originating-requests: true

      # Simple IMRN pool config for mainline case.
      simple-imrn-pool:
        # The minimum correlation ID value used in the cluster. 0 to maximum-correlation-id.
        minimum-correlation-id: "0"

        # The maximum correlation ID value used in the cluster. 0 to (10^18-1).
        maximum-correlation-id: "999"

        # The number of digits the correlation ID should have.
        # Minimum of number of digits in maximum-correlation-id to 18 maximum.
        number-of-digits-in-correlation-id: 10

      # GSM specific configuration.
      scc-gsm-service-centralisation:
        # Config for IMRN formation.
        gsm-imrn-formation:
          # Whether routing to an internal network number is allowed or not.
          routing-to-internal-network-number-allowed: true

          # The type of call, with several possible values. Used when forwarding a call.
          nature: NATIONAL

          # The numbering plan to be used when forwarding a call.
          numbering-plan: ISDN

        # If true, reorigination is skipped for terminating sessions if the subscriber
        # is not registered in the IMS network.
        bypass-terminating-forwarding-if-served-user-not-ims-registered: true

        # If true, roaming terminating sessions will always be reoriginated (regardless
        # of ims registration)
        always-term-reoriginate-if-served-user-is-roaming: false

    # TADS configuration.
    tads:
      # (Optional) prefix to append to the CMSISDN, MSRN or TLDN when forming a CSRN.
      # csrn-prefix:

      # By default SCC TADS Routing uses the 'CMSISDN' from the HSS,
      # but it can also be configured to use the 'MSRN' from the HLR.
      # Valid values are 'CMSISDN' and 'MSRN'.
      address-source-for-scc-tads: CMSISDN

      # If true, the HSS must be queried for voice over PS support as part of
      # the decision to attempt to route via PS.
      voice-over-ps-support:
        # Specifies which identities will be used for the voice over PS support
        # request to the HSS.
        # One of 'IMPU', 'MSISDN', 'IMPU_IMPI' and 'MSISDN_IMPI'.
        request-user-identity-type: IMPU

      # Allow WLAN access.
      wlan-allowed: false

      # The identity of the terminating device that TADS will send the request to.
      # One of 'IMS_PUBLIC_IDENTITY', 'SIP_INSTANCE', and 'PATH_FROM_SIP_INSTANCE'
      tads-identity-for-terminating-device: IMS_PUBLIC_IDENTITY

      # The SIP response code that is returned when a session is ended due to an error.
      end-session-error-code: 480

      # When enabled INVITE requests destined for the CS network will be sent directly via
      # the I-CSCF, bypassing the S-CSCF.
      cs-routing-via-icscf: true

      # Configuration for TADS sequential routing
      on-sequential-routing:
        # Time to wait (in milliseconds) for a potentially better forked response.
        tads-timer-max-wait-milliseconds: 5000

        # List of SIP response codes that will trigger attempts of more routes after a PS attempt.
        ps-fallback-response-codes: []

      # Configuration for TADS parallel routing
      on-parallel-routing:
        # Time to wait (in milliseconds) for a final response.
        parallel-timer-max-wait-milliseconds: 20000

        # When enabled TADS will end all parallel forks on the first busy response (486).
        release-all-legs-on-busy: false

      # Configuration for SRI requests sent to the HLR
      sri-requests-to-hlr:
        # If enabled, when sending an SRI request to the HLR the feature will set the suppress T-CSI flag on the request
        set-suppress-tcsi-flag: false

        # If enabled, when sending an SRI request to the HLR on a terminating call the feature
        # will set the 'Suppression of Announcement' flag on the request.
        set-suppress-announcement-flag: false

      # When present, requests destined to the CS domain will contain a Diversion header to
      # suppress call diversion in the CS domain side of the call.
#      suppress-cs-domain-call-diversion:
#
#        # When true, use diversion counter parameter, otherwise use number of headers.
#        use-diversion-counter-parameter: true
#
#        # The configured diversion limit in the CS network to suppress further call diversion.
#        cs-domain-diversion-limit: 1

  # Configuration for MMTel services.
  mmtel:

    announcement:

      # Media server URI, used when playing announcements
      # This is distinct from mrf-uri for Conferencing
      announcements-media-server-uri: sip:annc-audio@localhost:5260;lr;transport=tcp

      # Each announcement needs to be configured with the following:
      #   id - The announcement ID that is used to correlate between services and the
      #     announcement that will be played.
      #   description - A human readable string that indicates what the announcement is for.
      #   announcement-url - The URL to the file on the MRF that will be played.
      #   duration-milliseconds - The maximum duration (in milliseconds) of the announcement.
      #   repeat - The number of times the announcement will be repeated.
      #   delay-milliseconds - The delay (in milliseconds) between repeated announcements.
      #   mimetype - The MimeType of the announcement to be played.
      #   interruptable - Whether or not the announcement can be interrupt by user actions.
      #   end-session-on-failure - Whether or not the current session should be ended if there
      #     is an error while playing the announcement.
      #   enforce-one-way-media - Whether or not the media stream should be forced to be one
      #     way between the MRF and the user during the announcement.
      #   suspend-charging - Whether or not charging should be suspended while the
      #     announcement is being played.
      announcements:
        - id: 20
          description: "MMTel - Outgoing Call Barring"
          announcement-url: "file://mmtel_ocb.3gp"
          duration-milliseconds: 13000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 21
          description: "MMTel - Incoming Call Barring"
          announcement-url: "file://mmtel_icb.3gp"
          duration-milliseconds: 13000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 22
          description: "MMTel - Anonymous Call Rejection"
          announcement-url: "file://mmtel_acr.3gp"
          duration-milliseconds: 21000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 23
          description: "MMTel - Call Diversion"
          announcement-url: "file://mmtel_cdiv.3gp"
          duration-milliseconds: 5000
          repeat: 1
          delay-milliseconds: 0
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 24
          description: "MMTel - Call Waiting"
          announcement-url: "file://mmtel_cw.3gp"
          duration-milliseconds: 600000
          repeat: 500
          delay-milliseconds: 10000
          mimetype: "audio/3gpp"
          interruptable: true
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 25
          description: "MMTel - Call Hold (Hold)"
          announcement-url: "file://mmtel_hold_hold.3gp"
          duration-milliseconds: 10000
          repeat: 500
          delay-milliseconds: 10000
          mimetype: "audio/3gpp"
          interruptable: true
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 100
          description: "OCS - Low Balance"
          announcement-url: "file://charging_low.3gp"
          duration-milliseconds: 4000
          repeat: 1
          delay-milliseconds: 0
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 101
          description: "OCS - Insufficient Balance"
          announcement-url: "file://charging_insuf.3gp"
          duration-milliseconds: 13000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: false
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

        - id: 102
          description: "OCS - Out Of Credit"
          announcement-url: "file://charging_out.3gp"
          duration-milliseconds: 9000
          repeat: 2
          delay-milliseconds: 1000
          mimetype: "audio/3gpp"
          interruptable: true
          end-session-on-failure: false
          enforce-one-way-media: false
          suspend-charging: false

      # Default error code announcement config.
      # Presence determines whether an announcement should be played to the calling party on receipt
      # of any error code not explicitly listed in the error-code-announcements configuration.
#      default-error-code-announcement:
#        # ID of the announcement to be played on an error response.
#        announcement-id: 22
#        # Whether the call should be ended with a 487 response rather than the error code that
#        # triggered this announcement.
#        end-call-with-487-response: false

      # Config for whether or not an announcement should be played to calling party on particular error codes
#      error-code-announcements:
#        # Each announcement is configured with the following:
#        #   error-code - The SIP error response code that should trigger this announcement.
#        #   announcement-id - The announcement ID that is to be used for this error code.
#        #     Cannot be specified when disable-announcement is set to true.
#        #   disable-announcement - Optional. If set to true, no announcement
#        #     will be played for the specified error code, overriding any default error
#        #     code announcement that may have been specified. If set to true, then
#        #     announcement-id must not be specified.
#        #   end-call-with-487-response - Once the announcement is finished should the call be
#        #     ended with a 487 response or the original error that triggered this announcement.
#        - error-code: 486
#          announcement-id: 24
#          end-call-with-487-response: false
#        - error-code: 488
#          announcement-id: 22
#          end-call-with-487-response: true
#        - error-code: 489
#          disable-announcement: true
#          end-call-with-487-response: true

    # Support for enabling or disabling specific HSS queries.
    hss-queries-enabled:

      # Whether to query for Operator Determined Barring Information (IMS-ODB-Information).
      odb: false

      # Whether to query for Metaswitch TAS Services (Metaswitch-TAS-Services).
      metaswitch-tas-services: false

    # When the roaming status is unknown the HLR can be used to try to determine the roaming status
    # of a subscriber by sending an ATI query to it.
    determine-roaming-from-hlr: true

    # Configuration for conferencing.
    conferencing:

      # The URI of the Media Resource Function used for Conferencing.
      # This is distinct from the media-server-uri used for Announcements
      # The hostname part should either be a resolvable name or the IP address of the MRF.
      conference-mrf-uri: sip:mrf@mrfhost.example:5060;transport=tcp

      # Should messages to the MRF be routed via the IMS, or are they allowed to be routed
      # direcectly from the TAS to MRF.
      route-to-mrf-via-ims: false

      # The MMTel Conference MSML Schema Vendor Name.
      # Used by the Conf feature to determine mapper selection
      # when creating MSML documents for interaction with the MRF.
      # 'Dialogic' or 'Radisys'.
      msml-vendor: Radisys

      # Whether to use the Re-INVITE based three-party conference flow.
      enable-scc-conf-handling: true

      # Decides whether the 'root' element will be a child of the 'selector' element,
      # otherwise will be a child of 'videolayout'
      root-on-selector: true

      # A list of conference factory PSIs to use in addition to the standard conference
      # factory PSIs, as per TS 23.003. They are as follows:
      # "sip:mmtel@conf-factory.<HOME-DOMAIN>"
      # "sip:mmtel@conf-factory.ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org"
      # "sip:mmtel@conf-factory.ics.mnc<MNC>.mcc<MCC>.3gppnetwork.org"
      conference-factory-psi-aliases: []

      # Maximum number of participants that are allowed in each conference call.
      maximum-participants: 3

      # Should video be allowed during conference calls
      allow-video-conference-calls: false

      # Delay (in milliseconds) after a conference ends before ConferenceView profiles are
      # removed.
      conference-view-removal-delay-milliseconds: 0

      # Conferencing event subscription configuration.
      subscription:
        # Value to be used if the SUBSCRIBE message doesn't contain an Expires header.
        default-subscription-expiry-seconds: 3600

        # SUBSCRIBE requests with an Expires value lower than this are rejected.
        min-subscription-expiry-seconds: 5

        # Frequency of polls for changes to conference view.
        polling-interval-seconds: 5

    # Configuration for determining international and roaming status
    international-and-roaming:

      # Treat non-international format numbers as national.
      non-international-format-number-is-national: false

      # End call if no visited network.
      end-call-if-no-visited-network: false

      # Use different configuration for each access network MCC.
      # Set to false to use the default configuration.
      use-mcc-specific: false

      # Minimum length of destination address to set international
      # and roaming status for. Destination addresses less than this
      # length will not have international or roaming status set.
      min-length: 0

    # Configuration for analysing numbers according to the North American Numbering Plan.
    north-american-numbering-plan-analysis:
      # Whether to analyse numbers according to the North American Numbering Plan, using
      # this to determine location information.
      enable-nanp-analysis: false

    # Configuration for barring and announcements of calls determined to be international
    international-call-management:

      # The default handling of calls determined to be international
      default-international-call-management:
        # Whether calls dialed without the international prefix are barred.
        bar-calls-with-missing-prefix: false

        # The ID of the announcement to play when calls dialed without the international
        # prefix are barred.
#       bar-calls-with-missing-prefix-announcement-id: 102

        # The ID of the announcement to play to the calling party when an international
        # call is made.
#       international-call-announcement-id: 101

       # The configuration of international NANP calls by destination
       # country. Only available if North American Numbering Plan
       # analysis is enabled.
#      call-management-by-country-code:
         # The determined ISO country code of the called party if within the NANP.
#        - iso-country-code: "CA"

           # Whether to bar calls to this destination that were dialled without an international prefix
#          bar-calls-with-missing-prefix: true

           # The ID of the announcement to play if calls to this destination were barred
#          bar-calls-with-missing-prefix-announcement-id: 102

           # The ID of the announcement to play to the caller before international calls to this
           # destination are connected
#          international-call-announcement-id: 102

    # Configuration for the communication hold feature.
    communication-hold:
      # Parameters for Hold response processing. If one is specified, then all should be.
      # Their presence indicates bandwidth should be adjusted when a session is Held and Resumed.
      # Default values taken from 3GPP TS 24.610 Rel 12.6.0 section 4.5.2.4.
      bandwidth-adjustment:
        # The value of the "b=AS:" parameter to use when processing a Hold response.
        b-as-parameter: 0

        # The value of the "b=RR:" parameter to use when processing a Hold response.
        b-rr-parameter: 800

        # The value of the "b=RS:" parameter to use when processing a Hold response.
        b-rs-parameter: 800

      # Should an announcement be played when a session is held.
      announcement:
        # The announcement to be played when a session is held.
        announcement-id: 25

      # Determines how media streams for the holding party are handled while an announcement
      # to the held party is in progress. Can be set to NO_HOLD, BLACK_HOLE_ONLY, or FULL_HOLD.
      holding-party-media-mode: NO_HOLD


    # Configuration for the communication waiting feature.
    communication-waiting:
      # Should an announcement be played to a calling user when communication waiting is
      # applied.
      announcement:
        # The announcement to be played when communication waiting is applied.
        announcement-id: 24

      # Time (in seconds) for the communication waiting timer.
      timer-seconds: 0

    # Configuration for privacy features.
    privacy:
      # Configuration for the Originating Identification Presentation (OIP) feature.
      originating-identification-presentation:
        # When set to true, the from header of the originating INVITE will be
        # anonymized if the OIP feature is not active for the subscriber.
        #
        # If set to 'true', this typically means that:
        # - OIP is authorized for the large majority of subscribers, and that;
        # - The OIP active flag is either not present in the subscriber's data
        #   (therefore defaulting to true), or the OIP flag is present in the
        #   subscriber's data (typically set to true).
        # - This also implies that the OIR user-policy is set to 'None'.
        #
        # If set to 'false', this typically means that:
        # - OIP is not 'active' or 'authorized' yet the operator desires the
        #   called party to see the calling party.
        # - This implies that the OIR user-policy would be set to
        #   ANONYMIZE_FROM or ADD_USER_PRIVACY.
        anonymize-from-header: true

        # If true, allows History-Info header deletion.
        allow-history-info-header-deletion: false

      # Configuration for the Originating Identification Restriction (OIR) feature.
      originating-identification-restriction:
        # Can be one of two values: ONLY_IDENTITY, and ALL_PRIVATE_INFORMATION.
        # Use of ONLY_IDENTITY means the Privacy header is set to Privacy:id.
        # Use of ALL_PRIVATE_INFORMATION means the Privacy header is set to Privacy:header.
        presentation-restriction-type: ALL_PRIVATE_INFORMATION

        # The user policy for OIR. Must be one of NONE, ANONYMIZE_FROM, and ADD_USER_PRIVACY.
        user-policy: NONE

    # Configuration for PSAP callback functionality.
    psap-callback:
      # Use the contents of the Priority header in the initial INVITE
      # to determine whether the session is a PSAP callback.
      use-priority-header: false

      # Configuration for the SIP MESSAGE mechanism for determining PSAP callbacks.
      # Presence determines whether the mechanism is used or not.
      sip-message-options:
        # For use when use-sip-message is set to true.
        # When a SIP MESSAGE notifying that a PSAP call has taken place, this is the time
        # (in seconds) after receiving that MESSAGE that sessions for the identified user are
        # assumed to be a PSAP callback.
        expiry-time-seconds: 86400

        # For use when use-sip-message is set to true.
        # If set to true, SIP MESSAGEs notifying a PSAP call will be terminated at the MMTel,
        # otherwise they are propagated through the network.
        terminate-message: true

    # Configuration for call diversion (CDIV)
    call-diversion:

      # Play announcement on diversion.
      announcement:
        announcement-id: 23
#        voicemail-announcement-id: 23

      # Standard MMTel call diversion configuration
      mmtel-call-diversion:

        # Maximum number of diversions that may be made while
        # attempting to establish a session.
        max-diversions: 20

        # Action to take when the maximum number of diversions is exceeded.
        # Must be one of:
        #   REJECT, DELIVER_TO_FIXED_DESTINATION, DELIVER_TO_SUBSCRIBERS_VOICEMAIL_SERVER
        max-diversion-action: REJECT

        # Address to divert to when max-diversions limit is reached and
        # max-diversion-action is set to DELIVER_TO_FIXED_DESTINATION.
#        max-diversion-fixed-destination: sip:no-reply@example.com

        # Time to wait (in seconds) for a reply before diverting due to a no reply rule.
        # This value is the network default, and can be overridden in subscriber data.
        no-reply-timeout-seconds: 20

        # Whether to add orig tag when diverting a call.
        add-orig-tag: true

        # URIs allowed to be re-targeted to in case of max-diversions limit being reached.
#        diversion-limit-exempt-uris:
#          - sip:user@example.com

        # Whether diversion should be suppressed if call terminates in CS domain.
        suppress-for-cs-terminating-domain: false

        # Whether subscriber configuration should take precedence over operator
        # configuration.
        prefer-subscriber: false

        # Address to forward to if operator or subscriber forward-to rule has no target
        # specified.
#        default-target-uri: sip:user@example.com

        # Additional response codes that will trigger CDIV Not-Reachable (in addition to
        # those outlined in the MMTel CDIV specification).
#        additional-not-reachable-status-codes:
#          - 488

        # Whether to allow CDIV rules with not-reachable conditions to be triggered after
        # a 180 response has been received from the called-party.
        allow-not-reachable-during-alerting: false

        # Whether to add 'hi-target-param' of type 'mp' to the 'hi-entry' added by a
        # diversion.
        add-mp-param: false

      # Configuration for forwarding to a voicemail server
      # If present, enables forwarding to subscriber's voicemail server if all other
      # connection attempts fail.
#      forward-to-voicemail:
#
#        # URIs of voicemail servers for which a voicemail-specific announcement may be
#        # played (if specified) and for which forwarding to without allocated credit
#        # can be allowed (if enabled).
#        voicemail-uris:
#          - sip:vms1@example.com
#          - sip:vms2@example.com
#
#        # Time to wait (in seconds) for a call to be successfully connected before
#        # forwarding to voicemail (if enabled) or 0 to disable timer.
#        forward-to-voicemail-timeout-seconds: 0
#
#        # When to allow forwarding to voicemail when out of credit.
#        # Only specified when using 'ro' for online charging.
#        # Must be one of:
#        #   NEVER_ALLOW, ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS, ALWAYS_ALLOW
#        forward-to-voicemail-without-ocs-credit: NEVER_ALLOW

    # Configuration for communication barring
    communication-barring:

      # Configuration for incoming communication barring
      incoming-communication-barring:

        # Should an announcement be played when an incoming call is barred.
        announcement:
          # The announcement to be played when an incoming call is barred.
          announcement-id: 21

          # (Optional) A different announcement can be played if the call is barred
          # because it is from an anonymous user.
          anonymous-call-rejection-announcement-id: 22

        # If false, incoming call barring will ignore International and International-exHC
        # rules. This is because it is not possible to accurately determine whether the
        # calling party is international in all circumstances.
        international-rules-active: false

#      # Configuration for outgoing communication barring
#     outgoing-communication-barring:
#
#       # Should an announcement be played when an outgoing call is barred.
#       announcement:
#
#         # The announcement to be played when an outgoing call is barred.
#         announcement-id: 20

      # Configuration for operator communication barring
#      operator-communication-barring:
        # The set of operator barring rules that can be applied.
        # (Optional) Only required if '../hss-queries-enabled/odb' is 'true'.
#        operator-barring-rules:
#
#          # Operator barring rule for 'Type1'
#          type1:
#
#            # The barring rule to be applied
#            rule: # Bar domain "example.com"
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="blacklist-domain">
#                  <cp:conditions>
#                    <cp:identity>
#                      <many domain="example.com" />
#                    </cp:identity>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>false</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false
#
#          # Operator barring rule for 'Type2'
#          type2:
#
#            # The barring rule to be applied
#            rule: # Bar international calls
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="bar-international">
#                  <cp:conditions>
#                    <international/>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>false</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false
#
#          # Operator barring rule for 'Type3'
#          type3:
#
#            # The barring rule to be applied
#            rule: # Bar roaming calls
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="bar-roaming">
#                  <cp:conditions>
#                    <roaming/>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>false</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false
#
#          # Operator barring rule for 'Type4'
#          type4:
#
#            # The barring rule to be applied
#            rule: # Allow audio calls
#              <cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
#                    xmlns:cp="urn:ietf:params:xml:ns:common-policy">
#                <cp:rule id="allow-audio">
#                  <cp:conditions>
#                    <media>audio</media>
#                  </cp:conditions>
#                  <cp:actions>
#                    <allow>true</allow>
#                  </cp:actions>
#                </cp:rule>
#              </cp:ruleset>
#
#            # Should the call be redirected when barred by this rule.
#            retarget:
#
#              # The URI to redirect the barred call to.
#              retarget-uri: sip:retarget@retargethost.example:5060
#
#              # Should an announcement be played when the call is barred by this rule.
#              announcement:
#
#                # The announcement to be played if the call is barred by this rule.
#                announcement-id: 20
#
#              # If we retarget the call, should online charging be disabled.
#              disable-online-charging-on-retarget: false

        # Outgoing prefix barring configuration
#        outgoing-prefix-barring:
#
#          # The list of prefixes to match against when doing prefix barring
#          prefixes:
#
#            # The prefix barring rule for prefix '87'
#            - prefix: '87'
#              # List of the classifications to apply when the above prefix is matched.
#              # Must refer to the name of a defined classification.
#              classifications:
#                - 'Operator Bar'
#
#          # The list of classifications that can be applied to a prefix match
#          classifications:
#
#            # A barring configuration called 'Operator Bar'.
#            - name: 'Operator Bar'
#
#              # The minimum length of dialled digits to match against
#              minimum-number-length: 5
#
#              # The maximum length of dialled digits to match against
#              maximum-number-length: 8
#
#              # When true, the normalized number must be international and not
#              # within the Home Country Code to match this classification.
#              match-international: false
#
#              # The barring treatment to apply if this condition matches.
#              # Valid values are: 'OSBType1', 'OSBType2', 'OSBType3', 'OSBType4',
#              # 'OperatorAllow', 'OperatorBar', 'PremiumRateInformation',
#              # and 'PremiumRateEntertainment'.
#              barring-treatment: 'OperatorBar'
#
#              # Disables the outgoing-call-barring (OCB) announcement.
#              # Cannot be specified alongside a prefix barring announcement.
#              #disable-ocb-announcement: true
#
#              # Should a different announcement be used rather than the one
#              # from 'outgoing-communication-barring/announcement'
#              announcement:
#
#                # The announcement ID to use instead of the one from
#                # `outgoing-communication-barring/announcement/announcement-id`
#                announcement-id: 20

    # Configuration for Vertical Service Codes
    vertical-service-codes:
      # Configuration for Vertical Service Codes XCAP Data Update feature
      xcap-data-update:
        # Internally-accessible hostname of the XCAP server.
        host: xcap.internal.example

        # SIP status code to respond with following a successful HTTP response.
        success-response-status-code: 603

        # SIP status code to respond with following an unsuccessful HTTP response.
        failure-response-status-code: 409

        # Whether an announcement should be played on failure.
#        failure-announcement:
#          # ID of the announcement to play on failure.
#          announcement-id: 23

  # Configuration for the third party registrar.
  registrar:

    # The registrar can either use the HSS (hsscache) or Cassandra (cassandra) for data storage.
    data-storage-type: cassandra

    # The type of user identity to use when creating Sh requests for the STN-SR.
    user-identity-type-for-stn-sr-request: PUBLIC_ID

    # Whether the user's IMS Private ID should be included in Sh requests for the STN-SR.
    include-private-id-in-stn-sr-request: false

  # Configuration for the SIS.
  sis:

    # RFC3263 unavailable peer list timer (milliseconds).
    unavailable-peer-list-timer-milliseconds: "60000"

    # RFC3263 failover timer (milliseconds).
    failover-timer-milliseconds: "4000"

  # Origin configuration for this application when connecting to the HLR.
  # The actual HLR SCCP address (destination) is in the hlr-configuration.yaml file
  hlr-connectivity-origin:

    # The SCCP address of the Sentinel VoLTE AS.
    originating-address: type=C7,ri=pcssn,pc=5,ssn=147,national=false

    # The timeout value for opening the MAP dialog with the HLR (in milliseconds).
    map-invoke-timeout-milliseconds: 5000

    # GSM specific configuration.
    gsm:
      # The address of the MLC (Sentinel).
      mlc-address: address=653333333,nature=INTERNATIONAL,numberingPlan=ISDN

      # Indicates if 'hlr-config/hlr-address' should be used as the actual HLR address, or have
      # its digit's replaced with the MSISDN of the subscriber.
      use-msisdn-as-hlr-address: true

      # Originating SCCP address when acting as an MSC, used when
      # establishing the MAP dialog. Will default to the value of
      # 'originating-address' when not present. Typically used to set a
      # different originating SSN when sending a SendRoutingInformation
      # message to the HLR.
#      msc-originating-address: type=C7,ri=pcssn,pc=5,ssn=148,national=false

  # Charging configuration
  charging:

    # Online charging type to use. One of 'ro', 'cap', 'cap-ro', and 'disabled'.
    # If ro is chosen, the peers should be configured in the diameter-ro section below.
    # If cap or disabled is chosen, then you must also remove or comment out the
    # diameter-ro section below.
    # If cap-ro is chosen, then both the diameter-ro and camel sections should be updated
    gsm-online-charging-type: ro

    # When not using Diameter Ro, comment out the contents of this file down to the <<<< END ro-charging
    # Also you must remove the lines from mmt-gsm-vmpool-config.yaml
    ro-charging:

      diameter-ro:

        # The Diameter Ro release to use.
        diameter-ro-release: Vcb0

        # The origin realm to use when sending messages.
        origin-realm: metaswitch.com

        # The value to use as the destination realm.
        destination-realms:
          - destination-realm: metaswitch.com
            peers:
              - peer.metaswitch.com

        # The Diameter Ro destination peers.
        destination-peers:
          - destination-hostname: peer.metaswitch.com
            port: 3868
            protocol-transport: aaa
            metric: 1

        # Whether the session is permitted to continue if there is an OCS failure.
        continue-session-on-ocs-failure: false

      charging-announcements:

        # Config for low balance announcements
        low-credit-announcements:

          # Low balance announcement ID to be used during call setup.
          call-setup-announcement-id: 100

          # Low balance announcement ID to be used after call setup.
          mid-call-announcement-id: 100

          # The delay (in milliseconds) before a another credit check should happen after a
          # low balance announcement has occurred.
          charging-reauth-delay-milliseconds: 30000

        # Config for out of credit announcements.
        out-of-credit-announcements:

          # Out of credit announcement ID to be used during call setup.
          call-setup-announcement-id: 101

          # Out of credit announcement ID to be used after call setup.
          mid-call-announcement-id: 102
# <<<< END ro-charging

    # Whether to enable connections to Diameter Rf peer through the Diameter Rf Control RA.
    # If present, Rf is enabled. Comment out to disable Rf.
    # When not using Diameter Rf, comment out the contents of this file down to the <<<< END rf-charging
    # Also you must remove the lines from mmt-gsm-vmpool-config.yaml
#    rf-charging:
#
#      diameter-rf:
#
#        # The Diameter Rf release to use.
#        diameter-rf-release: Vcb0
#
#        # The origin realm to use when sending messages.
#        origin-realm: metaswitch.com
#
#        # The value to use as the destination realm.
#        destination-realm: metaswitch.com
#
#        # The Diameter Rf destination peers.
#        destination-peers:
#          - destination-hostname: peer.metaswitch.com
#            port: 3868
#            protocol-transport: sctp
#            metric: 1
# <<<< END rf-charging

    # When not using CAP charging, comment out the contents of this file down to the <<<< END cap-charging
#    cap-charging:
#
#      # Configuration for the IM-SSF.
#      imssf:
#        # When using CAP charging and GSM, the IMCSI can be fetched from the HLR and provided to the IMSSF
#        # in the originating and/or terminating case.
#        # Comment out the whole section to disable for both originating and terminating calls.
#        imcsi-fetching:
#          # The requested Trigger Detection Point for originating calls, which determines whether
#          # T_CSI or O_CSI is requested from the HLR.
#          # Values of '2' or '3' will request the O_CSI, '12' will request the T_CSI, other values
#          # are not valid.
#          # Comment out to disable for originating calls.
#          originating-tdp: 2
#
#          # The requested Trigger Detection Point for terminating calls, which determines whether
#          # T_CSI or O_CSI is requested from the HLR.
#          # Values of '2' or '3' will request the O_CSI, '12' will request the T_CSI, other values
#          # are not valid.
#          # Comment out to disable for terminating calls.
#          terminating-tdp: 12
#
#        # Configuration for the charging GT (global title) that is sent to the SCP.
#        charging-gt:
#          # The format template to use when creating Charging GTs (global title). It must
#          # be a digit string except for tokens ('{iso}', '{mcc}', '{mnc}) which are
#          # substituted in.
#          format: "6422142{iso}"
#
#          # The Charging GT (global title) to use when one could not be generated because
#          # the user’s location could not be determined.
#          unknown-location: "64221429090"
#
#        # The SCCP address of the GSM charging SCP.
#        scf-address: "type=C7,ri=pcssn,pc=6,ssn=156"

# <<<< END cap-charging

    # Configuration for CDRs
    cdr:
      # If present, interim CDRs are enabled. If Diameter Rf has been enabled, this is required.
      interim-cdrs:
        # Enable CDRs to go to the local filesystem
        # Diameter Rf is selected separately
        write-cdrs-in-filesystem: true

        # Indicates whether or not to write CDRs on SDP changes.
        write-cdr-on-sdp-change: true

        # The maximum duration (in seconds) between timer driven interim CDRs.
        # Setting this to zero will disable timer based interim CDRs.
        interim-cdrs-period-seconds: 300

      # Enable session CDRs.
      session-cdrs-enabled: true

  # Configuration for the Session Refresh feature.
  session-refresh:
    # The interval of the periodic timer (in seconds).
    timer-interval-seconds: 30

    # Period of no activity for leg tp refresh (in seconds).
    refresh-period-seconds: 570

    # Whether the session should be refreshed using UPDATE requests,
    # as long as the endpoint allows UPDATE requests.
    refresh-with-update-if-allowed: true

    # Maximum allowed duration of a call (in seconds).
    max-call-duration-seconds: 86400

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  debug-logging-enabled: false

Example for hlr-config.yaml

# This file contains Home Location Register (HLR) configuration.
# This file must be present alongside the other Rhino VoLTE TAS YAML configuration files on the
# SIMPL server, regardless of whether the HLR is enabled or disabled.

deployment-config:hlr:
  hlr-address: "type=C7,ri=pcssn,pc=5,ssn=6,national=false"

Example for icscf-config.yaml

# This file contains Interrogating Call Service Control Function (I-CSCF) configuration.

deployment-config:icscf:

  # The URI of the Interrogating Call Session Control Function.
  # For MMT, the Conf and ECT features will automatically add an "lr" parameter to it.
  # The hostname part should either be a resolvable name or the IP address of the I-CSCF.
  i-cscf-uri: sip:icscf@icscfhost.example:5060

Example for sgc-config.yaml

# This file contains configuration for the OCSS7 SGC.
deployment-config:sgc:
  sgcenv:
    # The port to bind to for JMX service, used by the CLI and MXBeans.
    jmx-port: 10111

  hazelcast:
    # If omitted, backup-count defaults to N-1, where N is number of SMO nodes.
    # Don't uncomment, unless support instructs you to.
    # backup-count: 1

    password: xxxxxxxx

  # Only change SGC properties if support instructs you to
  #sgc-properties:
  #  properties:
  #    - name: com.cts.ss7.shutdown.gracefulWait
  #      value: '30000'

  m3ua:
    # The default port to bind for this local M3UA endpoint.
    local-port: 2905
#    # Normally each node in an SGC cluster will use the same port for its local M3UA endpoint.
#    # However, some configurations require that each node uses a different local port.
#    # Uncomment and configure if required.  For 'node-index', '1' is the first SMO node, '2' the
#    # second and so on.  Any nodes not configured here will use the global default 'local-port'
#    # above.
#    per-node-local-port:
#      - node-index: 2
#        local-port: 2906
#      - node-index: 3
#        local-port: 2907

    # The SCCP variant to configure this SGC to use.
    # Can be either: ITU or ANSI
    sccp-variant: ITU
    # This cluster's signaling point code.
    # If specifying a single integer (for ITU point codes), be sure to quote it
    # along with all other point codes in this file.
    point-code: "5"

    remote:
      peers:
        - id: 'STP-1'
          remote-ips:
            # The index of the SMO node that hosts the SGC that will be
            # connected to this IP set.  '1' is the first SMO node,
            # '2' is the second, and so on.  '-1' indicates that all
            # SGC nodes in the cluster will use this remote IP set.
            - node-index: -1
              ips:
                - 10.14.144.71
                - 10.14.144.134
          # The remote port for this M3UA association.
          port: 2906
          # The AS to which this connection belongs.
          application-servers:
            - as-id: 'NN-AS'

        - id: 'STP-2'
          remote-ips:
            - node-index: -1
              ips:
                - 10.14.144.81
                - 10.14.144.144
          port: 2906
          application-servers:
            - as-id: 'NN-AS'

      application-servers:
        - id: 'NN-AS'
          routes:
            default-priority: 5
            # The DPC identifiers applicable to this route.
            dpc-ids:
              - id: 'alias-2-233-3'
        - id: 'NN-AS2'
          routes:
            default-priority: 0
            # The DPC identifiers applicable to this route.
            dpc-ids:
              - id: 'alias-2-233-3'
          precond-ssns:
            - 2
            - 3
      dpcs:
        - id: 'alias-2-233-3'
          dpc: "5963"
          # maximum unsegmented SCCP message size to send to this
          # destination as a single unsegmented message
          muss: 252
          # maximum user data length per segment to send to this
          # destination
          mss: 245

      cpcs:
        - dpc: "5963"
          # The local SSNs to monitor.
          ssns:
            - 8
            - 146

    global-title:
      # For this example:
      # Match everything and send to the single alias point code.
      outbound:
        matchers:
          defaults:
            natofaddr: 0
            numplan: 7
            trtype: 129
          rules:
            - id: '1'
              is-prefix: false
              translations:
                - 'all'
        translations:
          - id: 'all'
            dpc: "5963"
            priority: 5

#        # Example rewriter would take all translation rules that
#        # use the 'example' rewriter, replace the digits with
#        # '123456', and set translated messages to route on the SSN.
#        rewriters:
#          - id: 'example'
#            addrinfo: '123456'
#            route-on: 'SSN'

      # Inbound translation has only matching rules.
      # If an address is matched, it is sent to the
      # configured SSN
      inbound:
        - id: 'to-sentinel-volte-gsm'
          addrinfo: '123456'
          is-prefix: false
          natofaddr: 4
          numplan: 1
          trtype: 0
          ssn: 146
        - id: 'to-sentinel-volte-cdma'
          addrinfo: '987654'
          is-prefix: false
          trtype: 0
          ssn: 146

Example for sentinel-ipsmgw-config.yaml

# This file contains the configuration for Sentinel IPSMGW that is not already in a shared file.

deployment-config:sentinel-ipsmgw:

  # Geo-redundancy configuration.
  # Comment out, or remove this section to disable geo-redundancy.
#  georedundancy:
#    # The number of IPSMGW sites
#    total-sites: 2

  # MAP messaging configuration
  map-messaging:
    # Template SMSC address. The digits are replaced by those of the received SMSC address.
    template-smsc-address: type=C7,ri=gt,digits=0,ssn=8,national=false,nature=INTERNATIONAL,numbering=ISDN,tt=0

    # IPSMGW SCCP address.
    originating-address: type=C7,ri=pcssn,pc=5,ssn=148,national=false

    # IPSMGW as msc address.
    ipsmgw-as-msc-address: "address=653333333,nature=INTERNATIONAL,numberingPlan=ISDN"

    # Indicates if 'hlr-config/hlr-address' should be used as the actual HLR address, or have its
    # digits replaced with the MSISDN of the subscriber.
    use-msisdn-as-hlr-address: false

    # If true, no MAP messages will be sent to the HLR.
    # Can only be set to true when 'delivery-order' is 'PS_ONLY'
    suppress-hlr-interaction: false

    # When accepting an OpenRequest, the SCCP responder address in theOpenAccept will, by
    # default, be set to the value of the SCCP called party in the OpenRequest.
    # If `UseGtAsCallingParty` is set to true, and if the received sccp-called-party contains a
    # global title, then the global title will be used.
    use-gt-as-calling-party: false

    # If the length of the message content falls within the configured maximum then send the
    # ForwardSM as part of the TC-BEGIN.
    # As a special case a configured max size of 0 disables this functionality regardless of the
    # actual content length.
    sms-content-size-threshold: 0

    # If true, specify the SmDeliveryNotIntended flag when performing an SRI for SM IMSI-only
    # query (i.e. during SMMA callflows).
    sri-sm-delivery-not-intended: false

  # The domain name used in SIP URIs on IPSMGW-generated outbound requests.
  terminating-domain: metaswitch.com

  # The delivery order for mobile-terminating messages.
  # Choices are PS_THEN_CS, CS_THEN_PS, PS_ONLY or CS_ONLY.
  # PS stands for "packet-switched network" (i.e. IMS network).
  # CS stands for "circuit-switched network".
  delivery-order: PS_THEN_CS

  # Charging options.
  charging-options:
    # Whether to enable charging for mobile-terminating PS messages.
    mt-ps-enabled: false

    # Whether to enable charging for mobile-terminating CS messages.
    mt-cs-enabled: false

    # Whether to enable charging for mobile-originating PS messages.
    mo-ps-enabled: false

    # Only required if one of the charging options is enabled.
    # You must also specify the per-node-diameter-ro configuration in smo-vmpool-config.yaml
#    diameter-ro:
#      # The Diameter Ro release to use.
#      diameter-ro-release: Vcb0
#
#      # The origin realm to use when sending messages.
#      origin-realm: metaswitch.com
#
#      # The value to use as the destination realm.
#      destination-realm: metaswitch.com
#
#      # The Diameter Ro destination peers.
#      destination-peers:
#        - destination-hostname: peer.metaswitch.com
#          port: 3868
#          protocol-transport: aaa
#          metric: 1

  # Presence enables UE reachability notifications.
  ue-reachability-notifications:
    # Reachability notification subscription expiry time (in seconds).
    subscription-expiry-time-seconds: 3600

  # MCC/MNC used by the Correlation RA to generate a Correlation IMSI when the terminating
  # subscriber's routing info cannot be determined. Must match one of the PLMNIDs in
  # the home network configuration.
  correlation-ra-plmnid:
    mcc: "001"
    mnc: "01"

  # Fallback control for message delivery.
  fallback-settings:
    # Timeout (in milliseconds) before falling back to the other network type.
    fallback-timer-milliseconds: 5000

    # List of error codes which will prevent fallback from PS to CS.
    avoidance-codes-ps-to-cs:
      - 22

    # List of error codes which will prevent fallback from CS to PS.
    avoidance-codes-cs-to-ps: []

  # SCCP allowed GT prefixes.
  sccp-allowlist: []

  # Configuration for USSI functions
#  ussi:
#
#    # Should all USSI messages be rejected with a default message.
#    # Remove or comment out this section to allow USSI messages to be processed.
#    reject-all-with-default-message:
#
#      # The language of the message to be sent in the USSI response
#      language: "en"
#
#      # The message to be sent in the USSI response
#      message: "Please visit www.example.com"

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  debug-logging-enabled: false

Example for mag-overrides.yaml

# This file contains low-level Rhino configuration.
# Use only on advice of your Customer Care representative.
# If this file is not in use, you don't have to upload it to CDS.

rhino-config:config-bundle:
  format: partial
  schema-version: '1.0'

rhino-config:rhino-configuration:
  namespaces:
    - name: ''

Example for mag-nginx-config.yaml

deployment-config:mag-nginx:
  nginx-perip-rate-limit: 10
  nginx-server-rate-limit: 100
  nginx-perip-burst-limit: 5
  nginx-server-burst-limit: 10
  nginx-perip-conn-limit: 10
  nginx-server-conn-limit: 100

Example for shcm-overrides.yaml

# This file contains low-level Rhino configuration.
# Use only on advice of your Customer Care representative.
# If this file is not in use, you don't have to upload it to CDS.

rhino-config:config-bundle:
  format: partial
  schema-version: '1.0'

rhino-config:rhino-configuration:
  namespaces:
    - name: ''

Example for mmt-cdma-overrides.yaml

# This file contains low-level Rhino configuration.
# Use only on advice of your Customer Care representative.
# If this file is not in use, you don't have to upload it to CDS.

rhino-config:config-bundle:
  format: partial
  schema-version: '1.0'

rhino-config:rhino-configuration:
  namespaces:
    - name: ''

Example for mmt-gsm-overrides.yaml

# This file contains low-level Rhino configuration.
# Use only on advice of your Customer Care representative.
# If this file is not in use, you don't have to upload it to CDS.

rhino-config:config-bundle:
  format: partial
  schema-version: '1.0'

rhino-config:rhino-configuration:
  namespaces:
    - name: ''

Example for smo-overrides.yaml

# This file contains low-level Rhino configuration.
# Use only on advice of your Customer Care representative.
# If this file is not in use, you don't have to upload it to CDS.

rhino-config:config-bundle:
  format: partial
  schema-version: '1.0'

rhino-config:rhino-configuration:
  namespaces:
    - name: ''

Example for mag-vmpool-config.yaml

# This file describes the pool of Virtual Machines that comprise a "MAG cluster"
# there are some pieces of software on this VM type that require clustering and
# knowing each other's IP addresses, for example Rhino
deployment-config:mag-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vapp parameter
  site-id: DC1

  xcap-domains:
    - xcap.site1.ims.mnc123.mcc530.pub.3gppnetwork.org
    - xcap.site1.ims.mnc124.mcc530.pub.3gppnetwork.org

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  # Define one or more REM users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # each REM user maps to a Rhino user, when REM logs into Rhino
  rem-auth:
    - username: remreadonly
      real-name: REM read only user
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-mag-1
      rhino-node-id: 101
      diameter-zh-origin-host: mag1.mag.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mag-2
      rhino-node-id: 102
      diameter-zh-origin-host: mag2.mag.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mag-3
      rhino-node-id: 103
      diameter-zh-origin-host: mag3.mag.site1.mnc123.mcc530.3gppnetwork.org

  # DO NOT ENABLE IN PRODUCTION
  # Enable extensive logging for verification and issue diagnosis during acceptance testing
  rem-debug-logging-enabled: false

Example for mmt-cdma-vmpool-config.yaml

# This file describes the pool of Virtual Machines that comprise a "MMT cluster"
# there are some pieces of software on this VM type that require clustering and
# knowing each other's IP addresses, for example Rhino
deployment-config:mmt-cdma-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vapp parameter
  site-id: DC1

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-mmt-cdma-1
      rhino-node-id: 201
      # Remove this if diameter-ro is disabled
      per-node-diameter-ro:
        diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
      # Remove this if diameter-rf is disabled
#      per-node-diameter-rf:
#        diameter-rf-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mmt-cdma-2
      rhino-node-id: 202
      # Remove this if diameter-ro is disabled
      per-node-diameter-ro:
        diameter-ro-origin-host: mmt2.mmt.site1.mnc123.mcc530.3gppnetwork.org
      # Remove this if diameter-rf is disabled
#      per-node-diameter-rf:
#        diameter-rf-origin-host: mmt2.mmt.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mmt-cdma-3
      rhino-node-id: 203
      # Remove this if diameter-ro is disabled
      per-node-diameter-ro:
        diameter-ro-origin-host: mmt3.mmt.site1.mnc123.mcc530.3gppnetwork.org
      # Remove this if diameter-rf is disabled
#      per-node-diameter-rf:
#        diameter-rf-origin-host: mmt3.mmt.site1.mnc123.mcc530.3gppnetwork.org

Example for mmt-gsm-vmpool-config.yaml

# This file describes the pool of Virtual Machines that comprise a "MMT cluster"
# there are some pieces of software on this VM type that require clustering and
# knowing each other's IP addresses, for example Rhino
deployment-config:mmt-gsm-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vapp parameter
  site-id: DC1

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-mmt-gsm-1
      rhino-node-id: 201
      # Remove this if diameter-ro is disabled
      per-node-diameter-ro:
        diameter-ro-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org
      # Remove this if diameter-rf is disabled
#      per-node-diameter-rf:
#        diameter-rf-origin-host: mmt1.mmt.site1.mnc123.mcc530.3gppnetwork.org


    - vm-id: example-mmt-gsm-2
      rhino-node-id: 202
      # Remove this if diameter-ro is disabled
      per-node-diameter-ro:
        diameter-ro-origin-host: mmt2.mmt.site1.mnc123.mcc530.3gppnetwork.org
      # Remove this if diameter-rf is disabled
#      per-node-diameter-rf:
#        diameter-rf-origin-host: mmt2.mmt.site1.mnc123.mcc530.3gppnetwork.org

    - vm-id: example-mmt-gsm-3
      rhino-node-id: 203
      # Remove this if diameter-ro is disabled
      per-node-diameter-ro:
        diameter-ro-origin-host: mmt3.mmt.site1.mnc123.mcc530.3gppnetwork.org
      # Remove this if diameter-rf is disabled
#      per-node-diameter-rf:
#        diameter-rf-origin-host: mmt3.mmt.site1.mnc123.mcc530.3gppnetwork.org

Example for shcm-vmpool-config.yaml

# This file describes the pool of Virtual Machines that comprise a "ShCM group"
deployment-config:shcm-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vApp parameter
  site-id: DC1

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-shcm-1
      diameter-sh-origin-host: shcm1.shcm.site1.mnc123.mcc530.3gppnetwork.org
      rhino-node-id: 101

    - vm-id: example-shcm-2
      diameter-sh-origin-host: shcm2.shcm.site1.mnc123.mcc530.3gppnetwork.org
      rhino-node-id: 102

Example for smo-vmpool-config.yaml

# This file describes the pool of Virtual Machines that comprise an "SMO cluster"
# there are some pieces of software on this VM type that require clustering and
# knowing each other's IP addresses, for example Rhino and the OCSS7 SGC.
deployment-config:smo-virtual-machine-pool:

  # needs to match the deployment_id vapp parameter
  deployment-id: example

  # needs to match the site_id vapp parameter
  site-id: DC1

  # Whether sentinel-ipsmgw should be enabled and installed on the smo node.
  # If set to false, ipsmgw will not be installed and no other sentinel-ipsmgw config
  # should be specified.
  sentinel-ipsmgw-enabled: true

  # Define one or more Rhino users and give their passwords in plain-text.
  # Passwords will be encrypted by 'rvtconfig upload-config' before this file is uploaded to CDS.
  # This user is a read-only user, they can log in and see things in Rhino but do not have permission to change configuration
  # it is discouraged to log into Rhino to modify configuration using REM, instead the declarative configuration system should be used
  rhino-auth:
    - username: readonly
      password: xxxxxxxx

  virtual-machines:
    - vm-id: example-smo-1
      rhino-node-id: 301
      # Uncomment this if diameter-ro is enabled
#      per-node-diameter-ro:
#        diameter-ro-origin-host: smo1.smo.site1.mnc123.mcc530.3gppnetwork.org
      sip-local-uri: sip:smo1@mnc123.mcc530.3gppnetwork.org

    - vm-id: example-smo-2
      rhino-node-id: 302
      # Uncomment this if diameter-ro is enabled
#      per-node-diameter-ro:
#        diameter-ro-origin-host: smo2.smo.site1.mnc123.mcc530.3gppnetwork.org
      sip-local-uri: sip:smo2@mnc123.mcc530.3gppnetwork.org

    - vm-id: example-smo-3
      rhino-node-id: 303
      # Uncomment this if diameter-ro is enabled
#      per-node-diameter-ro:
#        diameter-ro-origin-host: smo3.smo.site1.mnc123.mcc530.3gppnetwork.org
      sip-local-uri: sip:smo3@mnc123.mcc530.3gppnetwork.org

YANG schemas

snmp-configuration.yang

module snmp-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/snmp-configuration";
    prefix "snmp";

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "SNMP configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping snmp-configuration-grouping {
        leaf v1-enabled {
            type boolean;
            default false;
            description "Enables the use of SNMPv1 if set to 'true'. Note that support for SNMPv1
                        is deprecated and SNMP v2c should be used instead. Use of v1 is limited
                        to Rhino only and may cause some Rhino statistics to fail to appear
                        correctly or not at all.  Set to 'false' to disable SNMPv1.";
        }

        leaf v2c-enabled {
            type boolean;
            default true;
            description "Enables the use of SNMPv2c if set to 'true'.
                         Set to 'false' to disable SNMPv2c.";
        }

        leaf v3-enabled {
            type boolean;
            default false;
            description "Enables the use of SNMPv3 if set to 'true'.
                         Set to 'false' to disable SNMPv3.";
        }

        leaf trap_type {
            when "../v2c-enabled = 'true'";

            type enumeration {
                enum trap {
                    description "Generate TRAP type notifications.";
                }
                enum inform {
                    description "Generate INFORM type notifications.";
                }
            }

            default trap;
            description "Configure the notification type to use when SNMPv2c is enabled.";
        }

        leaf community {
            when "../v2c-enabled = 'true'";
            type string;
            default "clearwater";
            description "The SNMPv2c community name.";
        }

        container v3-authentication {
            when "../v3-enabled = 'true'";

            leaf username {
                type string;
                mandatory true;
                description "The SNMPv3 user name.";
            }

            leaf authentication-protocol {
                type enumeration {
                    enum SHA {
                        description "SHA";
                    }
                    enum MD5 {
                        description "MD5 message digest.";
                    }
                }

                default SHA;
                description "The authentication mechanism to use.";
            }

            leaf authentication-key {
                type vmt:secret {
                    length "8 .. max";
                }
                mandatory true;
                description "The authentication key.";
            }

            leaf privacy-protocol {
                type enumeration {
                    enum DES {
                        description "Data Encryption Standard (DES)";
                    }
                    enum 3DES {
                        description "Triple Data Encryption Standard (3DES).";
                    }
                    enum AES128 {
                        description "128 bit Advanced Encryption Standard (AES).";
                    }
                    enum AES192 {
                        description "192 bit Advanced Encryption Standard (AES).";
                    }
                    enum AES256 {
                        description "256 bit Advanced Encryption Standard (AES).";
                    }
                }

                default AES128;
                description "The privacy mechanism to use.";
            }

            leaf privacy-key {
                type vmt:secret {
                    length "8 .. max";
                }
                mandatory true;
                description "The privacy key.";
            }

            description "SNMPv3 authentication configuration. Only used when 'v3-enabled' is set
                         to 'true'.";
        }

        container agent-details {
            when "../v2c-enabled = 'true' or ../v3-enabled= 'true'";

            // agent name is the VM ID
            // description is the human-readable node description from the metadata

            leaf location {
                type string;
                mandatory true;
                description "The physical location of the SNMP agent.";
            }

            leaf contact {
                type string;
                mandatory true;

                description "The contact email address for this SNMP agent.";
            }

            description "The configurable SNMP agent details. The VM ID is used as the agent's
                         name, and the human readable node description from the metadata is used
                         as the description.";
        }

        container notifications {
            leaf system-notifications-enabled {
                when "../../v2c-enabled = 'true' or ../../v3-enabled = 'true'";
                type boolean;
                mandatory true;

                description "Specifies whether or not system SNMP v2c/3 notifications are enabled.
                             System notifications are: high memory and CPU usage warnings,
                             and system boot notifications.

                             If you use MetaView Server to monitor
                             your platform, then it is recommended to set this to 'false'.";
            }
            must "system-notifications-enabled = 'false'
              or (count(targets[send-system-notifications = 'true']) > 0)" {
                error-message "You must specify whether to enable system notifications.
                               If enabled, you must also specify "
                               + "at least one system notification target.";
            }

            leaf rhino-notifications-enabled {
                when "../../v2c-enabled = 'true' or ../../v3-enabled = 'true'";

                type boolean;
                mandatory true;

                description "Specifies whether or not Rhino SNMP v2c/3 notifications are enabled.

                             Applicable only when there is a Rhino node in your deployment
                             and SNMPv2c and/or SNMPv3 are enabled.";
            }
            must "rhino-notifications-enabled = 'false'
              or count(targets[send-rhino-notifications = 'true']) > 0" {
                error-message "You must specify whether to enable Rhino notifications.
                               If enabled, you must also specify "
                               + "at least one Rhino notification target.";
            }

            leaf sgc-notifications-enabled {
                when "../../v2c-enabled = 'true' or ../../v3-enabled = 'true'";
                type boolean;
                mandatory true;

                description "Specifies whether or not OCSS7 SGC SNMP v2c/3 notifications are
                             enabled.

                             Applicable only when there is an SMO or an SGC node in your deployment
                             and SNMPv2c and/or SNMPv3 are enabled.";
            }
            must "sgc-notifications-enabled = 'false'
              or count(targets[send-sgc-notifications = 'true']) > 0" {
                error-message "You must specify whether to enable SGC notifications.
                               If enabled, you must also specify "
                               + "at least one SGC notification target.";
            }

            list targets {
                key "version host port";

                leaf version {
                    type enumeration {
                        enum v1 {
                            description "SNMPv1";
                        }
                        enum v2c {
                            description "SNMPv2c";
                        }
                        enum v3 {
                            description "SNMPv3";
                        }
                    }
                    description "The SNMP notification version to use for this target.";
                }

                leaf host {
                    type ietf-inet:host;
                    description "The target host.";
                }

                leaf port {
                    type ietf-inet:port-number;
                    // 'port' is a key and YANG ignores the default value of any keys, hence we
                    // cannot set a default '162' here.
                    description "The target port, normally 162.";
                }

                leaf send-rhino-notifications {
                    when "../../rhino-notifications-enabled = 'true'";
                    type boolean;
                    default true;

                    description "Specifies whether or not to send Rhino SNMP v2c/3 notifications
                                to this target.

                                Can only be specified if ../rhino-notifications-enabled is true.";
                }

                leaf send-system-notifications {
                    when "../../system-notifications-enabled = 'true'";
                    type boolean;
                    default true;

                    description "Specifies whether or not to send system SNMP v2c/3 notifications
                                to this target.

                                Can only be specified if ../system-notifications-enabled is true.";
                }

                leaf send-sgc-notifications {
                    when "../../sgc-notifications-enabled = 'true'";
                    type boolean;
                    default true;

                    description "Specifies whether or not to send SGC SNMP v2c/3 notifications
                                to this target.

                                Can only be specified if ../sgc-notifications-enabled is true.";
                }

                description "The list of SNMP notification targets.

                             Note that you can specify targets even if not using Rhino or system
                             notifications - the targets are also used for the disk and
                             service monitor alerts.";
            }

            list categories {
                when "../rhino-notifications-enabled = 'true'";
                key "category";

                leaf category {
                    type enumeration {
                        enum alarm-notification {
                            description "Alarm related notifications.";
                        }
                        enum log-notification {
                            description "Log related notifications.";
                        }
                        enum log-rollover-notification {
                            description "Log rollover notifications.";
                        }
                        enum resource-adaptor-entity-state-change-notification {
                            description "Resource adaptor entity state change notifications.";
                        }
                        enum service-state-change-notification {
                            description "Service state change notifications.";
                        }
                        enum slee-state-change-notification {
                            description "SLEE state change notifications.";
                        }
                        enum trace-notification {
                            description "Trace notifications.";
                        }
                        enum usage-notification {
                            description "Usage notifications.";
                        }
                    }
                    description "Notification category.

                                 If you are using MetaView Server, only the `alarm-notification`
                                 category of Rhino SNMP notifications is supported.
                                 Therefore, all other notification categories should be disabled.";
                }

                leaf enabled {
                    type boolean;
                    mandatory true;
                    description "Set to 'true' to enable this category. Set to 'false' to disable.";
                }

                description "Rhino notification categories to enable or disable.";
            }

            description "Notification configuration.";
        }

        container sgc {
            leaf v2c-port {
                when "../../v2c-enabled = 'true'";
                type ietf-inet:port-number;
                default 11100;
                description "The port to bind to for v2c SNMP requests.";
            }

            leaf v3-port {
                when "../../v3-enabled = 'true'";
                type ietf-inet:port-number;
                default 11101;
                description "The port to bind to for v3 SNMP requests.";
            }
            description "SGC-specific SNMP configuration.";
        }

        description "SNMP configuration.";
    }
}

routing-configuration.yang

module routing-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/routing-configuration";
    prefix "routing";

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    import traffic-type-configuration {
        prefix "traffic-type";
        revision-date 2022-04-11;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Routing configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping routing-configuration-grouping {
        list routing-rules {
            key "name";
            unique "target";

            leaf name {
                type string;
                mandatory true;
                description "The name of the routing rule.";
            }

            leaf target {
                type union {
                    type ietf-inet:ip-address;
                    type ietf-inet:ip-prefix;
                }
                mandatory true;
                description "The target for the routing rule.
                             Can be either an IP address or a block of IP addresses.";
            }

            leaf interface {
                type traffic-type:traffic-type;
                mandatory true;
                description "The interface to use to connect to the specified endpoint.
                             This must be one of the allowed traffic types,
                             corresponding to the interface carrying the traffic type.";
            }

            leaf gateway {
                type ietf-inet:ip-address;
                mandatory true;
                description "The IP address of the gateway to route through.";
            }

            leaf-list node-types {
                type enumeration {
                    enum shcm {
                        description "Apply this routing rule to the shcm nodes.";
                    }
                    enum mag {
                        description "Apply this routing rule to the mag nodes.";
                    }
                    enum mmt-gsm {
                        description "Apply this routing rule to the mmt-gsm nodes.";
                    }
                    enum mmt-cdma {
                        description "Apply this routing rule to the mmt-cdma nodes.";
                    }
                    enum smo {
                        description "Apply this routing rule to the smo nodes.";
                    }
                    enum tsn {
                        description "Apply this routing rule to the tsn nodes.";
                    }
                    enum max {
                        description "Apply this routing rule to the max nodes.";
                    }
                    enum rem {
                        description "Apply this routing rule to the rem nodes.";
                    }
                    enum sgc {
                        description "Apply this routing rule to the sgc nodes.";
                    }
                    enum custom {
                        description "Apply this routing rule to the custom nodes.";
                    }
                }
                description "The node-types this routing rule applies to.";
            }

            description "The list of routing rules.";
        }
        description "Routing configuration";
    }
}

system-configuration.yang

module system-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/system-configuration";
    prefix "system";

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "OS-level parameters configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping system-configuration-grouping {
        container networking {
            container core {
                leaf receive-buffer-size-default {
                    type uint32 {
                        range "65536 .. 16777216";
                    }
                    units "bytes";
                    default 512000;

                    description "Default socket receive buffer size.";
                }

                leaf receive-buffer-size-max {
                    type uint32 {
                        range "65536 .. 16777216";
                    }
                    units "bytes";
                    default 2048000;

                    description "Maximum socket receive buffer size.";
                }

                leaf send-buffer-size-default {
                    type uint32 {
                        range "65536 .. 16777216";
                    }
                    units "bytes";
                    default 512000;

                    description "Default socket send buffer size.";
                }

                leaf send-buffer-size-max {
                    type uint32 {
                        range "65536 .. 16777216";
                    }
                    units "bytes";
                    default 2048000;

                    description "Maximum socket send buffer size.";
                }

                description "Core network settings.";
            }

            container sctp {
                leaf rto-min {
                    type uint32 {
                        range "10 .. 5000";
                    }
                    units "milliseconds";

                    default 50;

                    description "Round trip estimate minimum. "
                              + "Used in SCTP's exponential backoff algorithm for retransmissions.";
                }

                leaf rto-initial {
                    type uint32 {
                        range "10 .. 5000";
                    }
                    units "milliseconds";

                    default 300;

                    description "Round trip estimate initial value. "
                              + "Used in SCTP's exponential backoff algorithm for retransmissions.";
                }

                leaf rto-max {
                    type uint32 {
                        range "10 .. 5000";
                    }
                    units "milliseconds";

                    default 1000;

                    description "Round trip estimate maximum. "
                              + "Used in SCTP's exponential backoff algorithm for retransmissions.";
                }

                leaf sack-timeout {
                    type uint32 {
                        range "50 .. 5000";
                    }
                    units "milliseconds";

                    default 100;

                    description "Timeout within which the endpoint expects to receive "
                              + "a SACK message.";
                }

                leaf hb-interval {
                    type uint32 {
                        range "50 .. 30000";
                    }
                    units "milliseconds";

                    default 1000;

                    description "Heartbeat interval. The longer the interval, "
                              + "the longer it can take to detect that communication with a peer "
                              + "has been lost.";
                }

                leaf path-max-retransmissions {
                    type uint32 {
                        range "1 .. 20";
                    }

                    default 5;

                    description "Maximum number of retransmissions on one path before "
                              + "communication via that path is considered to be lost.";
                }

                leaf association-max-retransmissions {
                    type uint32 {
                        range "1 .. 20";
                    }

                    default 10;

                    description "Maximum number of retransmissions to one peer before "
                              + "communication with that peer is considered to be lost.";
                }

                description "SCTP-related settings.";
            }

            description "Network-related settings.";
        }

        description "OS-level parameters. It is advised to leave all settings at their defaults.";
    }
}

traffic-type-configuration.yang

module traffic-type-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/traffic-type-configuration";
    prefix "traffic-type";

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Traffic type configuration schema.";

    revision 2022-04-11 {
        description "Initial revision";
        reference "Metaswitch Deployment Definition Guide";
    }

    typedef signaling-traffic-type {
        type enumeration {
            enum internal {
                description "Internal signaling traffic.";
            }
            enum diameter {
                description "Diameter signaling traffic.";
            }
            enum ss7 {
                description "SS7 signaling traffic.";
            }
            enum sip {
                description "SIP signaling traffic.";
            }
            enum http {
                description "HTTP signaling traffic.";
            }
            enum custom-signaling {
                description "Applies to custom VMs only.
                                Custom signaling traffic.";
            }
            enum custom-signaling2 {
                description "Applies to custom VMs only.
                                Second custom signaling traffic.";
            }
        }
        description "The name of the signaling traffic type.";
    }

    typedef multihoming-signaling-traffic-type {
        type enumeration {
            enum diameter-multihoming {
                description "Second Diameter signaling traffic.";
            }
            enum ss7-multihoming {
                description "Second SS7 signaling traffic.";
            }
        }
        description "The name of the multihoming signaling traffic type.";
    }

    typedef traffic-type {
        type union {
            type signaling-traffic-type;
            type multihoming-signaling-traffic-type;
            type enumeration {
                enum management {
                    description "Management traffic.";
                }
                enum cluster {
                    description "Cluster traffic.";
                }
                enum access {
                    description "Access traffic.";
                }
            }
        }
        description "The name of the traffic type.";
    }
}

bsf-configuration.yang

module bsf-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/bsf-configuration";
    prefix "bsf";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "BSF configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping bsf-configuration-grouping {

        // Zh is the interface between the BSF and the HSS
        container zh-diameter {
            uses vmt:diameter-configuration-grouping;
            description "Diameter Zh configuration.";
        }

        // HTTP RA address and port is hardcoded since it has to match nginx.conf.
        // Cassandra address and port is taken from the NAF filter config.

        leaf debug-logging-enabled {
            type boolean;
            default false;
            description "Enable extensive logging for verification and issue diagnosis during
                         acceptance testing. Must not be enabled in production.";
        }

        description "The Bootstrap Security Function (BSF) configuration";
    }
}

naf-filter-configuration.yang

module naf-filter-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/naf-filter-configuration";
    prefix "naf-filter";

    import cassandra-configuration {
        prefix "cassandra";
        revision-date 2019-11-29;
    }

    import extensions {
        prefix "yangdoc";
        revision-date 2020-12-02;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "NAF filter configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping naf-filter-configuration-grouping {
        leaf service-type {
            type uint8;
            default 0;
            description "Identifies the type of service the NAF filter is providing.
                         Recognized values for this setting are defined in Annex B of
                         3GPP TS 29.109. Affects which settings are selected from the GUSS.";
        }

        leaf service-id {
            type uint16;
            default 0;
            description "An operator specific identifier that uniquely identifies the service the
                         NAF filter is providing within the network. Affects which settings
                         are selected from the GUSS.";
        }

        leaf naf-group {
            type string;
            default "";
            description "Identifies the group that the NAF filter belongs to. Affects which
                         settings are selected from the GUSS.";
        }

        leaf-list force-auth-on-paths {
            type string;
            default "/rem/auth-check";
            description "A list of URL path prefixes for which authentication should always be
                         enforced, even for requests from trusted entities.";
        }

        container cassandra-connectivity {
            status obsolete;
            uses cassandra:cassandra-connectivity-grouping;
            description "Obsolete in RVT 4.1 series and later. Cassandra connectivity
                         configuration for the NAF filter";
        }

        container nonce-options {
            uses nonce-options-grouping;
            description "Settings for how the NAF filter handles nonce values";
        }

        leaf debug-logging-enabled {
            type boolean;
            default false;
            description "Enable extensive logging for verification and issue diagnosis during
                         acceptance testing. Must not be enabled in production.";
        }

        leaf intercept-tomcat-errors {
            type boolean;
            default false;
            status obsolete;
            description "OBSOLETE in RVT 4.1 series and later.
                         Whether to let NGINX replace Tomcat errors with default errors.
                         Use only on advice of your Customer Care Representative.";
            yangdoc:change-impact "contact";
        }

        leaf http-version {
            type enumeration {
                enum 1.0 {
                    description "Use HTTP version 1.0.";
                }
                enum 1.1 {
                    description "Use HTTP version 1.1.";
                }
            }
            default 1.1;
            description "HTTP version to use on the Ub (BSF) and Ua/Ut (NAF) interfaces.";
            yangdoc:change-impact "contact";
        }

        description "The Network Application Functions (NAF) filter configuration.";
    }

    grouping nonce-options-grouping {
        leaf reuse-count {
            type uint32;
            default 100;
            description "The maximum number of times a nonce can be reused by incrementing the
                         nonce count.";
        }

        leaf lifetime-milliseconds {
            type uint32;
            default 180000;
            description "The time that a nonce remains valid for after being generated
                         (in milliseconds).";
        }

        leaf cache-capacity {
            type uint32 {
                range "1 .. max";
            }
            default 100000;
            status obsolete;
            description "Obsolete in RVT 4.1 series and later. The capacity of the nonce cache.
                         This setting is only relevant when using the local storage mechanism.";
        }

        leaf storage-mechanism {
            type enumeration {
                enum cassandra {
                    description "Use Cassandra storage.";
                }
                enum local {
                    description "Use local storage.";
                }
            }
            default local;
            status obsolete;
            description "Obsolete in RVT 4.1 series and later. The storage mechanism to use for
                         the nonce cache.";
        }

        leaf nonce-cassandra-keyspace {
            type string;
            default "opencloud_nonce_info";
            status obsolete;
            description "Obsolete in RVT 4.1 series and later. The Cassandra keyspace for the nonce
                         cache. This setting is only relevant when using the Cassandra storage
                         mechanism.";
        }

        description "Nonce option configuration.";
    }
}

common-configuration.yang

module common-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/common-configuration";
    prefix "common";

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Common configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping common-configuration-grouping {

        leaf platform-operator-name {
            type string {
                pattern "[a-zA-Z0-9_-]+";
            }
            mandatory true;
            description "The platform operator name.";
        }

        description "Common configuration.";
    }
}

home-network-configuration.yang

module home-network-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/home-network-configuration";
    prefix "home-network";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Home network configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping home-network-configuration-grouping {
        leaf home-domain {
            type string {
                pattern "[a-zA-Z0-9@.:_/-]+";
            }
            description "Identifier for the home network.

                         Should match the value in the SIP: p-visited-network-id header inserted by
                         the S-CSCF or P-CSCF.

                         Used for determining whether a call is roaming or not.";
            reference "RFC 3455 section 4.3";
        }

        leaf home-network-country-dialing-code {
            type vmt:number-string {
                length "1 .. 4";
            }
            mandatory true;
            description "The home network country dialing code.";
        }

        leaf home-network-iso-country-code {
            type string {
                length "2";
                pattern "[A-Z]*";
            }
            description "The home network ISO country code.";
        }

        list home-plmn-ids {
            key "mcc";

            leaf mcc {
                type vmt:number-string {
                    length "3";
                }
                mandatory true;
                description "The Mobile Country Code (MCC).";
            }

            leaf-list mncs {
                type vmt:number-string {
                    length "2..3";
                }
                min-elements 1;
                description "The list of Mobile Network Codes (MNCs).";
            }

            description "The home Public Land Mobile Network (PLMN) identifiers.";
        }

        description "The home network configuration.";
    }
}

number-analysis-configuration.yang

module number-analysis-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/number-analysis-configuration";
    prefix "number-analysis";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Number analysis configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    typedef dialing-code-type {
        type string {
            pattern '[0-9]+';
        }
        description "A type that represents a dialing code.";
    }

    grouping number-analysis-configuration-grouping {
        container normalization {
            leaf international-prefix {
                type dialing-code-type {
                    length "1 .. 5"; // from http://www.idd.com.au/international-dialling-codes.php
                }
                mandatory true;
                description "The international prefix. 1 to 5 digits in length.";
            }

            leaf min-normalizable-length {
                type uint8 {
                    range "0 .. 31";
                }
                mandatory true;
                description "The minimum normalizable length.";
            }

            leaf national-prefix {
                type dialing-code-type {
                    length "1 .. 5";
                }
                mandatory true;
                description "The national prefix. 1 to 5 digits in length.";
            }

            leaf network-dialing-code {
                type dialing-code-type {
                    length "1 .. 3";
                }
                mandatory true;
                description "The network dialing code. 1 to 3 digits in length.";
            }

            leaf normalize-to {
                type enumeration {
                    enum international {
                        description "Normalize to international format.";
                    }
                    enum national {
                        description "Normalize to national format.";
                    }
                }
                default international;
                description "The format to normalize to when comparing numbers, sending outgoing
                             requests and checking whether numbers are normalizable.";
            }

            description "Normalization configuration.";
        }

        leaf-list non-provisionable-uris {
            type union {
                type vmt:sip-or-tel-uri-type;
                type vmt:phone-number-type;
            }
            description "List of URIs that cannot be provisioned.";
        }

        leaf assume-sip-uris-are-phone-numbers {
            type boolean;
            default true;
            description "Set to 'true' to attempt to extract phone numbers from SIP URIs
                        even if they don't contain the 'user=phone' parameter.
                        Set to 'false' to disable this behaviour.";
        }

        description "Number analysis configuration.";
    }
}

sas-configuration.yang

module sas-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/sas-configuration";
    prefix "sas";

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "SAS configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping sas-configuration-grouping {
        leaf enabled {
            type boolean;
            default true;
            description "'true' enables the use of SAS, 'false' disables.";
        }

        container sas-connection {
            when "../enabled = 'true'";

            leaf system-type {
                type string {
                    length "1..255";
                    pattern "[a-zA-Z0-9.\\-_@:\"', ]+";
                }
                description "The SAS system type.
                             Only valid for custom nodes.
                             Defaults to the image name if not specified.";
            }

            leaf system-version {
                type string;
                description "The SAS system version.
                             Defaults to the VM version if not specified.";
            }

            leaf-list servers {
                type union {
                    type ietf-inet:ipv4-address-no-zone;
                    type ietf-inet:domain-name;
                }
                min-elements 1;
                description "The list of SAS servers to send records to.";
            }

            description "Configuration for connecting to SAS.";
        }
        description "SAS configuration.";
    }

    grouping sas-instance-configuration-grouping {
        leaf system-name {
            type string {
                length "1..64";
            }
            description "The SAS system name.
                         Defaults to a string containing the deployment ID, system type,
                         and the node ID (or the VM index for unclustered nodes)
                         if not specified.";
        }
        description "SAS instance configuration.";
    }
}

mag-nginx-configuration.yang

module mag-nginx-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/mag-nginx-configuration";
    prefix "mag-nginx";

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Nginx configuration schema.";

    revision 2023-10-30 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping mag-nginx-configuration-grouping {

        leaf nginx-perip-rate-limit {
            type uint32 {
                range "1 .. 500";
            }
            description "The request rate per sec for an IP.";
        }
        leaf nginx-perip-burst-limit {
            type uint32 {
                range "1 .. 500";
            }
            description "The burst rate for an IP.";
        }
        leaf nginx-server-rate-limit {
            type uint32 {
                range "1 .. 500";
            }
            description "The request rate per sec for the server.";
        }
        leaf nginx-server-burst-limit {
            type uint32 {
                range "1 .. 500";
            }
            description "The burst rate for the server.";
        }
        leaf nginx-perip-conn-limit {
            type uint32 {
                range "1 .. 500";
            }
            description "The no of simultaneous conn per IP.";
        }
        leaf nginx-server-conn-limit {
            type uint32 {
                range "1 .. 500";
            }
            description "The no of simultaneous conn for server.";
        }

        description "Nginx configuration.";
    }
}

shcm-service-configuration.yang

module shcm-service-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/shcm-service-configuration";
    prefix "shcm-service";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    import ietf-inet-types {
        prefix inet;
        revision-date 2013-07-15;
    }

    import extensions {
        prefix "yangdoc";
        revision-date 2020-12-02;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "ShCM service configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    typedef cache-strategy-type {
        type enumeration {
            enum no-cache {
                description "Do not use a cache.";
            }
            enum simple-cache {
                description "Use a simple cache.";
            }
            enum subscription-cache {
                description "Use a subscription cache.";
            }
        }
        description "The type used to define the caching strategy.";
    }

    grouping shcm-service-configuration-grouping {
        container diameter-sh {
            uses vmt:diameter-configuration-grouping;
            description "Diameter Sh configuration.";
            yangdoc:change-impact "external";
            yangdoc:change-impact "converges";
        }

        leaf health-check-user-identity {
            type vmt:sip-uri-type;
            mandatory true;
            description "The health check user identity.
                         This should match a test user configured in the HSS.";
        }

        leaf-list additional-client-addresses {
            type inet:ipv4-address;
            description "Optional list of additional allowed ShCM client IP addresses.
                         These addresses may access the ShCM API port,
                         in addition to TAS and REM nodes
                         which automatically have access.";
        }

        leaf diameter-request-timeout-milliseconds {
            type uint32 {
                range "909 .. 27273";
            }
            default 5000;
            description "The Diameter request timeout (in milliseconds).";
        }

        container cassandra-locking {
            leaf backoff-time-milliseconds {
                type uint32 {
                    range "50 .. 5000";
                }
                default 5000;
                description "The time (in milliseconds) to backoff before re-attempting to obtain
                             the lock in Cassandra.";
            }

            leaf backoff-limit {
                type uint32 {
                    range "1 .. 10";
                 }
                default 5;
                description "The limit of times to backoff and re-attempt to obtain a lock in
                             Cassandra.";
            }

            leaf hold-time-milliseconds {
                type uint32 {
                    range "1000 .. 30000";
                 }
                default 12000;
                description "The time (in milliseconds) to hold a lock in Cassandra.";
            }

            description "Cassandra locking configuration.";
        }

        grouping cache-parameters-group {
            description "Parameters describing the configuration for this cache.";

            leaf cache-validity-time-seconds {
                type uint32 {
                    range "1..172800";
                }
                mandatory true;
                description "Cache validity time (in seconds).";
            }
        }

        container caching {
            list service-indications {
                key "service-indication";

                leaf service-indication {
                    type string;
                    mandatory true;
                    description "Service indication.";
                }

                leaf cache-strategy {
                    type cache-strategy-type;
                    default "subscription-cache";
                    description "Cache strategy.";
                }

                container cache-parameters {
                    when "../cache-strategy != 'no-cache'";
                    uses "cache-parameters-group";
                    description "Parameters describing the configuration for this cache.";
                }

                description "Service indications.";
            }

            list data-references-subscription-allowed {
                key "data-reference";

                leaf data-reference {
                    type enumeration {
                        enum ims-public-identity {
                            description "IMS public identity";
                        }
                        enum s-cscfname {
                            description "S-CSCF Name";
                        }
                        enum initial-filter-criteria {
                            description "Initial filter criteria";
                        }
                        enum service-level-trace-info {
                            description "Service level trace info";
                        }
                        enum ip-address-secure-binding-information {
                            description "IP address secure binding information";
                        }
                        enum service-priority-level {
                            description "Service priority level";
                        }
                        enum extended-priority {
                            description "Extended priority";
                        }
                    }
                    mandatory true;
                    description "The data reference.";
                }

                leaf cache-strategy {
                    type cache-strategy-type;
                    default "subscription-cache";
                    description "The cache strategy.";
                }

                container cache-parameters {
                    when "../cache-strategy != 'no-cache'";
                    uses "cache-parameters-group";
                    description "Parameters describing the configuration for this cache.";
                }

                description "List of data references for which subscription is permitted, and
                             their caching strategy configuration";
            }

            list data-references-subscription-not-allowed {
                key "data-reference";

                leaf data-reference {
                    type enumeration {
                        enum charging-information {
                            description "Charging information";
                        }
                        enum msisdn {
                            description "MS-ISDN";
                        }
                        enum psiactivation {
                            description "PSI activation";
                        }
                        enum dsai {
                            description "DSAI";
                        }
                        enum sms-registration-info {
                            description "SMS registration info";
                        }
                        enum tads-information {
                            description "TADS information";
                        }
                        enum stn-sr {
                            description "STN SR";
                        }
                        enum ue-srvcc-capability {
                            description "UE SRV CC capability";
                        }
                        enum csrn {
                            description "CSRN";
                        }
                        enum reference-location-information {
                            description "Reference location information";
                        }
                    }
                    mandatory true;
                    description "The data reference.";
                }

                leaf cache-strategy {
                    type enumeration {
                        enum no-cache {
                            description "Do not use a cache.";
                        }
                        enum simple-cache {
                            description "Use a simple cache.";
                        }
                    }
                    default "simple-cache";
                    description "The cache strategy.";
                }

                container cache-parameters {
                    when "../cache-strategy != 'no-cache'";
                    uses "cache-parameters-group";
                    description "Parameters describing the configuration for this cache.";
                }

                description "List of data references for which subscription is not permitted,
                             and their caching strategy configuration.";
            }

            description "Caching configuration.";
        }

        leaf debug-logging-enabled {
            type boolean;
            default false;
            description "Enable extensive logging for verification and issue diagnosis during
                         acceptance testing. Must not be enabled in production.";
        }

        description "ShCM service configuration.";
    }
}

sentinel-volte-configuration.yang

module sentinel-volte-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/sentinel-volte-configuration";
    prefix "volte";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    import diameter-rf-configuration {
        prefix "rf";
        revision-date 2019-11-29;
    }

    import diameter-ro-configuration {
        prefix "ro";
        revision-date 2019-11-29;
    }

    import privacy-configuration {
        prefix "privacy";
        revision-date 2020-05-04;
    }

    import extensions {
        prefix "yangdoc";
        revision-date 2020-12-02;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Sentinel VoLTE configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping sentinel-volte-configuration-grouping {
        leaf session-replication-enabled {
            type boolean;
            default true;
            description "When enabled, SIP dialogs and charging sessions can be failed over to
                         other cluster nodes if the original node fails.

                         Set to 'true' to enable session replication. Set to 'false' to disable.";
            yangdoc:change-impact "restart";
        }

        container scc {

            must "fetch-cmsisdn-source != 'EXTENDED_MSISDN'
                  or udr-included-identities = 'IMPU_AND_IMPI'" {
                error-message "When `fetch-cmsisdn-source` is set to `EXTENDED_MSISDN`,"
                              + " `udr-included-identities` MUST be set to `IMPU_AND_IMPI`.";
            }

            leaf scc-mobile-core-type {
                type enumeration {
                    enum "gsm" {
                        description "GSM";
                    }
                    enum "cdma" {
                        description "CDMA";
                    }
                }
                mandatory true;
                description "The SCC mobile core type: 'GSM' or 'CDMA'.";
            }

            leaf fetch-cmsisdn-source {
                type enumeration {
                    enum "MSISDN" {
                        description "MS-ISDN";
                    }
                    enum "EXTENDED_MSISDN" {
                        description "Extended MS-ISDN";
                    }
                }

                default "MSISDN";
                description "The fetch Correlation Mobile Station ISDN (CMS-ISDN) source.
                             If set to 'EXTENDED_MSISDN', `udr-included-identities` MUST
                             be set to 'IMPU_AND_IMPI'.";
            }

            leaf udr-included-identities {
                type enumeration {
                    enum "IMPU" {
                        description "IMPU";
                    }
                    enum "IMPU_AND_IMPI" {
                        description "IMPU_AND_IMPI";
                    }
                }

                mandatory true;
                description "Defines which IMS user identities to include in outgoing user data
                             requests. Can be either 'IMPU' or 'IMPU_AND_IMPI'.
                             Must be set to 'IMPU_AND_IMPI' if `fetch-cmsisdn-source` is set
                             to 'EXTENDED_MSISDN'";
            }

            container service-continuity {

                leaf atcf-update-timeout-milliseconds {
                    type uint32;
                    default 2000;
                    description "The Access Transfer Control Function (ATCF) update timeout";
                }

                leaf stn-sr {
                    type vmt:number-string;
                    mandatory true;
                    description "The Session Transfer Number for SRVCC (STN-SR).";
                }

                description "Service continuity configuration.";
            }

            container service-centralisation {
                leaf inbound-ss7-address {
                    type vmt:sccp-address-type;
                    mandatory true;
                    description "The originating SCCP address.";
                    yangdoc:change-impact "restart";
                }

                leaf use-direct-icscf-routing {
                    type boolean;
                    mandatory true;
                    description "If 'true', the configured I-CSCF URI will be added to the route
                                 header of the reoriginated INVITE. If 'false', the HSS will be
                                 queried for the S-CSCF URI to use for the subscriber.";
                }

                leaf generated-pvni-template {
                    type string;
                    mandatory true;
                    description "A template string for the P-Visited-Network-Information header
                                 generated in the reorigination, where {mnc} and {mcc} are
                                 replaced with the MNC and MCC respectively.";
                }

                leaf police-originating-requests {
                    type boolean;
                    mandatory true;
                    description "Police incoming originating requests, and reject attempts to
                                 hijack the call.";
                }

                container simple-imrn-pool {
                    must "minimum-correlation-id < maximum-correlation-id" {
                        error-message "When configuring simple-imrn-pool config,"
                                      + " minimum-correlation-id must be less than"
                                      + " maximum-correlation-id.";
                    }

                    leaf minimum-correlation-id {
                        type uint64 {
                            range "0 .. 999999999999999999";
                        }
                        mandatory true;
                        description "The minimum correlation ID value used in the cluster.
                                     0 to maximum-correlation-id.";
                    }

                    leaf maximum-correlation-id {
                        type uint64 {
                            range "0 .. 999999999999999999";
                        }
                        mandatory true;
                        description "The maximum correlation ID value used in the cluster. 0 to
                                     (10^18-1).";
                    }

                    leaf number-of-digits-in-correlation-id {
                        type uint8 {
                            range "1 .. 18";
                        }
                        mandatory true;
                        description "The number of digits the correlation ID should have.
                                     Minimum of number of digits in maximum-correlation-id
                                     to 18 maximum.";
                    }

                    description "Simple IMRN pool config for mainline case.";
                }

                container scc-gsm-service-centralisation {
                    when "../../scc-mobile-core-type = 'gsm'";

                    container gsm-imrn-formation {
                        leaf routing-to-internal-network-number-allowed {
                            type boolean;
                            mandatory true;
                            description "If set to 'true', routing to an internal network number is
                                         allowed.";
                        }

                        leaf nature {
                            type enumeration {
                                enum "SUBSCRIBER" {
                                    description "Subscriber";
                                }
                                enum "UNKNOWN" {
                                    description "Unknown";
                                }
                                enum "NATIONAL" {
                                    description "National";
                                }
                                enum "INTERNATIONAL" {
                                    description "International";
                                }
                                enum "NETWORK_SPECIFIC" {
                                    description "Network specific";
                                }
                                enum "NETWORK_ROUTING_NATIONAL" {
                                    description "Network routing national";
                                }
                                enum "NETWORK_ROUTING_NETWORK_SPECIFIC" {
                                    description "Network routing network specific";
                                }
                                enum "NETWORK_ROUTING_WITH_CALLED_DIRECTORY" {
                                    description "Network routing with call directory";
                                }

                            }
                            mandatory true;
                            description "The type of call. Used when forwarding a call.";
                        }

                        leaf numbering-plan {
                            type enumeration {
                                enum "SPARE_0" {
                                    description "Spare 0";
                                }
                                enum "ISDN" {
                                    description "ISDN";
                                }
                                enum "SPARE_2" {
                                    description "Spare 2";
                                }
                                enum "DATA" {
                                    description "Data";
                                }
                                enum "TELEX" {
                                    description "Telex";
                                }
                                enum "NATIONAL_5" {
                                    description "National 5";
                                }
                                enum "NATIONAL_6" {
                                    description "National 6";
                                }
                                enum "SPARE_7" {
                                    description "Spare 7";
                                }

                            }
                            mandatory true;
                            description "The numbering plan to be used when forwarding a call.";
                        }

                        description "GSM IMRN formation configuration.";
                    }

                    leaf bypass-terminating-forwarding-if-served-user-not-ims-registered {
                        type boolean;
                        mandatory true;
                        description "If true, reorigination is skipped if the subscriber
                                     is not registered in the IMS network.";
                    }

                    leaf always-term-reoriginate-if-served-user-is-roaming {
                        type boolean;
                        default false;
                        description "If true, roaming terminating sessions will always be
                                     reoriginated (regardless of IMS registration).";
                    }


                    description "SCC GSM Service Centralisation Configuration.";
                }

                container scc-cdma-service-centralisation {
                    when "../../scc-mobile-core-type = 'cdma'";

                    container scc-cdma-actions {
                        typedef action {
                            type enumeration {
                                enum "accessDenied_notUsed" {
                                    description "Access Denied - Not Used";
                                }
                                enum "accessDenied_unassignedDirectoryNumber" {
                                    description "Access Denied - Unassigned Directory Number";
                                }
                                enum "accessDeniedReason_inactive" {
                                    description "Access Denied, Reason - Inactive";
                                }
                                enum "accessDeniedReason_busy" {
                                    description "Access Denied, Reason - Busy";
                                }
                                enum "accessDeniedReason_terminationDenied" {
                                    description "Access Denied, Reason - Termination Denied";
                                }
                                enum "accessDeniedReason_noPageResponse" {
                                    description "Access Denied, Reason - No Page Response";
                                }
                                enum "accessDeniedReason_unavailable" {
                                    description "Access Denied, Reason - Unavailable";
                                }
                                enum "accessDeniedReason_serviceRejectedByMS" {
                                    description "Access Denied, Reason - Service Rejected By MS";
                                }
                                enum "accessDeniedReason_serviceRejectedByTheSystem" {
                                    description "Access Denied, Reason - Service Rejected By The
                                                 System";
                                }
                                enum "accessDeniedReason_serviceTypeMismatch" {
                                    description "Access Denied, Reason - Service Type Mismatch";
                                }
                                enum "accessDeniedReason_serviceDenied" {
                                    description "Access Denied, Reason - Service Denied";
                                }
                                enum "allowCallToContinue" {
                                    description "Allow Call To Continue";
                                }
                            }
                            description "SCC CDMA actions";
                        }

                        leaf action-on-unsupported-trigger {
                            type action;
                            mandatory true;
                            description "Action to take when an unexpected trigger is received.";
                        }

                        leaf action-on-failed-to-allocate-routing-number {
                            type action;
                            mandatory true;
                            description "Action to take when there is a failure generating a
                                         routing number.";
                        }

                        leaf default-failure-action {
                            type action;
                            mandatory true;
                            description "Default action to take on error.";
                        }

                        description "SCC CDMA actions configuration.";
                    }

                    container cdma-imrn-formation {
                        leaf imrn-type-of-digits {
                            type enumeration {
                                enum "DIALED_OR_CALLED_PARTY_NUMBER" {
                                    description "Dialed Number or Called Party Number";
                                }
                                enum "CALLING_PARTY_NUMBER" {
                                    description "Calling Party Number";
                                }
                                enum "CALLER_INTERACTION" {
                                    description "Caller Interaction";
                                }
                                enum "ROUTING_NUMBER" {
                                    description "Routing Number";
                                }
                                enum "BILLING_NUMBER" {
                                    description "Billing Number";
                                }
                                enum "DESTINATION_NUMBER" {
                                    description "Destination Number";
                                }
                                enum "LATA" {
                                    description "LATA";
                                }
                                enum "CARRIER" {
                                    description "Carrier Number";
                                }
                            }
                            mandatory true;
                            description "The type of digits used in the generated IMRN.";
                        }

                        leaf imrn-nature-of-number {
                            type enumeration {
                                enum "NATIONAL" {
                                    description "National";
                                }
                                enum "INTERNATIONAL" {
                                    description "International";
                                }
                            }
                            mandatory true;
                            description "The nature field of the IMRN generated.";
                        }

                        leaf imrn-numbering-plan {
                            type enumeration {
                                enum "UNKNOWN" {
                                    description "Unknown Numbering Plan";
                                }
                                enum "ISDN" {
                                    description "ISDN Numbering";
                                }
                                enum "TELEPHONY" {
                                    description "Telephony Numbering (ITU-T E.164, E.163)";
                                }
                                enum "DATA" {
                                    description "Data Numbering (ITU-T X.121)";
                                }
                                enum "TELEX" {
                                    description "Telex Numbering (ITU-T F.69)";
                                }
                                enum "MARITIME_MOBILE" {
                                    description "Maritime Mobile Numbering";
                                }
                                enum "LAND_MOBILE" {
                                    description "Land Mobile Numbering (ITU-T E.212)";
                                }
                                enum "PRIVATE" {
                                    description "Private Numbering Plan (service provider defined)";
                                }
                                enum "PC_SSN" {
                                    description "SS7 Point Code and Subsystem Number";
                                }
                                enum "IP_ADDRESS" {
                                    description "Internet Protocol Address";
                                }
                            }
                            mandatory true;
                            description "The numbering plan field of the IMRN generated.";
                        }

                        description "CDMA IMRN formation configuration.";
                    }

                    leaf bypass-forwarding-if-served-user-not-ims-registered {
                        type boolean;
                        mandatory true;
                        description "If true, reorigination is skipped if the subscriber
                                     is not registered in the IMS network.";
                    }

                    description "SCC CDMA Service Centralisation Configuration.";
                }

                description "SCC Service Centralisation Configuration.";
            }

            container tads {
                leaf csrn-prefix {
                    type string;
                    description "The Circuit Switched Routing Number (CSRN) prefix.";
                }

                leaf address-source-for-scc-tads {
                    type enumeration {
                        enum "CMSISDN" {
                            description "Use the Correlation Mobile Station International
                                         Subscriber Directory Number (CMSISDN) for SCC TADS.";
                        }

                        enum "MSRN" {
                            description "Use the Mobile Station Roaming Number (MSRN) for SCC TADS.
                                         Only valid when the scc-mobile-core-type is 'gsm'.";
                        }
                        enum "TLDN" {
                            description "Use the Temporary Local Directory Number (TLDN) for SCC
                                         TADS. Only valid when the scc-mobile-core-type is
                                         'cdma'.";
                        }
                    }
                    must "(. != 'MSRN' and ../../scc-mobile-core-type = 'cdma')
                          or ../../scc-mobile-core-type = 'gsm'" {
                        error-message "'address-source-for-scc-tads' cannot be set to 'MSRN' when"
                                      + " 'scc-mobile-core-type' is set to 'cmda'.";
                    }
                    must "(. != 'TLDN' and ../../scc-mobile-core-type = 'gsm')
                          or ../../scc-mobile-core-type = 'cdma'" {
                        error-message "'address-source-for-scc-tads' cannot be set to 'TLDN' when"
                                      + "'scc-mobile-core-type' is set to 'gsm'";
                    }

                    mandatory true;
                    description "Which value should be used for routing TADS requests to. Valid
                                 values are 'CMSISDN', 'MSRN' (GSM only), and 'TLDN' (CDMA only)";
                }

                container voice-over-ps-support {
                    presence "Indicates that voice over PS support is required.";

                    leaf request-user-identity-type {
                        type enumeration {
                            enum "IMPU" {
                                description "The IMS Public ID user identity type.";
                            }

                            enum "MSISDN" {
                                description "The MS-ISDN user identity type.";
                            }
                            enum "IMPU_IMPI" {
                                description "The IMPU IMPI user identity type.";
                            }
                            enum "MSISDN_IMPI" {
                                description "The MS-ISDN IMPI user identity type.";
                            }
                        }
                        mandatory true;
                        description "The user identity type to use in requests.";
                    }

                    description "Configuration for voice over PS support.";
                }

                leaf wlan-allowed {
                    type boolean;
                    default false;
                    description "Set to 'true' if W-LAN is allowed. Set to 'false' to disallow.";
                }

                leaf tads-identity-for-terminating-device {
                    type enumeration {
                        enum "IMS_PUBLIC_IDENTITY" {
                            description "Send TADS requests to the IMS public identity of the
                                         terminating device";
                        }
                        enum "SIP_INSTANCE" {
                            description "Send TADS requests to the 'sip.instance' of the
                                         terminating device";
                        }
                        enum "PATH_FROM_SIP_INSTANCE" {
                            description "Send TADS requests to the 'path' header within the
                                         'sip.instance' of the terminating device";
                        }
                    }
                    default "IMS_PUBLIC_IDENTITY";
                    description "The identity of the terminating device that TADS will send the
                                 request to.";
                }

                leaf end-session-error-code {
                    type uint32 {
                        range "400 .. 699";
                    }
                    default 480;
                    description "The SIP response code that is returned when a session is ended
                                 due to an error.";
                }

                leaf cs-routing-via-icscf {
                    type boolean;
                    default true;
                    description "When enabled INVITE requests destined for the CS network will be
                                 sent directly via the I-CSCF, bypassing the S-CSCF.";
                }

                container on-sequential-routing {
                    leaf tads-timer-max-wait-milliseconds {
                        type uint32 {
                            range "500 .. 5000";
                        }
                        mandatory true;
                        description "Time to wait (in milliseconds) for a potentially better forked
                                     response.";
                    }

                    leaf-list ps-fallback-response-codes {
                        type vmt:sip-status-code {
                            range "400 .. 699";
                        }
                        description "List of SIP response codes that will trigger attempts of more
                                     routes after a PS attempt.";
                    }

                    description "Configuration for TADS sequential routing";
                }

                container on-parallel-routing {
                    leaf parallel-timer-max-wait-milliseconds {
                        type uint32 {
                            range "0 .. 30000";
                        }
                        mandatory true;
                        description "Time to wait (in milliseconds) for a final response.";
                    }

                    leaf release-all-legs-on-busy {
                        type boolean;
                        mandatory true;
                        description "When enabled TADS will end all parallel forks on the first
                                     busy response (486).";
                    }

                    description "Configuration for TADS parallel routing";
                }

                container sri-requests-to-hlr {
                    when "../../scc-mobile-core-type = 'gsm'";

                    leaf set-suppress-tcsi-flag {
                        type boolean;
                        default false;
                        description "If enabled, when sending an SRI request to the HLR the feature
                                     will set the suppress T-CSI flag on the request";
                    }

                    leaf set-suppress-announcement-flag {
                        type boolean;
                        default false;
                        description "If enabled, when sending an SRI request to the HLR on a
                                     terminating call the feature will set the
                                     'Suppression of Announcement' flag on the request.";
                    }

                    description "Configuration for SRI requests sent to the HLR";
                }

                container suppress-cs-domain-call-diversion {
                    presence "Suppress call diversion in CS domain";

                    leaf use-diversion-counter-parameter {
                        type boolean;
                        mandatory true;
                        description "When true, use diversion counter parameter, otherwise use
                                     number of headers.";
                    }

                    leaf cs-domain-diversion-limit {
                        type uint32 {
                            range "1 .. max";
                        }
                        mandatory true;
                        description "The configured diversion limit in the CS network to suppress
                                     further call diversion.";
                    }

                    description "When present, requests destined to the CS domain will contain a
                                 Diversion header to suppress call diversion in the CS domain
                                 side of the call.";
                }

                description "TADS configuration.";
            }

            description "SCC configuration.";
        }


        container mmtel {

            container announcement {

                leaf announcements-media-server-uri {
                    type vmt:sip-or-tel-uri-type;
                    mandatory true;
                    description "The URI of the media server used to play announcements.";
                }

                leaf announcements-no-response-timeout-milliseconds {
                    type uint32 {
                        range "1 .. max";
                    }
                    default 1000;
                    description "The maximum time to wait (in milliseconds) for the media server
                                 to respond before cancelling an announcement.";
                }

                list announcements {
                    must "repeat > '-1' or interruptable = 'true'" {
                        error-message "'interruptable' must be set to 'true' if 'repeat' is set to
                                      '-1'.";
                    }

                    key "id";

                    leaf id {
                        type uint32 {
                            range "1 .. max";
                        }
                        mandatory true;
                        description "The ID for this announcement.";
                    }

                    leaf description {
                        type string;
                        description "A description of what this announcement is used for.";
                    }

                    leaf announcement-url {
                        type string;
                        mandatory true;
                        description "The file URL of this announcement on the media server.";
                    }

                    leaf delay-milliseconds {
                        type uint32;
                        mandatory true;
                        description "The delay interval (in milliseconds) between repetitions
                                    of this announcement.";
                    }

                    leaf duration-milliseconds {
                        type uint32;
                        mandatory true;
                        description "The maximum duration (in milliseconds) of this announcement.";
                    }

                    leaf repeat {
                        type int32 {
                            range "-1 .. max";
                        }
                        mandatory true;
                        description "How many times the media server should repeat this
                                    announcement. A value of -1 will cause the announcement
                                    to repeat continuously until it is interrupted.";
                    }

                    leaf mimetype {
                        type string;
                        description "The MIME content type for this announcement, e.g audio/basic,
                                    audio/G729, audio/mpeg, video/mpeg.";
                    }

                    leaf interruptable {
                        type boolean;
                        mandatory true;
                        description "Determines whether this announcement can be interrupted. This
                                    only applies to announcements played after the call is
                                    established.";
                    }

                    leaf suspend-charging {
                        type boolean;
                        mandatory true;
                        description "Determines whether online charging should be suspended while
                                    this announcement is in progress. This only applies to
                                    announcements played after the call is established.";
                    }

                    leaf end-session-on-failure {
                        type boolean;
                        mandatory true;
                        description "Determines whether the session should be terminated if this
                                    announcement fails to play. This only applies to
                                    announcements played during call setup.";
                    }

                    leaf enforce-one-way-media {
                        type boolean;
                        mandatory true;
                        description "Determines whether to enforce one-way media from the media
                                    server to the party hearing the announcement. This only applies
                                    to announcements played after the call is established.";
                    }

                    leaf locale {
                        type string;
                        description "The language/language variant used in the announcement.";
                    }

                    description "A list containing the configuration for each announcement that
                                the system can play.";
                }

                container default-error-code-announcement {
                    presence "Enable default error code announcement";

                    leaf announcement-id {
                        type vmt:announcement-id-type;
                        mandatory true;
                        description "The ID of the announcement to be played to the calling party
                                    when an error response is received during call setup.";
                    }

                    leaf end-call-with-487-response {
                        type boolean;
                        description "Determines whether the call should be ended with a 487
                                    error code rather than the error code that triggered the
                                    announcement.";
                    }

                    description "Configuration for the default announcement that is played when
                                an error response is received during call setup.";
                }

                list error-code-announcements {
                    key error-code;

                    leaf error-code {
                        type uint16 {
                            range "400..699";
                        }
                        mandatory true;
                        description "The SIP error response code that this entry applies to.";
                    }

                    leaf disable-announcement {
                        type boolean;
                        default false;
                        description "If set to 'true', no announcement will be played for this
                                    error code, overriding any default error code announcement
                                    that has been set.";
                    }

                    leaf announcement-id {
                        when "../disable-announcement = 'false'";
                        type vmt:announcement-id-type;
                        description "ID of the announcement to play when this error code is
                                    received.";
                    }

                    leaf end-call-with-487-response {
                        type boolean;
                        description "Determines whether to use the original received error code,
                                    or a 487 error code to end the call after the announcement.";
                    }

                    description "A list containing configuration for assigning specific
                                announcements for specific SIP error response codes received during
                                call setup.";
                }

                description "Configuration for SIP announcements.";
            }

            container hss-queries-enabled {
                leaf odb {
                    type boolean;
                    default false;
                    description "Determines whether the HSS will be queried for operator
                                determined barring (ODB) subscriber data.";
                }

                leaf metaswitch-tas-services {
                    type boolean;
                    default false;
                    description "Determines whether the HSS will be queried for Metaswitch TAS
                                services subscriber data.";
                }

                description "Configuration for enabling optional queries for certain types of
                            subscriber data in the HSS.";
            }

            leaf determine-roaming-from-hlr {
                when "../../scc/scc-mobile-core-type = 'gsm'";
                type boolean;
                default true;
                description "Determines whether location information from the GSM HLR should be
                             used to determine the roaming status of the subscriber.";
            }

            container conferencing {
                leaf conference-mrf-uri {
                    type vmt:sip-uri-type;
                    mandatory true;
                    description "The URI for the Media Resource Function (MRF) used for
                                conferencing.";
                }

                leaf route-to-mrf-via-ims {
                    type boolean;
                    mandatory true;
                    description "Set to 'true' to add the I-CSCF to the 'route' header of messages
                                towards the MRF. Set to 'false' and the messages will be routed
                                directly to the MRF from the TAS.";
                }

                leaf msml-vendor {
                    type enumeration {
                        enum Dialogic {
                            description "Dialogic";
                        }
                        enum Radisys {
                            description "Radisys";
                        }
                    }
                    mandatory true;
                    description "The Media Server Markup Language (MSML) vendor, for Conferencing.";
                }
                leaf enable-scc-conf-handling {
                    type boolean;
                    default true;
                    description "Determines the SIP signaling used to draw conference participants
                                from their consulting call into the conference call. When 'false'
                                the 3GPP standard conferencing signaling will be used, when 'true'
                                a more reliable method based on SCC access transfer procedures will
                                be used instead.";
                }

                leaf root-on-selector {
                    type boolean;
                    default true;
                    description "Determines where the root element is placed when generating MSML.
                                When 'false' it will be placed directly on the video layout
                                element, when 'true' its will be set on the selector element on
                                the video layout element.";
                }

                leaf-list conference-factory-psi-aliases {
                    type vmt:sip-or-tel-uri-type;
                    description "A list of conference factory PSIs to use in addition to the
                                 standard conference factory PSIs, as per TS 23.003, which are:
                                - 'sip:mmtel@conf-factory.<HOME-DOMAIN>'
                                - 'sip:mmtel@conf-factory.ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org'
                                - 'sip:mmtel@conf-factory.ics.mnc<MNC>.mcc<MCC>.3gppnetwork.org'
                                Within values '<HOME-DOMAIN>' matches the value defined for
                                /home-network/home-domain.
                                Within values, if both '<MCC>' and '<MNC>' are used in an entry,
                                they will match any MCC/MNC pair defined in
                                /home-network/home-plmn-ids.";
                }

                leaf maximum-participants {
                    type uint8 {
                        range "3 .. max";
                    }
                    mandatory true;
                    description "The maximum number of participants that are allowed in a single
                                conference call.";
                }

                leaf allow-video-conference-calls {
                    type boolean;
                    mandatory true;
                    description "Set to 'true' to allow video to be used in conference calls.";
                }

                leaf conference-view-removal-delay-milliseconds {
                    type uint32;
                    mandatory true;
                    description "Delay (in milliseconds) after a conference ends before
                                conference view information in cleaned up.";
                }

                container subscription {
                    leaf default-subscription-expiry-seconds {
                        type uint32;
                        default 3600;
                        description "Time (in seconds) for a subscription to last if the SUBSCRIBE
                                    message doesn't contain an Expires header.";
                    }

                    leaf min-subscription-expiry-seconds {
                        type uint32;
                        default 5;
                        description "Minimum time (in seconds) that a subscription is allowed to
                                    last for. SUBSCRIBE requests with an Expires value lower than
                                    this are rejected.";
                    }

                    leaf polling-interval-seconds {
                        type uint32;
                        default 5;
                        description "Interval (in seconds) between of polls for changes to the
                                    conference view.";
                    }

                    description "Configuration for conference event subscriptions.";
                }

                description "Configuration for the MMTel conferencing service.";
            }

            container international-and-roaming {
                leaf non-international-format-number-is-national {
                    type boolean;
                    default false;
                    description "Set to 'true' to treat non-international numbers (no leading '+')
                                as national. Set to 'false' to disable this behaviour.";
                }

                leaf end-call-if-no-visited-network {
                    type boolean;
                    default false;
                    description "Set to 'true' to end the call if no visited network can be
                                determined. Set to 'false' to allow the call to proceed.";
                }

                leaf use-mcc-specific {
                    type boolean;
                    default false;
                    description "Set to 'true' to determine international status using different
                                configuration for each access network MCC.
                                Set to 'false' to use the default configuration.";
                }

                leaf min-length {
                    type uint8 {
                        range "0 .. 31";
                    }
                    mandatory true;
                    description "Minimum length that the destination address must be before doing
                                a check for international and roaming status.";
                }

                description "Configuration for determining international and roaming status.";
            }

            container north-american-numbering-plan-analysis {
                leaf enable-nanp-analysis {
                    type boolean;
                    default false;
                    description "Whether to analyse numbers according to the North American
                                 Numbering Plan, using this to determine location information.";
                }
                description "Configuration for analysing numbers according to the North American
                             Numbering Plan.";
            }

            container international-call-management {
                container default-international-call-management {
                    leaf bar-calls-with-missing-prefix {
                        type boolean;
                        default false;
                        description "Whether calls dialed without the international prefix are
                                     barred.";
                    }
                    leaf bar-calls-with-missing-prefix-announcement-id {
                        when "../bar-calls-with-missing-prefix = 'true'";
                        type vmt:announcement-id-type;
                        description "The ID of the announcement to play when calls dialed without
                                     the international prefix are barred.";
                    }
                    leaf international-call-announcement-id {
                        type vmt:announcement-id-type;
                        description "The ID of the announcement to play to the calling party when an
                                     international call is made.";
                    }
                    description "The default handling of calls determined to be international.";
                }
                list call-management-by-country-code {
                    when "../../north-american-numbering-plan-analysis/enable-nanp-analysis
                         = 'true'" ;

                    key iso-country-code;
                    leaf iso-country-code {
                        type string {
                            length "2";
                            pattern "[A-Z]*";
                        }
                        description "The determined ISO country code of the called party if
                                     within the NANP.";
                    }
                    leaf bar-calls-with-missing-prefix {
                        type boolean;
                        default false;
                        description "Whether to bar calls to this destination that were dialled
                                     without an international prefix.";
                    }
                    leaf bar-calls-with-missing-prefix-announcement-id {
                        when "../bar-calls-with-missing-prefix = 'true'";
                        type vmt:announcement-id-type;
                        description "The ID of the announcement to play if calls to this destination
                                     were barred.";
                    }
                    leaf international-call-announcement-id {
                        type vmt:announcement-id-type;
                        description "The ID of the announcement to play before international calls
                                     to this destination are connected.";
                    }
                    description "The configuration of international NANP calls by destination
                                 country. Only available if North American Numbering Plan
                                 analysis is enabled.";
                }
                description "Configuration for barring and announcements of calls determined to be
                             international.";
            }

            container call-diversion {
                uses vmt:feature-announcement {
                    refine "announcement/announcement-id" {
                            mandatory false;
                    }

                    augment "announcement" {
                        leaf voicemail-announcement-id {
                            when "../../forward-to-voicemail";
                            type vmt:announcement-id-type;
                            description "The ID of the announcement to be played when forwarding
                                        to a recognized voicemail server.";
                        }

                        description "Add voicemail-specific announcement.";
                    }
                }

                container mmtel-call-diversion {
                    leaf max-diversions {
                        type uint32;
                        mandatory true;
                        description "Maximum number of diversions that may be made while attempting
                                     to establish a session.";
                    }

                    leaf max-diversion-action {
                        type enumeration {
                            enum REJECT {
                                description "Reject the call.";
                            }
                            enum DELIVER_TO_FIXED_DESTINATION {
                                description "Direct the call to the address specified in
                                            max-diversion-fixed-destination.";
                            }
                            enum DELIVER_TO_SUBSCRIBERS_VOICEMAIL_SERVER {
                                description "Direct the call to the subscriber's voicemail
                                            server.";
                            }
                        }
                        mandatory true;
                        description "Action to take when the maximum number of diversions is
                                    exceeded.";
                    }

                    leaf max-diversion-fixed-destination {
                        when "../max-diversion-action = 'DELIVER_TO_FIXED_DESTINATION'";
                        type vmt:sip-or-tel-uri-type;
                        description "The address to deliver communication to when the maximum
                                    number of diversions is exceeded and ../max-diversion-action
                                    is set to 'DELIVER_TO_FIXED_DESTINATION'.";
                    }

                    leaf no-reply-timeout-seconds {
                        type uint8 {
                            range "5 .. 180";
                        }
                        mandatory true;
                        description "Time to wait (in seconds) for a reply before diverting due to
                                    a no reply rule. This value is the network default, and can
                                    be overridden in subscriber data.";
                    }

                    leaf add-orig-tag {
                        type boolean;
                        default true;
                        description "Set to 'true' to add an 'orig' tag to the Route header when
                                    diverting a call.";
                    }

                    leaf-list diversion-limit-exempt-uris {
                        type vmt:sip-or-tel-uri-type;
                        description "List of URIs may still be diverted to after the max diversions
                                    limit has been reached.";
                    }

                    leaf suppress-for-cs-terminating-domain {
                        type boolean;
                        mandatory true;
                        description "Set to 'true' to suppress call diversion behaviour for calls
                                     terminating in the CS domain.";
                    }

                    leaf prefer-subscriber {
                        type boolean;
                        mandatory true;
                        description "Set to 'true' to have subscriber configuration take
                                     precedence over operator configuration.";
                    }

                    leaf default-target-uri {
                        type vmt:sip-or-tel-uri-type;
                        description "The address to forward to if an operator or subscriber
                                    forward-to rule has no target specified.";
                    }

                    leaf-list additional-not-reachable-status-codes {
                        type vmt:sip-status-code {
                            range "300..301|303..399|400..403|405..407|409..485|488..699";
                        }
                        description "List of response codes that can trigger a 'not-reachable'
                                    diversion rule (in addition to those outlined in the MMTel
                                    call diversion specification). The following status codes
                                    cannot be used: 1xx, 2xx, 302, 404, 408, 486, 487.";
                    }

                    leaf allow-not-reachable-during-alerting {
                        type boolean;
                        mandatory true;
                        description "Set to 'true' to allow diversion rules with 'not-reachable'
                                    conditions to be triggered after a 180 response has been
                                    received from the called party.";
                    }

                    leaf add-mp-param {
                        type boolean;
                        mandatory true;
                        description "Set to 'true' to add a 'hi-target-param' of type 'mp' to the
                                    History-Info header entry added by a diversion.";
                    }

                    description "Configuration for the MMTel call diversion service.";
                }

                container forward-to-voicemail {
                    presence "Enable forwarding to a subscriber's configured voicemail server if
                             all other connection attempts fail.";

                    leaf-list voicemail-uris {
                        type vmt:sip-or-tel-uri-type;
                        description "List of URIs for which a voicemail-specific announcement will
                                    be played (if specified) and for which forwarding to
                                    without allocated credit will be allowed (if enabled).";
                    }

                    leaf forward-to-voicemail-timeout-seconds {
                        type uint32;
                        mandatory true;
                        description "Maximum amount of time to wait (in seconds) for a call to be
                                     successfully connected before executing default forward to
                                     voicemail behaviour (if enabled). Set to '0' to disable
                                     the timer.";
                    }

                    leaf forward-to-voicemail-without-ocs-credit {
                        when "../../../../charging/gsm-online-charging-type = 'ro'
                            or ../../../../charging/gsm-online-charging-type = 'cap-ro'
                            or ../../../../charging/cdma-online-charging-enabled = 'true'";
                        type enumeration {
                            enum NEVER_ALLOW {
                                description "Never forward to voicemail when credit has not been
                                            allocated.";
                            }
                            enum ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS {
                                description "Allow forwarding to voicemail when credit has not been
                                            allocated if address matches a known voicemail
                                            server.";
                            }
                            enum ALWAYS_ALLOW {
                                description "Always allow forwarding to voicemail when credit has
                                            not been allocated.";
                            }
                        }
                        description "Determines whether to allow forwarding to voicemail when
                                    credit cannot be allocated for a call. Only applies when using
                                    Diameter Ro based online charging.";
                    }

                    description "Configuration for forwarding to a subscriber's voicemail server.";
                }

                description "Configuration for the MMTel call diversion service.";
            }

            container communication-hold {

                uses vmt:feature-announcement;

                container bandwidth-adjustment {
                    presence "Bandwidth adjustment is enabled.";
                    leaf b-as-parameter {
                        type uint32;
                        mandatory true;
                        description "The value to set for the 'b=AS:' parameter to use when
                                    processing a Hold response.";
                    }

                    leaf b-rr-parameter {
                        type uint32;
                        mandatory true;
                        description "The value to set for the 'b=RR:' parameter to use when
                                    processing a Hold response.";
                    }

                    leaf b-rs-parameter {
                        type uint32;
                        mandatory true;
                        description "The value to set for the 'b=RS:' parameter to use when
                                    processing a Hold response.";
                    }

                    description "Configuration for adjusting the bandwidth of responses when
                                sessions are Held and Resumed.

                                Parameter definitions: 3GPP TS 24.610 Rel 12.6.0 section 4.5.2.4.";
                }

                leaf holding-party-media-mode {
                    type enumeration {
                        enum NO_HOLD {
                            description "The passive party is not put on hold during the
                                        announcement, media streams are left as they were.";
                        }
                        enum BLACK_HOLE_ONLY {
                            description "SDP is renegotiated with the passive party so that for
                                        the duration of the announcement, all media streams
                                        are directed to a black hole IP.";
                        }
                        enum FULL_HOLD {
                            description "SDP is renegotiated with the passive party so that for
                                        the duration of the announcement, all media streams
                                        are directed to a black hole IP; and additionally the
                                        passive party is put on hold by setting the stream
                                        status to `sendonly` or `inactive`.";
                        }
                    }
                    default FULL_HOLD;
                    description "Determines how media streams for the holding party are handled
                                while an announcement to the held party is in progress.";
                }

                description "Configuration for the MMTel communication hold service.";
            }

            container communication-waiting {

                uses vmt:feature-announcement;

                leaf timer-seconds {
                    type uint8 {
                        range "0 | 30 .. 120";
                    }
                    mandatory true;
                    description "The maximum time (in seconds) that the communication waiting
                                service will wait for the call to be answered before abandoning
                                it. Default value is 0, which means the timer does not apply.";
                }

                description "Configuration for the MMTel communication waiting service.";
            }

            container privacy {
                uses privacy:privacy-config-grouping;
                description "Configuration for the MMTel privacy services.";
            }

            container psap-callback {
                leaf use-priority-header {
                    type boolean;
                    mandatory true;
                    description "If set to 'true', use the contents of the Priority header in
                                 the initial INVITE to determine whether the session is a
                                 PSAP callback.";
                }

                container sip-message-options {
                    presence "Use the SIP MESSAGE mechanism to determine whether session is a PSAP
                              callback.";

                    leaf expiry-time-seconds {
                        type uint32;
                        mandatory true;
                        description "When a SIP MESSAGE notifying that a PSAP call has taken
                                     place, this is the time (in seconds) after receiving that
                                     MESSAGE that sessions for the identified user are assumed
                                     to be a PSAP callback.";
                    }

                    leaf terminate-message {
                        type boolean;
                        mandatory true;
                        description "If set to true, SIP MESSAGEs notifying a PSAP call will be
                                    terminated at the MMTel, otherwise they are propagated
                                    through the network.";
                    }

                    description "Configuration for the SIP MESSAGE mechanism for determining
                                whether a session is a PSAP callback.";
                }

                description "Configuration for PSAP callback service.";
            }

            container communication-barring {

                container incoming-communication-barring {

                    uses vmt:feature-announcement {
                        refine "announcement/announcement-id" {
                                mandatory false;
                        }

                        augment "announcement" {
                            leaf anonymous-call-rejection-announcement-id {
                                type vmt:announcement-id-type;
                                description "The ID for a different announcement that can be played
                                            if the call is barred because it is from an anonymous
                                            user.";
                            }

                            description "Add new fields to announcement.";
                        }
                    }

                    leaf international-rules-active {
                        type boolean;
                        default false;
                        description "If 'false', incoming call barring will ignore International
                                     and International-exHC rules. This is because it is not
                                     possible to accurately determine whether the calling party
                                     is international in all circumstances.";
                    }

                    description "Configuration for incoming communication barring.";
                }

                container outgoing-communication-barring {

                    uses vmt:feature-announcement;

                    description "Configuration for outgoing communication barring.";
                }

                container operator-communication-barring {

                    container operator-barring-rules {
                        when "../../../hss-queries-enabled/odb = 'true'";

                        container type1 {
                            uses operator-barring-rule;
                            presence "Enable type1 operator barring rule";
                            description "The Type1 operator barring rule.";
                        }

                        container type2 {
                            uses operator-barring-rule;
                            presence "Enable type2 operator barring rule";
                            description "The Type2 operator barring rule.";
                        }

                        container type3 {
                            uses operator-barring-rule;
                            presence "Enable type3 operator barring rule";
                            description "The Type3 operator barring rule.";
                        }

                        container type4 {
                            uses operator-barring-rule;
                            presence "Enable type4 operator barring rule";
                            description "The Type4 operator barring rule.";
                        }

                        description "Configuration for operator barring rules.";
                    }

                    container outgoing-prefix-barring {
                        presence "Outgoing prefix barring is configured";

                        list prefixes {
                            key "prefix";

                            leaf prefix {
                                type string;
                                mandatory true;
                                description "The prefix to match against for outgoing barring.";
                            }

                            leaf-list classifications {
                                type leafref {
                                    path "../../classifications/name";
                                }

                                description "The classification(s) to apply when this prefix
                                            is matched.";
                            }

                            description "The list of prefixes to match against, and their
                                        corresponding classifications to be used for outgoing
                                        barring.";
                        }

                        list classifications {
                            must 'minimum-number-length <= maximum-number-length' {
                                error-message "'minimum-number-length' must be less than or equal
                                              to 'maximum-number-length'.";
                            }

                            must "not(announcement and disable-ocb-announcement = 'true')" {
                                error-message "'disable-ocb-announcement' must be omitted or
                                              set to 'false' if an outgoing prefix barring
                                              announcement is specified.";
                            }

                            key "name";

                            leaf name {
                                type string {
                                  pattern '[^\t\n\r]+';
                                }
                                mandatory true;
                                description "The name for this barring classification.";
                            }

                            leaf minimum-number-length {
                                type uint8 {
                                    range "1 .. 20";
                                }
                                mandatory true;
                                description "The minimum length the number must be to match
                                            this classification.";
                            }

                            leaf maximum-number-length {
                                type uint8 {
                                    range "1 .. 20";
                                }
                                mandatory true;
                                description "The maximum length the number can be to match
                                            this classification.";
                            }

                            leaf match-international {
                                type boolean;
                                mandatory true;
                                description "When true, the normalized number must be international
                                            and not within the Home Country Code to match this
                                            classification.";
                            }

                            leaf barring-treatment {
                                type enumeration {
                                    enum OSBType1 {
                                        description "Treat call as a Type1 operator barring rule.";
                                    }
                                    enum OSBType2 {
                                        description "Treat call as a Type2 operator barring rule.";
                                    }
                                    enum OSBType3 {
                                        description "Treat call as a Type3 operator barring rule.";
                                    }
                                    enum OSBType4 {
                                        description "Treat call as a Type4 operator barring rule.";
                                    }
                                    enum OperatorAllow {
                                        description "Allow call to proceed.";
                                    }
                                    enum OperatorBar {
                                        description "Bar the call.";
                                    }
                                    enum PremiumRateInformation {
                                        description "Treat call as premium rate information.";
                                    }
                                    enum PremiumRateEntertainment {
                                        description "Treat call as premium rate entertainment.";
                                    }
                                }
                                mandatory true;
                                description "How to handle a call that this classification applies
                                            to.";
                            }

                            leaf disable-ocb-announcement {
                                type boolean;
                                default false;
                                description "Disables the 'outgoing-call-barring' announcement.
                                            Cannot be 'true' when an announcement is specified.";
                            }

                            uses vmt:feature-announcement {

                                refine "announcement/announcement-id" {
                                    description "The ID of an announcement to play instead of the
                                                usual 'outgoing-call-barring' announcement.";
                                }

                            }

                            description "The list of classifications that can be applied for a
                                        prefix match.";
                        }

                        description "Configuration for outgoing prefix barring.";
                    }

                    description "Configuration for operator communication barring.";
                }

                description "Configuration for MMTel communication barring service.";
            }

            container vertical-service-codes {

                container xcap-data-update {

                    leaf host {
                        type ietf-inet:domain-name;
                        mandatory true;
                        description "Hostname of XCAP server to send HTTP requests to.";
                    }

                    leaf port {
                        type ietf-inet:port-number;
                        status obsolete;
                        description "Obsolete in RVT 4.1 series and later. Port of XCAP server to
                                    send HTTP requests to. Can be omitted to use the default port
                                    for the protocol port.";
                    }

                    leaf use-https {
                        type boolean;
                        status obsolete;
                        description "Obsolete in RVT 4.1 series and later. Indicates whether or not
                                    to use HTTP over TLS to connect to the XCAP server.";
                    }

                    leaf base-uri {
                        type ietf-inet:uri;
                        status obsolete;
                        description "Obsolete in RVT 4.1 series and later. Base URI of XCAP
                                    server.";
                    }

                    leaf auid {
                        type string;
                        status obsolete;
                        description "Obsolete in RVT 4.1 series and later. XCAP application unique
                                    identifier to use in request URI.";
                    }

                    leaf document {
                        type string;
                        status obsolete;
                        description "Obsolete in RVT 4.1 series and later. XCAP document to use in
                                    request URI.";
                    }

                    leaf success-response-status-code {
                        type vmt:sip-status-code;
                        mandatory true;
                        description "Response status code to use following a successful HTTP
                                    response.";
                    }

                    leaf failure-response-status-code {
                        type vmt:sip-status-code;
                        mandatory true;
                        description "Response status code to use following a failure HTTP
                                    response.";
                    }

                    container failure-announcement {
                        presence "Enables announcement on failure";

                        leaf announcement-id {
                            type vmt:announcement-id-type;
                            mandatory true;
                            description "The ID of the announcement to be played.";
                        }

                        description "An announcement be played if the update fails.";
                    }

                    description "Configuration for service codes that execute XCAP data updates.";
                }

                description "Configuration for vertical service codes.";
            }

            description "Configuration for MMTel services.";
        }

        container registrar {

            leaf data-storage-type {
                when "../../scc/scc-mobile-core-type = 'gsm'";
                type enumeration {
                    enum hsscache {
                        description "HSS cache data storage.";
                    }
                    enum cassandra {
                        description "Cassandra data storage.";
                    }
                }
                default cassandra;
                description "Data storage type.";
            }

            leaf user-identity-type-for-stn-sr-request {
                type enumeration {
                    enum CMSISDN {
                        description "The user's CMS ISDN.";
                    }
                    enum PUBLIC_ID {
                        description "The user's public ID.";
                    }
                }
                default PUBLIC_ID;
                description "The type of user identity to use when creating Sh requests for the
                             STN-SR.";
            }

            leaf include-private-id-in-stn-sr-request {
                type boolean;
                default false;
                description "Whether the user's IMS Private ID should be included in Sh requests
                             for the STN-SR.";
            }

            description "Registrar configuration.";
        }

        container sis {
            leaf unavailable-peer-list-timer-milliseconds {
                type uint64;
                default 60000;
                description "The duration for which a server will be blocked after a failure is
                             detected. This avoids the RA trying to use the server immediately
                             after a failure, when it is most likely just going to fail again.
                             After this time has passed the failed server may be tried again on
                             subsequent client transactions. If a server specifies a Retry-After
                             duration in a 503 response, that value will be used instead.";
            }

            leaf failover-timer-milliseconds {
                type uint64;
                default 4000;
                description "Specifies the duration of the failover timer. If
                             this timer expires before any responses were received, the
                             RA treats this as a transport error and tries sending the request to
                             the next available server. This timer should be set to a value smaller
                             than the default Timer B and Timer F timers (32s) so that failures can
                             be detected promptly. A value of zero disables this timer.";
            }

            description "SIS configuration.";
        }

        container hlr-connectivity-origin {
            when "../scc/tads/address-source-for-scc-tads != 'CMSISDN'
                  or ../mmtel/determine-roaming-from-hlr = 'true'
                  or ../charging/cap-charging/imssf/imcsi-fetching/originating-tdp
                  or ../charging/cap-charging/imssf/imcsi-fetching/terminating-tdp";

            leaf originating-address {
                type vmt:sccp-address-type;
                mandatory true;
                description "The originating SCCP address. This often is a Point Code and SSN,
                             where the SSN is typically 145 or 146";
            }

            container gsm {
                when "../../scc/scc-mobile-core-type = 'gsm'";
                description "HLR connectivity configuration specific to GSM.";

                leaf mlc-address {
                    type vmt:ss7-address-string-type;
                    mandatory true;
                    description "The MLC SCCP address. This is the logical address
                                 of the originator, i.e. this service. Typically a Global Title.";
                }

                leaf use-msisdn-as-hlr-address {
                    type boolean;
                    mandatory true;
                    description "Indicates if 'hlr/hlr-address' should be used as the actual
                                 HLR address, or have its digits replaced with the MSISDN of
                                 the subscriber.";
                }

                leaf msc-originating-address {
                    type vmt:sccp-address-type;
                    description "Originating SCCP address when acting as an MSC, used when
                                 establishing the MAP dialog. Will default to the value of
                                 'originating-address' when not present. Typically used to set a
                                 different originating SSN when sending a SendRoutingInformation
                                 message to the HLR.";
                }
            }

            container cdma {
                when "../../scc/scc-mobile-core-type = 'cdma'";
                description "HLR connectivity configuration specific to CDMA.";

                leaf market-id {
                    type uint32 {
                        range "0..65535";
                    }
                    mandatory true;
                    description "The market ID (MarketID).
                                 Forms part of the Mobile Switching Center Identification (MSCID)";
                    reference "X.S0004-550-E v3.0 2.161";
                }

                leaf switch-number {
                    type uint32 {
                        range "0..255";
                    }
                    mandatory true;
                    description "The switch number (SWNO).
                                 Forms part of the Mobile Switching Center Identification (MSCID)";
                    reference "X.S0004-550-E v3.0 2.161";
                }
            }

            leaf map-invoke-timeout-milliseconds {
                type uint32 {
                    range "250 .. 45000";
                }
                default 5000;
                description "The Message Application Part (MAP) invoke timeout (in milliseconds).";
            }

            description "Origin HLR connectivity configuration.";
        }

        container charging {

            leaf gsm-online-charging-type {
                when "../../scc/scc-mobile-core-type = 'gsm'";
                type enumeration {
                    enum ro {
                        description "Use Diameter Ro charging.";
                    }
                    enum cap {
                        description "Use CAMEL Application Part (CAP) charging.";
                    }
                    enum cap-ro {
                        description "Use both Diameter Ro and CAMEL Application Part (CAP)
                                     charging.";
                    }
                    enum disabled {
                        description "Disable online charging.";
                    }
                }
                default ro;
                description "The online charging type. Only valid when 'scc-mobile-core-type' is
                             'gsm'.";
            }

            leaf cdma-online-charging-enabled {
                when "../../scc/scc-mobile-core-type = 'cdma'";
                type boolean;
                default true;
                description "Set to 'true' to enable online charging.  Set to 'false' to disable.
                             Only valid when 'scc-mobile-core-type' is 'cdma'.";
            }

            container ro-charging {
                when "../gsm-online-charging-type = 'ro'
                      or ../gsm-online-charging-type = 'cap-ro'
                      or ../cdma-online-charging-enabled = 'true'";

                container diameter-ro {
                    uses ro:diameter-ro-configuration-grouping;

                    leaf continue-session-on-ocs-failure {
                        type boolean;
                        default false;
                        description "Set to 'true' to permit sessions to continue if there is an
                                     OCS (Online Charging System) failure.";
                    }

                    description "Diameter Ro configuration.";
                }

                container charging-announcements {
                    container low-credit-announcements {
                        leaf call-setup-announcement-id {
                            type vmt:announcement-id-type;
                            description "Announcement ID to be played during call setup if the
                                         subscriber has low credit.";
                        }

                        leaf mid-call-announcement-id {
                            type vmt:announcement-id-type;
                            description "Announcement ID to be played during a call if the
                                         subscriber has low credit.";
                        }

                        leaf charging-reauth-delay-milliseconds {
                            type uint32;
                            description "The delay (in milliseconds) for issuing a credit check
                                         after a call is connected with low balance (0 indicates
                                         immediate reauth).";
                        }

                        description "Configuration for low credit announcements.";
                    }

                    container out-of-credit-announcements {
                        leaf call-setup-announcement-id {
                            type vmt:announcement-id-type;
                            description "Announcement ID to be played during call setup if the
                                         subscriber is out of credit.";
                        }

                        leaf mid-call-announcement-id {
                            type vmt:announcement-id-type;
                            description "Announcement ID to be played during a call if the
                                         subscriber is out of credit.";
                        }

                        description "Configuration for out of credit announcements.";
                    }

                    description "Configuration for charging related announcements.";
                }

                description "Ro charging configuration. Used when 'cdma-online-charging-type' is
                             set to 'true' or when 'gsm-online-charging-type' is set to 'ro' or
                             'cap-ro'.";
            }

            container rf-charging {
                must "../cdr/interim-cdrs" {
                    error-message "'interim-cdrs' section must be present when 'rf-charging' is"
                                  + " present.";
                }
                presence "Enables Rf charging.";

                container diameter-rf {
                    uses rf:diameter-rf-configuration-grouping;
                    description "Diameter Rf configuration.";
                }

                description "Rf charging configuration. Presence enables Rf charging.";
            }

            container cap-charging {
                when "../gsm-online-charging-type = 'cap'
                      or ../gsm-online-charging-type = 'cap-ro'";

                container imssf {
                    container imcsi-fetching {

                        leaf originating-tdp {
                            type uint8 {
                                range "2 | 3 | 12";
                            }
                            description "The requested Trigger Detection Point for originating
                                         calls, which determines whether T_CSI or O_CSI is
                                         requested from the HLR. Values of '2' or '3' will
                                         request the O_CSI, '12' will request the T_CSI, other
                                         values are not valid.";
                        }

                        leaf terminating-tdp {
                            type uint8 {
                                range "2 | 3 | 12";
                            }
                            description "The requested Trigger Detection Point for terminating
                                         calls, which determines whether T_CSI or O_CSI is
                                         requested from the HLR. Values of '2' or '3' will
                                         request the O_CSI, '12' will request the T_CSI, other
                                         values are not valid.";
                        }

                        description "IM-CSI fetching configuration.";
                    }

                    container charging-gt {
                        leaf format {
                            type string {
                                pattern '(\d*({iso})*({mcc})*({mnc})*)+';
                            }
                            mandatory true;
                            description "The format template to use when creating Charging GTs
                                         (global title). It must be a digit string except for
                                         tokens ('{iso}', '{mcc}', '{mnc}') which are
                                         substituted in.";
                        }

                        leaf unknown-location {
                            type vmt:number-string;
                            mandatory true;
                            description "The Charging GT (global title) to use when one could not
                                         be generated because the user’s location could not be
                                         determined.";
                        }

                        leaf only-charge-terminating-call-if-international-roaming {
                            type boolean;
                            default false;
                            description "Should terminating charging only be applied if the served
                                         user is roaming internationally.";
                        }

                        description "Configuration for the charging GT (global title) that is sent
                                     to the SCP.";
                    }

                    leaf scf-address {
                        type vmt:sccp-address-type;
                        mandatory true;
                        description "The SCCP address of the GSM charging SCP.";
                    }

                    description "IM-SSF configuration.";
                }

                description "CAP charging configuration. Used when 'gsm-online-charging-type' is
                             set to 'cap' or 'cap-ro'.";
            }

            container cdr {
                container interim-cdrs {
                    presence "Enables interim CDRs.";

                    leaf write-cdrs-in-filesystem {
                        type boolean;
                        default true;
                        description "'true' means that CDRs are written locally by the application.
                                     CDRs are written via Diameter Rf if the Sentinel VoLTE
                                     configuration value 'rf-charging' is present.";
                    }

                    leaf write-cdr-on-sdp-change {
                        type boolean;
                        default true;
                        description "Indicates whether or not to write CDRs on SDP changes.";
                    }

                    leaf interim-cdrs-period-seconds {
                        type uint32;
                        default 300;
                        description "The maximum duration (in seconds) between timer driven interim
                                     CDRs.

                                     Setting this to zero will disable timer based interim CDRs.";
                    }

                    description "Interim CDR configuration. Presence enables Interim CDRs.";
                }

                leaf session-cdrs-enabled {
                    type boolean;
                    mandatory true;
                    description "'true' enables the creation of session CDRs, 'false' disables.";
                }

                leaf registrar-audit-cdrs-enabled {
                    type boolean;
                    default false;
                    description "'true' enables the creation of Registrar audit CDRs, 'false'
                                 disables.";
                }

                leaf registrar-cdr-stream-name {
                    type string;
                    default 'registrar-cdr-stream';
                    description "CDR stream to write Registrar audit CDRs to.";
                }

                description "CDR configuration.";
            }

            description "Charging configuration";
        }

        container session-refresh {

            leaf timer-interval-seconds {
                type uint32;
                default 30;
                description "The interval (in seconds) of the periodic timer used to check whether
                             a session needs refreshing.";
            }

            leaf refresh-period-seconds {
                type uint32;
                default 570;
                description "Period of no activity for leg to refresh (in seconds).";
            }

            leaf refresh-with-update-if-allowed {
                type boolean;
                default true;
                description "Whether the session should be refreshed using UPDATE requests,
                             when the endpoint allows UPDATE requests.

                             Otherwise sessions are refreshed using re-INVITE requests.";
            }

            leaf max-call-duration-seconds {
                type uint32;
                default 86400;
                description "Maximum allowed duration of a call (in seconds).";
            }

            description "Session Refresh configuration.";
        }

        leaf debug-logging-enabled {
            type boolean;
            default false;
            description "Enable extensive logging for verification and issue diagnosis during
                         acceptance testing. Must not be enabled in production.";
        }

        description "The Sentinel VoLTE configuration.";
    }

    grouping operator-barring-rule {

        anyxml rule {
            mandatory true;
            description "";
        }

        container retarget {
            presence "Indicates that the call should be retargeted when this rule matches.";

            leaf retarget-uri {
                type vmt:sip-or-tel-uri-type;
                mandatory true;
                description "The URI to retarget this call to if the barring rule matches.";
            }

            uses vmt:feature-announcement;

            leaf disable-online-charging-on-retarget {
                type boolean;
                default false;
                description "Should charging be disabled when we retarget.";
            }

            description "Should the call be retargeted if this barring rule matches.";
        }

        description "Operator barring rule";
    }
}

hlr-configuration.yang

module hlr-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/hlr-configuration";
    prefix "hlr";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "HLR configuration schema.";

    revision 2020-06-01 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping hlr-configuration-grouping {
        leaf hlr-address {
            type vmt:sccp-address-type;
            mandatory true;
            description "The HLR SCCP address.
                         This is typically in the form of a Global Title";
        }

        description "HLR configuration.";
    }
}

icscf-configuration.yang

module icscf-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/icscf-configuration";
    prefix "icscf";

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "I-CSCF configuration schema.";

    revision 2020-06-01 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping icscf-configuration-grouping {
        leaf i-cscf-uri {
            type vmt:sip-uri-type;
            mandatory true;
            description "The URI of the Interrogating Call Session Control Function (I-CSCF).

                         For MMT, the Conf and ECT features will automatically add an 'lr'
                         parameter to it. The hostname part should either be a resolvable name or
                         the IP address of the I-CSCF.";
        }

        description "I-CSCF configuration.";
    }
}

sgc-configuration.yang

module sgc-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/sgc-configuration";
    prefix "sgc";

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    import hazelcast-configuration {
        prefix "hazelcast";
    }

    import m3ua-configuration {
        prefix "m3ua";
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "SGC configuration schema.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping sgc-configuration-grouping {
        container hazelcast {
            uses hazelcast:hazelcast-configuration-grouping;
            description "Cluster-wide Hazelcast configuration.";
        }

        container sgcenv {
            uses sgcenv-configuration-grouping;
            description "Values to be placed in the sgcenv configuration file.";
        }

        container sgc-properties {
            presence "This container is optional, but has mandatory descendants.";
            uses sgc-properties-configuration-grouping;
            description "Values to be placed in the SGC.properties configuration file.";
        }

        container m3ua {
            uses m3ua:m3ua-configuration-grouping;
            description "M3UA configuration.";
        }

        description "SGC configuration.";
    }

    grouping sgcenv-configuration-grouping {
        leaf jmx-port {
            type ietf-inet:port-number;
            default 10111;
            description "The port to bind to for JMX service, used by the CLI and MXBeans.

                         The SGC's jmx-host will be set to localhost";
        }

        description "Values to be placed in the sgcenv configuration file.";
    }

    grouping sgc-properties-configuration-grouping {
        list properties {
            key "name";
            leaf name {
                type string;
                mandatory true;
                description "Property name.";
            }
            leaf value {
                type string;
                mandatory true;
                description "Property value.";
            }

            description "List of name,value property pairs.";
        }

        description "Values to be placed in the SGC.properties configuration file.";
    }
}

sentinel-ipsmgw-configuration.yang

module sentinel-ipsmgw-configuration {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/sentinel-ipsmgw-configuration";
    prefix "ipsmgw";

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    import vm-types {
        prefix "vmt";
        revision-date 2019-11-29;
    }

    import diameter-ro-configuration {
        prefix "ro";
        revision-date 2019-11-29;
    }

    import extensions {
        prefix "yangdoc";
        revision-date 2020-12-02;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Sentinel IPSMGW configuration schema.";

    revision 2020-06-01 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    grouping sentinel-ipsmgw-configuration-grouping {
        container georedundancy {

            presence "Enables geo-redundancy for IPSMGW.";
            leaf total-sites {
                type uint32 {
                    range '2 .. 32';
                }
                mandatory true;
                description "The number of geo-redundant sites.";
            }

            // Site ID is derived from site-id in the vmpool config

            description "Geo-redundancy configuration.";
        }

        container map-messaging {
            leaf template-smsc-address {
                type vmt:sccp-address-type;
                mandatory true;
                description "The 'digits' parameter value in this template
                             is replaced by the value of that parameter from the
                             received SMSC address to create a return address to the SMSC.";
            }

            leaf originating-address {
                type vmt:sccp-address-type;
                mandatory true;
                description "The SCCP address used as the calling party address in SS7 messages
                             initiated by the IP-SM-GW.";
                yangdoc:change-impact "restart";
            }

            leaf ipsmgw-as-msc-address {
                type vmt:ss7-address-string-type;
                mandatory true;
                description "The ipsmgw-as-msc-address is the address that the IP-SM-GW will
                            return to the GMSC during the SendRoutingInformation phase of the
                            MT message procedure, so that subsequent messages will be delivered
                            to the IP-SM-GW. TCAP messages with this address should be
                            routeable to an IP-SM-GW node.";
            }

            leaf use-msisdn-as-hlr-address {
                type boolean;
                mandatory true;
                description "Indicates if 'hlr/hlr-address' should be used as the actual HLR
                             address, or have its digits replaced with the MSISDN of the
                             subscriber.";
            }

            leaf suppress-hlr-interaction {
                type boolean;
                must ". = 'true' and ../../delivery-order = 'PS_ONLY' or . = 'false'" {
                    error-message "'suppress-hlr-interaction' can only be 'true' when"
                                  + " 'delivery-order' is set to 'PS_ONLY'";
                }
                mandatory true;
                description "If true, no MAP messages will be sent to the HLR. Useful in LTE-only
                             networks. Can only be set to true when 'delivery-order' is 'PS_ONLY'";
            }

            leaf use-gt-as-calling-party {
                type boolean;
                mandatory true;
                description "When accepting an OpenRequest, the SCCP responder address in the
                             OpenAccept will, by default, be set to the value of the SCCP called
                             party in the OpenRequest. If `UseGtAsCallingParty` is set to true,
                             and if the received sccp-called-party contains a global title, then
                             the global title will be used.";
            }

            leaf sms-content-size-threshold {
                type uint32;
                mandatory true;
                description "If the length of the message content falls within the configured
                             maximum then send the ForwardSM as part of the TC-BEGIN. As a
                             special case a configured max size of 0 disables this functionality
                             regardless of the actual content length.";
            }

            leaf sri-sm-delivery-not-intended {
                type boolean;
                mandatory true;
                description "If true, specify the SmDeliveryNotIntended flag when performing an SRI
                             for SM IMSI-only query (i.e. during SMMA callflows).";
            }

            leaf discard-inform-sc {
                type boolean;
                default true;
                description "If true, discard outbound InformSC components from requests sent to
                             the HLR.";
            }

            leaf force-sm-rp-pri {
                type boolean;
                default true;
                description "If true, force Sm_RP_PRI to be set to true in SendRoutingInfoForSM
                             requests sent to the HLR.";
            }

            description "IPSMGW address configuration.";
        }

        leaf invoke-timeout-milliseconds {
            type uint32;
            default 4500;
            description "Timeout (in milliseconds) when invoking MAP operations.";
        }

        leaf terminating-domain {
            type ietf-inet:domain-name;
            mandatory true;
            description "Domain defined by the operator to compose SIP URIs from the MSISDN.";
        }

        leaf sip-transport {
            type enumeration {
                enum tcp {
                    description "TCP.";
                }

                enum udp {
                    description "UDP.";
                }
            }
            default udp;
            description "The SIP transport to use for IPSMGW's own SIP URI in
                         outbound requests.";
        }

        leaf delivery-order {
            type enumeration {
                enum PS_THEN_CS {
                    description "Try IMS network first, then circuit-switched network second.";
                }

                enum CS_THEN_PS {
                    description "Try circuit-switched network first, then IMS network second.";
                }

                enum PS_ONLY {
                    description "Only try delivery over the IMS network.";
                }

                enum CS_ONLY {
                    description "Only try delivery over the circuit-switched network.";
                }
            }

            mandatory true;
            description "The delivery order for mobile-terminating messages.";
        }

        container charging-options {
            leaf mt-ps-enabled {
                type boolean;
                mandatory true;
                description "Whether charging is enabled for mobile-terminating PS messages.";
            }

            leaf mt-cs-enabled {
                type boolean;
                mandatory true;
                description "Whether charging is enabled for mobile-terminating CS messages.";
            }

            leaf mo-ps-enabled {
                type boolean;
                mandatory true;
                description "Whether charging is enabled for mobile-originating PS messages.";
            }

            container diameter-ro {
                when "../mt-ps-enabled = 'true'
                    or ../mt-cs-enabled = 'true'
                    or ../mo-ps-enabled = 'true'";
                uses ro:diameter-ro-configuration-grouping;
                description "Diameter Ro configuration.";
            }

            container cdr {
                leaf max-size-bytes {
                    type uint64;
                    default 100000000;
                    description "Approximate maximum size in bytes before a new CDR file is
                                 started. After a CDR is written, the total file size is
                                 compared to MaxSize. If the current file size is larger, it is
                                 completed. If set to 0, no size-based rollover is done.";
                }

                leaf max-cdrs {
                    type uint32;
                    default 0;
                    description "Number of records to be written to a CDR file before a new file is
                               started. If set to 0, no record-based rollover is done.";
                }

                leaf max-interval-milliseconds {
                    type uint32 {
                        range "0 | 1000 .. max";
                    }
                    default 0;
                    description "The length of time (in milliseconds) before time-based file
                                rollover. If a CDR file is used for more than
                                max-interval-milliseconds without being rolled over due to
                                record- or size-based limits, it is completed anyway. If set to
                                0, no time-based rollover is done.";
                }

                leaf registrar-audit-cdrs-enabled {
                    type boolean;
                    default false;
                    description "'true' enables the creation of Registrar audit CDRs, 'false'
                                 disables.";
                }

                description "CDR configuration.";
            }

            description "Message charging options.";
        }

        container ue-reachability-notifications {
            presence "Enables UE reachability notifications.";

            leaf subscription-expiry-time-seconds {
                type uint32;
                mandatory true;
                description "The UE reachability subscription expiry time (in seconds).";
            }

            description "Settings regarding UE reachability subscriptions.";
        }

        container correlation-ra-plmnid {
            leaf mcc {
                type leafref {
                    path "/home-network/home-plmn-ids/mcc";
                }
                mandatory true;
                description "The Mobile Country Code (MCC).";
            }

            leaf mnc {
                type leafref {
                    path "/home-network/home-plmn-ids[mcc = current()/../mcc]/mncs";
                }
                mandatory true;
                description "The Mobile Network Code (MNC).";
            }

            description "The PLMNID used by the correlation RA to generate MT correlation IMSIs
                         when the routing info for the terminating subscriber cannot be
                         determined. Must match one of the PLMNIDs defined in the
                         home network configuration.";
        }

        container fallback-settings {
            leaf fallback-timer-milliseconds {
                type uint32;
                default 5000;
                description "Timeout (in milliseconds) before attempting message delivery
                             fallback.";
            }

            leaf-list avoidance-codes-ps-to-cs {
                type uint32;
                description "List of error codes which will prevent fallback from PS to CS.";
            }

            leaf-list avoidance-codes-cs-to-ps {
                type uint32;
                description "List of error codes which will prevent fallback from CS to PS.";
            }

            description "Delivery fallback settings.";
        }

        leaf-list sccp-allowlist {
            type string;
            description "List of allowed GT prefixes.
                        If non-empty, then requests from any GT originating addresses not on the
                        list will be rejected. If empty, then all requests will be allowed.
                        Requests from non-GT addresses are always allowed.";
        }

        leaf routing-info-cassandra-ttl-seconds {
            type uint32;
            default 120;
            description "Timeout (in seconds) that routing info is stored in Cassandra.";
        }

        container ussi {

            container reject-all-with-default-message {
                presence "Reject all USSI messages with a default message";

                leaf language {
                    type string {
                        length "2";
                        pattern "[a-zA-Z]*";
                    }
                    mandatory true;
                    description "The language that will be set in the USSI response message.";
                }

                leaf message {
                    type string;
                    mandatory true;
                    description "The text that will be set in the USSI response message.";
                }

                description "Should all USSI messages be rejected with a default message.";
            }

            description "USSI configuration.";
        }

        leaf debug-logging-enabled {
            type boolean;
            default false;
            description "Enable extensive logging for verification and issue diagnosis during
                         acceptance testing. Must not be enabled in production.";
        }

        description "IPSMGW configuration.";
    }
}

vm-types.yang

module vm-types {
    yang-version 1.1;
    namespace "http://metaswitch.com/yang/tas-vm-build/vm-types";
    prefix "vm-types";

    import ietf-inet-types {
        prefix "ietf-inet";
    }

    import extensions {
        prefix "yangdoc";
        revision-date 2020-12-02;
    }

    organization "Metaswitch Networks";
    contact "rvt-schemas@metaswitch.com";
    description "Types used by the various virtual machine schemas.";

    revision 2019-11-29 {
        description
            "Initial revision";
        reference
            "Metaswitch Deployment Definition Guide";
    }

    typedef rhino-node-id-type {
        type uint16 {
            range "1 .. 32767";
        }
        description "The Rhino node identifier type.";
    }

    typedef sgc-cluster-name-type {
        type string;
        description "The SGC cluster name type.";
    }

    typedef deployment-id-type {
        type string {
            pattern "[a-zA-Z0-9-]{1,20}";
        }
        description "Deployment identifier type. May only contain upper and lower case letters 'a'
                     through 'z', the digits '0' through '9' and hyphens. Must be between 1 and
                     20 characters in length, inclusive.";
    }

    typedef site-id-type {
        type string {
            pattern "DC[0-9]+";
        }
        description "Site identifier type. Must be the letters DC followed by one or more
                     digits 0-9.";
    }

    typedef node-type-suffix-type {
        type string {
            pattern "[a-zA-Z0-9]*";
        }
        description "Node type suffix type. May only contain upper and lower case letters 'a'
                     through 'z' and the digits '0' through '9'. May be empty.";
    }

    typedef trace-level-type {
        type enumeration {
            enum off {
                description "The 'off' trace level.";
            }
            enum severe {
                description "The 'severe' trace level.";
            }
            enum warning {
                description "The 'warning level.";
            }
            enum info {
                description "The 'info' trace level.";
            }
            enum config {
                description "The 'config' trace level.";
            }
            enum fine {
                description "The 'fine' trace level.";
            }
            enum finer {
                description "The 'finer' trace level.";
            }
            enum finest {
                description "The 'finest' trace level.";
            }
        }
        description "The Rhino trace level type";
    }

    typedef sip-uri-type {
        type string {
            pattern 'sip:.*';
        }
        description "The SIP URI type.";
    }

    typedef tel-uri-type {
        type string {
            pattern 'tel:\+?[-*#.()A-F0-9]+';
        }
        description "The Tel URI type.";
    }

    typedef sip-or-tel-uri-type {
        type union {
            type sip-uri-type;
            type tel-uri-type;
        }
        description "A type allowing either a SIP URI or a Tel URI.";
    }

    typedef number-string {
        type string {
            pattern "[0-9]+";
        }
        description "A type that permits a non-negative integer value.";
    }

    typedef phone-number-type {
        type string {
            pattern '\+?[*0-9]+';
        }
        description "A type that represents a phone number.";
    }

    typedef sccp-address-type {
        type string {
            pattern "(.*,)*type=(A|C)7.*";
            pattern "(.*,)*ri=(gt|pcssn).*";
            pattern "(.*,)*ssn=[0-2]?[0-9]?[0-9].*";
            pattern ".*=.*(,.*=.*)*";
        }
        description "A type representing an SCCP address in string form.
                    The basic form of an SCCP address is:

                    `type=<variant>,ri=<address type>,<parameter>=<value>,...`

                    where `<variant>` is `A7` for ANSI-variant SCCP or `C7` for ITU-variant SCCP,
                    and `<address type>` is one of `gt` or `pcssn`
                    (for an address specified by Global Title (GT),
                    or Point Code (PC) and Subsystem Number (SSN), respectively).

                    The `<parameter>` options are:

                    - Point code: `pc=<point code in network-cluster-member (ANSI)
                    or integer (ITU) format>`
                    - Subsystem number: `ssn=<subsystem number 0-255>`
                    - Global title address digits: `digits=<address digits, one or more 0-9>`
                    - Nature of address: `nature=<nature>` where `<nature>` is
                    `unknown`, `international`, `national`, or `subscriber`
                    - Numbering plan: `numbering=<numbering>` where `<numbering>` is
                    `unknown`, `isdn`, `generic`, `data`, `telex`, `maritime-mobile`,
                    `land-mobile`, `isdn-mobile`, or `private`
                    - Global title translation type: `tt=<integer 0-255>`
                    - National indicator: `national=<true or false>`.

                    `parameter` names are separated from their values by an equals sign,
                    and all `<parameter>=<value>` pairs are separated by commas.
                    Do not include any whitespace anywhere in the address.

                    Only the `ssn` and `national` parameters are mandatory; the others are optional,
                    depending on the details of the address - see below.

                    Note carefully the following:

                    - For ANSI addresses, ALWAYS specify `national=true`,
                    unless using ITU-format addresses in an ANSI-variant network.
                    - For ITU addresses, ALWAYS specify `national=false`.
                    - All SCCP addresses across the deployment's configuration
                    must use the same variant (`A7` or `C7`).
                    - Be sure to update the SGC's SCCP variant in `sgc-config.yaml`
                    to match the variant of the addresses.

                    ---

                    For PC/SSN addresses (with `ri=pcssn`), you need to specify
                    the point code and SSN.
                    For GT addresses (with `ri=gt`), you must specify the global title digits
                    and SSN in addition to the fields listed below (choose one option).

                    There are two options for ANSI GT addresses:

                    - translation type only
                    - numbering plan and translation type.

                    There are four options for ITU GT addresses:

                    - nature of address only
                    - translation type only
                    - numbering plan and translation type
                    - nature of address with either or both of numbering plan and translation type.

                    ---

                    Some valid ANSI address examples are:

                    - `type=A7,ri=pcssn,pc=0-0-5,ssn=147,national=true`
                    - `type=A7,ri=gt,ssn=146,tt=8,digits=12012223333,national=true`

                    Some valid ITU address examples are:

                    - `type=C7,ri=pcssn,pc=1434,ssn=147,national=false`
                    - `type=C7,ri=gt,ssn=146,nature=INTERNATIONAL,numbering=ISDN,tt=0,
                    digits=123456,national=false`
                    - `type=C7,ri=gt,ssn=148,numbering=ISDN,tt=0,digits=0778899,national=false`";
    }

    typedef ss7-point-code-type {
        type string {
            pattern "(([0-2]?[0-9]?[0-9]-){2}[0-2]?[0-9]?[0-9])|"
                  + "([0-1]?[0-9]{1,4})";
        }
        description "A type representing an SS7 point code.
                     When ANSI variant is in use, specify this in network-cluster-member format,
                     such as 1-2-3, where each element is between 0 and 255.
                     When ITU variant is in use, specify this as an integer between 0 and 16383.
                     Note that for ITU you will need to quote the integer,
                     as this field takes a string rather than an integer.";
    }

    typedef ss7-address-string-type {
        type string {
            pattern "(.*,)*address=.*";
            pattern ".*=.*(,.*=.*)*";
        }
        description "The SS7 address string type.";
    }

    typedef sip-status-code {
        type uint16 {
            range "100..699";
        }
        description "SIP response status code type.";
    }

    typedef secret {
        type string;
        description "A secret, which will be automatically encrypted using the secrets-private-key
                     configured in the Site Definition File (SDF).";
    }

    grouping cassandra-contact-point-interfaces {
        leaf management.ipv4 {
            type ietf-inet:ipv4-address-no-zone;
            mandatory true;
            description "The IPv4 address of the management interface.";
        }
        leaf signaling.ipv4 {
            type ietf-inet:ipv4-address-no-zone;
            mandatory true;
            description "The IPv4 address of the signaling interface.";
        }
        description "Base network interfaces: management and signaling";
    }

    grouping day-of-week-grouping {
        leaf day-of-week {
            type enumeration {
                enum Monday {
                    description "Every Monday.";
                }

                enum Tuesday {
                    description "Every Tuesday.";
                }

                enum Wednesday {
                    description "Every Wednesday.";
                }

                enum Thursday {
                    description "Every Thursday.";
                }

                enum Friday {
                    description "Every Friday.";
                }

                enum Saturday {
                    description "Every Saturday.";
                }

                enum Sunday {
                    description "Every Sunday.";
                }
            }
            description "The day of the week on which to run the scheduled task.";
        }
        description "Grouping for the day of the week.";
    }

    grouping day-of-month-grouping {
        leaf day-of-month {
            type uint8 {
                range "1..28";
            }
            description "The day of the month (from the 1st to the 28th)
                         on which to run the scheduled task.";
        }
        description "Grouping for the day of the month.";
    }

    grouping frequency-grouping {
        choice frequency {
            case daily {
                // empty
            }

            case weekly {
                uses day-of-week-grouping;
            }

            case monthly {
                uses day-of-month-grouping;
            }
            description "Frequency options for running a scheduled task.

                        Note: running a scheduled task in the single-entry
                        format is deprecated.";
        }
        uses time-of-day-grouping;
        description "Grouping for frequency options for running a scheduled task.

                     Note: This field is deprecated. Use the options in
                     frequency-list-grouping instead.";
    }

    grouping frequency-list-grouping {
        choice frequency-list {
            case weekly {
                list weekly {
                    key "day-of-week";
                    uses day-of-week-grouping;
                    uses time-of-day-grouping;
                    description "A list of schedules that specifies the days of the week
                                 and times of day to run the scheduled task";
                }
            }

            case monthly {
                list monthly {
                    key "day-of-month";
                    uses day-of-month-grouping;
                    uses time-of-day-grouping;
                    description "A list of schedules that specifies the days of the month
                                 and times of day to run the scheduled task";
                }
            }
            description "Frequency options for running a scheduled task.";
        }

        description "Grouping for frequency options for a task scheduled multiple times.";
    }

    grouping time-of-day-grouping {
        leaf time-of-day {
            type string {
                pattern "([0-1][0-9]|2[0-3]):[0-5][0-9]";
            }

            mandatory true;

            description "The time of day (24hr clock in the system's timezone)
                         at which to run the scheduled task.";
        }
        description "Grouping for specifying the time of day.";
    }

    grouping scheduled-task {
        choice scheduling-rule {
            case single-schedule {
                uses frequency-grouping;
            }
            case multiple-schedule {
                uses frequency-list-grouping;
            }
            description "Whether the scheduled task runs once or multiple times per interval.";
        }
        description "Grouping for determining whether the scheduled task runs once
                     or multiple times per interval.

                     Note: Scheduling a task once per interval is deprecated.
                     Use the options in frequency-list-grouping instead
                     to schedule a task multiple times per interval.";
    }

    grouping rvt-vm-grouping {

        uses rhino-vm-grouping;

        container scheduled-sbb-cleanups {
            presence "This container is optional, but has mandatory descendants.";
            uses scheduled-task;
            description "Cleanup leftover SBBs and activities on specified schedules.
                         If omitted, SBB cleanups will be scheduled for every day at 02:00.";
        }

        description "Parameters for a Rhino VoLTE TAS (RVT) VM.";
    }

    grouping rhino-vm-grouping {
        leaf rhino-node-id {
            type rhino-node-id-type;
            mandatory true;
            description "The Rhino node identifier.";
        }

        container scheduled-rhino-restarts {
            presence "This container is optional, but has mandatory descendants.";
            uses scheduled-task;
            description "Restart Rhino on a specified schedule, for maintenance purposes.
                         If omitted, no Rhino restarts will be enabled.

                         Note: Please ensure there are no Rhino restarts within one hour of a
                         scheduled Cassandra repair.";
        }

        description "Parameters for a VM that runs Rhino.";
    }

    grouping rhino-auth-grouping {
        leaf username {
            type string {
                length "3..16";
                pattern "[a-zA-Z0-9]+";
            }
            description "The user's username.
                         Must consist of between 3 and 16 alphanumeric characters.";
        }

        leaf password {
            type secret {
                length "8..max";
                pattern "[a-zA-Z0-9_@!$%^/.=-]+";
            }
            description "The user's password.  Will be automatically encrypted at deployment using
                         the deployment's 'secret-private-key'.";
        }

        leaf role {
            type enumeration {
                enum admin {
                    description "Administrator role. Can make changes to Rhino configuration.";
                }

                enum view {
                    description "Read-only role. Cannot make changes to Rhino configuration.";
                }
            }

            default view;
            description "The user's role.";
        }

        description "Configuration for one Rhino user.";
    }

    grouping rem-auth-grouping {
        leaf username {
            type string {
                length "3..16";
                pattern "[a-zA-Z0-9]+";
            }
            description "The user's username.
                         Must consist of between 3 and 16 alphanumeric characters.";
        }

        leaf real-name {
            type string;
            description "The user's real name.";
        }

        leaf password {
            type secret {
                length "8..max";
                pattern "[a-zA-Z0-9_@!$%^/.=-]+";
            }
            description "The user's password.  Will be automatically encrypted at deployment using
                         the deployment's 'secret-private-key'.";
        }

        leaf role {
            type enumeration {
                enum em-admin {
                    description "Administrator role. Can make changes to REM configuration.
                                 Also has access to the HSS Subscriber Provisioning REST API.";
                }

                enum em-user {
                    description "Read-only role. Cannot make changes to REM configuration.
                                 Note: Rhino write permissions are controlled by the Rhino
                                 credentials used to connect to Rhino, NOT the REM credentials.";
                }
            }

            default em-user;
            description "The user's role.";
        }

        description "Configuration for one REM user.";
    }

    grouping diameter-multiple-realm-configuration-grouping {
        uses diameter-common-configuration-grouping;

        choice realm-choice {
            case single-realm {
                leaf destination-realm {
                    type ietf-inet:domain-name;
                    mandatory true;
                    description "The Diameter destination realm.";
                }
            }

            case multiple-realms {
                list destination-realms {
                    key "destination-realm";
                    min-elements 1;

                    leaf destination-realm {
                        type ietf-inet:domain-name;
                        mandatory true;
                        description "The destination realm.";
                    }

                    leaf charging-function-address {
                        type string;
                        description "The value that must appear in a P-Charging-Function-Addresses
                                     header in order to select this destination realm. If omitted,
                                     this will be the same as the destination-realm value.";
                    }

                    leaf-list peers {
                        type string;
                        min-elements 1;
                        description "List of Diameter peers for the realm.";
                    }

                    description "List of Diameter destination realms.";
                }
            }

            description "Whether to use a single realm or multiple realms.";
        }

        description "Diameter configuration supporting multiple realms.";
    }

    grouping diameter-configuration-grouping {
        uses diameter-common-configuration-grouping;

        leaf destination-realm {
            type ietf-inet:domain-name;
            mandatory true;
            description "The Diameter destination realm.";
        }

        description "Diameter configuration using a single realm.";
    }

    grouping diameter-common-configuration-grouping {
        leaf origin-realm {
            type ietf-inet:domain-name;
            mandatory true;
            description "The Diameter origin realm.";
            yangdoc:change-impact "restart";
        }

        list destination-peers {
            key "destination-hostname";

            min-elements 1;

            leaf protocol-transport {
                type enumeration {
                    enum aaa {
                        description "The Authentication, Authorization and Accounting (AAA)
                                     protocol over tcp";
                    }
                    enum aaas {
                        description "The Authentication, Authorization and Accounting with Secure
                                     Transport (AAAS) protocol over tcp.
                                     IMPORTANT: this protocol is currently not supported.";
                    }
                    enum sctp {
                        description "The Authentication, Authorization and Accounting (AAA)
                                     protocol over Stream Control Transmission Protocol
                                     (SCTP) transport. Will automatically be configured
                                     multi-homed if multiple signaling interfaces are
                                     provisioned.";
                    }
                }
                default aaa;
                description "The combined Diameter protocol and transport.";
            }

            leaf destination-hostname {
                type ietf-inet:domain-name;
                mandatory true;
                description "The destination hostname.";
            }

            leaf port {
                type ietf-inet:port-number;
                default 3868;
                description "The destination port number.";
            }

            leaf metric {
                type uint32;
                default 1;
                description "The metric to use for this peer.
                             Peers with lower metrics take priority over peers
                             with higher metrics. If all peers have the same metric,
                             traffic is round-robin load balanced over all peers.";
            }

            description "Diameter destination peer(s).";
        }

        description "Diameter configuration.";
    }

    typedef announcement-id-type {
        type leafref {
            path "/sentinel-volte/mmtel/announcement/announcements/id";
        }

        description "The announcement-id type, limits use to be one of the configured SIP
                     announcement IDs from
                     '/sentinel-volte/mmtel/announcement/announcements/id'.";
    }

    grouping feature-announcement {

        container announcement {
            presence "Enables announcements";

            leaf announcement-id {
                type announcement-id-type;
                mandatory true;
                description "The announcement to be played.";
            }

            description "Should an announcement be played";
        }

        description "Configuration for announcements.";
    }
}