Understanding TR-369 GetSupportedDM and GetSupportedDM Response Messages

Understanding TR-369 GetSupportedDM and GetSupportedDM Response Messages
"An ant working on a complex data model on the System-Room" by DALL-E

In this post, we will delve into the  TR-369 USP GetSupportedDM Messages and their corresponding GetSupportedDM Response Messages. We'll explore their purpose, structure, and significance in the context of TR-369, shedding light on their role in retrieving supported data models.

So, let's embark on the journey of understanding USP GetSupportedDM Messages.

GetSupportedDM Messages serve as a mechanism for a Controller to request information about the supported data models from a target endpoint in the USP ecosystem, which is basically a CPE device. These messages enable Controllers to discover the available data model in a CPE.

Let's see the GetSupportedDM proto-buff definition from the official usp proto-buffer file:

message GetSupportedDM {
  repeated string obj_paths = 1;
  bool first_level_only = 2;
  bool return_commands = 3;
  bool return_events = 4;
  bool return_params = 5;
}

GetSupportedDM definition from usp/specification/usp-msg-1-2.proto file

The purpose of GetSupportedDM Messages is to obtain the list of supported Objects, Parameters, Events, and Commands in the Agent’s Supported Data Model. This allows a Controller to learn what an Agent understands, rather than its current state. So, the USP Controller does NOT retrieve actual parameters but learns the types and definitions of parameters, commands, and events.

GetSupportedDM Request Messages:

When it comes to acquiring data model structure information from a device, TR-369 employs GetSupportedDM messages. A GetSupportedDM message consists of two primary components: the Header and the Body. The Header comprises a unique message ID and a message type, which is set to "GET_SUPPORTED_DM." On the other hand, the Body contains the actual request.

The following fields are most important for the GetSupportedDM Message Request:

Msg Id: A  unique identifier assigned by the Endpoint/Controller that generated this Message.
Obj Path: Path to an Object that is requested.
Return Commands:  if true, indicates that, in thesupported_objs, the Agent should include the asupported_commands field containing Commands supported by the reported Object(s).
Return Events: if true, indicates that, in thesupported_objs, the Agent should include the asupported_events field containing Events supported by the reported Object(s).
Return Params: if true, indicates that, in thesupported_objs, the Agent should include the asupported_params field containing Parameters supported by the reported Object(s).

{
  "header": {
    "msg_id": "2023-05-06T07:12:40.099Z",
    "msg_type": "GET_SUPPORTED_DM"
  },
  "body": {
    "request": {
      "get_supported_dm": {
        "obj_paths": [
          "Device."
        ],
        "first_level_only": true,
        "return_commands": true,
        "return_events": true,
        "return_params": true
      }
    }
  }
}
USP Message Example for a GetSupportedDM Request Type

GetSupportedDM Response Messages are the corresponding responses generated by the target endpoint in response to a GetSupportedDM Message. These responses provide the requested information about the supported data models.

Let's see the GetSupportedDMResp proto-buff definition from the official usp proto-buffer file:

