Astro~/0.3
** Conformance / Encapsulation Packet Protocol * PAGE 02 / 23
** Astro * Conformance
** /conformance/epp

Encapsulation Packet Protocol

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

Conformance Statement for pkg/epp, CCSDS 133.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-EPP-PICS-002
System Conformance Statement Cross-ReferenceThis document

A2.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/epp
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing CCSDS Encapsulation Packet Protocol encoding, decoding, validation, and service-layer I/O for all four header sizes. Wire layout pinned by spec-derived golden vectors (e.g. 1-octet idle packet = 0xE0).

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

A2.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 133.1-B-3 (Encapsulation Packet Protocol, Blue Book, Issue 3, May 2020)
Have any exceptions been required?Yes [X] No [ ]

NOTE, Non-supported optional capabilities are identified in section A2.2 with explanations.


A2.2 REQUIREMENTS LIST

Table A-1: Encapsulation Packet Structure

ItemDescriptionReferenceStatusSupportNotes
EPP-1Encapsulation Packet4.1.1MYesEncapsulationPacket struct with Header and Data fields. Encode() / Decode() with golden wire-vector tests in addition to round-trips.
EPP-2Packet Version Number4.1.2.2MYesBits 0-2 of octet 0, enforced as '111' (7) via ErrInvalidPVN. Distinguishes from Space Packets (PVN '000').
EPP-3Encapsulation Protocol ID4.1.2.3MYesBits 3-5 of octet 0. Named constants per the SANA registry: ProtocolIDIdle (0), ProtocolIDLTP (1), ProtocolIDIPE (2), ProtocolIDExtended (6), ProtocolIDMission (7). Validated in Header.Validate().
EPP-4Length of Length4.1.2.4MYesBits 6-7 of octet 0 (2 bits). Header size derived from this field alone per table 4-1: '00'->1, '01'->2, '10'->4, '11'->8 octets (Header.Size()). 4.1.2.4.4 enforced: LoL '00' requires Protocol ID '000' (ErrNonIdleOneOctetHeader).
EPP-5User Defined Field4.1.2.5MYes4-bit field in octet 1 of 4- and 8-octet headers (Header.UserDefined, set via WithUserDefined()). Rejected when it cannot be encoded (ErrFieldNeedsLongerHeader).
EPP-6Encapsulation Protocol ID Extension4.1.2.6MYes4-bit field sharing octet 1 with the User Defined Field. Used for protocol identification when the Protocol ID is '110' (4.1.2.6.2); enforced as 'all zeros' otherwise (4.1.2.6.3, ErrExtensionMustBeZero). Protocol ID '110' requires a 4- or 8-octet header (ErrExtendedNeedsLongHeader).
EPP-7CCSDS Defined Field4.1.2.7MYes2-octet field, 8-octet header only (Header.CCSDSDefined, set via WithCCSDSDefined()). Reserved; 'all zeros' by convention (not enforced on receive, per 4.1.2.7.2 being a convention).
EPP-8Packet Length Field4.1.2.8MYesTotal packet length in octets, header included (4.1.2.8.2). 1, 2, or 4 octets per the Length of Length field; absent in the 1-octet header. Auto-computed in NewPacket(); bounds checked against table 4-2 in Header.Validate().
EPP-9Encapsulated Data Field4.1.3MYesData []byte. Absent-data conditions enforced per 4.1.3.1.4/4.1.3.1.5: a packet without a data field must carry Protocol ID '000' (ErrEmptyData otherwise).

Table A-2: Header Sizes (figure 4-2 / table 4-1)

