Skip to main content

Scenarios

Scenario Execution

Scenarios are sequences of events that can be triggered through different means of interaction between Device Management Server and CPE, such as Remote Procedure Call (RPC) widget in Support Portal, Campaigns widget in Admin Portal or ScenarioEngine section of North-Bound Interface (NBI).

All of them follow the same principle run Scenario schema:

Specific examples of different scenarios and their parameters can vary depending on service they are executed from.

Scenarios, featured in NBI Service, are described in ScenarioService chapter of NBI Guide.

Next will be discussed the scenarios, available through the Admin Portal Campaign widget:

Campaign Scenarios:

Campaign.ActivateWiFi

This scenario is used for mass activation of Wi-Fi on CPEs by SSID and KeyPassphrase

ParameterTypeMeaning
"SSID"string(32)The service set identifier (SSID) is an identifier that is attached to packets sent over the wireless LAN that functions as a “password” for joining a particular radio network (BSS). Note: If an access point wishes to be known by more than one SSID, it must provide a WLANConfiguration instance for each SSID
"PASS"string(32)The value to set the ParameterKey parameter. The value of this argument is left to thediscretion of the server, and may be left empty

Example parameters:

{
"SSID": "",
"PASS": ""
}

Campaign.ApplyFirmwareUpgradeRules

This scenario is used to apply firmware upgrade rules to multiple CPEs. It interacts with "firmware" endpoint and activates all the enabled FW upgrade rules with consideration to specified parameters like "CPE criteria". This method has no calling arguments.

Example parameters:

{}

Campaign.UpdateFirmwareByURL

This scenario is used to update firmware by URL for multiple CPEs.

ParameterTypeMeaning
"URL"string(256)URL specifying the source file location. HTTP transport MUST be supported. Other optional transports, as specified in section 2.3.2, MAY be supported

Example parameters:

{"URL":  "your_url"}

SupportPortal.get_dhcp_objects

This method returns details about DHCP parameters of the CPE. This method has no calling arguments.

Example parameters:

{}

SupportPortal.get_wifi_details

This method provides details about Wi-Fi parameters of the CPE. Suitable parameters are "2.4Ghz", "5Ghz". "" without any keys or values will count as "any".

ParameterTypeMeaning
"OperatingFrequencyBand"string(32)Required frequency band for Wi-Fi. Only acceptable values are "2.4Ghz", "5Ghz" and

Example parameters:

{
"OperatingFrequencyBand": "2.4Ghz"
}

SupportPortal.lan_ports_statistics_visualization

This method returns statistics of the LAN ports of the CPE. This method has no calling arguments.

Example parameters:

{}

SupportPortal.port_mapping

This method returns PortMapping parameters of the CPE. This method has no calling arguments.

Example parameters:

{}

SupportPortal.update_lan_parameters

This scenario changes values for LAN parameters of the CPE if they exist. Scenario parameters are as in SetParameterValues scenario with the addition of "meta" key, which describes path to the desired parameter tree branch.

ParameterTypeMeaning
"meta"string(32)Describes path to the parameters through parameter tree
"ParameterList"ParameterValueStruct[]Array of name-value pairs as specified in Table 11 of Technical Report. For each name-value pair, the CPE is instructed to set the Parameter specified by the name to the corresponding value
"ParameterKey"string(32)The value to set the ParameterKey parameter. This MAY be used by the server to identify Parameter updates, or left empty

Example parameters:

{
"meta": {
"path": "InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1."
},
"Enable": true,
"Name": "eth0"
}

SupportPortal.users_table

This method returns the list of users and related parameters of the CPE. This method has no calling arguments.

Example parameters:

{}

SupportPortal.wan_interface

This method provides the list of WAN related parameters of the CPE. For devices with TR181 Data Model this scenario might return incomplete results if device parameters are not properly filled. In that case change value for parameter "check_all_for_181" to "true".

Example parameters:

{
"check_all_for_181": false
}

apply_generated_config

This scenario applies a custom configuration file to the target CPE. Configuration file is generated from the template (taken from configuration templates storage) and scenario parameters, applied to the CPE and will be deleted after designated time (TTL). The deletion of expired files is also triggered by this scenario.

