Software Design Description (SDD): Software Modules Report for CpeAdmin

This document describes the implementation details for the Software Modules Report feature for CpeAdmin, covering both the initial Deployment Unit tracking (Phase 1) and extended Execution Unit support (Phase 2).

1. Overview

This document describes the implementation details for the Software Modules Report feature for CpeAdmin. The design spans two development phases:

  • Phase 1: Initial implementation providing a basic report of software modules installed on CPEs.

  • Phase 2: Extended implementation introducing Execution Units and Deployment Unit to Execution Unit relationships.

2. Phase 1 — Initial Implementation

2.1. Functional Requirements

As per FRD_10101:

  • A new "Software Modules" report is added to the Edmin UI.

  • The report includes columns: Domain, Manufacturer, Model name, Serial number, Software name, Software version, Updated, State.

  • On receiving a GetParameterValuesResponse from a CPE, the ACS parses SoftwareModules.DeploymentUnit data and stores it.

2.2. Database Design

Table: cpe_software_parameter (created in Liquibase script)

  • Created in the ftacs schema.

  • Stores data such as software name, version, UUID, and status for each CPE’s deployment unit.

Liquibase snippet:

<changeSet xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           id="v6.4.5.t-1" author="vadim">
  <createTable tableName="cpe_software_parameter" schemaName="ftacs">
    <column name="id" type="${number}" autoIncrement="true">
      <constraints nullable="false" primaryKey="true" primaryKeyName="PK_CPE_SOFTWARE_PARAMETER"/>
    </column>
    <column name="cpe_id" type="${number}">
      <constraints nullable="false"/>
    </column>
    <column name="name_id" type="${number}">
      <constraints nullable="false"/>
    </column>
    <column name="group_id" type="${number}">
      <constraints nullable="false"/>
    </column>
    <column name="name" type="varchar(256)"/>
    <column name="uuid" type="varchar(36)"/>
    <column name="version" type="varchar(32)"/>
    <column name="status" type="varchar(32)"/>
    <column name="updated" type="${date}">
      <constraints nullable="false"/>
    </column>
  </createTable>
</changeSet>

2.3. CWMP Mapping

  • CWMP TR-181 parameters under Device.SoftwareModules.DeploymentUnit.{i} are parsed.

  • Parameters such as Name, UUID, Version and Status are extracted.

2.4. Backend Processing

Class: FTCpeSoftwareParameterService

  • Method: syncSoftwareParameters(…​)

  • Filters and processes DeploymentUnit parameters.

  • Builds CpeSoftwareParameter objects and persists them.

  • Handles full-object and partial updates based on CWMP parameter list.

3. Phase 2 — Extended Implementation

3.1. Functional Enhancements (FRD_10256)

  • Support Execution Unit reporting and relationships between DUs and EUs.

  • Backend tracks additional parameters like disk space, fault codes, and requested states.

3.2. Database Design

According to the specification, a single Deployment Unit may reference more than one Execution Unit. This one-to-many relationship is captured via the cpe_software_parameter_du_eu mapping table.

3.2.1. Table: cpe_software_parameter_exec_unit

Stores data about execution units, including:

  • Name, EUID, Status, Requested State

  • Fault Code, Fault Message

  • Disk Space in Use

3.2.2. Table: cpe_software_parameter_du_eu

Maps relationships between Deployment Units and their associated Execution Units.

