Astro~/0.4
** Conformance
** Astro * Conformance
** /conformance/spp

Space Packet Protocol

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

Conformance Statement for pkg/spp, CCSDS 133.0-B-2


A2.1 GENERAL INFORMATION

A2.1.1 Identification of PICS

FieldValue
Date of Statement (DD/MM/YYYY)26/08/2026
PICS Serial NumberASTRO-SPP-PICS-002
System Conformance Statement Cross-ReferenceThis document

A2.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/spp
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing CCSDS Space Packet Protocol encoding, decoding, validation, and service-layer I/O for both Packet Service and Octet String Service

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/spp (Go package)
System Name(s)Astro

A2.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 133.0-B-2 (Space Packet Protocol, Blue Book, Issue 2, June 2020)
Have any exceptions been required?Yes [ ] No [X]

NOTE. A YES answer would mean a mandatory capability is missing. Every mandatory and conditional item is supported. The two optional items that are not implemented are listed in section A2.3.


A2.2 REQUIREMENTS LIST

Table A-1: SPP Service Data Units

ItemDescriptionReferenceStatusSupportNotes
SPP-1Space Packet SDU3.2.2MYes
SPP-2Octet String SDU3.2.3MYes

Table A-2: Service Parameters

ItemDescriptionReferenceStatusValues AllowedSupportNotes
SPP-3APID3.3.2.2M0-2047Yes
SPP-4Packet Loss Indicator3.3.2.3O-Yes
SPP-5QoS Requirement3.3.2.4O-Yes
SPP-6Octet String3.4.2.1M-Yes
SPP-7APID (Octet String Service)3.4.2.2M0-2047Yes
SPP-8Secondary Header Indicator (Octet String Service)3.4.2.3M0 or 1Yes
SPP-9Data Loss Indicator3.4.2.4O-Yes

Table A-3: Service Primitives

ItemDescriptionReferenceStatusSupportNotes
SPP-10Packet.request3.3.3.2MYes
SPP-11Packet.indication3.3.3.3MYes
SPP-12Octet_String.request3.4.3.2MYes
SPP-13Octet_String.indication3.4.3.3MYes

Table A-4: SPP Protocol Data Unit

ItemDescriptionReferenceStatusSupportNotes
SPP-14Space Packet4.1MYes
SPP-15Packet Primary Header4.1.3MYes
SPP-16Packet Data Field4.1.4MYes
SPP-17Packet Secondary Header4.1.4.2C1Yes
SPP-18User Data Field4.1.4.3C2Yes

C1: It is mandatory for a Space Packet to contain a Packet Secondary Header if no User Data Field is present; otherwise, it is optional.

C2: It is mandatory for a Space Packet to contain a User Data Field if the Packet Secondary Header is not present; otherwise, it is optional.

Table A-5: Protocol Procedures

ItemDescriptionReferenceStatusSupportNotes
SPP-19Packet Assembly Function4.2.2MYes
SPP-20Packet Transfer Function4.2.3MYes
SPP-21Packet Extraction Function4.3.2MYes
SPP-22Packet Reception Function4.3.3MYes

Table A-6: Management Parameters

ItemDescriptionReferenceStatusValues AllowedSupportNotes
SPP-23Maximum Packet Length (octets)Table 5-1MIntegerYes
SPP-24Packet Type of Outgoing PacketsTable 5-1M0 or 1Yes
SPP-25Packet Multiplexing SchemeTable 5-1OMission specificNo
SPP-26Service TypeTable 5-1MPacket Service or Octet String ServiceYes

A2.3 CONFORMANCE SUMMARY

Overall Statistics

The proforma in Annex A of CCSDS 133.0-B-2 runs from SPP-1 to SPP-26; there are no items beyond that.

CategoryTotal ItemsSupportedPartialNot Supported
Mandatory (M)202000
Optional (O)4301
Conditional (C)2200
Total262501

Non-Conformances (Optional Items Not Supported)

ItemDescriptionReason
SPP-25Packet Multiplexing SchemeNo multiplexing, scheduling, or interleaving logic.

Partial Conformances (Items Requiring Attention)

None. Every mandatory and conditional item is fully supported, including both indicators the Octet String Service must deliver (SPP-8, and the mandatory continuity check inside SPP-21).

Two requirements are stated in the standard but cannot be checked by this package, and are the responsibility of whoever supplies the secondary header. They are not PICS items and do not affect the counts above; they are listed so nobody reads a "Yes" against SPP-17 as more than it is.

RequirementReferenceWhy it is not checked here
A Packet Secondary Header consists of a Time Code Field, an Ancillary Data Field, or a Time Code Field followed by an Ancillary Data Field, and the choice stays static for a managed data path.4.1.4.2.1.5, 4.1.4.2.1.6The SecondaryHeader interface sees only octets. Which of the three shapes an implementation produces, and whether it keeps producing the same one, is invisible from here.
The Secondary Header Flag is static with respect to the APID and managed data path throughout a Mission Phase.4.1.3.3.3.3This is a rule about what a sender does over a Mission Phase, not a property of any one packet. The receive-side per-APID configuration (ServiceConfig.APIDs) sets how packets are decoded, not which flag values are legal over time; a mission's own configuration layer has to enforce it.

Outside the Proforma

The items below are not PICS items (the CCSDS 133.0-B-2 proforma does not list them) but they come up often enough to be worth stating.

TopicReferenceStatus
Segmentation / reassembly4.1.3.4.2
Idle packet handling4.1.3.3.4.4
Concurrent use-
Reordered and duplicated packets4.1.3.4.3, note 1

Fully Supported Items

ItemDescriptionImplementation
SPP-1Space Packet SDU
SPP-2Octet String SDU
SPP-3APID
SPP-6Octet String
SPP-7APID (Octet String)
SPP-8Secondary Header Indicator (Octet String)
SPP-10Packet.request
SPP-11Packet.indication
SPP-12Octet_String.request
SPP-13Octet_String.indication
SPP-14Space Packet
SPP-17Packet Secondary Header (C1)
SPP-18User Data Field (C2)
SPP-15Packet Primary Header
SPP-16Packet Data Field
SPP-19Packet Assembly Function
SPP-20Packet Transfer Function
SPP-21Packet Extraction Function
SPP-22Packet Reception Function
SPP-23Maximum Packet Length
SPP-24Packet Type
SPP-26Service Type

Wire test vectors

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

File
spp/header.json18 vectors
spp/interop.json7 vectors, captured from spacepackets 0.32.0
spp/packet.json10 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.