CcspPsm component serves as the Storage Manager in the RDK-B middleware stack. It provides centralized persistent configuration storage and retrieval services for all RDK-B components, ensuring data persistence across device reboots and power cycles. The component acts as a configuration repository that maintains system settings, user preferences, and runtime parameters in a hierarchical namespace structure. CcspPsm offers persistent storage APIs that abstract underlying storage mechanisms from other middleware components. It provides configuration validation, backup/restore capabilities, and transactional operations to ensure data integrity. Factory reset support restores default configurations and may preserve certain critical system parameters where applicable. The component supports both XML-based configuration files and runtime parameter management through well-defined interfaces.

At the module level, CcspPsm provides parameter get/set operations, configuration file loading/parsing, system registry management, and HAL integration for platform-specific storage requirements. It integrates with RBus messaging systems and other IPC methods to serve configuration requests from other RDK-B components and external management systems.

```mermaid
graph LR

    subgraph "External Systems"
        RemoteMgmt["Remote Management"]
        LocalUI["Local Web UI"]
    end

    subgraph "RDK-B Platform"
        subgraph "Remote Management Agents"
            ProtocolAgents["Protocol Agents<br />( TR-069, WebPA, USP etc.)"]
        end

        rdkbComponent["Other RDK-B Components<br />(PNM,WAN Manager etc.)"]
        CcspPsm["CCSP PSM"]

        SyscfgDB[(Syscfg DB)]
    end

    %% External connections
    RemoteMgmt -->|TR-069/WebPA/TR-369| ProtocolAgents
    LocalUI -->|HTTP/HTTPS| ProtocolAgents

    ProtocolAgents -->|IPC| rdkbComponent

    rdkbComponent -->|APIs| CcspPsm
    CcspPsm -->|APIs| rdkbComponent
    CcspPsm -->|APIs| SyscfgDB

    classDef external fill:#fff3e0,stroke:#ef6c00,stroke-width:2px;
    classDef CcspPsm fill:#e3f2fd,stroke:#1976d2,stroke-width:3px;
    classDef rdkbComponent fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px;
    classDef system fill:#fce4ec,stroke:#c2185b,stroke-width:2px;

    class RemoteMgmt,LocalUI external;
    class CcspPsm CcspPsm;
    class ProtocolAgents,rdkbComponent rdkbComponent;
    class SyscfgDB system;
```

Key Features & Responsibilities:

Design

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.

The architecture implements a dual-storage strategy where runtime parameters are managed in-memory through the SysRegistry module with periodic flushes to persistent storage, while configuration files are handled through the FileLoader module that parses, validates, and manages XML-based configuration data. The design incorporates robust error handling, transaction support, and rollback mechanisms to ensure data integrity during configuration updates. The component employs both synchronous and asynchronous operations, with critical configuration changes handled synchronously to prevent data loss.

North-bound interactions with other RDK-B components are managed through standardized RBus interfaces and other IPC methods that provide parameter get/set operations, event notifications, and bulk configuration operations. The design abstracts the underlying storage complexity from clients, presenting a unified hierarchical namespace for all configuration parameters. South-bound interactions with the HAL layer are handled through well-defined APIs that abstract platform-specific storage mechanisms, enabling portability across different hardware platforms while maintaining consistent behavior.

The IPC mechanisms are integrated with RBus providing modern, high-performance messaging for components. The design includes message queuing, event notification, and subscription mechanisms to support real-time configuration updates and system monitoring. Data persistence is achieved through a combination of immediate writes for critical parameters and batched writes for performance optimization, with configurable flush intervals and emergency write triggers.

```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
```

Prerequisites and Dependencies

RDK-B Platform and Integration Requirements:


Threading Model:

CcspPsm implements a hybrid threading model combining single-threaded main processing with worker threads for I/O operations and periodic maintenance tasks. The main thread handles all IPC message processing, parameter validation, and configuration updates to ensure thread safety and avoid race conditions in critical configuration operations.

