Astro~/0.4
** Conformance
** Astro * Conformance
** /conformance/cfdp

CCSDS File Delivery Protocol

PICS proforma: what this package implements, clause by clause.

Conformance Statement for pkg/cfdp, CCSDS 727.0-B-5


A1.1 GENERAL INFORMATION

A1.1.1 Identification of PICS

FieldValue
Date of Statement (DD/MM/YYYY)23/08/2026
PICS Serial NumberASTRO-CFDP-PICS-001
System Conformance Statement Cross-ReferenceThis document

A1.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/cfdp
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing CFDP Part 1. Full PDU codec set, modular and CRC-32 checksums, an abstract Filestore with in-memory and OS-backed implementations, and caller-pumped Class 1 and Class 2 transaction machines. The library owns no goroutines and no clock: timers and retransmission scheduling belong to the caller, matching the shape of pkg/cop's FOP-1.

A1.1.3 Identification of Supplier

FieldValue
SupplierRavi Suhag
Contact Point for QueriesGitHub, github.com/ravisuhag/astro
Implementation Name(s) and Version(s)astro/pkg/cfdp (Go package)
System Name(s)Astro

A1.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 727.0-B-5 (CCSDS File Delivery Protocol, Blue Book, Issue 5, July 2020)
Have any exceptions been required?Yes [X] No [ ], see A1.6

A1.2 PROTOCOL DATA UNITS

FeatureReferenceStatusSupport
Fixed PDU headerclause 5.1.2, table 5-1MY
Version '001'table 5-1MY: other versions rejected on decode
PDU type: File Directive / File Dataclause 5.1.6MY
Direction flagtable 5-1MY
Transmission mode flagtable 5-1MY: '0' acknowledged, '1' unacknowledged
CRC flagtable 5-1MY
Large File flagtable 5-1MY: widens every FSS field to 64 bits
PDU data field lengthtable 5-1MY: includes the CRC when present
Segmentation controltable 5-1MY
Length of entity IDstable 5-1MY: 1 to 8 octets, encoded as width less one
Segment metadata flagtable 5-1MY
Length of transaction sequence numbertable 5-1MY: 1 to 8 octets
Variable-width entity IDsclause 5.1.4MY
LV objectsclause 5.1.8, table 5-2MY
TLV objectsclause 5.1.9, table 5-3MY
File-Size Sensitive fieldsclause 5.1.10MY

A1.3 FILE DIRECTIVE PDUs

FeatureReferenceStatusSupport
Directive codesclause 5.2.1.2, table 5-4MY: reserved codes rejected
Condition codesclause 5.2.1.3, table 5-5MY: all fourteen the table defines
EOF PDUclause 5.2.2, table 5-6MY: condition, checksum, file size, fault location
Fault location omitted for 'no error'table 5-6MY
Finished PDUclause 5.2.3, table 5-7MY: condition, delivery code, file status, responses
Fault location omitted for 'no error' and 'unsupported checksum type'table 5-7MY
ACK PDUclause 5.2.4, table 5-8MY: EOF and Finished only
ACK directive subtype rulestable 5-8MY: '0001' for Finished, '0000' otherwise
Transaction statusclause 5.2.4MY: all four values
Metadata PDUclause 5.2.5, table 5-9MY
Closure requestedtable 5-9MY
Checksum type fieldtable 5-9MY
Empty filenames for fileless transactionstable 5-9MY
NAK PDUclause 5.2.6, table 5-10OY
Segment requestsclause 5.2.6.2, table 5-11OY: including the 0..0 metadata request
Prompt PDUclause 5.2.7, table 5-12OY: answered with NAK or Keep Alive
Keep Alive PDUclause 5.2.8, table 5-13OY

A1.4 FILE DATA PDUs

FeatureReferenceStatusSupport
File Data PDUclause 5.3, table 5-14MY
Offset fieldtable 5-14MY: FSS
Record continuation stateclause 5.3OY: all four states, decoded when present
Segment metadatatable 5-14OY: up to 63 octets

A1.5 PROCEDURES

