
{"id":9640,"date":"2022-06-21T13:52:55","date_gmt":"2022-06-21T13:52:55","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/"},"modified":"2026-03-05T16:01:24","modified_gmt":"2026-03-05T16:01:24","slug":"ccspmtaagent","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/","title":{"rendered":"CcspMtaAgent"},"content":{"rendered":"\n<p>The Media Terminal Adapter (MTA) Agent is a RDK-B middleware component responsible for managing PacketCable\/DOCSIS-based voice services in cable operator networks. This component provides comprehensive management capabilities for multimedia terminal adapters, enabling residential gateways to support VoIP telephony services through DOCSIS cable infrastructure. The MTA Agent serves as the primary interface between the RDK-B middleware stack and the underlying MTA hardware abstraction layer (HAL), facilitating voice line provisioning, call management, DHCP\/DHCPv6 configuration, DECT cordless phone support, and TR-104 VoIP service configuration. As a CCSP (Common Component Software Platform) component, it integrates seamlessly with the RDK-B architecture to provide standardized voice service management across diverse cable modem platforms.<\/p>\n\n\n\n<p>In the RDK-B ecosystem, the MTA Agent acts as a bridge between high-level voice service orchestration (performed by cloud management systems, TR-069 Auto Configuration Servers, or Web UI interfaces) and low-level hardware control (executed through vendor-specific MTA HAL implementations). It exposes a comprehensive TR-181 data model for voice service configuration and monitoring, supports TR-104 VoIP service parameter management through RBus interfaces, and provides WebConfig framework integration for remote bulk provisioning. The component ensures that voice services remain operational throughout device lifecycle events including bootup, firmware upgrades, and network transitions, while maintaining compliance with PacketCable specifications and CableLabs standards.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph LR\n    subgraph \"External Systems\"\n        RemoteMgmt[\"Remote Management\"]\n        LocalUI[\"Local Web UI\"]\n        CloudMgmt[\"WebConfig Server\"]\n    end\n\n    subgraph \"RDK-B Platform\"\n        subgraph \"Remote Management Agents\"\n            ProtocolAgents[\"Protocol Agents&lt;br>(TR-069, WebPA, USP etc.)\"]\n        end\n\n        PAM[\"CCSP P&amp;M\"]\n        PSM[\"CCSP PSM\"]\n        MTAAgent[\"MTA Agent\"]\n        Telemetry[\"Telemetry\"]\n\n        subgraph \"Platform Layer\"\n            HAL[\"MTA HAL\"]\n            Linux[\"Linux\"]\n        end\n    end\n\n    subgraph \"Hardware\"\n        VoiceHW[\"Voice Hardware\"]\n    end\n\n    %% External connections\n    RemoteMgmt -->|TR-069\/WebPA\/TR-369| ProtocolAgents\n    LocalUI -->|HTTP\/HTTPS| ProtocolAgents\n    CloudMgmt -->|HTTPS\/msgpack| MTAAgent\n\n    %% Upper layer to MTA Agent\n    ProtocolAgents -->|IPC| MTAAgent\n\n    %% MTA Agent to Other RDK-B Components\n    MTAAgent -->|IPC| PAM\n    MTAAgent -->|IPC| PSM\n    MTAAgent -->|IPC| Telemetry\n\n    %% MTA Agent to HAL\n    MTAAgent &lt;-->|HAL APIs| HAL\n\n    %% System integration\n    HAL &lt;-->|Driver Interfaces| Linux\n    MTAAgent &lt;-->|System Events| Linux\n    Linux &lt;-->|Control| VoiceHW\n\n    classDef external fill:#fff3e0,stroke:#ef6c00,stroke-width:2px;\n    classDef mtaAgent fill:#e3f2fd,stroke:#1976d2,stroke-width:3px;\n    classDef rdkbComponent fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px;\n    classDef system fill:#fce4ec,stroke:#c2185b,stroke-width:2px;\n    classDef hardware fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;\n\n    class RemoteMgmt,LocalUI,CloudMgmt external;\n    class MTAAgent mtaAgent;\n    class ProtocolAgents,PAM,PSM,Telemetry rdkbComponent;\n    class HAL,Linux system;\n    class VoiceHW hardware;<\/pre><\/div>\n\n\n\n<p><strong>Key Features &amp; Responsibilities<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Voice Line Management<\/strong>: Manages PacketCable voice line provisioning, configuration, and monitoring including line status, registration state, call statistics, and quality metrics for FXS (Foreign Exchange Station) ports and DECT cordless handsets<\/li>\n\n\n\n<li><strong>TR-104 VoIP Service Support<\/strong>: Implements TR-104 (Voice over IP) data model for comprehensive VoIP service configuration including SIP profiles, codecs, network parameters, call features, and service provider settings through RBus interface<\/li>\n\n\n\n<li><strong>DHCP\/DHCPv6 Information Management<\/strong>: Monitors and reports MTA-specific DHCP and DHCPv6 lease information including provisioning server addresses, TFTP boot file locations, time servers, and FQDN assignments critical for PacketCable provisioning<\/li>\n\n\n\n<li><strong>DECT Cordless Phone Support<\/strong>: Provides registration, deregistration, and management capabilities for DECT (Digital Enhanced Cordless Telecommunications) handsets including PIN management and handset discovery<\/li>\n\n\n\n<li><strong>Service Flow Monitoring<\/strong>: Tracks DOCSIS service flow statistics for voice traffic including upstream\/downstream bandwidth allocation, QoS parameters, and real-time performance metrics<\/li>\n\n\n\n<li><strong>WebConfig Framework Integration<\/strong>: Supports remote bulk configuration through WebConfig framework using msgpack-encoded TR-104 parameter sets, enabling zero-touch provisioning and cloud-based configuration management<\/li>\n\n\n\n<li><strong>Call Management &amp; Diagnostics<\/strong>: Offers call detail reporting, active call tracking, diagnostic trigger capabilities, and overcurrent fault detection for troubleshooting voice service issues<\/li>\n\n\n\n<li><strong>Persistent Configuration Storage<\/strong>: Maintains voice service configuration across reboots through syscfg integration and manages bootstrap configuration data with secure storage mechanisms<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"design\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#design\">Design<\/a><\/h2>\n\n\n\n<p>The MTA Agent is architected as a CCSP (Common Component Software Platform) component following the standardized RDK-B middleware design pattern. The component consists of three primary architectural layers: the Service Specific Platform (SSP) layer which handles component initialization, message bus registration, and lifecycle management; the Middle Layer which implements TR-181 data model interfaces and business logic; and the Integration Layer which abstracts hardware-specific operations through the MTA HAL. This layered architecture ensures clean separation of concerns, enabling the component to be portable across different hardware platforms while maintaining consistent TR-181 data model behavior.<\/p>\n\n\n\n<p>The design emphasizes robust inter-process communication through RBus message bus integration for northbound interfaces (communicating with TR-069 agents, Web UI, and other RDK-B components) and direct HAL API invocation for southbound interfaces (controlling MTA hardware). The component registers multiple TR-181 namespaces including&nbsp;<code><strong>Device<\/strong>.X_CISCO_COM_MTA.*<\/code>&nbsp;for legacy Cisco-specific parameters and implements TR-104 VoIP service parameters through RBus data elements when TR-104 support is enabled. State management is handled through a combination of runtime caching, PSM (Persistent Storage Manager) for configuration persistence, and syscfg for bootstrap parameters.<\/p>\n\n\n\n<p>The MTA Agent employs an event-driven architecture where external configuration changes trigger RBus method invocations that flow through the middle layer validation and commit phases before being applied to hardware through HAL calls. The component supports asynchronous initialization to prevent blocking the system startup sequence, allowing time-consuming MTA hardware initialization to complete in the background while other system components come online. WebConfig integration enables the component to receive bulk configuration updates encoded in msgpack format, which are decoded, validated, and applied atomically to ensure configuration consistency.<\/p>\n\n\n\n<p>Data persistence is achieved through multiple mechanisms: syscfg for simple key-value configuration storage, PSM for complex data model parameters that require transaction support, and NVRAM file storage for TR-104 configuration blobs. The component ensures data integrity by validating all configuration changes against PacketCable specifications before committing to persistent storage and hardware. Error handling follows RDK-B conventions with comprehensive logging through RDK Logger (rdklogger) and telemetry event generation for critical state transitions and error conditions.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph TD\n    subgraph MTAAgent [\"MTA Agent\"]\n        subgraph SSP [\"Service Specific Platform\"]\n            SSPMain[\"ssp_main.c\"]\n            SSPMsgBus[\"ssp_messagebus_interface.c\"]\n            SSPAction[\"ssp_action.c\"]\n        end\n\n        subgraph TR104Module [\"TR-104 Support Module\"]\n            TR104Handler[\"TR104.c\"]\n            TR104WebConfig[\"TR104_webconfig.c\"]\n        end\n\n        subgraph MiddleLayer [\"Middle Layer (TR-181 DML)\"]\n            PluginMain[\"plugin_main.c&lt;br\/>plugin_main_apis.c\"]\n            MTADml[\"cosa_x_cisco_com_mta_dml.c\"]\n            MTAInternal[\"cosa_x_cisco_com_mta_internal.c\"]\n        end\n\n        subgraph IntegrationLayer [\"Integration Layer\"]\n            MTAApis[\"cosa_x_cisco_com_mta_apis.c\"]\n        end\n    end\n\n    subgraph ExternalSystems [\"External Systems\"]\n        RdkbComponents[\"Other RDK-B Components&lt;br\/>(TR-069, WebUI, PAM)\"]\n        WebConfigServer[\"WebConfig Server\"]\n        PSM[(\"PSM&lt;br\/>Persistent Storage\")]\n        Syscfg[(\"Syscfg&lt;br\/>Config DB\")]\n    end\n\n    subgraph HALLayer [\"HAL Layer\"]\n        MTAHAL[\"mta_hal.h&lt;br\/>MTA HAL Interface\"]\n    end\n\n    SSPMain --> SSPMsgBus\n    SSPMain --> SSPAction\n    SSPMain --> TR104Handler\n    \n    SSPMsgBus --> PluginMain\n    PluginMain --> MTADml\n    MTADml --> MTAInternal\n    MTAInternal --> MTAApis\n\n    WebConfigServer --> TR104WebConfig\n    TR104WebConfig --> MTAApis\n    TR104Handler --> MTAApis\n\n    RdkbComponents &lt;--> SSPMsgBus\n    PSM &lt;--> MTAInternal\n    Syscfg &lt;--> MTAApis\n\n    MTAApis --> MTAHAL\n\n    classDef mtaAgent fill:#e3f2fd,stroke:#1976d2,stroke-width:2px;\n    classDef external fill:#fff3e0,stroke:#ef6c00,stroke-width:2px;\n    classDef hal fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;\n\n    class SSPMain,SSPMsgBus,SSPAction,TR104Handler,TR104WebConfig,PluginMain,MTADml,MTAInternal,MTAApis mtaAgent;\n    class RdkbComponents,WebConfigServer,PSM,Syscfg external;\n    class MTAHAL hal;<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"prerequisites-and-dependencies\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#prerequisites-and-dependencies\">Prerequisites and Dependencies<\/a><\/h3>\n\n\n\n<p><strong>RDK-B Platform and Integration Requirements:<\/strong><\/p>\n\n\n\n<p><strong>Build-Time Flags and Configuration:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Configure Option<\/strong><\/td><td><strong>DISTRO Feature<\/strong><\/td><td><strong>Build Flag<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Default<\/strong><\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>MTA_TR104SUPPORT<\/code><\/td><td>Enable TR-104 VoIP data model with RBus interface and WebConfig handlers<\/td><td>Not defined<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>FEATURE_SUPPORT_WEBCONFIG<\/code><\/td><td>Enable WebConfig framework integration for TR-104 bulk provisioning<\/td><td>Not set<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>FEATURE_RDKB_WAN_MANAGER<\/code><\/td><td>Enable WAN Manager integration for Ethernet WAN mode support<\/td><td>Not set<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>FEATURE_SUPPORT_RDKLOG<\/code><\/td><td>RDK Logger integration for structured logging<\/td><td>Enabled<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>INCLUDE_BREAKPAD<\/code><\/td><td>Google Breakpad crash reporting and minidump generation<\/td><td>Enabled<\/td><\/tr><tr><td>N\/A<\/td><td><code>safec<\/code><\/td><td>N\/A<\/td><td>Enable bounds-checking string functions via safec library<\/td><td>Not set (uses&nbsp;<code>SAFEC_DUMMY_API<\/code>)<\/td><\/tr><tr><td>N\/A<\/td><td><code>webconfig<\/code><\/td><td>N\/A<\/td><td>Enable WebConfig framework integration<\/td><td>Not set<\/td><\/tr><tr><td>N\/A<\/td><td><code>kirkstone<\/code><\/td><td>N\/A<\/td><td>Yocto Kirkstone build adjustments; Python 3 interpreter selection<\/td><td>Not set (uses&nbsp;<code>pythonnative<\/code>)<\/td><\/tr><tr><td>N\/A<\/td><td><code>rdkb_wan_manager<\/code><\/td><td>N\/A<\/td><td>WAN Manager integration<\/td><td>Not set<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>_CBR_PRODUCT_REQ_<\/code><\/td><td>Comcast CBR product-specific requirements and features<\/td><td>Not defined<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>_XB6_PRODUCT_REQ_<\/code><\/td><td>XB6 gateway platform requirements<\/td><td>Not defined<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>_COSA_INTEL_USG_ARM_<\/code><\/td><td>Intel USG ARM platform identifier<\/td><td>Enabled<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>_COSA_FOR_COMCAST_<\/code><\/td><td>Comcast\/Xfinity operator-specific customizations<\/td><td>Enabled<\/td><\/tr><tr><td><code>--enable-unitTestDockerSupport<\/code><\/td><td>N\/A<\/td><td>N\/A<\/td><td>Reduce MTA polling timeouts for Docker-based unit testing<\/td><td>Disabled<\/td><\/tr><tr><td>N\/A<\/td><td>N\/A<\/td><td><code>_COSA_SIM_<\/code><\/td><td>Simulation mode for development\/testing without real hardware<\/td><td>Not defined<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Additional Build Configuration:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Core MTA Timeouts<\/strong>&nbsp;(configure.ac&nbsp;<code>MTA_CFLAGS<\/code>):\n<ul class=\"wp-block-list\">\n<li><code>MAX_TIMEOUT_MTA_DHCP_ENABLED<\/code>&nbsp;= 60 seconds (production) \/ 2 seconds (unit test)<\/li>\n\n\n\n<li><code>MAX_TIMEOUT_MTA_DHCP_DISABLED<\/code>&nbsp;= 300 seconds (production) \/ 1 second (unit test)<\/li>\n\n\n\n<li><code>FOREVER<\/code>&nbsp;= 1 (production infinite loop) \/ 0 (unit test finite execution)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Platform-Specific Flags<\/strong>: Defined in platform\/product bbappend files or HAL configuration; conditionally compiled in source code<\/li>\n\n\n\n<li><strong>TR-104 Support<\/strong>:&nbsp;<code>MTA_TR104SUPPORT<\/code>&nbsp;must be manually defined and requires additional dependencies:\n<ul class=\"wp-block-list\">\n<li><code>rbus<\/code>&nbsp;library for RBus data element registration<\/li>\n\n\n\n<li><code>webconfig-framework<\/code>&nbsp;for bulk provisioning<\/li>\n\n\n\n<li><code>msgpack-c<\/code>&nbsp;for msgpack encoding\/decoding<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>SafeC Integration<\/strong>: When&nbsp;<code>safec<\/code>&nbsp;DISTRO feature is enabled, pkg-config automatically adds appropriate compiler\/linker flags; otherwise&nbsp;<code>SAFEC_DUMMY_API<\/code>&nbsp;provides stub implementations<\/li>\n\n\n\n<li><strong>Build Dependencies<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>hal-mta<\/code>&nbsp;(MTA Hardware Abstraction Layer)<\/li>\n\n\n\n<li><code>libsyscfg<\/code>&nbsp;(System configuration database)<\/li>\n\n\n\n<li><code>rdk-logger<\/code>&nbsp;(RDK logging framework)<\/li>\n\n\n\n<li><code>libtelemetry<\/code>&nbsp;(Telemetry event reporting)<\/li>\n\n\n\n<li><code>msgpack-c<\/code>&nbsp;(MessagePack serialization for WebConfig)<\/li>\n\n\n\n<li><code>webconfig-framework<\/code>&nbsp;(WebConfig integration, optional)<\/li>\n\n\n\n<li><code>rbus<\/code>&nbsp;(RBus library for TR-104 support, optional)<\/li>\n\n\n\n<li><code>safec-lib<\/code>&nbsp;(Bounds-checking string functions)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>HAL Dependencies<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code><strong>mta_hal<\/strong>.h<\/code>&nbsp;interface implementation (minimum version depends on platform)<\/li>\n\n\n\n<li>HAL must provide:&nbsp;<code><strong>mta_hal_InitDB<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_GetDHCPInfo<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_LineTableGetEntry<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_GetServiceFlow<\/strong>()<\/code>, DECT management APIs, and TR-104 parameter handlers (if TR-104 enabled)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Threading Model<\/strong><\/p>\n\n\n\n<p>The MTA Agent employs a single-threaded event-driven architecture for main RBus message processing to ensure thread-safety and avoid race conditions when accessing shared data structures. The component&#8217;s threading model is designed around the CCSP framework&#8217;s message bus dispatcher which operates on a single main thread handling all incoming RBus method calls, property get\/set operations, and event notifications.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Threading Architecture<\/strong>: Single-threaded event-driven model with RBus main loop integration<\/li>\n\n\n\n<li><strong>Main Thread<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Handles component initialization and registration with Component Registry<\/li>\n\n\n\n<li>Processes all RBus method invocations (get\/set parameter requests from TR-069, Web UI, other CCSP components)<\/li>\n\n\n\n<li>Executes data model validation and commit operations<\/li>\n\n\n\n<li>Invokes HAL API calls synchronously (HAL calls may block but are typically fast)<\/li>\n\n\n\n<li>Manages WebConfig message processing when bulk configuration updates arrive<\/li>\n\n\n\n<li>Handles RBus subscriptions and get\/set operations for TR-104 data elements<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Asynchronous Initialization<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>COSA_Async_Init()<\/code>&nbsp;function allows MTA hardware initialization to complete in background<\/li>\n\n\n\n<li>Prevents blocking system startup if MTA provisioning takes significant time<\/li>\n\n\n\n<li>Component reports ready state once async initialization completes<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Synchronization<\/strong>:\n<ul class=\"wp-block-list\">\n<li>No explicit mutex\/locking required for main data structures as single-threaded model prevents concurrent access<\/li>\n\n\n\n<li>HAL layer is responsible for its own thread-safety if HAL implementation uses multi-threading<\/li>\n\n\n\n<li>File I\/O operations (reading\/writing NVRAM configuration) execute synchronously on main thread<\/li>\n\n\n\n<li>PSM database operations are synchronous and handled through RBus calls to PSM component<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"component-state-flow\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#component-state-flow\">Component State Flow<\/a><\/h3>\n\n\n\n<p><strong>Initialization to Active State<\/strong><\/p>\n\n\n\n<p>The MTA Agent follows a structured initialization sequence that aligns with CCSP component lifecycle requirements. The component begins in an uninitialized state and progresses through configuration loading, data model registration, message bus engagement, and hardware initialization before entering an active operational state. This phased approach ensures all dependencies are satisfied and the component is fully ready to service requests before advertising availability to other RDK-B components.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant SystemD as Systemd\n    participant Main as ssp_main.c\n    participant MsgBus as Message Bus Handler\n    participant Plugin as Data Model Plugin\n    participant HAL as MTA HAL\n    participant CR as Component Registry\n    participant PSM as PSM Storage\n\n    SystemD->>Main: Start MTA Agent Process\n    Note over Main: State: Initializing&lt;br\/>Parse command line args,&lt;br\/>load configuration files\n    \n    Main->>Main: Load CcspMta.cfg\n    Note over Main: Read component ID,&lt;br\/>[PATH: \/com\/cisco\/spvtg\/ccsp\/mta via RBus], subsystem\n    \n    Main->>MsgBus: ssp_PnmMbi_MessageBusEngage()\n    MsgBus->>MsgBus: Connect to RBus System Bus\n    MsgBus-->>Main: RBus Connection Established\n    Note over Main: State: Connected to Message Bus\n    \n    Main->>CR: Register Component\n    CR-->>Main: Registration Acknowledged\n    Note over Main: State: Registered with CR\n    \n    Main->>Plugin: COSA_Init()\n    Plugin->>Plugin: Initialize Backend Manager\n    Plugin->>PSM: Load Persistent Configuration\n    PSM-->>Plugin: Configuration Loaded\n    Plugin->>HAL: mta_hal_InitDB()\n    HAL-->>Plugin: HAL Initialized\n    Plugin-->>Main: Synchronous Init Complete\n    Note over Main: State: Data Model Ready\n    \n    Main->>Plugin: COSA_Async_Init()\n    Note over Plugin: State: Async Initialization&lt;br\/>Background MTA provisioning\n    Plugin->>HAL: Query MTA Status\n    HAL-->>Plugin: MTA Provisioning Status\n    Plugin-->>Main: Async Init Complete\n    Note over Main: State: Active\n    \n    Main->>CR: Announce Component Ready\n    CR-->>Main: Component Now Discoverable\n    \n    loop Runtime Operations\n        Note over Main: State: Active&lt;br\/>Process RBus requests,&lt;br\/>handle WebConfig updates,&lt;br\/>serve TR-104 queries\n        Main->>Main: Handle Get\/Set Requests\n        Main->>HAL: Execute HAL Operations\n        Main->>PSM: Persist Configuration Changes\n    end\n    \n    SystemD->>Main: SIGTERM (Shutdown Request)\n    Note over Main: State: Shutting Down\n    Main->>Plugin: COSA_Unload()\n    Main->>MsgBus: Disconnect from RBus\n    Main->>SystemD: Exit Process\n    Note over Main: State: Stopped<\/pre><\/div>\n\n\n\n<p><strong>Runtime State Changes and Context Switching<\/strong><\/p>\n\n\n\n<p>During normal operation, the MTA Agent responds to various runtime events that trigger state changes in the underlying MTA hardware and service configuration. These state transitions are primarily driven by external configuration changes, network events, and hardware status updates.<\/p>\n\n\n\n<p><strong>State Change Triggers:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MTA Provisioning State Changes<\/strong>: When DOCSIS cable modem completes registration and MTA begins PacketCable provisioning flow, the component transitions from non-provisioned to provisioned state, triggering telemetry events and updating data model status parameters<\/li>\n\n\n\n<li><strong>Voice Line Registration Events<\/strong>: SIP registration success\/failure for individual voice lines causes line status transitions (idle \u2192 registering \u2192 registered \u2192 in-call \u2192 idle), which are reflected in TR-181&nbsp;<code>LineTable<\/code>&nbsp;entries<\/li>\n\n\n\n<li><strong>DECT Handset Registration<\/strong>: User-initiated DECT handset pairing mode enables registration mode temporarily, allowing new cordless handsets to join the system; deregistration removes handsets from the active handset table<\/li>\n\n\n\n<li><strong>WebConfig Bulk Updates<\/strong>: Receipt of TR-104 configuration blob from WebConfig server triggers atomic configuration application including validation, HAL updates, and persistence operations<\/li>\n\n\n\n<li><strong>DHCP Lease Renewal<\/strong>: MTA DHCP\/DHCPv6 lease renewals update provisioning server information, time servers, and TFTP boot file locations which may trigger re-provisioning flows<\/li>\n\n\n\n<li><strong>Overcurrent Fault Detection<\/strong>: Hardware fault conditions (FXS port overcurrent) trigger protective state transitions and generate fault status reports for diagnostics<\/li>\n<\/ul>\n\n\n\n<p><strong>Context Switching Scenarios:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bootstrap to Normal Configuration<\/strong>: During first boot or factory reset, the component loads bootstrap configuration from&nbsp;<code>\/opt\/secure\/bootstrap.json<\/code>, applies default voice service parameters, then transitions to runtime configuration mode where changes are persisted to NVRAM<\/li>\n\n\n\n<li><strong>TR-104 Enable\/Disable<\/strong>: When TR-104 support is enabled\/disabled through syscfg (<code>TR104enable<\/code>&nbsp;flag), the component registers or unregisters RBus data elements and enables\/disables WebConfig TR-104 subdocument processing without requiring process restart<\/li>\n\n\n\n<li><strong>Failover and Recovery<\/strong>: If MTA HAL operations fail (timeout, hardware error), the component logs errors, generates telemetry events, and may retry operations or enter a degraded state while maintaining data model accessibility for diagnostics<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"call-flow\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#call-flow\">Call Flow<\/a><\/h3>\n\n\n\n<p><strong>Initialization Call Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Init as System Init\n    participant SSP as SSP Main\n    participant MsgBus as RBus Handler\n    participant Plugin as COSA Plugin\n    participant DML as Data Model Layer\n    participant HAL as MTA HAL\n    participant CR as Component Registry\n\n    Init->>SSP: Start CcspMtaAgent Process\n    SSP->>SSP: Parse Args &amp; Load Config\n    SSP->>MsgBus: Initialize Message Bus\n    MsgBus->>MsgBus: Connect to RBus\n    MsgBus->>CR: Register Component&lt;br\/>(com.cisco.spvtg.ccsp.mta)\n    CR-->>MsgBus: Registration Complete\n    \n    SSP->>Plugin: COSA_Init()\n    Plugin->>Plugin: Create Backend Manager\n    Plugin->>DML: Initialize Data Model Objects\n    DML->>HAL: mta_hal_InitDB()\n    HAL-->>DML: HAL Database Initialized\n    DML-->>Plugin: Data Model Ready\n    Plugin-->>SSP: Init Success\n    \n    SSP->>Plugin: COSA_Async_Init()\n    Note over Plugin: Background initialization\n    Plugin->>HAL: Query MTA Provisioning Status\n    HAL-->>Plugin: Status Retrieved\n    Plugin-->>SSP: Async Init Complete\n    \n    SSP->>CR: Component Ready Signal\n    Init->>SSP: Component Active<\/pre><\/div>\n\n\n\n<p><strong>TR-181 Parameter Get Request Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Client as TR-069\/WebUI\n    participant RBus as RBus Interface\n    participant DML as DML Handler\n    participant Internal as Backend Manager\n    participant HAL as MTA HAL\n\n    Client->>RBus: GetParameterValues&lt;br\/>(Device.X_CISCO_COM_MTA.LineTable.1.Status)\n    RBus->>DML: X_CISCO_COM_MTA_LineTable_GetEntry()\n    Note over DML: Route to line table handler\n    \n    DML->>Internal: Lookup Cached Line Entry\n    alt Cache Valid\n        Internal-->>DML: Return Cached Data\n    else Cache Stale or Empty\n        Internal->>HAL: mta_hal_LineTableGetEntry(index)\n        HAL-->>Internal: Line Status, Codec, Stats\n        Internal->>Internal: Update Cache\n        Internal-->>DML: Return Fresh Data\n    end\n    \n    DML-->>RBus: Parameter Value (String)\n    RBus-->>Client: Response with Line Status<\/pre><\/div>\n\n\n\n<p><strong>TR-181 Parameter Set Request Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Client as TR-069\/WebUI\n    participant RBus as RBus Interface\n    participant DML as DML Handler\n    participant Internal as Backend Manager\n    participant HAL as MTA HAL\n    participant PSM as PSM Storage\n    participant Telemetry as Telemetry Agent\n\n    Client->>RBus: SetParameterValues&lt;br\/>(Device.X_CISCO_COM_MTA.DSXLogEnable)\n    RBus->>DML: X_CISCO_COM_MTA_SetParamBoolValue()\n    Note over DML: Validation Phase\n    \n    DML->>DML: Validate Parameter Type &amp; Range\n    alt Validation Fails\n        DML-->>RBus: Error: Invalid Parameter\n        RBus-->>Client: SetParameterValuesFault\n    else Validation Success\n        DML->>Internal: Stage Parameter Change\n        Internal-->>DML: Staged Successfully\n        DML-->>RBus: Validation Complete\n        \n        RBus->>DML: X_CISCO_COM_MTA_Commit()\n        Note over DML: Commit Phase\n        DML->>Internal: Apply Staged Changes\n        Internal->>HAL: Apply Configuration to Hardware\n        HAL-->>Internal: Configuration Applied\n        \n        Internal->>PSM: Persist Parameter Value\n        PSM-->>Internal: Value Persisted\n        \n        Internal->>Telemetry: Post Configuration Event\n        Telemetry-->>Internal: Event Logged\n        \n        Internal-->>DML: Commit Success\n        DML-->>RBus: Commit Complete\n        RBus-->>Client: SetParameterValuesResponse\n    end<\/pre><\/div>\n\n\n\n<p><strong>DECT Handset Registration Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant User as User\/WebUI\n    participant RBus as RBus Interface\n    participant DML as DML Handler\n    participant HAL as MTA HAL\n    participant Hardware as DECT Base Station\n\n    User->>RBus: SetParameterValues&lt;br\/>(RegistrationMode=true)\n    RBus->>DML: X_CISCO_COM_MTA_Dect_SetParamBoolValue()\n    DML->>HAL: mta_hal_DectSetRegistrationMode(true)\n    HAL->>Hardware: Enable DECT Registration Mode\n    Hardware-->>HAL: Mode Enabled (60s window)\n    HAL-->>DML: Registration Mode Active\n    DML-->>RBus: Success\n    RBus-->>User: Registration Mode Enabled\n    \n    Note over User,Hardware: User presses pairing button&lt;br\/>on DECT handset\n    \n    Hardware->>Hardware: Detect Handset Pairing Request\n    Hardware->>HAL: Handset Paired\n    HAL->>HAL: Update Handset Table\n    \n    User->>RBus: GetParameterValues&lt;br\/>(HandsetsTable.*)\n    RBus->>DML: X_CISCO_COM_MTA_DectHandsets_GetEntry()\n    DML->>HAL: mta_hal_GetHandsets()\n    HAL-->>DML: Handset List (InstanceNumber,&lt;br\/>Status, RFPI, Name)\n    DML-->>RBus: Handset Table Data\n    RBus-->>User: Display Registered Handsets<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"internal-modules\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#internal-modules\">Internal Modules<\/a><\/h2>\n\n\n\n<p>The MTA Agent is organized into distinct functional modules that implement the CCSP component architecture pattern. Each module has specific responsibilities ranging from system integration and message bus handling to data model implementation and hardware abstraction.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Module\/Class<\/strong><\/td><td><strong>Description<\/strong><\/td><td><strong>Key Files<\/strong><\/td><\/tr><tr><td><strong>Service Specific Platform (SSP)<\/strong><\/td><td>Component entry point and lifecycle management. Handles process initialization, command-line argument parsing, component configuration loading, message bus connection establishment, and graceful shutdown. Provides health monitoring interface and signal handling for crash recovery.<\/td><td><code>ssp_main.c<\/code>,&nbsp;<code>ssp_action.c<\/code>,&nbsp;<code><strong>ssp_global<\/strong>.h<\/code>,&nbsp;<code><strong>ssp_internal<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>Message Bus Interface<\/strong><\/td><td>RBus integration layer implementing CCSP message bus protocol. Manages component registration with Component Registry, handles incoming RBus method calls (GetParameterValues, SetParameterValues, GetParameterNames, GetParameterAttributes), and routes requests to appropriate data model handlers.<\/td><td><code>ssp_messagebus_interface.c<\/code>,&nbsp;<code><strong>ssp_messagebus_interface<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>TR-104 RBus Handler<\/strong><\/td><td>RBus interface implementation for TR-104 VoIP service data model. Provides get\/set handlers for TR-104 parameters, manages table-based data elements, and integrates with MTA HAL for TR-104 parameter retrieval and configuration. Enabled only when&nbsp;<code>MTA_TR104SUPPORT<\/code>&nbsp;compile flag is set.<\/td><td><code>TR104.c<\/code>,&nbsp;<code><strong>TR104<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>TR-104 WebConfig Handler<\/strong><\/td><td>WebConfig framework integration for bulk TR-104 configuration. Decodes msgpack-encoded TR-104 parameter blobs from WebConfig server, validates structure, applies configuration through HAL, persists to NVRAM as base64-encoded data, and reports provisioning status through sysevent.<\/td><td><code>TR104_webconfig.c<\/code><\/td><\/tr><tr><td><strong>Data Model Plugin<\/strong><\/td><td>COSA (Component Object Service Architecture) plugin implementing TR-181 data model lifecycle. Provides&nbsp;<code>COSA_Init()<\/code>&nbsp;for synchronous initialization,&nbsp;<code>COSA_Async_Init()<\/code>&nbsp;for background MTA provisioning,&nbsp;<code>COSA_Unload()<\/code>&nbsp;for cleanup, and memory management functions. Registers data model XML definition and function pointers with CCSP framework.<\/td><td><code>plugin_main.c<\/code>,&nbsp;<code><strong>plugin_main<\/strong>.h<\/code>,&nbsp;<code>plugin_main_apis.c<\/code>,&nbsp;<code><strong>plugin_main_apis<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>Data Model Layer (DML)<\/strong><\/td><td>TR-181 parameter get\/set\/validate\/commit handler implementation for&nbsp;<code><strong>Device<\/strong>.X_CISCO_COM_MTA.*<\/code>&nbsp;namespace. Implements handlers for MTA root object, DHCPInfo (IPv4\/IPv6), LineTable (voice lines), ServiceFlow statistics, DECT management, and diagnostic controls. Enforces parameter validation rules and manages multi-phase commit protocol.<\/td><td><code>cosa_x_cisco_com_mta_dml.c<\/code>,&nbsp;<code><strong>cosa_x_cisco_com_mta_dml<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>Backend Manager (Internal)<\/strong><\/td><td>Core business logic and state management. Maintains runtime cache of MTA status, line configurations, DECT handset list, and service flow data. Coordinates between DML layer and HAL integration layer, manages asynchronous initialization, and handles PSM interaction for persistent storage.<\/td><td><code>cosa_x_cisco_com_mta_internal.c<\/code>,&nbsp;<code><strong>cosa_x_cisco_com_mta_internal<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>HAL Integration Layer<\/strong><\/td><td>Hardware abstraction layer wrapper providing vendor-neutral interface to MTA HAL. Implements API wrappers for all MTA HAL functions including initialization, DHCP info retrieval, line management, service flow queries, DECT operations, and TR-104 parameter access. Handles HAL error code translation and logging.<\/td><td><code>cosa_x_cisco_com_mta_apis.c<\/code>,&nbsp;<code><strong>cosa_x_cisco_com_mta_apis<\/strong>.h<\/code><\/td><\/tr><tr><td><strong>Custom Platform Definitions<\/strong><\/td><td>Platform-specific configuration and customization header. May contain hardware-specific constants, feature flags, and platform adaptations required for different cable modem chipsets and MTA implementations.<\/td><td><code><strong>mta_custom<\/strong>.h<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"component-interactions\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#component-interactions\">Component Interactions<\/a><\/h2>\n\n\n\n<p>The MTA Agent interacts with multiple RDK-B middleware components, system services, and external management systems to provide comprehensive voice service management. These interactions follow standardized protocols including RBus for CCSP component communication, RBus for TR-104 data elements, syscfg for configuration persistence, and WebConfig for bulk provisioning.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"interaction-matrix\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#interaction-matrix\">Interaction Matrix<\/a><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Target Component\/Layer<\/strong><\/td><td><strong>Interaction Purpose<\/strong><\/td><td><strong>Key APIs\/Endpoints<\/strong><\/td><\/tr><tr><td><strong>RDK-B Middleware Components<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>Component Registry (CR)<\/td><td>Component registration, discovery, and health monitoring<\/td><td><code>CcspBaseIf_Register_Event()<\/code>,&nbsp;<code>CcspBaseIf_discComponentSupportingNamespace()<\/code><\/td><\/tr><tr><td>TR-069 Protocol Adapter<\/td><td>Remote management parameter access for voice service configuration<\/td><td>RBus:&nbsp;<code><strong>Device<\/strong>.X_CISCO_COM_MTA.*<\/code>&nbsp;namespace<\/td><\/tr><tr><td>PAM (Provisioning and Management)<\/td><td>Coordinate voice service initialization with overall platform provisioning state<\/td><td>RBus: Parameter queries for provisioning status<\/td><\/tr><tr><td>PSM (Persistent Storage Manager)<\/td><td>Store and retrieve voice line configuration, DECT settings, and service parameters<\/td><td><code>PSM_Set()<\/code>,&nbsp;<code>PSM_Get()<\/code>,&nbsp;<code>PSM_Del()<\/code><\/td><\/tr><tr><td>WebConfig Agent<\/td><td>Receive and apply bulk TR-104 VoIP configuration from cloud<\/td><td>WebConfig Subdoc:&nbsp;<code>TR104<\/code>, callback:&nbsp;<code>TR104_WebConfigDataHandler()<\/code><\/td><\/tr><tr><td>Telemetry Agent<\/td><td>Report critical events: provisioning changes, line registration, faults<\/td><td>Telemetry markers:&nbsp;<code>MTA_PROVISIONED<\/code>,&nbsp;<code>MTA_LINE_STATUS_CHANGE<\/code><\/td><\/tr><tr><td><strong>System &amp; HAL Layers<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>MTA HAL<\/td><td>Control voice hardware, query status, manage lines, DECT, service flows<\/td><td><code><strong>mta_hal_InitDB<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_GetDHCPInfo<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_LineTableGetEntry<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_GetServiceFlow<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_DectGetEnable<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_getTR104parameterValues<\/strong>()<\/code>,&nbsp;<code><strong>mta_hal_setTR104parameterValues<\/strong>()<\/code><\/td><\/tr><tr><td>Syscfg<\/td><td>Persistent key-value storage for bootstrap config, TR-104 enable flag<\/td><td><code><strong>syscfg_get<\/strong>()<\/code>,&nbsp;<code><strong>syscfg_set<\/strong>()<\/code>,&nbsp;<code><strong>syscfg_commit<\/strong>()<\/code><\/td><\/tr><tr><td>Sysevent<\/td><td>Publish MTA provisioning status for consumption by other processes<\/td><td><code><strong>sysevent_set<\/strong>()<\/code>:&nbsp;<code>mta_provision_status<\/code>,&nbsp;<code>mta_status<\/code><\/td><\/tr><tr><td>RBus System Bus<\/td><td>Primary IPC mechanism for CCSP component communication<\/td><td>Standard RBus methods:&nbsp;<code>GetParameterValues<\/code>,&nbsp;<code>SetParameterValues<\/code>,&nbsp;<code>GetParameterNames<\/code><\/td><\/tr><tr><td>RBus<\/td><td>TR-104 data element registration and serving (when TR-104 support enabled)<\/td><td><code>rbusHandle_t<\/code>,&nbsp;<code>rbusProperty_t<\/code>,&nbsp;<code>TR104Services_GetHandler()<\/code>,&nbsp;<code>TR104Services_SetHandler()<\/code><\/td><\/tr><tr><td>NVRAM Filesystem<\/td><td>Persist TR-104 configuration blob, bootstrap data, partner defaults<\/td><td>File paths:&nbsp;<code>\/nvram\/.vsb64.txt<\/code>,&nbsp;<code>\/nvram\/partners_defaults.json<\/code>,&nbsp;<code>\/nvram\/bootstrap.json<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Events Published by MTA Agent:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Event Name<\/strong><\/td><td><strong>Event Topic\/Path<\/strong><\/td><td><strong>Trigger Condition<\/strong><\/td><td><strong>Subscriber Components<\/strong><\/td><\/tr><tr><td><code>mta_provision_status<\/code><\/td><td>Sysevent key<\/td><td>MTA provisioning state change (MTA_PROVISIONED \/ MTA_NON_PROVISIONED)<\/td><td>System monitoring, PAM, WebConfig<\/td><\/tr><tr><td><code>mta_status<\/code><\/td><td>Sysevent key<\/td><td>MTA initialization progress (MTA_INIT, MTA_START, MTA_COMPLETE, MTA_ERROR, MTA_REJECTED)<\/td><td>System initialization, diagnostics<\/td><\/tr><tr><td><code>MTA_PROVISIONED<\/code><\/td><td>Telemetry marker<\/td><td>MTA successfully provisioned and voice services operational<\/td><td>Telemetry backend, cloud analytics<\/td><\/tr><tr><td><code>MTA_LINE_STATUS_CHANGE<\/code><\/td><td>Telemetry marker<\/td><td>Voice line registration status change (idle \u2192 registered \u2192 in-call)<\/td><td>Call analytics, service quality monitoring<\/td><\/tr><tr><td><code>MTA_DECT_REGISTRATION<\/code><\/td><td>Telemetry marker<\/td><td>DECT handset registered or deregistered<\/td><td>User activity tracking<\/td><\/tr><tr><td><code>MTA_OVERCURRENT_FAULT<\/code><\/td><td>Telemetry marker<\/td><td>FXS port overcurrent fault detected<\/td><td>Hardware fault monitoring<\/td><\/tr><tr><td>Component State Change<\/td><td>RBus signal via CR<\/td><td>Component health status change (green, yellow, red)<\/td><td>Component Registry, system health monitors<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ipc-flow-patterns\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#ipc-flow-patterns\">IPC Flow Patterns<\/a><\/h3>\n\n\n\n<p><strong>Primary IPC Flow &#8211; RBus Parameter Access:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Client as TR-069 PA \/ WebUI\n    participant RBus as RBus System Bus\n    participant MTA as MTA Agent\n    participant PSM as PSM Storage\n    participant HAL as MTA HAL\n\n    Client->>RBus: GetParameterValues&lt;br\/>(Device.X_CISCO_COM_MTA.LineTable.)\n    RBus->>MTA: CcspCcMbi_GetParameterValues()\n    Note over MTA: Route to DML handler\n    MTA->>MTA: Validate namespace &amp; permissions\n    \n    alt Cached Data Available\n        MTA->>MTA: Return from cache\n    else Query HAL\n        MTA->>HAL: mta_hal_LineTableGetEntry()\n        HAL-->>MTA: Line data (status, codec, stats)\n        MTA->>MTA: Update cache\n    end\n    \n    MTA-->>RBus: Parameter values response\n    RBus-->>Client: Line table data\n    \n    Note over Client,HAL: Set Parameter Flow\n    Client->>RBus: SetParameterValues&lt;br\/>(Device.X_CISCO_COM_MTA.DSXLogEnable)\n    RBus->>MTA: CcspCcMbi_SetParameterValues()\n    MTA->>MTA: Validate (type, range, permissions)\n    MTA-->>RBus: Validation result\n    \n    RBus->>MTA: SetCommit()\n    MTA->>HAL: Apply configuration\n    HAL-->>MTA: Applied\n    MTA->>PSM: PSM_Set() - persist value\n    PSM-->>MTA: Persisted\n    MTA-->>RBus: Commit success\n    RBus-->>Client: SetParameterValuesResponse<\/pre><\/div>\n\n\n\n<p><strong>RBus TR-104 Data Access Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Client as RBus Client App\n    participant RBus as RBus Infrastructure\n    participant MTA as MTA Agent (TR-104 Handler)\n    participant HAL as MTA HAL\n\n    Note over MTA: MTA Agent registers TR-104&lt;br\/>data elements on startup\n    MTA->>RBus: rbus_open()&lt;br\/>Register TR104Services table\n    RBus-->>MTA: Registration complete\n    \n    Client->>RBus: rbusTable_getRow&lt;br\/>(Device.Services.VoiceService.*)\n    RBus->>MTA: TR104Services_TableHandler()\n    MTA->>HAL: mta_hal_getTR104parameterValues()\n    HAL-->>MTA: TR-104 parameter list &amp; values\n    \n    MTA->>MTA: Convert to rbusProperty_t\n    MTA-->>RBus: rbusProperty with values\n    RBus-->>Client: Table row data\n    \n    Note over Client,HAL: Set TR-104 Parameter\n    Client->>RBus: rbus_set&lt;br\/>(Device.Services.VoiceService.1.VoiceProfile.1.Enable)\n    RBus->>MTA: TR104Services_SetHandler()\n    MTA->>MTA: Validate TR-104 parameter\n    MTA->>HAL: mta_hal_setTR104parameterValues()\n    HAL-->>MTA: Applied to hardware\n    MTA-->>RBus: RBUS_ERROR_SUCCESS\n    RBus-->>Client: Set complete<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"implementation-details\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#implementation-details\">Implementation Details<\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"major-hal-apis-integration\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#major-hal-apis-integration\">Major HAL APIs Integration<\/a><\/h3>\n\n\n\n<p>The MTA Agent relies heavily on the MTA HAL interface to abstract hardware-specific voice service operations. The HAL provides a standardized API that vendors implement for their specific MTA chipsets and DOCSIS platforms. The component uses these HAL APIs extensively throughout its data model implementation.<\/p>\n\n\n\n<p><strong>Core HAL APIs:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>HAL API<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Implementation File<\/strong><\/td><\/tr><tr><td><code><strong>mta_hal_InitDB<\/strong>()<\/code><\/td><td>Initialize MTA HAL subsystem and establish connection to MTA hardware\/firmware. Must be called before any other HAL operations.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTAInit()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_GetDHCPInfo<\/strong>()<\/code><\/td><td>Retrieve MTA IPv4 DHCP lease information including IP address, subnet mask, gateway, DNS servers, boot filename, FQDN, lease times, and DHCP options (3,6,7,8).<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTAGetDHCPInfo()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_GetDHCPV6Info<\/strong>()<\/code><\/td><td>Retrieve MTA IPv6 DHCPv6 lease information including IPv6 address, prefix, boot filename, DNS servers, and DHCPv6 option data.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTAGetDHCPV6Info()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_LineTableGetNumberOfEntries<\/strong>()<\/code><\/td><td>Query the number of voice lines provisioned in the MTA (typically 2 for residential gateways, up to 8 for MTAs).<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTALineTableGetNumberOfEntries()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_LineTableGetEntry<\/strong>()<\/code><\/td><td>Retrieve detailed voice line information for a specific line index: status, registration state, codec, call statistics, quality metrics, emergency call capability.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTALineTableGetEntry()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_TriggerDiagnostics<\/strong>()<\/code><\/td><td>Initiate diagnostics for a specific voice line to test connectivity, codec negotiation, and call quality.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMtaTriggerDiagnostics()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_GetServiceFlow<\/strong>()<\/code><\/td><td>Query DOCSIS service flow statistics including upstream\/downstream bandwidth, packet counts, and QoS parameters for voice traffic.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMtaGetServiceFlow()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_DectGetEnable<\/strong>()<\/code><\/td><td>Get DECT base station enable status (whether cordless phone support is active).<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTADectGetEnable()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_DectSetEnable<\/strong>()<\/code><\/td><td>Enable or disable DECT base station functionality for cordless handset support.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTADectSetEnable()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_DectGetRegistrationMode<\/strong>()<\/code><\/td><td>Query whether DECT registration mode is active (allowing new handsets to pair).<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTADectGetRegistrationMode()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_DectSetRegistrationMode<\/strong>()<\/code><\/td><td>Enable\/disable DECT handset registration mode (typically opens 60-second pairing window).<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTADectSetRegistrationMode()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_DectDeregisterDectHandset<\/strong>()<\/code><\/td><td>Deregister a specific DECT handset by instance number, removing it from the paired handset list.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTADectDeregisterDectHandset()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_GetHandsets<\/strong>()<\/code><\/td><td>Retrieve list of registered DECT handsets with details: instance number, status, RFPI (Radio Fixed Part Identity), handset name.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMTADectGetHandsets()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_GetCalls<\/strong>()<\/code><\/td><td>Query active calls on a specific voice line including call direction, remote number, codec in use, start time.<\/td><td><code><strong>cosa_x_cisco_com_mta_apis<\/strong>.c::CosaDmlMtaLineGetCalls()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_getTR104parameterValues<\/strong>()<\/code><\/td><td>Retrieve TR-104 VoIP service parameter values from MTA hardware (used when TR-104 support enabled).<\/td><td><code><strong>TR104<\/strong>.c::TR104Services_TableHandler()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_setTR104parameterValues<\/strong>()<\/code><\/td><td>Apply TR-104 VoIP configuration parameters to MTA hardware (used for WebConfig bulk provisioning).<\/td><td><code><strong>TR104_webconfig<\/strong>.c::TR104_WebConfigDataHandler()<\/code><\/td><\/tr><tr><td><code><strong>mta_hal_getTR104parameterNames<\/strong>()<\/code><\/td><td>Query list of supported TR-104 parameter names from HAL implementation.<\/td><td><code><strong>TR104<\/strong>.c::TR104_open()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"key-implementation-logic\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#key-implementation-logic\">Key Implementation Logic<\/a><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>State Machine Engine<\/strong>: The MTA Agent does not implement an explicit finite state machine, but rather follows the CCSP component lifecycle state model (Initializing \u2192 Registered \u2192 Active \u2192 Shutting Down). MTA provisioning state is managed by the underlying HAL and DOCSIS stack, with the agent observing and reporting status through data model parameters.\n<ul class=\"wp-block-list\">\n<li>Component lifecycle managed in&nbsp;<code><strong>ssp_main<\/strong>.c::main()<\/code>&nbsp;and&nbsp;<code>ssp_action.c<\/code><\/li>\n\n\n\n<li>Asynchronous MTA initialization in&nbsp;<code><strong>plugin_main<\/strong>.c::COSA_Async_Init()<\/code><\/li>\n\n\n\n<li>State transitions logged through RDK Logger with component health updates to Component Registry<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Event Processing<\/strong>: The agent operates in a reactive event-driven model responding to external requests rather than generating internal state machine events. Events are processed through the RBus message dispatcher on the main thread.\n<ul class=\"wp-block-list\">\n<li>RBus method invocations dispatched to DML handlers in&nbsp;<code>cosa_x_cisco_com_mta_dml.c<\/code><\/li>\n\n\n\n<li>WebConfig events handled through callback registration in&nbsp;<code>TR104_webconfig.c<\/code><\/li>\n\n\n\n<li>RBus TR-104 subscriptions processed through handlers in&nbsp;<code>TR104.c<\/code><\/li>\n\n\n\n<li>No asynchronous event queue; all processing synchronous on main thread<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Error Handling Strategy<\/strong>: Errors are detected at multiple layers and propagated through return codes, with logging and telemetry generation for critical failures.\n<ul class=\"wp-block-list\">\n<li>HAL errors (RETURN_ERR) logged and translated to CCSP return codes (ANSC_STATUS_FAILURE)<\/li>\n\n\n\n<li>Validation failures in DML layer return error codes to RBus clients without committing changes<\/li>\n\n\n\n<li>WebConfig parsing errors reject entire configuration blob to prevent partial application<\/li>\n\n\n\n<li>Telemetry events generated for provisioning failures, line registration failures, hardware faults<\/li>\n\n\n\n<li>No automatic retry logic; external management systems responsible for retry<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Logging &amp; Debugging<\/strong>: Comprehensive logging using RDK Logger infrastructure with configurable log levels.\n<ul class=\"wp-block-list\">\n<li>Log categories:&nbsp;<code>LOG_RDK_LOG_DEBUG<\/code>,&nbsp;<code>LOG_RDK_LOG_INFO<\/code>,&nbsp;<code>LOG_RDK_LOG_ERROR<\/code><\/li>\n\n\n\n<li>Trace macros:&nbsp;<code>CcspTraceDebug()<\/code>,&nbsp;<code>CcspTraceInfo()<\/code>,&nbsp;<code>CcspTraceWarning()<\/code>,&nbsp;<code>CcspTraceError()<\/code><\/li>\n\n\n\n<li>Crash backtrace capture to&nbsp;<code>\/nvram\/MTaAgentSsp_backtrace<\/code>&nbsp;for post-mortem analysis<\/li>\n\n\n\n<li>Memory leak detection through CCSP memory tracking:&nbsp;<code>COSA_MemoryCheck()<\/code>,&nbsp;<code>COSA_MemoryUsage()<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"key-configuration-files\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/21365674\/CcspMtaAgent#key-configuration-files\">Key Configuration Files<\/a><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Configuration File<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Override Mechanisms<\/strong><\/td><\/tr><tr><td><code>\/etc\/CcspMta.cfg<\/code><\/td><td>Component identity and RBus configuration. Defines component ID (com.cisco.spvtg.ccsp.mta),&nbsp;[PATH: \/com\/cisco\/spvtg\/ccsp\/mta via <strong>RBus]<\/strong>, and data model library reference.<\/td><td>Typically static; changes require component restart<\/td><\/tr><tr><td><code>\/etc\/CcspMtaAgent.xml<\/code><\/td><td>TR-181 data model XML definition mapping object paths to function handlers. Defines complete object hierarchy for&nbsp;<code><strong>Device<\/strong>.X_CISCO_COM_MTA.*<\/code>&nbsp;namespace with function pointers for get\/set\/validate\/commit operations.<\/td><td>Generated from data model tools; platform integrators may customize<\/td><\/tr><tr><td><code>\/etc\/CcspMtaLib.cfg<\/code><\/td><td>Data model library configuration referenced from main component config.<\/td><td>Platform-specific customization<\/td><\/tr><tr><td><code>\/nvram\/partners_defaults.json<\/code><\/td><td>Partner-specific default configurations for different cable operators. May contain default voice service settings per partner ID.<\/td><td>Provisioned during manufacturing or first boot; updated via firmware<\/td><\/tr><tr><td><code>\/opt\/secure\/bootstrap.json<\/code><\/td><td>Secure bootstrap configuration data including initial provisioning parameters. Used during first-time provisioning before full configuration available.<\/td><td>Securely provisioned; fallback to&nbsp;<code>\/nvram\/bootstrap.json<\/code>&nbsp;if primary missing<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>The Media Terminal Adapter (MTA) Agent is a RDK-B middleware component responsible for managing PacketCable\/DOCSIS-based [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":9575,"menu_order":9,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-9640","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>CcspMtaAgent - RDK Documentation Portal | Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CcspMtaAgent - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"The Media Terminal Adapter (MTA) Agent is a RDK-B middleware component responsible for managing PacketCable\/DOCSIS-based [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-05T16:01:24+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/\",\"name\":\"CcspMtaAgent - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"datePublished\":\"2022-06-21T13:52:55+00:00\",\"dateModified\":\"2026-03-05T16:01:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Documentation\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"RDK Broadband\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Components\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"CcspMtaAgent\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/\",\"name\":\"RDK Documentation Portal | Documentation\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CcspMtaAgent - RDK Documentation Portal | Documentation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/","og_locale":"en_US","og_type":"article","og_title":"CcspMtaAgent - RDK Documentation Portal | Documentation","og_description":"The Media Terminal Adapter (MTA) Agent is a RDK-B middleware component responsible for managing PacketCable\/DOCSIS-based [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2026-03-05T16:01:24+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/","name":"CcspMtaAgent - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"datePublished":"2022-06-21T13:52:55+00:00","dateModified":"2026-03-05T16:01:24+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/ccspmtaagent\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":2,"name":"Documentation","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":3,"name":"RDK Broadband","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/"},{"@type":"ListItem","position":4,"name":"Components","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/"},{"@type":"ListItem","position":5,"name":"CcspMtaAgent"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website","url":"https:\/\/developer.rdkcentral.com\/documentation\/","name":"RDK Documentation Portal | Documentation","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/comments?post=9640"}],"version-history":[{"count":12,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9640\/revisions"}],"predecessor-version":[{"id":12784,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9640\/revisions\/12784"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9575"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=9640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}