Scenario arguments consist of the template name, scenario options (ignore_transfer_complete, initialize_cpe), parameters for update and TTL as the amount of time (in seconds) after which generated file must be deleted.

ParameterTypeMeaning
"template_name"string(256)Name given to the template file in configuration template storage
"ignore_transfer_complete"booleanIf true, after the downloading of configuration file by the CPE is initiated, the "TRANSFER COMPLETE" message from the CPE will not bt awaited by the scenario
"initialize_cpe"booleanIf false, the "initialize_cpe" scenario is not executed after the CPE downloaded newly generated confuguration file, meaning new session with CPE is not initialized
"TTL"unsignedIntTime (in seconds) after which generated file will be marked "expired" and will be deleted when the scenario is used next time
"parameters"string(256)Array of name-value pairs to substitute values in jinja-formtatted template

Example parameters:

{
"template_name": "example_template",
"ignore_transfer_complete": false,
"initialize_cpe": false,
"TTL": 300,
"parameters": {"example_key": "example_value"}
}

Smart_SPV

This scenario is used for modifying the value of one or more CPE Parameters instead of standard SetParameterValues. You can use it if the modifying by SetParameterValues was unsuccessful. In this scenario parameters are set one by one, and if necessary, the boolean values are changes to integer.

ParameterTypeMeaning
"ParameterList"ParameterValueStruct[]Array of name-value pairs as specified in Table 11 of Technical Report. For each name-value pair, the CPE is instructed to set the Parameter specified by the name to the corresponding value
"ParameterKey"string(32)The value to set the ParameterKey parameter. This MAY be used by the server to identify Parameter updates, or left empty

Example parameters:

{
"InternetGatewayDevice.ManagementServer.PeriodicInformInterval": 99
}

CWMP.AddObject

This scenario is used by an ACS to create a new instance of a Multi-Instance Object.

ParameterTypeMeaning
"ObjectName"string(256)The path name of the collection of objects for which a new instance is to be created. The path name MUST end with a “.” (dot) after the last node in the hierarchical name of the object
"ParameterKey"string(32)The value to set the ParameterKey parameter. The value of this argument is left to thediscretion of the server, and may be left empty

Example parameters:

{
"ObjectName": "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.2.PortMapping.",
"ParameterKey": ""
}

CWMP.CancelTransfer

This scenario MAY be used by the ACS to cause the CPE to cancel a file transfer initiated by an earlier Download, ScheduleDownload, or Upload method call.

Example parameters:

"CommandKey"

CWMP.ChangeDUState

This scenario MAY be used by an ACS to trigger the explicit state transitions of Install, Update, and Uninstall for a Deployment Unit (DU), i.e. installing a new DU, updating an existing DU, or uninstalling an existing DU.

Example parameters:

{
"Operations": {
"Update": [
{
"URL": "http://your.url.com",
"Username": "",
"Password": "",
"Version": "",
"UUID": ""
}
],
"Install": [
{
"URL": "http://your.url.com",
"Username": "",
"Password": "",
"UUID": "",
"ExecutionEnvRef": ""
}
],
"Uninstall": [
{
"Version": "sss",
"UUID": "",
"ExecutionEnvRef": ""
}
]
},
"CommandKey": ""
}

CWMP.DeleteObject

This scenario is used by an ACS to delete an instance of a Multi-Instance Object.

ParameterTypeMeaning
"ObjectName"string(256)The path name of the object instance to be removed. The path name MUST end with a “.” (dot) after the instance number of the object
"ParameterKey"string(32)The value to set the ParameterKey parameter. The value of this argument is left to the discretion of the server, and may be left empty

Example parameters:

{
"ObjectName": "InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.2.",
"ParameterKey": ""
}

CWMP.Download

This scenario is used by the ACS to cause the CPE to download a specified file from the designated location.