Component State Flow

Initialization to Active State

The CcspPsm component follows a structured initialization sequence that establishes all necessary subsystems before entering the active operational state. The process begins with basic system setup, progresses through configuration loading and validation, establishes IPC connections, and finally registers with the message bus systems. Each initialization phase includes error handling and rollback mechanisms to ensure system stability.

```mermaid
sequenceDiagram
    autonumber
    participant System
    participant PSM
    participant Config
    participant Validator
    participant RBus
    participant HAL
    participant Clients

    System->>System: Start [*] → Initializing
    Note right of System: Initialize logging subsystem<br />Allocate memory pools<br />Setup signal handlers<br />Create worker threads

    System->>PSM: Service Start →<br />LoadingDefaults
    Note right of PSM: Load default XML config<br />Read configuration files<br />Initialize parameter cache

    PSM->>Config: Initialize Logging & Memory →<br />ParseConfiguration
    Config->>Validator: Load Default XML Config →<br />ValidatingConfig
    Note right of Validator: Parse & validate parameters<br />Check parameter constraints<br />Build parameter registry

    Validator->>RBus: Configuration Validated →<br />RegisteringRBus
    RBus->>HAL: RBus Registration Complete →<br />ConnectingHAL
    HAL->>System: HAL Connections Established →<br />Active

    Note right of System: Process parameter requests<br />Handle configuration updates<br />Manage cache consistency<br />Monitor system health

    System->>System: Parameter Update Request →<br />RuntimeConfigChange
    System->>System: Configuration Updated →<br />Active
    System->>System: Periodic Backup Trigger →<br />BackupOperation
    System->>System: Backup Complete →<br />Active

    System->>System: Stop Signal Received →<br />Shutdown → [*]
```

Runtime State Changes and Context Switching

During normal operation, CcspPsm handles various runtime state changes triggered by external events, configuration updates, and maintenance operations. The component maintains internal state consistency while supporting concurrent operations from multiple clients.

State Change Triggers:

Context Switching Scenarios:

Call Flow

Initialization Call Flow:

```mermaid
sequenceDiagram
    participant Systemd as Systemd Service Manager
    participant PSM as CcspPsm Process
    participant RBus as RBus Framework
    participant HAL as Platform HAL

    Systemd->>PSM: Start PsmSsp Process
    PSM->>PSM: Load Default Configuration
    PSM->>PSM: Initialize Parameter Cache
    PSM->>RBus: Register RBus Interface
    RBus-->>PSM: Registration Confirmed
    PSM->>HAL: Connect Platform APIs
    HAL-->>PSM: HAL Connection Established
    PSM->>Systemd: Notify Service Ready
```

Request Processing Call Flow:

```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
```

Internal Modules

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/ClassDescriptionKey Files
PsmSysRegistryManages runtime parameter registry, in-memory cache operations, parameter validation, and provides atomic transaction support for configuration updatespsm_sysro_interface.c, psm_sysro_control.c, psm_sysro_storage.c, psm_sysro_base.c
PsmFileLoaderHandles XML configuration file parsing, validation, loading of default configurations, and manages backup/restore operations with compression supportpsm_flo_interface.c, psm_flo_parse.c, psm_flo_operation.c, psm_flo_control.c
SSP LayerProvides RBus interface implementations, HAL integration layer, main process control, and system service management including signal handlingssp_main.c, ssp_rbus.c, ssp_cfmif.c, psm_hal_apis.c

Component Interactions

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.

Interaction Matrix

Target Component/LayerInteraction PurposeKey APIs/Endpoints
RDK-B Middleware Components

CcspPandMConfiguration parameter management, system status reporting, factory reset coordinationGetPSMRecordValue(), SetPSMRecordValue()
CcspTr069PaTR-069 parameter persistence, ACS configuration storage, device provisioning datagetParameterValues(), setParameterValues(), addObject()
OneWifiWiFi configuration persistence, radio settings, access point parametersDevice.WiFi. namespace parameters, WiFi credential storage
CcspDmCliCommand-line data model access, diagnostic parameter retrieval, testing interfaceRBus method calls for parameter tree navigation
System & HAL Layers