message GetSupportedDMResp {
  repeated RequestedObjectResult req_obj_results = 1;

  message RequestedObjectResult {
    string req_obj_path = 1;
    fixed32 err_code = 2;
    string err_msg = 3;
    string data_model_inst_uri = 4;
    repeated SupportedObjectResult supported_objs = 5;
  }

  message SupportedObjectResult {
    string supported_obj_path = 1;
    ObjAccessType access = 2;
    bool is_multi_instance = 3;
    repeated SupportedCommandResult supported_commands = 4;
    repeated SupportedEventResult supported_events = 5;
    repeated SupportedParamResult supported_params = 6;
    repeated string divergent_paths = 7;
  }

  message SupportedParamResult {
    string param_name = 1;
    ParamAccessType access = 2;
    ParamValueType value_type = 3;
    ValueChangeType value_change = 4;
  }

  message SupportedCommandResult {
    string command_name = 1;
    repeated string input_arg_names = 2;
    repeated string output_arg_names = 3;
    CmdType command_type = 4;
  }

  message SupportedEventResult {
    string event_name = 1;
    repeated string arg_names = 2;
  }

  enum ParamAccessType {
    PARAM_READ_ONLY = 0;
    PARAM_READ_WRITE = 1;
    PARAM_WRITE_ONLY = 2;
  }

  enum ObjAccessType {
    OBJ_READ_ONLY = 0;
    OBJ_ADD_DELETE = 1;
    OBJ_ADD_ONLY = 2;
    OBJ_DELETE_ONLY = 3;
  }

  enum ParamValueType {
    PARAM_UNKNOWN = 0;
    PARAM_BASE_64 = 1;
    PARAM_BOOLEAN = 2;
    PARAM_DATE_TIME = 3;
    PARAM_DECIMAL = 4;
    PARAM_HEX_BINARY = 5;
    PARAM_INT = 6;
    PARAM_LONG = 7;
    PARAM_STRING = 8;
    PARAM_UNSIGNED_INT = 9;
    PARAM_UNSIGNED_LONG = 10;
  }

  enum ValueChangeType {
    VALUE_CHANGE_UNKNOWN = 0;
    VALUE_CHANGE_ALLOWED = 1;
    VALUE_CHANGE_WILL_IGNORE = 2;
  }

  enum CmdType {
    CMD_UNKNOWN = 0;
    CMD_SYNC = 1;
    CMD_ASYNC = 2;
  }
}
GetSupportedDMResp and related definition from usp/specification/usp-msg-1-2.proto file

The following fields are available for the GetSupportedDM Message Response :

Msg Id: An unique identifier assigned by the Endpoint/Controller that generated this Message.
Req Obj Path: Requested Object Path for the GetSupportedDMRequest.
Data Model Inst Uri: Data Model Instance URL for the related USP Agent.
Supported Obj Path: Supported Object Path for the Requested Object Path.
Supported Commands: Supported Commands Path for the Requested Object Path.
Supported Events: Supported Events Path for the Requested Object Path.

Let's see a complete example from the official OBUSPA client (it is a long file, it is better to open a browser instead of a mobile device, i would rather keep it original!) :