ParameterTypeMeaning
"CommandKey"string(32)The string the CPE uses to refer to a particular download. This argument is referenced in the methods TransferComplete and GetQueuedTransfers
"FileType"string(64)An integer followed by a space followed by the file type description. Only the following values are currently defined for the FileType argument: "1 Firmware Upgrade Image", "2 Web Content", “3 Vendor Configuration File”. The following format is defined to allow the unique definition of vendor-specific file types: "X <OUI> <Vendor-specific identifier> <OUI> is replaced by a 6 hexadecimal-digit OUI (organizationally unique identifier) as defined in Citation 9 of the official Technical Report, with all upper-case letters and any leading zeros included.
"URL"string(256)URL specifying the source file location. HTTP transport MUST be supported. Other optional transports, as specified in section 2.3.2, MAY be supported
"Username"string(256)Username to be used by the CPE to authenticate with the file server. This string is set to the empty string if no authentication is required
"Password"string(256)Password to be used by the CPE to authenticate with the file server. This string is set to the empty string if no authentication is required
"FileSize"unsignedIntThe size of the file to be downloaded in bytes. The CPE may use this value to determine if it has sufficient space for the file, or if it must free up additional space to make room for the specified file
"TargetFileName"string(256)The name of the file to be used on the target file system. This argument may be left empty if the target file name can be extracted from the downloaded file itself, or from the URL argument, or if no target file name is needed. If this argument is specified, but the target file name is also indicated by another source (for example, if it is extracted from the downloaded file itself), this argument SHOULD be ignored. If the target file name is used, the downloaded file would replace any existing file of the same name (whether or not the CPE archives the replaced file is a local matter)
"DelaySeconds"unsignedIntThe number of seconds from the time this method is called to the time the CPE is requested to initiate the download. A value of zero indicates that no delay is requested. If a non-zero delay is requested, the download SHOULD NOT occur in the same transaction session in which the request was issued
"SuccessURL"string(256)When applicable, this argument contains the URL the CPE should redirect the user’s browser to if the download completes successfully. This URL may include CGI arguments as needed by the Server (for example, to maintain session state). This applies only if the download was initiated via browser-based user interaction and the CPE supports the ability to selectively redirect based on the download results. When there is no need for such a URL, this argument should be empty
"FailureURL"string(256)When applicable, this argument contains the URL the CPE should redirect the user’s browser to if the download does not complete successfully. This URL may include CGI arguments as needed by the Server (for example, to maintain session state). This applies only if the download was initiated via browser-based user interaction and the CPE supports the ability to selectively redirect based on the download results. When there is no need for such a URL, this argument should be empty

Example parameters:

{
"Username": "",
"FailureURL": "",
"URL": "http://your.url.com",
"TargetFileName": "",
"FileType": "1 Firmware Upgrade Image",
"FileSize": 200,
"SuccessURL": "",
"DelaySeconds": 5,
"Password": "",
"CommandKey": ""
}

CWMP.FactoryReset

This scenario resets the CPE to its factory default state, and calls for use with extreme caution. This method has no calling arguments.

Example parameters:

{}

CWMP.GetAllQueuedTransfers

This scenario MAY be used by an ACS to determine the status of all queued downloads and uploads, including any that were not specifically requested by the ACS, i.e. autonomous transfers. This method has no calling arguments.

Example parameters:

{}

CWMP.GetParameterAttributes

This scenario is used for getting the attributes of one or more CPE Parameters.

ParameterTypeMeaning
"ParameterNames"string(256)[]Array of strings, each representing the name of a requested Parameter. If a Parameter name argument is given as a partial path name, the request is to be interpreted as a request to return all of the Parameters in the branch of the naming hierarchy that shares the same prefix as the argument. A partial path name MUST end with a “.” (dot) after the last node name in the hierarchy. An empty string indicates the top of the name hierarchy.
Below is an example of a full Parameter name:
InternetGatewayDevice.DeviceInfo.SerialNumber.
Below is an example of a partial path name:
InternetGatewayDevice.DeviceInfo

Example parameters:

[
{
"AccessList": [],
"Notification": 1,
"NotificationChange": true,
"Name": "InternetGatewayDevice.ManagementServer.PeriodicInformInterval",
"AccessListChange": false
}
]

CWMP.GetParameterNames

This scenario is used by an ACS to discover the Parameters accessible on a particular CPE.

