
{"id":9564,"date":"2022-06-21T13:52:43","date_gmt":"2022-06-21T13:52:43","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/"},"modified":"2026-07-16T12:06:17","modified_gmt":"2026-07-16T12:06:17","slug":"architecture","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/","title":{"rendered":"Architecture"},"content":{"rendered":"\n<p>RDK-B follows a layered architecture comprising Application, Middleware, and Hardware Abstraction Layer (HAL), which separates application logic from hardware-specific implementation. This design makes RDK-B WAN-agnostic, supporting multiple access technologies such as DOCSIS, DSL, GPON, and LTE. The middleware itself is built as a collection of independent, componentized services, each handling a specific functional domain like Wi-Fi, WAN, or Voice. Components can be selectively included, added, removed, or replaced based on target device requirements without affecting unrelated functionality.<\/p>\n\n\n\n<p>In RDK-B, cross-layer dependencies are minimized through well-defined interfaces and standardized data models that govern communication between components. Standardized managers and HAL interfaces allow the same core middleware stack to operate consistently across different hardware platforms, ensuring portability. This loosely coupled, modular design simplifies platform-specific customization and supports long-term extensibility \u2014 enabling tailored builds for devices with varying capabilities without requiring architectural changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"device-layers\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#device-layers\">Device Layers<\/a><\/h2>\n\n\n\n<p>RDK-B organizes components based on functionality and level of abstraction, with each group having clearly defined responsibilities. Within the middleware layer, components are largely independent and communicate with each other using IPC mechanisms, enabling modularity and selective inclusion based on device requirements. Hardware access is performed through HAL interfaces, with platform-specific implementations translating these interactions to the underlying system.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"application-layer\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#application-layer\">Application Layer<\/a><\/h3>\n\n\n\n<p>The Application Layer hosts various caterogies of applications including<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>web-based applications for device configuration &amp; monitoring( the web UI of gateway devices )<\/li>\n\n\n\n<li>operator applications for network management, diagnostics, and CPE provisioning, and<\/li>\n\n\n\n<li>third-party applications extending functionality with parental controls, security services, and smart home integration.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"middleware-layer\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#middleware-layer\">Middleware Layer<\/a><\/h3>\n\n\n\n<p>The RDK-B Middleware is composed of independent, domain-specific components that communicate through well-defined interfaces. Several of these components implement the TR-181 data model standard for consistent parameter representation and remote manageability. Key components include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RDK WAN Manager<\/strong>\u00a0\u2014 Orchestrates WAN connectivity across Ethernet, DOCSIS, GPON, and LTE interfaces, with support for automatic failover, load balancing, and policy-based routing.<\/li>\n\n\n\n<li><strong>CCSP PSM (Persistent Storage Manager)<\/strong>\u00a0\u2014 Provides parameter storage with in-memory caching and transactional support for atomic updates that persist across reboots.<\/li>\n\n\n\n<li><strong>Utopia<\/strong>\u00a0\u2014 Delivers core system infrastructure including configuration management (syscfg), event messaging (sysevent), and network service orchestration for DHCP, firewall, routing, and VLAN.<\/li>\n\n\n\n<li><strong>OneWifi<\/strong>\u00a0\u2014 Offers unified Wi-Fi management for radios and Virtual Access Points, supporting Wi-Fi 6\/6E\/7, EasyMesh, and client steering capabilities.<\/li>\n\n\n\n<li><strong>RBUS<\/strong>\u00a0\u2014 Provides high-performance inter-process communication using a binary protocol with event-driven notifications and a hierarchical data model.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hardware-abstraction-layer-hal\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#hardware-abstraction-layer-hal\">Hardware Abstraction Layer (HAL)<\/a><\/h3>\n\n\n\n<p>The HAL defines standardized, vendor-neutral interfaces that decouple the middleware from underlying hardware, enabling portability across diverse chipsets and platforms. Defined HAL interfaces \u2014 including Wi-Fi, Ethernet, DHCP V4\/V6, Platform, Cellular, and VLAN \u2014 allow operators to source hardware competitively without impacting middleware functionality. Certain capabilities such as MAP-T support, 6 GHz operation, and multicast handling remain dependent on the specific chipset and vendor implementation beneath the HAL.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"platform-layer\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#platform-layer\">Platform Layer<\/a><\/h3>\n\n\n\n<p>The Platform Layer provides the foundational system software on which all upper layers depend. The&nbsp;<strong>Linux kernel<\/strong>&nbsp;incorporates network drivers (Wi-Fi, Ethernet, cellular), USB and flash storage drivers (MTD, UBI), and cryptographic accelerators.&nbsp;<strong>Bootloaders<\/strong>&nbsp;\u2014 typically U-Boot or vendor-specific alternatives \u2014 handle hardware initialization, kernel and device tree loading, and secure boot verification.&nbsp;<strong>Vendor libraries<\/strong>&nbsp;supply SoC-specific acceleration for video codec and cryptographic operations, along with Wi-Fi drivers (proprietary or open-source)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"architectural-deep-dive\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#architectural-deep-dive\">Architectural Deep dive<\/a><\/h2>\n\n\n\n<p>The following diagram provides a detailed view of the RDK Connectivity architecture, showing all components and their relationships:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/RDK-Connectivity_Architecture_Detailed.png?version=1&amp;modificationDate=1784201428000&amp;api=v2\" alt=\"\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"rdkb-components\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#rdkb-components\">RDKB Components<\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ccsp-architecture\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#ccsp-architecture\">CCSP Architecture<\/a><\/h3>\n\n\n\n<p>CCSP (Common Component Software Platform) is the original framework developed as part of the RDK-B initiative to provide a standardized, component-based approach to implementing broadband device functionality. The CCSP framework relies on several foundational infrastructure services \u2014 including a component registry for discovery, persistent storage for parameter management, shared libraries for IPC and data model handling, and a device-level provisioning gateway \u2014 which collectively support the operation of functional components implementing specific domains such as Wi-Fi, Ethernet, cable modem, and network management.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"architectural-evolution\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#architectural-evolution\">Architectural Evolution<\/a><\/h3>\n\n\n\n<p>Apart from the CCSP components, a set of next-generation middleware components have been developed with a focus on improved performance and simplified design. These modern components provide direct HAL access to reduce abstraction layers between the component and hardware, asynchronous non-blocking I\/O to prevent processing stalls, and efficient memory utilization through shared libraries instead of separate processes where appropriate.<\/p>\n\n\n\n<p>The modern architecture emphasizes&nbsp;<strong>simplicity<\/strong>&nbsp;\u2014 through component consolidation, cleaner C++ interfaces with reduced boilerplate, improved documentation, and simplified code paths for easier debugging. It also emphasizes&nbsp;<strong>modularity<\/strong>&nbsp;\u2014 through a plugin architecture for feature extensibility, runtime configuration to enable or disable features without recompilation, clear dependency management, and backward-compatible versioning.<\/p>\n\n\n\n<p>These components are progressively replacing their CCSP counterparts in an ongoing transition, with both architectures coexisting in current deployments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"component-reference\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#component-reference\">Component Reference<\/a><\/h3>\n\n\n\n<p>The table below provides a consolidated view of all major RDK-B middleware components, encompassing both legacy CCSP components and their modern replacements.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Component<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><tr><td><strong>Component Registry<\/strong><\/td><td>Central registry where components announce their presence and capabilities at startup. Maintains a mapping of TR-181 namespaces to component names (e.g.,&nbsp;<code><strong>Device<\/strong>.WiFi.*<\/code>&nbsp;\u2192&nbsp;<code>OneWifi<\/code>), performs health monitoring through periodic heartbeat checks, provides discovery services for components to locate each other without hardcoded dependencies, and supports namespace conflict resolution when multiple components claim the same parameters.<\/td><\/tr><tr><td><strong>CcspPandM<\/strong><\/td><td>Manages device-level provisioning and parameter management, including first-boot configuration, factory reset handling, and TR-181 namespaces such as&nbsp;<code><strong>Device<\/strong>.DeviceInfo.*<\/code>,&nbsp;<code>Device.Time.*<\/code>, and&nbsp;<code><strong>Device<\/strong>.UserInterface.*<\/code>. Acts as the TR-181 gateway, receiving requests from XCONF or WebPA agents and routing them to the appropriate components via Component Registry lookups.<\/td><\/tr><tr><td><strong>CcspPsm<\/strong><\/td><td>Persistent Storage Manager providing database services (XML or SQLite) for parameter storage, with in-memory caching for fast access. Handles configuration persistence across reboots, backup and restore operations, and transactional support for atomic multi-parameter updates.<\/td><\/tr><tr><td><strong>CcspCommonLibrary<\/strong><\/td><td>Shared library suite that simplifies IPC operations with wrapper functions, provides a data model framework with TR-181 type conversions, offers component infrastructure for registration and message handling, and supplies utility functions for logging, memory management, and string operations.<\/td><\/tr><tr><td><strong>CcspEthAgent<\/strong><\/td><td>Manages Ethernet wired networking operations including physical port configuration, link state management, and statistics collection. Monitors interface status, tracks traffic metrics, and configures port-level parameters such as duplex mode and speed.<\/td><\/tr><tr><td><strong>CcspCMAgent<\/strong><\/td><td>Interfaces with cable modem hardware to monitor DOCSIS WAN connectivity and provide modem diagnostics. Tracks signal quality metrics, channel bonding status, downstream\/upstream channel details, and modem operational state.<\/td><\/tr><tr><td><strong>CcspLMLite<\/strong><\/td><td>Discovers and tracks LAN-connected devices through active monitoring of ARP tables and DHCP lease information. Maintains a real-time inventory of connected hosts including MAC addresses, IP addresses, hostnames, and connection timestamps.<\/td><\/tr><tr><td><strong>CcspDmCli<\/strong><\/td><td>Command-line utility for TR-181 operations, enabling parameter get\/set, table operations, component discovery, and runtime debugging during development.<\/td><\/tr><tr><td><strong>RDK WAN Manager<\/strong><\/td><td>Central orchestrator for WAN connectivity, managing multiple interface types (Ethernet, DOCSIS, DSL, GPON, LTE, PPPoE) with multi-WAN support. Implements automatic failover using ping\/HTTP\/DNS health checks, load balancing across connections, and policy-based routing for application-aware traffic decisions.<\/td><\/tr><tr><td><strong>RDK VLAN Bridge Manager<\/strong><\/td><td>Configures VLANs and bridges for service segmentation across IPTV, VoIP, data, guest networks, and IoT. Supports 802.1Q tagging, QinQ nested VLANs, dynamic VLAN creation, and service-to-VLAN mapping.<\/td><\/tr><tr><td><strong>OneWiFi<\/strong><\/td><td>Unified Wi-Fi management component replacing CcspWiFiAgent, CcspHotspot, and vendor-specific Wi-Fi managers. Manages all radios and SSIDs from a single process with Wi-Fi 6\/6E support (OFDMA, TWT, BSS coloring, WPA3), client steering across 2.4 GHz\/5 GHz\/6 GHz bands, and mesh networking capabilities.<\/td><\/tr><tr><td><strong>RDK GPON Manager<\/strong><\/td><td>Controls GPON\/EPON optical interfaces for fiber broadband deployments. Manages ONU\/ONT operations including optical signal monitoring, ranging, registration, power control, OMCI protocol handling, and service provisioning from the OLT.<\/td><\/tr><tr><td><strong>RDK PPP Manager<\/strong><\/td><td>Establishes PPPoE\/PPPoA connections with PAP\/CHAP\/MS-CHAP authentication, dynamic IP and DNS configuration, automatic reconnection on failure, and support for VLAN-tagged sessions.<\/td><\/tr><tr><td><strong>RDK Telco Voice Manager<\/strong><\/td><td>Manages VoIP services including SIP registration, codec handling (G.711, G.729, G.722), call features (call waiting, forwarding, caller ID), RTP\/SRTP media with QoS enforcement, and FXS\/FXO port control.<\/td><\/tr><tr><td><strong>RDK Cellular Manager<\/strong><\/td><td>Controls LTE\/5G modems for cellular WAN connectivity. Handles modem power and firmware management, SIM operations (PIN\/PUK, eSIM), network registration (2G\/3G\/LTE\/5G), PDP context activation, and data usage tracking.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"inter-process-communication-ipc\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#inter-process-communication-ipc\">Inter-Process Communication (IPC)<\/a><\/h2>\n\n\n\n<p>RDK-B uses RBUS as the RDK IPC mechanism. RBUS was developed to address performance and complexity issues of D-Bus, and is progressively replacing it as components transition from CCSP to the modern architecture. During this transition, both mechanisms coexist to maintain compatibility.<\/p>\n\n\n\n<p>RBUS uses a three-layer architecture: the RBUS API Layer provides TR-181-aligned APIs for properties, methods, events, and table operations; the RBUS-Core Layer handles RPC, event publish\/subscribe, registration, and discovery; and the rtMessage Layer provides lightweight binary protocol over Unix domain sockets or TCP.<\/p>\n\n\n\n<p>The protocol uses direct point-to-point communication with binary protocol, enabling faster operations compared to legacy mechanisms. RBUS provides event-driven communication where value change notifications automatically update subscribers when parameters change, eliminating polling. Wildcard subscriptions support patterns (&#8220;Device.Wi-Fi.Radio.*.Enable&#8221;) and namespace matching (&#8220;Device.Wi-Fi.**&#8221;), with event filtering to deliver only events matching specified criteria.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tr-181-data-model-integration\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#tr-181-data-model-integration\">TR-181 Data Model Integration<\/a><\/h2>\n\n\n\n<p>RDK-B uses TR-181 as the common data model across all management protocols and interfaces, providing vendor interoperability through consistent parameter naming and enabling operational efficiency with common tools across device fleets.<\/p>\n\n\n\n<p><strong>Structure<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Objects<\/strong>: Containers grouping related parameters (Device.Wi-Fi., Device.Wi-Fi.Radio.{i}.)<\/li>\n\n\n\n<li><strong>Parameters<\/strong>: Individual data values with types (Device.Wi-Fi.Radio.1.Channel as int, Device.Wi-Fi.Radio.1.Enable as boolean)<\/li>\n\n\n\n<li><strong>Multi-instance Objects<\/strong>: Tables denoted by {i} with numbered instances (Device.Wi-Fi.SSID.{i}. \u2192 Device.Wi-Fi.SSID.1., Device.Wi-Fi.SSID.2.)<\/li>\n\n\n\n<li><strong>Commands<\/strong>: Executable operations (Device.Wi-Fi.Radio.1.Reset(), Device.Reboot())<\/li>\n<\/ul>\n\n\n\n<p><strong>Component Ownership<\/strong>&nbsp;in RDK-B:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CcspPandM: Device.DeviceInfo.<em>, Device.Time.<\/em>, Device.UserInterface.<em>, Device.Users.<\/em><\/li>\n\n\n\n<li>OneWi-Fi: Device.Wi-Fi.*<\/li>\n\n\n\n<li>CcspEthAgent: Device.Ethernet.*<\/li>\n\n\n\n<li>RDK WAN Manager: Device.X_RDK_WanManager.*, coordinates WAN interfaces<\/li>\n\n\n\n<li>RDK VLAN Bridge Manager: Device.X_RDK_Vlan.*<\/li>\n\n\n\n<li>RDK GPON Manager: Device.X_RDK_PON.*<\/li>\n\n\n\n<li>RDK Cellular Manager: Device.Cellular.*<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tr-181-request-flow\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#tr-181-request-flow\">TR-181 Request Flow<\/a><\/h3>\n\n\n\n<p>The following diagram illustrates a typical TR-181 request flow using an Ethernet port configuration example:<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">%%{init: { \"config\": { \"useMaxWidth\": false } }}%%\nsequenceDiagram\n    participant Cloud as Cloud ACS\n    participant Agent as Protocol Agent\n    participant Registry as Component Registry\/RBUS\n    participant Component as CcspEthAgent\n    participant HAL as Ethernet HAL\n    participant HW as Hardware\n    participant PSM\n\n    Cloud->>Agent: SetParameterValues&lt;br\/>Device.Ethernet.Interface.1.Enable=true\n    Agent->>Agent: Validate auth\/authz\n    Agent->>Registry: Lookup component for&lt;br\/>Device.Ethernet.Interface.1.Enable\n    Registry-->>Agent: CcspEthAgent\n    Agent->>Component: IPC request\n    Component->>Component: Validate value&lt;br\/>Check interface state\n    Component->>HAL: HAL API for platform operation\n    HAL->>HW: Vendor-specific commands\n    HW-->>HAL: Success\n    HAL-->>Component: Return 0\n    Component->>PSM: Persist value\n    Component->>Registry: Publish value change event\n    Component-->>Agent: Success response\n    Agent->>Cloud: 200 OK<\/pre><\/div>\n\n\n\n<p><strong>Flow Steps<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Request Initiation<\/strong>: Cloud sends device management requests via TR\u2011369 (USP over MQTT\/WebSocket) and WebPA (REST over HTTPS).<\/li>\n\n\n\n<li><strong>Protocol Agent<\/strong>: Receives request, validates authentication and authorization, extracts parameter path and value<\/li>\n\n\n\n<li><strong>Namespace Resolution<\/strong>: For CCSP, Component Registry queries component ownership; RBUS has built-in discovery<\/li>\n\n\n\n<li><strong>IPC Communication<\/strong>: Marshal parameter and value, route to owning component via IPC<\/li>\n\n\n\n<li><strong>Component Processing<\/strong>: Validate input against state and regulatory rules, prepare HAL call<\/li>\n\n\n\n<li><strong>HAL Invocation<\/strong>: Execute standardized vendor-neutral API, translate to chipset-specific commands<\/li>\n\n\n\n<li><strong>Hardware Execution<\/strong>: Driver sends commands to chip, firmware executes changes<\/li>\n\n\n\n<li><strong>Response<\/strong>: Component receives HAL confirmation, updates state, publishes event, persists via PSM, returns success to agent, agent confirms to cloud<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"component-interactions\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#component-interactions\">Component Interactions<\/a><\/h2>\n\n\n\n<p>RDK-B components interact using patterns that balance performance, maintainability, and system complexity. Three primary patterns govern component communication.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"request-response-pattern\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#request-response-pattern\">Request-Response Pattern<\/a><\/h3>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant App as Application\n    participant MW as Middleware\n    participant HAL\n    participant HW as Hardware\n\n    App->>MW: Get\/Set Parameter\n    MW->>MW: Validate input&lt;br\/>Check state\n    MW->>HAL: HAL API call\n    HAL->>HW: Vendor command\n    HW-->>HAL: Response\n    HAL-->>MW: Return value\n    MW-->>App: Success\/Failure<\/pre><\/div>\n\n\n\n<p>Synchronous, top-down pattern for simple get\/set operations. Requests flow from application through middleware (business logic, validation) to HAL (hardware abstraction) to platform (vendor implementation). Caller blocks waiting for response.<\/p>\n\n\n\n<p><strong>Use Cases<\/strong>: Configuration queries, single parameter updates, status reads that complete in &lt;100ms<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"event-driven-pattern\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#event-driven-pattern\">Event-Driven Pattern<\/a><\/h3>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant HW as Hardware\n    participant HAL\n    participant Pub as Publisher\n    participant Bus as RBUS\n    participant Sub1 as Subscriber 1&lt;br\/>(Telemetry)\n    participant Sub2 as Subscriber 2&lt;br\/>(WAN Mgr)\n    participant Sub3 as Subscriber 3&lt;br\/>(Analytics)\n\n    HW->>HAL: Interrupt\/Event\n    HAL->>Pub: Callback notification\n    Pub->>Bus: Publish event\n    Bus->>Sub1: Event delivery\n    Bus->>Sub2: Event delivery\n    Bus->>Sub3: Event delivery\n    Note over Sub1,Sub3: Process independently&lt;br\/>and asynchronously<\/pre><\/div>\n\n\n\n<p>Asynchronous publish\/subscribe pattern where producers publish events and multiple consumers react independently. Hardware events flow from driver through HAL to middleware, which publishes RBUS events received by subscribers (Telemetry, WAN Manager, Analytics).<\/p>\n\n\n\n<p><strong>Use Cases<\/strong>: Wi-Fi client association\/disassociation, WAN link up\/down events, DHCP lease changes, system alarms, real-time telemetry<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"practical-use-case\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#practical-use-case\">Practical Use Case<\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wan-interface-failover\"><a href=\"https:\/\/wiki.rdkcentral.com\/spaces\/RDK\/pages\/502401261\/Architecture#wan-interface-failover\">WAN Interface Failover<\/a><\/h3>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant CM as CcspCMAgent\n    participant WAN as RDK WAN Manager\n    participant Cell as RDK Cellular Manager\n    participant Net as Network&lt;br\/>(routing\/NAT)\n    participant Cloud\n\n    Note over CM: DOCSIS link down detected\n    CM->>WAN: RBUS event: DOCSISStatus=Down\n    WAN->>WAN: Check WAN policy&lt;br\/>Cable Pri=1, Cellular Pri=2\n    WAN->>WAN: Validate cellular backup&lt;br\/>SIM valid, signal OK\n    WAN->>Cell: Activate cellular interface\n    Note over Cell: Modem power-on: 1-2s&lt;br\/>Network registration: 2-5s&lt;br\/>PDP context: 1-3s\n    Cell->>Cell: Configure wwan0 interface\n    Cell->>WAN: RBUS event: Cellular Up\n    WAN->>Net: Update default route to wwan0\n    WAN->>Net: Update NAT\/firewall for wwan0\n    WAN->>Net: Configure DNS to cellular servers\n    WAN->>WAN: Verify connectivity&lt;br\/>ping, DNS, HTTP\n    WAN->>WAN: Update TR-181 parameters\n    WAN->>Cloud: Publish failover event\n    Note over CM,Cloud: Total failover: ~12 seconds\n    loop Monitor Primary\n        WAN->>CM: Check DOCSIS status every 10s\n    end\n    Note over WAN: When cable recovers,&lt;br\/>wait 60s stability,&lt;br\/>then failback<\/pre><\/div>\n\n\n\n<p>When a primary DOCSIS connection fails, the RDK-B gateway automatically switches to LTE backup.&nbsp;<strong>CcspCMAgent<\/strong>&nbsp;detects DOCSIS link down within 2 seconds and publishes RBUS event (Device.X_CISCO_COM_CableModem.DOCSISStatus = &#8220;Down&#8221;).&nbsp;<strong>RDK WAN Manager<\/strong>&nbsp;receives the event, retrieves WAN policy from PSM (Cable Priority 1, Cellular Priority 2 with AUTO failover), and validates cellular backup (SIM validity, signal strength, regulatory status, data plan).<\/p>\n\n\n\n<p>WAN Manager invokes&nbsp;<strong>RDK Cellular Manager<\/strong>&nbsp;via RBUS to activate cellular. Cellular Manager powers on modem (1-2s), performs network registration with LTE band scanning (2-5s), and establishes PDP context with carrier gateway (1-3s), totaling 4-10 seconds. After receiving IP configuration (carrier-grade NAT IP, gateway, DNS, MTU), Cellular Manager configures wwan0 interface and publishes &#8220;Cellular Up&#8221; event.<\/p>\n\n\n\n<p>WAN Manager reconfigures the system: updates routing (default route to wwan0), updates NAT\/firewall rules (MASQUERADE for wwan0), and configures DNS forwarder for cellular servers. After connectivity verification (ping, DNS, HTTP), WAN Manager updates TR-181 parameters, persists configuration via PSM, and publishes failover events to cloud for monitoring. Total failover time: ~12 seconds.<\/p>\n\n\n\n<p>WAN Manager monitors primary cable every 10 seconds. On recovery, it verifies 60-second stability before automatic failback to the preferred lower-cost, higher-speed cable connection.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RDK-B follows a layered architecture comprising Application, Middleware, and Hardware Abstraction Layer (HAL), which separates [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":9556,"menu_order":1,"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-9564","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>Architecture - 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\/architecture\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Architecture - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"RDK-B follows a layered architecture comprising Application, Middleware, and Hardware Abstraction Layer (HAL), which separates [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-16T12:06:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2\" \/>\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=\"10 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\/architecture\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/\",\"name\":\"Architecture - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2\",\"datePublished\":\"2022-06-21T13:52:43+00:00\",\"dateModified\":\"2026-07-16T12:06:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#primaryimage\",\"url\":\"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2\",\"contentUrl\":\"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#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\":\"Architecture\"}]},{\"@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":"Architecture - 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\/architecture\/","og_locale":"en_US","og_type":"article","og_title":"Architecture - RDK Documentation Portal | Documentation","og_description":"RDK-B follows a layered architecture comprising Application, Middleware, and Hardware Abstraction Layer (HAL), which separates [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2026-07-16T12:06:17+00:00","og_image":[{"url":"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/","name":"Architecture - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"primaryImageOfPage":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#primaryimage"},"image":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2","datePublished":"2022-06-21T13:52:43+00:00","dateModified":"2026-07-16T12:06:17+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#primaryimage","url":"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2","contentUrl":"https:\/\/wiki.rdkcentral.com\/download\/attachments\/502401261\/Architecture.png?version=1&amp;modificationDate=1784201428000&amp;api=v2"},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/architecture\/#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":"Architecture"}]},{"@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\/9564","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=9564"}],"version-history":[{"count":39,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9564\/revisions"}],"predecessor-version":[{"id":12975,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9564\/revisions\/12975"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9556"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=9564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}