Astro~/0.3
** Conformance / Unified Space Data Link Protocol * PAGE 10 / 23
** Astro * Conformance
** /conformance/usdl

Unified Space Data Link Protocol

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

Conformance Statement for pkg/usdl, CCSDS 732.1-B-3


A2.1 GENERAL INFORMATION

A2.1.1 Identification of PICS

FieldValue
Date of Statement (DD/MM/YYYY)25/08/2026
PICS Serial NumberASTRO-USDL-PICS-003
System Conformance Statement Cross-ReferenceThis document

A2.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/usdl
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing CCSDS Unified Space Data Link Protocol. Full pipeline: PhysicalChannel (MC mux/demux) -> MasterChannel (VC mux, gap detection via the VCF Count) -> VirtualChannel (frame buffer with a per-MAP receive demultiplexer) -> MAP services (MAPP packets under rules '000'/'111', MAPA SDUs under rules '001'/'010'/'111', MAPO octet stream under rule '011'). Non-truncated and truncated (annex D) headers. Partial fixed-length packet zones completed with Encapsulation Idle Packets per clause 4.1.4.3.4; OID TFDZs filled from the mandatory clause 4.1.4.1.10 PN sequence.

A2.1.3 Identification of Supplier

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

A2.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 732.1-B-3 (Unified Space Data Link Protocol, Blue Book, Issue 3, June 2024)
Have any exceptions been required?Yes [X] No [ ], see notes: COP-1/COP-P frame acceptance procedures are out of scope (the Bypass/Sequence Control and Protocol Control Command flags are carried but no FARM/FOP runs on them); SDLS integration is out of scope.

A2.2 TRANSFER FRAME FIELDS

FeatureReferenceStatusSupport
Truncated Transfer FrameAnnex DOY: 4-octet header + 1-octet TFDF header (rule '111'); no insert zone, OCF, FECF, or pointer; length bounds enforced (6-32 octets, D1.3.2 notes 2-3, D1.4.2.4)
Spacecraft Identifierclause 4.1.2.2.3MY: 16-bit SCID
Source-or-Destination Identifierclause 4.1.2.3MY: 1-bit flag
Virtual Channel Identifierclause 4.1.2.4MY: 6-bit VCID (0-63; 63 reserved for OID)
MAP Identifierclause 4.1.2.5MY: 4-bit MAP ID (0-15)
End of Frame Primary Header Flagclause 4.1.2.6MY: selects the truncated 4-octet header
Frame Lengthclause 4.1.2.7MY: 16-bit, total octets - 1; cross-checked against the delivered buffer on decode
Bypass/Sequence Control Flagclause 4.1.2.8.1MY: carried and round-tripped (COP procedures out of scope)
Protocol Control Command Flagclause 4.1.2.8.2MY: carried and round-tripped
Reserve Sparesclause 4.1.2.9MY: encoded '00'; validated on decode
OCF Flagclause 4.1.2.10MY: set from OCF presence; drives OCF extraction on decode
VCF Count Lengthclause 4.1.2.11MY: 3-bit field, 0-7 octet counts
VCF Countclause 4.1.2.12CY: 0-56 bit count, big-endian; independent sequence-controlled and expedited counters per VC (clause 4.1.2.12.4-12.5)
Insert Zoneclause 4.1.3OY: configurable length via ChannelConfig
TFDF Headerclause 4.1.4.2MY: 1 octet (rules + UPID) plus 16-bit pointer only for rules '000'/'001'/'010'
TFDZ Construction Rulesclause 4.1.4.2.2MY: all eight values defined; services emit '000', '001', '010', '011', '111'
USLP Protocol Identifierclause 4.1.4.2.3MY: SANA registry values (0-8, 31) provided as constants; set per service
First Header / Last Valid Octet Pointerclause 4.1.4.2.4CY: FHP for rule '000', LVOP for '001'/'010'; 'all ones' specials
Only Idle Data framesclause 4.1.4.1.5-1.9MY: VCID 63, MAP 0, rule '001', UPID 'Idle Data', LVOP = last TFDZ octet
OID TFDZ fillclause 4.1.4.1.10MY: 32-cell Fibonacci LFSR PN sequence (polynomial D0+D1+D2+D22+D32, all-ones seed, never restarted), known-answer tested against annex H
Idle fill of partial fixed TFDZsclause 4.1.4.3.4MY: Encapsulation Idle Packet completes the TFDZ; discarded on extraction
Operational Control Fieldclause 4.1.5OY: 4 octets, presence signaled by the OCF Flag; content comes from an OCF supplier hook (SetOCFSupplier), channels with HasOCF and no supplier refuse to emit rather than fabricate an all-zero Type-1 report
Frame Error Control Fieldclause 4.1.6, annex BOY: 16-bit CRC-16-CCITT with known-answer tests (clause 4.1.6.2.2: the FECF, when present, is the last 16 bits; USLP defines no other FECF size)
Truncated Transfer FrameAnnex DOY: 4-octet header + 1-octet TFDF header (rule '111'); no insert zone, OCF, FECF, or pointer; length bounds enforced (6-32 octets, D1.3.2 notes 2-3, D1.4.2.4)

A2.3 SERVICES

FeatureReferenceStatusSupport
MAP Packet Service (MAPP)clause 3.4, clause 4.2.2OY: rule '000' with FHP on fixed-length channels (EPP idle fill, FHP resync after loss); rule '111' on variable-length channels
MAP Access Service (MAPA)clause 3.4, clause 4.2.3OY: constant-length MAPA_SDUs under rules '001'/'010' with LVOP delimiting; rule '111' on variable-length channels
MAP Octet Stream Service (MAPO)clause 3.4, clause 4.2.4OY: rule '011'; variable-length frames only (fixed-length rejected per clause 4.2.4.1)
MAP Multiplexing / Demultiplexingclause 2.2.1, clause 3.2.4MY: the VC owns a per-MAP demultiplexer: frames of other MAPs on the shared VC are queued for their own services, never discarded or misdelivered
Idle frame generationclause 4.1.4.1MY: GetNextFrameOrIdle on fixed-length channels; OID frames keep their own VC 63 count and draw from a persistent, never-restarted PN generator
COP-1 / COP-P proceduresrefs [9], [10]ON: flags carried; FOP/FARM not implemented
SDLSref [15]ON

A2.4 CHANNEL MANAGEMENT

FeatureReferenceStatusSupport
Physical Channelclause 2.1.3MY: PhysicalChannel with MC multiplexing
Master Channelclause 2.1.3MY: MasterChannel with VC multiplexing
Virtual Channelclause 2.1.3MY: VirtualChannel with frame buffering
MAP Channelclause 2.1.3MY: per-MAP service instances with Receive filtering
Frame Gap Detectionclause 4.1.2.12MY: per-VC, per-QoS tracking of the VCF Count at the managed field width
VC Multiplexingclause 4.2.6MY: weighted round-robin via SDL
MC Multiplexingclause 4.2.8MY: weighted round-robin via SDL

Legend: M = Mandatory, O = Optional, C = Conditional, Y = Yes (supported), N = No (not supported)