...
The CcspPsm component follows a layered architecture design that separates concerns between configuration management, storage abstraction, and inter-process communication. The design centers around three core modules: PsmSysRegistry for runtime parameter management, PsmFileLoader for configuration file handling, and the SSP (Sub-System Process) layer for IPC integration. This modular approach enables independent evolution of storage mechanisms, communication protocols, and configuration formats while maintaining stable interfaces.
...
| Markdown |
|---|
```mermaid
flowchart TD
subgraph CcspPsm
direction LR
subgraph "SSP Layer"
MainController[Main Controller]
CFMInterface[CFM Interface]
end
subgraph "PsmSysRegistry"
RegInterface[Registry Interface]
RegControl[Registry Control]
RegStorage[Registry Storage]
RegBase[Registry Base]
RegStates[Registry States]
end
subgraph "PsmFileLoader"
FileInterface[File Loader Interface]
FileControl[File Loader Control]
XMLParser[XML Parser]
FileOperations[File Operations]
LoaderStates[Loader States]
end
end
MainController --> RegInterface
MainController --> FileInterface
CFMInterface --> MainController
RegInterface --> RegControl
RegControl --> RegStorage
RegControl --> RegStates
RegStorage --> RegBase
FileInterface --> FileControl
FileControl --> XMLParser
FileControl --> FileOperations
FileControl --> LoaderStates
RegStorage --> FileInterface
FileOperations --> RegStorage
RegStates --> FileOperations
``` |
RDK-B Platform and Integration Requirements:
...
Initialization to Active State
...
Initialization Call Flow:
...
| Markdown |
|---|
```mermaid
sequenceDiagram
participant Client as RDK-B Component
participant PSM as CcspPsm Main Thread
participant Cache as Parameter Cache
participant Storage as Persistent Storage
participant HAL as Platform HAL
Client->>PSM: Parameter Get Request (RBus)
PSM->>Cache: Check Parameter Cache
Cache-->>PSM: Cache Hit/Miss Result
alt Cache Miss
PSM->>Storage: Load from Persistent Storage
Storage-->>PSM: Parameter Value Retrieved
PSM->>Cache: Update Cache Entry
end
PSM-->>Client: Parameter Value Response
Client->>PSM: Parameter Set Request (RBus)
PSM->>PSM: Validate Parameter Value
PSM->>Cache: Update Cache Entry
PSM->>Storage: Schedule Persistent Write
PSM->>HAL: Platform-Specific Update (if needed)
HAL-->>PSM: Update Confirmation
PSM-->>Client: Set Operation Response
``` |
The CcspPsm component is structured into three primary modules that handle different aspects of persistent storage management. The PsmSysRegistry module manages the runtime parameter registry and in-memory caching, providing high-performance parameter access and validation. The PsmFileLoader module handles XML configuration file operations including parsing, validation, and file management for default, current, and backup configurations. The SSP (Sub-System Process) module provides the interface layer for RBus communications, HAL integration, and system service management.
| Module/Class | Description | Key Files |
|---|---|---|
| PsmSysRegistry | Manages runtime parameter registry, in-memory cache operations, parameter validation, and provides atomic transaction support for configuration updates | psm_sysro_interface.c, psm_sysro_control.c, psm_sysro_storage.c, psm_sysro_base.c |
| PsmFileLoader | Handles XML configuration file parsing, validation, loading of default configurations, and manages backup/restore operations with compression support | psm_flo_interface.c, psm_flo_parse.c, psm_flo_operation.c, psm_flo_control.c |
| SSP Layer | Provides RBus interface implementations, HAL integration layer, main process control, and system service management including signal handling | ssp_main.c, ssp_rbus.c, ssp_cfmif.c, psm_hal_apis.c |
CcspPsm serves as the central configuration repository for the RDK-B middleware ecosystem, interfacing with numerous components through standardized IPC mechanisms. The component provides RBus interfaces to accommodate modern RBus-based services and CCSP components. It integrates with platform HAL layers for hardware-specific storage operations and communicates with external management systems through TR-069 and web interfaces.
| Target Component/Layer | Interaction Purpose | Key APIs/Endpoints |
|---|---|---|
| RDK-B Middleware Components | ||
| CcspPandM | Configuration parameter management, system status reporting, factory reset coordination | GetPSMRecordValue(), SetPSMRecordValue() |
| CcspTr069Pa | TR-069 parameter persistence, ACS configuration storage, device provisioning data | getParameterValues(), setParameterValues(), addObject() |
| OneWifi | WiFi configuration persistence, radio settings, access point parameters | Device.WiFi. namespace parameters, WiFi credential storage |
| CcspDmCli | Command-line data model access, diagnostic parameter retrieval, testing interface | RBus method calls for parameter tree navigation |
| System & HAL Layers | ||
| Syscfg HAL | Platform-specific configuration parameter access, hardware-dependent settings | syscfg_get(), syscfg_unset(), syscfg_commit() |
| File System | Configuration file storage, backup operations, temporary file management | /psm/config/psm_*_cfg.xml.gz, /tmp/bbhm_cur_cfg.xml, /nvram/bbhm_bak_cfg.xml |
| Platform Services | System integration, service lifecycle management, resource monitoring | Systemd unit file control, process monitoring |
Primary IPC Flow - Parameter Get/Set Operations:
...
| Markdown |
|---|
```mermaid
sequenceDiagram
participant Client as Configuration Client
participant PSM as CcspPsm Process
participant RBus as RBus Event System
participant Sub1 as CcspPandM
participant Sub2 as CcspTr069Pa
Client->>PSM: Set Parameter Request
PSM->>PSM: Update Parameter Value
PSM->>PSM: Check for Value Change
alt Value Changed
PSM->>RBus: Publish ParameterValueChanged Event
RBus->>Sub1: Event Notification (RBus)
RBus->>Sub2: Event Notification (IPC)
Sub1-->>PSM: Event Acknowledgment (if required)
Sub2-->>PSM: Event Acknowledgment (if required)
end
PSM-->>Client: Set Operation Complete
``` |
CcspPsm integrates with platform-provided Syscfg APIs for persistent storage and configuration access. These APIs are consumed by CcspPsm code in ssp_cfmif.c, but their implementation and ownership are external to this repository.
...
| HAL API | Purpose | Parameters | Return Values | Implementation / Ownership |
|---|---|---|---|---|
syscfg_get() | Retrieve a platform-specific configuration parameter from persistent storage | 4-argument form: syscfg_get(NULL, key, buf, size) | 0 on success, non-zero on error | External Syscfg API consumed in ssp_cfmif.c; not implemented in this repository |
syscfg_unset() | Remove a platform-specific configuration parameter from persistent storage | 2-argument form: syscfg_unset(NULL, key) | 0 on success, non-zero on error | External Syscfg API consumed in ssp_cfmif.c; not implemented in this repository |
PsmHal_GetCustomParams() | Retrieve platform-specific default parameters for initial configuration | PsmHalParam_t** params, int* cnt | 0 on success, -1 on failure or no custom parameters | psm_hal_apis.c |
psm_sysro_interface.c with hash-based parameter lookup, type validation, and atomic update operations. Main registry implementation in psm_sysro_base.c with parameter tree management and namespace handling. State transition handlers in psm_sysro_states.c for parameter lifecycle management and event processing.Configuration File Processing: XML configuration file parsing is handled using the ANSC XML DOM APIs (e.g., AnscCreateXmlDomNode, AnscXmlDomNodeEncode). The configuration parsing engine in psm_flo_parse.c performs XML document handling and parameter extraction, with validation limited to the checks implemented in the parser and surrounding configuration-loading logic. Configuration load/save and related file control logic is in psm_flo_control.c (for example, PsmFloLoadRegFile() and PsmFloSaveRegFile()). Configuration loading state machine in psm_flo_states.c for startup and runtime configuration management.
Error Handling Strategy: Comprehensive error detection and recovery mechanisms for storage failures, parsing errors, and IPC communication issues. HAL error code mapping with automatic retry mechanisms for transient failures. Configuration validation with rollback support for invalid parameter updates. Graceful degradation with emergency read-only mode when persistent storage fails.
| Configuration File | Purpose | Key Parameters | Default Values | Override Mechanisms |
|---|---|---|---|---|
/psm/config/psm_def_cfg.xml.gz | Default/base configuration (maps to PSM_DEF_DEF_FILE_NAME) | All default parameter values | Factory defaults | Replacement via update procedure |
/psm/config/psm_cur_cfg.xml.gz | Current persistent configuration (maps to PSM_DEF_CUR_FILE_NAME) | All runtime parameters | Populated from default config | Parameter Set operations, configuration import |
/psm/config/psm_bak_cfg.xml.gz | Backup persisted configuration archive (maps to PSM_DEF_BAK_FILE_NAME) | Previous stable configuration set | Previous persisted current configuration | Automatic backup/restore workflow |
/tmp/bbhm_cur_cfg.xml | Runtime working copy of current active configuration (PSM_CUR_CONFIG_FILE_NAME in ssp_cfmif.c) | All runtime parameters | Populated from persistent config | Parameter Set operations |
/nvram/bbhm_bak_cfg.xml | Runtime backup configuration (PSM_BAK_CONFIG_FILE_NAME in ssp_cfmif.c) | Previous stable configuration | Previous current config | Automatic backup on major changes |