Astro~/0.3
** Conformance / Bundle Protocol * PAGE 05 / 23
** Astro * Conformance
** /conformance/bp

Bundle Protocol

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

Conformance Statement for pkg/bp, CCSDS 734.2-B-1 / RFC 5050


A1.1 GENERAL INFORMATION

A1.1.1 Identification of PICS

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

A1.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/bp, with astro/pkg/sdnv
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationDecodeOptions bounds block length and block count
Other InformationGo library implementing Bundle Protocol version 6 block formats: primary block with the RFC 5050 dictionary and RFC 6260 Compressed Bundle Header Encoding, canonical blocks, the CCSDS Extended Class of Service block, fragmentation and reassembly, and both administrative record types. Bundle agent behavior, routing, storage, custody timers, is out of scope.

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

A1.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 734.2-B-1 (CCSDS Bundle Protocol Specification, Blue Book, Issue 1, September 2015), profiling RFC 5050 and RFC 6260
Have any exceptions been required?Yes [X] No [ ], see A1.6

A1.2 CCSDS PROFILE REQUIREMENTS

FeatureReferenceStatusSupport
Bundle Protocol version 6 per RFC 5050clause 3.1MY: not BPv7, which is wire-incompatible
IPN naming schemeclause 3.2.1, RFC 6260 clause 2.1MY: IPNEndpoint, node 1 to 2^64-1, service 0 to 2^64-1
Compressed Bundle Header Encodingclause 3.2, RFC 6260 clause 2MY: when all four endpoints are ipn (dtn:none as node 0, service 0) the dictionary length encodes as zero and node/service numbers ride in the offset fields; a decoded dictionary length of zero is parsed as CBHE
Node number range enforcedclause 3.2.1MY: node 0 rejected; on CBHE decode, node 0 with a nonzero service rejected
Extended Class of Service blockclause 3.3, annex CMY
DTN time precision relaxationclause 3.4OY: nanoseconds carried, precision left to the caller

A1.3 BLOCK FORMATS

FeatureReferenceStatusSupport
Primary bundle blockRFC 5050 clause 4.5.1MY
Version field = 6clause 4.5.1MY: other versions rejected on decode
Bundle processing control flagsclause 4.2MY: SDNV, all defined bits
Class of service, bits 7 to 8clause 4.2MY: bulk, normal, expedited; the reserved value 3 rejected
Status report request flags, bits 14 to 18clause 4.2OY
Administrative record flag constraintsclause 4.2MY: custody and report flags rejected together with it
Anonymous-source constraintsclause 4.2MY: source dtn:none must not request custody and must set the no-fragment flag
Contradictory fragment flags rejectedclause 4.2MY: a fragment cannot also forbid fragmentation
Bundle ends at the last blockclause 4.1MY: trailing octets rejected (ErrTrailingBytes); DecodeBundleN returns consumed length for concatenated streams
Dictionary with endpoint offsetsclause 4.4, clause 4.5.1MY: repeated strings interned once
Creation timestamp and sequence numberclause 4.5.1MY
Lifetimeclause 4.5.1MY
Fragment offset and total ADU lengthclause 4.5.1OY: present only with the fragment flag
Canonical block formatclause 4.5.2MY
Block type codeclause 4.5.2MY
Block processing control flagsclause 4.5.2MY: all seven defined bits
EID reference fieldclause 4.5.2OY: present if and only if the flag is set
Block data length and bodyclause 4.5.2MY
Payload block, type 1clause 4.5.2MY: exactly one per bundle
Last-block flag on the final blockclause 4.5.2MY: validated

A1.4 EXTENDED CLASS OF SERVICE

FeatureReferenceStatusSupport
ECOS block conforms to clause 4.5.2 and clause 4.6annex C, C2MY
Replicate-in-every-fragment flag setC2 b)MY: enforced by bundle validation and decode, not just the construction helper
No EID referencesC2 c)MY: enforced by bundle validation and decode
Block data length 2 + NC2 d)MY
Flags byte: critical (0x01)C2 f) 1)MY
Flags byte: streaming (0x02)C2 f) 2)MY
Flags byte: flow label present (0x04)C2 f) 3)MY
Flags byte: reliable (0x08)C2 f) 4)MY
Ordinal byte, 0 to 255C2 g)MY
Ordinal 255 reserved for custody signalsC3.1.4MY: rejected unless the bundle is an administrative record
Flow label as SDNVC2 h)OY
ECOS precedes the payload blockC3.1.1MY: validated
At most one ECOS block per bundleC3.1.2MY: validated
Flow-label flag matches the fieldC3.1.3MY: validated

A1.5 PROCEDURES

FeatureReferenceStatusSupport
FragmentationRFC 5050 clause 5.8OY
Replicated blocks copied to every fragmentclause 5.8MY
Blocks preceding the payload replicated in the first fragment; blocks following the payload in the lastclause 5.8MY
"Must not be fragmented" respectedclause 4.2MY
Reassemblyclause 5.9OY: any order, overlaps tolerated, gaps rejected
Administrative record framingclause 6.1MY: 4-bit type, 4-bit flags
DTN time representationclause 6.1MY: seconds and nanoseconds as SDNVs
Bundle status reportclause 6.1.1OY: times present only for set status flags
Status flagsclause 6.1.1, figure 11MY: all five
Reason codesclause 6.1.1MY: the nine RFC 5050 defines
Custody signalclause 6.1.2OY: succeeded bit plus 7-bit reason
Fragment fields in administrative recordsclause 6.1, figure 9OY

A1.6 EXCEPTIONS AND UNSUPPORTED FEATURES

FeatureReferenceSupportRationale
Bundle protocol agent: routing, storage, forwardingRFC 5050 clause 5NThis package is the wire format and block structure. Forwarding policy, contact graphs and storage belong to a layer above.
Custody transfer timers and retransmissionclause 5.10, clause 6.3NRequires an agent and a clock; the same reasoning as pkg/ltp.
Aggregate Custody SignalsCCSDS 734.2-B-1 annex DNA separate normative annex; a follow-up.
Delay-Tolerant Payload Conditioningannex ENA separate normative annex; a follow-up.
Bundle Security Protocol blocks[BSP]NA separate specification.
BP managed informationannex FNManagement data model, not wire format.
Bundle Protocol version 7RFC 9171NA CBOR encoding, wire-incompatible with v6. CCSDS 734.2-B-1 profiles v6.
CLI subcommands-NA follow-up once the API settles.

A1.7 IMPLEMENTATION LIMITS

LimitValueSource
SDNV value range0 to 2^64 - 1pkg/sdnv
Block body lengthMaxBlockLength, default 16 MiBImplementation choice; RFC 5050 states no ceiling, but a block length is an SDNV reaching 2^64 and would otherwise size an allocation
Blocks per bundleMaxBlocks, default 64Same reasoning
Reassembled application data unit16 MiBBounded by the same block-length cap