{
  "header": {
    "msg_id": "2023-02-24T22:39:00.883Z",
    "msg_type": "GET_SUPPORTED_DM_RESP"
  },
  "body": {
    "response": {
      "get_supported_dm_resp": {
        "req_obj_results": [
          {
            "req_obj_path": "Device.",
            "data_model_inst_uri": "urn:broadband-forum-org:tr-181-2-12-0",
            "supported_objs": [
              {
                "supported_obj_path": "Device.",
                "supported_commands": [
                  {
                    "command_name": "ScheduleTimer()",
                    "input_arg_names": [
                      "DelaySeconds"
                    ],
                    "command_type": "CMD_ASYNC"
                  },
                  {
                    "command_name": "Reboot()",
                    "command_type": "CMD_SYNC"
                  },
                  {
                    "command_name": "FactoryReset()",
                    "command_type": "CMD_SYNC"
                  },
                  {
                    "command_name": "SelfTestDiagnostics()",
                    "input_arg_names": [
                      "X_ARRIS-COM_TestNumber"
                    ],
                    "output_arg_names": [
                      "Results"
                    ],
                    "command_type": "CMD_ASYNC"
                  }
                ],
                "supported_events": [
                  {
                    "event_name": "Boot!",
                    "arg_names": [
                      "CommandKey",
                      "Cause",
                      "FirmwareUpdated",
                      "ParameterMap"
                    ]
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.",
                "supported_events": [
                  {
                    "event_name": "Periodic!"
                  }
                ],
                "supported_params": [
                  {
                    "param_name": "UpTime",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SupportedProtocols",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SoftwareVersion",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EndpointID",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CertificateNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SupportedFingerprintAlgorithms",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ControllerNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MTPNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SubscriptionNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RequestNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Certificate.{i}.",
                "is_multi_instance": true,
                "supported_commands": [
                  {
                    "command_name": "GetFingerprint()",
                    "input_arg_names": [
                      "FingerprintAlgorithm"
                    ],
                    "output_arg_names": [
                      "Fingerprint"
                    ],
                    "command_type": "CMD_SYNC"
                  }
                ],
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SerialNumber",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Issuer",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_commands": [
                  {
                    "command_name": "SendOnBoardRequest()",
                    "command_type": "CMD_SYNC"
                  }
                ],
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EndpointID",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "InheritedRole",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "AssignedRole",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "PeriodicNotifInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "PeriodicNotifTime",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "USPNotifRetryMinimumWaitInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "USPNotifRetryIntervalMultiplier",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ControllerCode",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ProvisioningCode",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MTPNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "BootParameterNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.MTP.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Protocol",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.MTP.{i}.STOMP.",
                "supported_params": [
                  {
                    "param_name": "Reference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Destination",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.MTP.{i}.CoAP.",
                "supported_params": [
                  {
                    "param_name": "Host",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Port",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Path",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EnableEncryption",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.MTP.{i}.MQTT.",
                "supported_params": [
                  {
                    "param_name": "Reference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Topic",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.MTP.{i}.WebSocket.",
                "supported_params": [
                  {
                    "param_name": "Host",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Port",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Path",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EnableEncryption",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "KeepAliveInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CurrentRetryCount",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SessionRetryMinimumWaitInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SessionRetryIntervalMultiplier",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Controller.{i}.BootParameter.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ParameterName",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.MTP.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Protocol",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Status",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.MTP.{i}.STOMP.",
                "supported_params": [
                  {
                    "param_name": "Reference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Destination",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "DestinationFromServer",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.MTP.{i}.CoAP.",
                "supported_params": [
                  {
                    "param_name": "Port",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Path",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EnableEncryption",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.MTP.{i}.MQTT.",
                "supported_params": [
                  {
                    "param_name": "Reference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ResponseTopicConfigured",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ResponseTopicDiscovered",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "PublishQoS",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.MTP.{i}.WebSocket.",
                "supported_params": [
                  {
                    "param_name": "Port",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Path",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EnableEncryption",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "KeepAliveInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Subscription.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Recipient",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ID",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CreationDate",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "NotifType",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ReferenceList",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Persistent",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "TimeToLive",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "NotifRetry",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "NotifExpiration",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.ControllerTrust.",
                "supported_commands": [
                  {
                    "command_name": "RequestChallenge()",
                    "input_arg_names": [
                      "ChallengeRef",
                      "RequestExpiration"
                    ],
                    "output_arg_names": [
                      "Instruction",
                      "InstructionType",
                      "ValueType",
                      "ChallengeID"
                    ],
                    "command_type": "CMD_SYNC"
                  },
                  {
                    "command_name": "ChallengeResponse()",
                    "input_arg_names": [
                      "ChallengeID",
                      "Value"
                    ],
                    "command_type": "CMD_SYNC"
                  }
                ],
                "supported_params": [
                  {
                    "param_name": "RoleNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CredentialNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ChallengeNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.ControllerTrust.Role.{i}.",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Name",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "PermissionNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.ControllerTrust.Role.{i}.Permission.{i}.",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Order",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Targets",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Param",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Obj",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "InstantiatedObj",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CommandEvent",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.ControllerTrust.Credential.{i}.",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Role",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Credential",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "AllowedUses",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.ControllerTrust.Challenge.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Description",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Role",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Type",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Value",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BASE_64",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ValueType",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Instruction",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BASE_64",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "InstructionType",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Retries",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "LockoutPeriod",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.LocalAgent.Request.{i}.",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Originator",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Command",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CommandKey",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Status",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.DeviceInfo.",
                "supported_params": [
                  {
                    "param_name": "SoftwareVersion",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ProductClass",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Manufacturer",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ModelName",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "HardwareVersion",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "UpTime",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ManufacturerOUI",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SerialNumber",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.Security.",
                "supported_params": [
                  {
                    "param_name": "CertificateNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.Security.Certificate.{i}.",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "LastModif",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SerialNumber",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Issuer",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "NotBefore",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "NotAfter",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Subject",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SubjectAlt",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SignatureAlgorithm",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.Time.",
                "supported_params": [
                  {
                    "param_name": "CurrentLocalTime",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "LocalTimeZone",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.STOMP.",
                "supported_params": [
                  {
                    "param_name": "ConnectionNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.STOMP.Connection.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Status",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "LastChangeDate",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Host",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Port",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Username",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EnableEncryption",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "X_ARRIS-COM_EnableEncryption",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "IsEncrypted",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Password",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "VirtualHost",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EnableHeartbeats",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "OutgoingHeartbeat",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "IncomingHeartbeat",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ServerRetryInitialInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ServerRetryIntervalMultiplier",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ServerRetryMaxInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.MQTT.",
                "supported_params": [
                  {
                    "param_name": "ClientNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.MQTT.Capabilities.",
                "supported_params": [
                  {
                    "param_name": "ProtocolVersionsSupported",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "TransportProtocolSupported",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MaxNumberOfClientSubscriptions",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.MQTT.Client.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "BrokerAddress",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "BrokerPort",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Username",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Password",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "KeepAliveTime",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ProtocolVersion",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ClientID",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Name",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "TransportProtocol",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CleanSession",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CleanStart",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RequestResponseInfo",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RequestProblemInfo",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ConnectRetryTime",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ConnectRetryIntervalMultiplier",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ConnectRetryMaxInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ResponseInformation",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Status",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "SubscriptionNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.MQTT.Client.{i}.Subscription.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Topic",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "QoS",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.BulkData.",
                "supported_params": [
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Status",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MinReportingInterval",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Protocols",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EncodingTypes",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ParameterWildCardSupported",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MaxNumberOfProfiles",
                    "value_type": "PARAM_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MaxNumberOfParameterReferences",
                    "value_type": "PARAM_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ProfileNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.BulkData.Profile.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_events": [
                  {
                    "event_name": "Push!",
                    "arg_names": [
                      "Data"
                    ]
                  }
                ],
                "supported_params": [
                  {
                    "param_name": "Alias",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Enable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "X_ARRIS-COM_Status",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Name",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "NumberOfRetainedFailedReports",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Protocol",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "EncodingType",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ReportingInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "TimeReference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_DATE_TIME",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ParameterNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.BulkData.Profile.{i}.Parameter.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Name",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Reference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.BulkData.Profile.{i}.JSONEncoding.",
                "supported_params": [
                  {
                    "param_name": "ReportFormat",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "ReportTimestamp",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.BulkData.Profile.{i}.HTTP.",
                "supported_params": [
                  {
                    "param_name": "URL",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Username",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Password",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "CompressionsSupported",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Compression",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "MethodsSupported",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Method",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "UseDateHeader",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RetryEnable",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_BOOLEAN",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RetryMinimumWaitInterval",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RetryIntervalMultiplier",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "RequestURIParameterNumberOfEntries",
                    "value_type": "PARAM_UNSIGNED_INT",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              },
              {
                "supported_obj_path": "Device.BulkData.Profile.{i}.HTTP.RequestURIParameter.{i}.",
                "access": "OBJ_ADD_DELETE",
                "is_multi_instance": true,
                "supported_params": [
                  {
                    "param_name": "Name",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  },
                  {
                    "param_name": "Reference",
                    "access": "PARAM_READ_WRITE",
                    "value_type": "PARAM_STRING",
                    "value_change": "VALUE_CHANGE_ALLOWED"
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

One key distinction of GetSupportedDM Messages is how they handle Multi-Instance Objects in Path Names. Path Names to Multi-Instance Objects in GetSupportedDM Messages only address the Object itself, rather than specific instances of the Object. This means that the Path Names do not include instance numbers or identifiers.

To indicate the place of Multi-Instance Objects within the Path Name, GetSupportedDM Messages utilize the {i} identifier. The {i} identifier is a placeholder that represents instances of Multi-Instance Objects in the Path Name. It allows for dynamic addressing of instances when performing operations or retrieving information related to specific instances of Multi-Instance Objects.

Conclusion: USP GetSupportedDM Messages and GetSupportedDM Response Messages play a significant role in facilitating effective communication and discovery of supported data models within the TR-369 USP ecosystem. By leveraging these messages, Controllers can obtain vital information about an endpoint's data model, commands, events, and object structure.


References:

  1. TR-369 USP Specification, Broadband Forum, https://www.broadband-forum.org/tr-369
  2. USP Record Definitions, GitHub Repository, https://github.com/BroadbandForum/usp