ParameterTypeMeaning
"ParameterPath"string(256)A string containing either a complete Parameter name, or a partial path name representing a subset of the name hierarchy. An empty string indicates the top of the name hierarchy. A partial path name MUST end with a “.” (dot) after the last node name in the hierarchy.
Below is an example of a full Parameter name:
InternetGatewayDevice.DeviceInfo.SerialNumber.
Below is an example of a partial path name:
InternetGatewayDevice.DeviceInfo
"NextLevel"booleanIf false, the response lists the full path name of all Parameters whose name begins with the string given by the ParameterPath argument. If true, the response lists only the partial path one level below the specified ParameterPath. For example, if ParameterPath is “InternetGatewayDevice.LAN- Device.”, the response may list “InternetGatewayDevice.LANDevice.1.” and “InternetGatewayDevice.LANDevice.2.” without listing all of the Parameters below this level.

Example parameters:

{
"NextLevel": true,
"ParameterPath": "InternetGatewayDevice."
}

CWMP.GetParameterValues

This scenario is used for getting the value of one or more CPE Parameters.

ParameterTypeMeaning
"ParameterNames"string(256)[]Array of strings, each representing the name of a requested Parameter. If a Parameter name argument is given as a partial path name, the request is to be interpreted as a request to return all of the Parameters in the branch of the naming hierarchy that shares the same prefix as the argument. A partial path name MUST end with a “.” (dot) after the last node name in the hierarchy. An empty string indicates the top of the name hierarchy.
Below is an example of a full Parameter name:
InternetGatewayDevice.DeviceInfo.SerialNumber.
Below is an example of a partial path name:
InternetGatewayDevice.DeviceInfo

Example parameters:

[
"InternetGatewayDevice.ManagementServer."
]

CWMP.GetRPCMethods

This scenario is used for getting RPCs supported by CPE. This method has no calling arguments.

Example parameters:

{}

CWMP.Reboot

This scenario causes the CPE to reboot, and calls for use with extreme caution.

ParameterTypeMeaning
"CommandKey"string(32)The string to return in the CommandKey element of the InformStruct when the CPE reboots and calls the Inform method

Example parameters:

{
"CommandKey": "RebootByDMS"
}

CWMP.ScheduleDownload

This scenario MAY be used by the ACS to cause the CPE to download a specified file from the designated location and apply it within either one or two specified time windows.