FeatureReferenceStatusSupport
CRC at transmitting entityclause 4.1.1O
CRC at receiving entityclause 4.1.2O
CRC algorithm: CCSDS Telecommand CRCclause 4.1.3.1M
CRC placement and coverageclause 4.1.3.2M
Checksum 32 bitsclause 4.2.1.2M
Modular checksumclause 4.2.2.3M
Null checksumclause 4.2.2.4M
Additional checksum algorithmsclause 4.2.2.5O
Class 1 unacknowledged transferclause 4.6M
Class 2 acknowledged transferclause 4.6O
Check limitclause 4.6.3.3O
Fault handlers: cancel, suspend, ignore, abandonclause 4.8, table 4-1M
Suspend and resumeclause 4.11O
Cancelclause 4.11O
Filestore requestsclause 5.4.1, table 5-16O
Filestore responsesclause 5.4.2, table 5-17O
Messages to userclause 5.4.3O
Fault handler override TLVclause 5.4.4O
Flow label TLVclause 5.4.5O
Entity ID TLVclause 5.4.6M

A1.6 EXCEPTIONS AND UNSUPPORTED FEATURES

FeatureReferenceSupportRationale
Filestore actions: append, replacetable 5-16N
Filestore actions: create/remove directory, deny directorytable 5-16N
Adaptive flow control from Keep Aliveclause 4.6N
Part 2 user behaviourclause 6N by design
Timers and inactivity detectionclause 4.6N by design

A1.7 IMPLEMENTATION LIMITS

LimitValueSource
Entity ID width1 to 8 octets3-bit length field, table 5-1
Transaction sequence number width1 to 8 octets3-bit length field, table 5-1
PDU data field length65535 octets16-bit field, table 5-1
LV / TLV value length255 octets8-bit length field, tables 5-2 and 5-3
Segment metadata length63 octets6-bit length field, table 5-14
File size, small file2^32 - 1 octets32-bit FSS, clause 5.1.10
File size, large file2^64 - 1 octets64-bit FSS, clause 5.1.10

A1.8 PART 2: USER OPERATIONS

Section 6 carries every User Operation as a Reserved CFDP Message inside a Message to User TLV in an ordinary transaction's metadata (clause 6.1.1), so Part 2 adds no PDU of its own. The message identifier (the ASCII characters cfdp (table 6-1)) is what separates a protocol message from an application one, and UserMessagesFrom uses it to sift a metadata TLV run.

All 20 message types of tables 6-3, 6-14, 6-17, 6-20 and 6-23 are named, and every content table is encoded and decoded.

MessageReferenceSupportNotes
Reserved CFDP Message headertable 6-1Yes
Originating Transaction IDclause 6.1.5, table 6-2Yes
Proxy Put Requesttable 6-4Yes
Proxy Message to Usertable 6-5Yes
Proxy Filestore Requesttable 6-6Yes
Proxy Fault Handler Overridetable 6-7Yes
Proxy Transmission Modetable 6-8Yes
Proxy Flow Labeltable 6-9Yes
Proxy Segmentation Controltable 6-10Yes
Proxy Put Responsetable 6-12Yes
Proxy Filestore Responsetable 6-13Yes
Proxy Put Cancelclause 6.2.6.2Yes
Proxy Closure Requesttable 6-11Yes
Directory Listing Requesttable 6-15Yes
Directory Listing Responsetable 6-16Yes
Remote Status Report Requesttable 6-18Yes
Remote Status Report Responsetable 6-19Yes
Remote Suspend Requesttable 6-21Yes
Remote Suspend Responsetable 6-22Yes
Remote Resume Requesttable 6-24Yes
Remote Resume Responsetable 6-25Yes

The message type numbering has a gap inside the proxy range: 0x0A is the Originating Transaction ID, common to every operation rather than belonging to proxy, so proxy runs 0x00-0x09 and resumes at 0x0B.


Wire test vectors

The octets backing this statement live in the vector corpus — 25 vectors. Each vector names the clause it comes from and carries the derivation that produced it.

File
cfdp/interop.json7 vectors, captured from spacepackets 0.32.0
cfdp/transaction.json4 vectors
cfdp/wire.json14 vectors

These are data files, so any implementation can check itself against the same octets. See CONTRACT.md for how, and how this is verified for what rests on a published vector versus a reading of the clause.