Astro~/0.4
** Conformance
** 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 DO
Spacecraft Identifierclause 4.1.2.2.3M
Source-or-Destination Identifierclause 4.1.2.3M
Virtual Channel Identifierclause 4.1.2.4M
MAP Identifierclause 4.1.2.5M
End of Frame Primary Header Flagclause 4.1.2.6M
Frame Lengthclause 4.1.2.7M
Bypass/Sequence Control Flagclause 4.1.2.8.1M
Protocol Control Command Flagclause 4.1.2.8.2M
Reserve Sparesclause 4.1.2.9M
OCF Flagclause 4.1.2.10M
VCF Count Lengthclause 4.1.2.11M
VCF Countclause 4.1.2.12C
Insert Zoneclause 4.1.3O
TFDF Headerclause 4.1.4.2M
TFDZ Construction Rulesclause 4.1.4.2.2M
USLP Protocol Identifierclause 4.1.4.2.3M
First Header / Last Valid Octet Pointerclause 4.1.4.2.4C
Only Idle Data framesclause 4.1.4.1.5-1.9M
OID TFDZ fillclause 4.1.4.1.10M
Idle fill of partial fixed TFDZsclause 4.1.4.3.4M
Operational Control Fieldclause 4.1.5O
Frame Error Control Fieldclause 4.1.6, annex BO
Truncated Transfer FrameAnnex DO

A2.3 SERVICES

FeatureReferenceStatusSupport
MAP Packet Service (MAPP)clause 3.4, clause 4.2.2O
MAP Access Service (MAPA)clause 3.4, clause 4.2.3O
MAP Octet Stream Service (MAPO)clause 3.4, clause 4.2.4O
MAP Multiplexing / Demultiplexingclause 2.2.1, clause 3.2.4M
Idle frame generationclause 4.1.4.1M
COP-1 / COP-P proceduresrefs [9], [10]O
SDLSref [15]O

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)


Wire test vectors

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

File
usdl/frame.json12 vectors
usdl/interop.json8 vectors, captured from spacepackets 0.32.0

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.