ParameterTypeMeaning
"CommandKey"string(32)The string the CPE uses to refer to a particular download. This argument is referenced in the methods Inform, TransferComplete, GetQueuedTransfers, GetAllQueuedTransfers and CancelTransfer. The value of the CommandKey is entirely at the discretion of the ACS and MAY be an empty string
"FileType"string(64)An integer followed by a space followed by the file type description. Only the following values are currently defined for the FileType argument:"1 Firmware Upgrade Image", "2 Web Content", “3 Vendor Configuration File”, “4 Tone File” (see 28 Appendix B), “5 Ringer File” (see 28 Appendix B), “6 Stored Firmware Image” (see Appendix V). The following format is defined to allow the unique definition of vendor-specific file types:"X <VENDOR> <Vendor-specific identifier> <VENDOR> is replaced by a unique vendor identifier, which MAY be either an OUI or a domain name. The OUI or domain name used for a given vendor-specific file type MUST be one that is assigned to the organization that defined this method (which is not necessarily the same as the vendor of the CPE or ACS). An OUI is an organizationally unique identifier as defined in 13 of the official Technical Report , which MUST be formatted as a 6 hexadecimal-digit OUI (organizationally unique identifier), with all upper-case letters and any leading zeros included. A domain name MUST be upper case with each dot (“.”) replaced with a hyphen or underscore. If and only if the CPE supports downloading of firmware images using the ScheduleDownload method, the CPE MUST support the "1 Firmware Upgrade Image" FileType value. The definition of a firmware upgrade image MAY vary across different CPE vendors, ranging from a single monolithic image to a set of inter-dependent files, but MUST be presented as a single URL to the CPE. For example, a URL could be a file that contains multiple URLs and instructions on how to upgrade the firmware image. All other FileType values are OPTIONAL. The FileType value of "2 Web Content" is intended to be used for downloading files that contain only web content for a CPE’s web-based user interface. A CPE that supports a web-based user interface and allows the content to be downloaded from the ACS via the ScheduleDownload method as a distinct file containing only web content SHOULD use the FileType value of "2 Web Content" when performing such a download. A CPE that supports a web-based user interface and allows the content to be downloaded from the ACS MAY instead include web content as part of its firmware upgrade image, or use some other means to update the web content in the CPE. Such a CPE need not support the FileType value of "2 Web Content". The FileType value of “3 Vendor Configuration File” is intended to be used for downloading a single vendor configuration file. A CPE MAY instead include one or more vendor configuration files as part of its firmware upgrade image
"URL"string(256)URL, as defined in Citation 15 of the official Technical Report , specifying the source file location. HTTP and HTTPS transports MUST be supported. Other optional transports, as specified in Section 2.3.2, MAY be supported. If the CPE receives multiple ScheduleDownload requests with the same source URL, the CPE MUST perform each download as requested, and MUST NOTassume that the content of the file to be downloaded is the same each time. This URL MUST NOT include the “userinfo” component, as defined in Citation 15 of the official Technical Report
"Username"string(256)Username to be used by the CPE to authenticate with the file server. This string is set to the empty string if no authentication is required
"Password"string(256)Password to be used by the CPE to authenticate with the file server. This string is set to the empty string if no authentication is required
"FileSize"unsignedIntThe size of the file to be downloaded in bytes. The FileSize argument is intended as a hint to the CPE, which the CPE MAY use to determine if it has sufficient space for the file to be downloaded, or to prepare space to accept the file. The ACS MAY set this value to zero. The CPE MUST interpret a zero value to mean that that the ACS has provided no information about the file size. In this case, the CPE MUST attempt to proceed with the download under the presumption that sufficient space is available, though during the course of download, the CPE might determine otherwise. The ACS SHOULD set the value of this Parameter to the exact size of the file to be downloaded. If the value is non-zero, the CPE MAY reject the ScheduleDownload request on the basis of insufficient space. If the CPE attempts to proceed with the download based on the value of this argument, but the actual file size differs from the value of this argument, this could result in a failure of the download. However, the CPE MUST NOT cause the download to fail solely because it determines that the value of this argument is inaccurate
"TargetFileName"string(256)The name of the file to be used on the target file system. This argument MAY be left empty if the target file name can be extracted from the downloaded file itself, or from the URL argument, or if no target file name is needed. If this argument is specified, but the target file name is also indicated by another source (for example, if it is extracted from the downloaded file itself), this argument MUST be ignored. If the target file name is used, the downloaded file would replace any existing file of the same name (whether or not the CPE archives the replaced file is a local matter). If present, this Parameter is treated as an opaque string with no specific requirements for its format. That is, the TargetFileName value is to be interpreted based on the CPE’s vendor-specific file naming conventions. Note that this specification does not preclude the use of a file naming convention in which the file’s path can be specified as part of the file name
"TimeWindowList"TimeWindowStruct[1:2]This structure defines the time window(s) during which the CPE MUST perform and apply the download. As noted earlier, if a file transfer does not generate additional network traffic and does not impact subscriber services, the CPE is permitted to perform (but not apply) the download outside of a time window. A CPE MUST be able to accept a request with either one or two TimeWindowStruct elements. The time windows MUST NOT overlap, i.e., if there are two time windows, the second window’s WindowStart value has to be greater than or equal to the first window’s WindowEnd value

Example parameters:

{
"Username": "",
"URL": "http://your.url.com",
"TargetFileName": "",
"FileType": "1 Firmware Upgrade Image",
"FileSize": 200,
"TimeWindowList": [
{
"WindowMode": "1 At Any Time",
"WindowEnd": 0,
"WindowStart": 0,
"MaxRetries": -1,
"UserMessage": ""
}
],
"Password": "",
"CommandKey": ""
}

CWMP.ScheduleInform

This scenario MAY be used by an ACS to request the CPE to schedule a one-time Inform method call (separate from its periodic Inform method calls) sometime in the future.

ParameterTypeMeaning
"DelaySeconds"unsignedIntThe number of seconds from the time this method is called to the time the CPE is requested to intiate a one-time Inform method call. The CPE sends a response, and then DelaySeconds later calls the Inform method. This argument must be greater than zero
"CommandKey"string(32)The string to return in the CommandKey element of the InformStruct when the CPE calls the Inform method

Example parameters:

{
"DelaySeconds": 20,
"CommandKey": "Test"
}

CWMP.SetParameterAttributes

This scenario is used for modification the attributes of one or more CPE Parameters.