Liquibase snippet:

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <property name="clob.type" value="clob" dbms="oracle"/>
  <property name="clob.type" value="longtext" dbms="mysql"/>
  <property name="blob.type" value="blob" dbms="oracle"/>
  <property name="blob.type" value="mediumblob" dbms="mysql"/>
  <property name="now" value="sysdate" dbms="oracle"/>
  <property name="now" value="now()" dbms="mysql"/>
  <property name="number" value="int(11) unsigned" dbms="mysql"/>
  <property name="number" value="number(11)" dbms="oracle"/>
  <property name="big_number" value="bigint(20) unsigned" dbms="mysql"/>
  <property name="big_number" value="number(20)" dbms="oracle"/>
  <property name="tiny_number" value="tinyint(1)" dbms="mysql"/>
  <property name="tiny_number" value="number(1)" dbms="oracle"/>
  <property name="date" value="datetime" dbms="mysql"/>
  <property name="date" value="date" dbms="oracle"/>

  <changeSet id="v6.4.11.35457-1" author="vadim">
    <createTable tableName="cpe_software_parameter_exec_unit" schemaName="ftacs">
      <column name="id" type="${number}" autoIncrement="true">
        <constraints primaryKey="true" nullable="false" primaryKeyName="PK_CPE_SOFTWARE_PARAMETER_EXEC_UNIT"/>
      </column>
      <column name="name_id" type="${number}">
        <constraints primaryKey="false" nullable="false"/>
      </column>
      <column name="cpe_id" type="${number}">
        <constraints primaryKey="false" nullable="false"/>
      </column>
      <column name="group_id" type="${number}">
        <constraints primaryKey="false" nullable="false"/>
      </column>
      <column name="name" type="varchar(256)"/>
      <column name="euid" type="varchar(128)"/>
      <column name="status" type="varchar(32)"/>
      <column name="requested_state" type="varchar(32)"/>
      <column name="fault_code" type="varchar(16)"/>
      <column name="fault_message" type="varchar(256)"/>
      <column name="disk_space" type="${number}"/>
      <column name="updated" type="${date}">
        <constraints nullable="false"/>
      </column>
    </createTable>
    <createIndex tableName="cpe_software_parameter_exec_unit" schemaName="ftacs"
                 indexName="cpe_soft_param_exec_unit_cpe_name_idx" unique="true">
      <column name="cpe_id"/>
      <column name="name_id"/>
    </createIndex>
  </changeSet>

  <changeSet id="v6.4.11.35457-2" author="vadim" dbms="oracle">
    <createSequence
      incrementBy="1"
      sequenceName="CPE_SOFT_PARAM_EXEC_UNIT_0"
      startValue="1"
      schemaName="ftacs"/>
  </changeSet>

  <changeSet id="v6.4.11.35457-3" author="vadim">
    <createTable tableName="cpe_software_parameter_du_eu" schemaName="ftacs">
      <column name="id" type="${number}">
        <constraints primaryKey="true" nullable="false"/>
      </column>
      <column name="cpe_id" type="${number}">
        <constraints nullable="false"/>
      </column>
      <column name="du_id" type="${number}">
        <constraints nullable="false"/>
      </column>
      <column name="eu_id" type="${number}">
        <constraints nullable="false"/>
      </column>
    </createTable>
    <createIndex tableName="cpe_software_parameter_du_eu" schemaName="ftacs"
                 indexName="cpe_software_parameter_du_eu_idx" unique="true">
      <column name="du_id"/>
      <column name="eu_id"/>
    </createIndex>
    <createIndex tableName="cpe_software_parameter_du_eu" schemaName="ftacs"
                 indexName="cpe_software_parameter_du_eu_cpe_idx" unique="false">
      <column name="cpe_id"/>
    </createIndex>
  </changeSet>

  <changeSet id="v6.4.11.35457-4" author="vadim" dbms="oracle">
    <createSequence
      incrementBy="1"
      sequenceName="CPE_SOFTWARE_PARAMETER_DU_EU_0"
      startValue="1"
      schemaName="ftacs"/>
  </changeSet>

</databaseChangeLog>

3.3. CWMP Mapping

  • Parses parameters under Device.SoftwareModules.ExecutionUnit.{i}.

  • Captures fault info, disk usage, and execution metadata.

3.4. Backend Processing Enhancements

  • FTCpeSoftwareParameterService was extended:

    • Methods syncExecutionUnits and syncExecutionUnitPerDeploymentUnit implemented.

    • Saves DU/EU relationships in bulk via cpeSoftwareParameterDuEuDao.createAllBulk(…​).

3.5. UI Enhancements and SQL Instructions

3.5.1. Deployment Unit Status Column:

SELECT
  cpn.name AS DU_instance,
  csp.status
FROM cpe_software_parameter csp
JOIN cpe_parameter_name cpn ON csp.name_id = cpn.id
WHERE csp.cpe_id = :cpeId;

3.5.2. Execution Unit Status Column:

SELECT
  cpn.name AS EU_instance,
  eu.status
FROM cpe_software_parameter csp
JOIN cpe_software_parameter_du_eu map ON csp.id = map.du_id
JOIN cpe_software_parameter_exec_unit eu ON map.eu_id = eu.id
JOIN cpe_parameter_name cpn ON eu.name_id = cpn.id
WHERE csp.cpe_id = :cpeId;

4. Summary

Phase 1 established the foundation with Deployment Unit tracking. Phase 2 expanded the system’s scope to cover Execution Units and their mappings to Deployment Units, offering deeper insight into software configurations per CPE. The implementation ensures compatibility with TR-181 standards and efficient synchronization via CWMP responses.