ItemDescriptionReferenceStatusSupportNotes
EPP-101-octet header (LoL '00')4.1.2MYesIdle packets only; encodes as 0xE0. NewIdlePacket() constructor; golden vector test.
EPP-112-octet header (LoL '01')4.1.2MYes1-octet Packet Length, max total 255. Default for small payloads.
EPP-124-octet header (LoL '10')4.1.2MYesUDF + PIE octet, 2-octet Packet Length, max total 65,535. Selected automatically for larger payloads or via WithLongLength() / WithUserDefined() / WithExtendedProtocolID().
EPP-138-octet header (LoL '11')4.1.2MYesUDF + PIE octet, CCSDS Defined Field, 4-octet Packet Length, max total 4,294,967,295. Selected automatically or via WithCCSDSDefined().
EPP-14Receive fixed- or variable-length headers4.1.2.1.2MYesDecode() and Service.ReceivePacket() accept any of the four header sizes; the sender adapts the header size to the payload per the 4.1.2.1.2 NOTE.

Table A-3: Protocol ID Values (SANA registry)

ItemDescriptionReferenceStatusSupportNotes
EPP-15Idle Packet (PID 0)4.1.2.3 NOTE 1MYesNewIdlePacket() (1-octet form) and NewIdleFillPacket(totalLength, fill) for multi-octet idle fill packets used to fill fixed-length transfer frames. IsIdle() detection.
EPP-16LTP (PID 1)SANA registryOYesProtocolIDLTP constant; NewLTPPacket() constructor.
EPP-17Internet Protocol Extension (PID 2)SANA registryOYesProtocolIDIPE constant; NewIPEPacket() constructor.
EPP-18Protocol ID Extension (PID 6, '110')4.1.2.3 NOTE 2MYesProtocolIDExtended constant; WithExtendedProtocolID() sets the 4-bit extension. Extension values are carried opaquely; the SANA extended-protocol registry is not modeled.
EPP-19Mission-specific data (PID 7, '111')4.1.2.3 NOTE 3OYesProtocolIDMission constant; NewMissionPacket() constructor.
EPP-20Reserved Protocol IDs (3, 4, 5)SANA registry-PartialPackets with reserved PIDs can be constructed and decoded (identified as "Reserved" in Humanize()); no named constants.

Table A-4: Service Interface

ItemDescriptionReferenceStatusSupportNotes
EPP-21ENCAPSULATION.request3.3MYesService.SendBytes(protocolID, data, opts...) and Service.SendPacket(packet).
EPP-22ENCAPSULATION.indication3.3MYesService.ReceiveBytes() and Service.ReceivePacket() with header-size-aware streaming reads.
EPP-23Packet Sizing--YesPacketSizer(data) implements sdl.PacketSizer: total length from the first octet's LoL field (1 for the idle byte). Compatible with tmdl and tcdl VCP services.

Table A-5: Management Parameters

ItemDescriptionReferenceStatusValues AllowedSupportNotes
EPP-24Maximum Packet Length5MIntegerYesServiceConfig.MaxPacketLength. Defaults to 4,294,967,295 (the protocol maximum) so no spec-valid packet is rejected unless a mission sets a lower limit.
EPP-25Packet Multiplexing-OMission specificNoNo multiplexing or scheduling logic. Caller controls ordering of SendPacket() calls.

A2.3 CONFORMANCE SUMMARY

Overall Statistics

CategoryTotal ItemsSupportedPartialNot Supported
Mandatory (M)171700
Optional (O)4301
Unclassified (, )2110
Total232111

Non-Conformances (Optional Items Not Supported)

ItemDescriptionReason
EPP-25Packet MultiplexingNo multiplexing, scheduling, or interleaving logic.

Partial Conformances (Items Requiring Attention)

ItemDescriptionReason
EPP-20Reserved Protocol IDsReserved PIDs (3, 4, 5) can be constructed and decoded, but no named constants are provided.

Verification Notes

  • Octet 0 layout (PVN '111' | Protocol ID | 2-bit Length of Length), the pure-LoL header sizing, the octet-1 UDF/PIE split, and the total-length-including-header Packet Length semantics were verified against the fetched CCSDS 133.1-B-3 (May 2020) text and are pinned by golden wire vectors in header_test.go and packet_test.go (e.g. the 1-octet idle packet 0xE0).
  • Protocol ID names follow the SANA Encapsulation Protocol ID registry (1 = LTP, 2 = IPE, 6 = extension, 7 = mission-specific).