ParameterTypeMeaning
"ParameterList"SetParameterAttributesStruct[]List of changes to be made to the attributes for a set of Parameters. Each entry in this array is a SetParameter-AttributesStruct as defined in Table 19 of Technical Report

Example parameters:

[
{
"AccessList": [],
"Notification": 1,
"NotificationChange": true,
"Name": "InternetGatewayDevice.ManagementServer.PeriodicInformInterval",
"AccessListChange": false
}
]

Explanation for parameters:

Access modes:

  • “Subscriber”: Indicates write access by an interface controlled on the subscriber LAN. Includes any and all such LAN-side mechanisms, which MAY include but are not limited to TR-064 (LAN-side DSL CPE Configuration Protocol), UPnP, the device’s user interface, client-side telnet, and client-side SNMP.

Notification modes:

  • 0: Notification off. The CPE need not inform the ACS of a change to the specified Parameter(s).
  • 1: Passive notification. Whenever the specified Parameter value changes, the CPE MUST include the new value in the ParameterList in the Non-HEARTBEAT Inform message that is sent the next time a Session is established to the ACS.
  • 2: Active notification. Whenever the specified Parameter value changes, the CPE MUST initiate a Session to the ACS, and include the new value in the ParameterList in the associated Inform message.
  • 3: Passive lightweight notification. Whenever the specified Parameter value changes, the CPE MUST include the new value in the ParameterList in the next Lightweight Notification message that is sent.
  • 4: Passive notification with passive lightweight notification. This combines the requirements of the values 1 (Passive notification) and 3 (Passive lightweight notification). The two mechanisms operate independently.
  • 5: Active lightweight notification. Whenever the specified Parameter value changes, the CPE MUST include the new value in the ParameterList in the associated Lightweight Notification message and send that message.
  • 6: Passive notification with active lightweight notification. This combines the requirements of the values 1 (Passive notification) and 5 (Active lightweight notification). The two mechanisms operate independently.

CWMP.SetParameterValues

This scenario is used for modifying the value of one or more CPE Parameters.

ParameterTypeMeaning
"ParameterList"ParameterValueStruct[]Array of name-value pairs as specified in Table 11 of Technical Report. For each name-value pair, the CPE is instructed to set the Parameter specified by the name to the corresponding value
"ParameterKey"string(32)The value to set the ParameterKey parameter. This MAY be used by the server to identify Parameter updates, or left empty

Example parameters:

{
"InternetGatewayDevice.ManagementServer.PeriodicInformInterval": 99
}

CWMP.Upload

This scenario MAY be used by the ACS to cause the CPE to upload a specified file to the designated location.

ParameterTypeMeaning
"CommandKey"string(32)The string the CPE uses to refer to a particular upload. This argument is referenced in the methods TransferComplete and GetQueuedTransfers.
"FileType"string(64)An integer followed by a space followed by the file type description. Only the following values are currently defined for the FileType argument: "1 Firmware Upgrade Image", "2 Web Content", “3 Vendor Configuration File”. The following format is defined to allow the unique definition of vendor-specific file types: "X <OUI> <Vendor-specific identifier> <OUI> is replaced by a 6 hexadecimal-digit OUI (organizationally unique identifier) as defined in Citation 9 of the official Technical Report, with all upper-case letters and any leading zeros included.
"URL"string(256)URL specifying the source file location. HTTP transport MUST be supported. Other optional transports, as specified in section 2.3.2, MAY be supported
"Username"string(256)Username to be used by the CPE to authenticate with the file server. This string is set to the empty string if no authentication is required
"Password"string(256)Password to be used by the CPE to authenticate with the file server. This string is set to the empty string if no authentication is required
"DelaySeconds"unsignedIntThe number of seconds from the time this method is called to the time the CPE is requested to initiate the upload. A value of zero indicates that no delay is requested. If a non-zero delay is requested, the download SHOULD NOT occur in the same transaction session in which the request was issued

Example parameters:

{
"Username": "",
"URL": "http://your.server/cfg3.cfg",
"CommandKey": "",
"DelaySeconds": 0,
"Password": "",
"FileType": "1 Vendor Configuration File"
}

Custom Scenarios

There is also a functionality to write your custom scenarios, however it will be described separately in its own part.

Footnote

The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.