Syscfg HALPlatform-specific configuration parameter access, hardware-dependent settingssyscfg_get(), syscfg_unset(), syscfg_commit()
File SystemConfiguration file storage, backup operations, temporary file management/psm/config/psm_*_cfg.xml.gz, /tmp/bbhm_cur_cfg.xml, /nvram/bbhm_bak_cfg.xml
Platform ServicesSystem integration, service lifecycle management, resource monitoringSystemd unit file control, process monitoring

IPC Flow Patterns

Primary IPC Flow - Parameter Get/Set Operations:

```mermaid
sequenceDiagram
    participant Client as RDK-B Component
    participant RBus as RBus Framework
    participant PSM as CcspPsm Main Process
    participant Cache as Parameter Cache
    participant Storage as Persistent Storage

    Client->>RBus: Parameter Get Request
    RBus->>PSM: Route Get Method Call
    PSM->>Cache: Check In-Memory Cache
    alt Cache Hit
        Cache-->>PSM: Return Cached Value
    else Cache Miss
        PSM->>Storage: Load from Persistent Store
        Storage-->>PSM: Parameter Value
        PSM->>Cache: Update Cache Entry
    end
    PSM-->>RBus: Parameter Value Response
    RBus-->>Client: Return Parameter Value

    Client->>RBus: Parameter Set Request
    RBus->>PSM: Route Set Method Call
    PSM->>PSM: Validate Parameter Value & Type
    PSM->>Cache: Update In-Memory Cache
    PSM->>Storage: Schedule Persistent Write
    PSM-->>RBus: Set Operation Success
    RBus-->>Client: Acknowledge Set Operation
```

Event Notification Flow:

```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
```

Implementation Details

Major HAL APIs Integration

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.

Core HAL APIs:

HAL APIPurposeParametersReturn ValuesImplementation / Ownership
syscfg_get()Retrieve a platform-specific configuration parameter from persistent storage4-argument form: syscfg_get(NULL, key, buf, size)0 on success, non-zero on errorExternal Syscfg API consumed in ssp_cfmif.c; not implemented in this repository
syscfg_unset()Remove a platform-specific configuration parameter from persistent storage2-argument form: syscfg_unset(NULL, key)0 on success, non-zero on errorExternal Syscfg API consumed in ssp_cfmif.c; not implemented in this repository
PsmHal_GetCustomParams()Retrieve platform-specific default parameters for initial configurationPsmHalParam_t** params, int* cnt0 on success, -1 on failure or no custom parameterspsm_hal_apis.c

Key Implementation Logic

Key Configuration Files

Configuration FilePurposeKey ParametersDefault ValuesOverride Mechanisms
/psm/config/psm_def_cfg.xml.gzDefault/base configuration (maps to PSM_DEF_DEF_FILE_NAME)All default parameter valuesFactory defaultsReplacement via update procedure
/psm/config/psm_cur_cfg.xml.gzCurrent persistent configuration (maps to PSM_DEF_CUR_FILE_NAME)All runtime parametersPopulated from default configParameter Set operations, configuration import
/psm/config/psm_bak_cfg.xml.gzBackup persisted configuration archive (maps to PSM_DEF_BAK_FILE_NAME)Previous stable configuration setPrevious persisted current configurationAutomatic backup/restore workflow
/tmp/bbhm_cur_cfg.xmlRuntime working copy of current active configuration (PSM_CUR_CONFIG_FILE_NAME in ssp_cfmif.c)All runtime parametersPopulated from persistent configParameter Set operations
/nvram/bbhm_bak_cfg.xmlRuntime backup configuration (PSM_BAK_CONFIG_FILE_NAME in ssp_cfmif.c)Previous stable configurationPrevious current configAutomatic backup on major changes