Svc/Subtopologies/FileHandlingCfdp/docs/sdd.md
The FileHandlingCfdp subtopology packages CFDP-based file-transfer services and on-board file management commonly needed in F´ CCSDS deployments: CFDP file transfer (bidirectional reliable file delivery), on-board file management, and parameter management via filesystem. By providing these as a pre-wired subgraph, integration engineers avoid repetitive wiring and get a consistent, reusable baseline for CFDP operations.
| ID | Description | Validation |
|---|---|---|
| SVC-FILEHANDLINGCFDP-001 | The subtopology shall provide CFDP file transfer functionality for reliable bidirectional file delivery. | Inspection |
| SVC-FILEHANDLINGCFDP-002 | The subtopology shall provide on-board file management functionality (e.g., list, remove, hash, mkdir). | Inspection |
| SVC-FILEHANDLINGCFDP-003 | The subtopology shall provide parameter management via the filesystem. | Inspection |
| SVC-FILEHANDLINGCFDP-004 | The subtopology shall support configurable instance properties (IDs, queue sizes, stack sizes, priorities, CPU affinities). | Inspection |
| SVC-FILEHANDLINGCFDP-005 | The subtopology shall expose rate-group connection points for the CFDP manager component. | Inspection |
| Instance name | Type (Svc) | Kind | Purpose (core function) |
|---|---|---|---|
cfdpManager | Ccsds.Cfdp.CfdpManager | Active | CFDP protocol engine; handles reliable file transfer (TX/RX). |
fileManager | FileManager | Active | Local file operations (list, remove, hash, mkdir). |
prmDb | PrmDb | Active | Filesystem based parameter management. |
FileHandlingCfdpConfig for these static instances (see §4).cfdpManager instance is configured with a memory allocator in the configComponents phase to allocate the internal CFDP engine.prmDb instance is configured with a parameter file name (PrmDb.dat) and reads parameters during the readParameters phase.cfdpManager to drive CFDP protocol timers and transaction processing.ComCcsds, FprimeRouter) to complete uplink/downlink paths for CFDP PDUs.[!WARNING] This subtopology is not configured to be secure by default. For backwards compatibility, it intentionally does not configure a load sandbox for
prmDb:PRM_LOAD_FILEmay load from any absolute path accessible to the process via ground command. Security-conscious deployments must callFileHandlingCfdp::prmDb.configureLoadSandbox(<directory>)from topology setup code (note:prmDb.configure(<file name>)sets the store-file name and is not a load sandbox). Additionally, CFDP file transfers viacfdpManagerare not sandboxed: ground-commanded transactions may read or write any path accessible to the process.
The FileHandlingCfdp subtopology replaces the traditional FileUplink and FileDownlink components with the CFDP-based CfdpManager component:
Focused on CFDP-based file transfer and on-board file ops only. It does not provide:
topology Flight {
instance FileHandlingCfdp.Subtopology
param connections instance FileHandlingCfdp.prmDb
# Schedule the CFDP manager at 1 Hz (required for protocol timers)
connections RateGroups {
rg.RateGroupMemberOut[0] -> FileHandlingCfdp.Subtopology.cfdpManager.run1Hz
}
# Wire CFDP PDU data flow to/from communication stack
connections ComCcsds_FileHandlingCfdp {
# CFDP Downlink -> ComQueue (PDU egress)
FileHandlingCfdp.Subtopology.cfdpManager.dataOut[0] -> ComCcsds.Subtopology.bufferQueueIn[ComCcsds.Ports_ComBufferQueue.CFDP]
ComCcsds.Subtopology.bufferReturnOut[ComCcsds.Ports_ComBufferQueue.CFDP] -> FileHandlingCfdp.Subtopology.cfdpManager.dataReturnIn[0]
# FprimeRouter -> CFDP Uplink (PDU ingress)
ComCcsds.Subtopology.cfdpUplinkOut -> FileHandlingCfdp.Subtopology.cfdpManager.dataIn[0]
FileHandlingCfdp.Subtopology.cfdpManager.dataInReturn[0] -> ComCcsds.Subtopology.cfdpUplinkReturnIn
# Buffer allocation for CFDP PDU construction
FileHandlingCfdp.Subtopology.cfdpManager.bufferAllocate[0] -> ComCcsds.Subtopology.bufferGetIn[ComCcsds.Ports_ComBufferGet.CFDP]
ComCcsds.Subtopology.bufferDeallocateOut[ComCcsds.Ports_ComBufferGet.CFDP] -> FileHandlingCfdp.Subtopology.cfdpManager.bufferDeallocate[0]
}
}
The CFDP manager is configured at runtime via parameters defined in CfdpCfg.fpp (compile-time configuration) and component parameters (runtime configuration):
CfdpCfg.fpp)Cfdp::NumChannels - Number of independent CFDP communication channels (default: 2)Cfdp::NumTransactions - Maximum concurrent CFDP transactions per channelCfdp::MaxPduSize - Maximum size of a single CFDP PDU in bytesCfdp::MaxFilePathSize - Maximum length of file pathsSee the CfdpManager SDD for detailed configuration options.
Configure only the instance properties for the static instances owned by the subtopology. All knobs live under:
Svc/Subtopologies/FileHandlingCfdp/FileHandlingCfdpConfig/FileHandlingCfdpConfig.fpp. The generated constants header for this module (e.g.,FppConstantsAc.hpp) reflects these settings.
FileHandlingCfdpConfig.fpp)cfdpManager, fileManager, prmDb.TASK_DEFAULT (no pinning).These knobs tailor runtime footprint and scheduling without modifying the subtopology wiring.
The cfdpManager component requires a memory allocator to be provided during configuration. The subtopology includes a MallocAllocator instance (Allocation::memAllocator) that is passed to cfdpManager.configure() in the configComponents phase. The allocator is used to dynamically allocate the CFDP engine structure.
| Requirement ID | Satisfied by |
|---|---|
| SVC-FILEHANDLINGCFDP-001 | cfdpManager — Svc.Ccsds.Cfdp.CfdpManager |
| SVC-FILEHANDLINGCFDP-002 | fileManager — Svc.FileManager |
| SVC-FILEHANDLINGCFDP-003 | prmDb — Svc.PrmDb |
| SVC-FILEHANDLINGCFDP-004 | FileHandlingCfdpConfig (instance properties) |
| SVC-FILEHANDLINGCFDP-005 | run1Hz connection specifier for cfdpManager |