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 atu-sti {
type vmt:sip-uri-type;
description "Deprecated. Now set in product-options.rvt.atu-sti-hostname"
+ " in SDF file.";
}
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 'MSISDN', '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/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.";
}
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;
description "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;
mandatory true;
description "Indicates whether or not to use HTTP over TLS to connect to
the XCAP server.";
}
leaf base-uri {
type ietf-inet:uri;
mandatory true;
description "Base URI of XCAP server.";
}
leaf auid {
type string;
mandatory true;
description "XCAP application unique identifier to use in request URI.";
}
leaf document {
type string;
mandatory true;
description "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.";
}
leaf originating-address {
type vmt:sccp-address-type;
description "Deprecated. Now set in scc.service-centralisation.inbound-ss7-address";
}
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 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 ../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'.";
}
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'";
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'.";
}
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";
}
}