Astro~/0.4
** Conformance
** Astro * Conformance
** /conformance/ltp

Licklider Transmission Protocol

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

Conformance Statement for pkg/ltp, RFC 5326

Conformance is claimed against RFC 5326 only. CCSDS 734.1-B-1 profiles that RFC for space links; this implementation contains no profile-specific behavior, so no claim is made against the profile itself, see A1.5.


A1.1 GENERAL INFORMATION

A1.1.1 Identification of PICS

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

A1.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/ltp, with astro/pkg/sdnv
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationReceiverConfig.MaxBlockSize bounds an assembled block; serial number seeds are caller-supplied
Other InformationGo library implementing the LTP segment codecs and caller-pumped sender and receiver session machines. The library owns no goroutines and no clock: every timer is the caller's, matching the shape of pkg/cop's FOP-1.

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/ltp, astro/pkg/sdnv (Go packages)
System Name(s)Astro

A1.1.4 Identification of Specification

FieldValue
SpecificationRFC 5326 (Licklider Transmission Protocol, Specification, September 2008). CCSDS 734.1-B-1 profiles this RFC; no conformance to the profile's own requirements is claimed, see A1.5
Have any exceptions been required?Yes [X] No [ ], see A1.5

A1.2 SEGMENT STRUCTURE

FeatureReferenceStatusSupport
Segment headerclause 3.1M
Version number 0clause 3.1M
Segment type flags: CTRL, EXC, Flag 1, Flag 0clause 3.1.1M
Segment type codes 0 to 15clause 3.1.2M
Segment class masks: CP, EORP, EOB, RS, RA, CS, CAS, CR, CARclause 3.1.3M
Session ID: engine ID and session numberclause 3.1M
Extensions field, counts octetclause 3.1.4M
Extension TLV: tag, SDNV length, valueclause 3.1.4O
Header extensions before contentclause 3.1.4M
Trailer extensions after contentclause 3.1.4M
Self-Delimiting Numeric Valuesclause 1.6 item 20M

A1.3 SEGMENT CONTENT

FeatureReferenceStatusSupport
Data segment: client service ID, offset, lengthclause 3.2.1MY: all SDNV
Checkpoint serial number on checkpoints onlyclause 3.2.1MY: non-checkpoints carry neither serial
Report serial number on checkpointsclause 3.2.1MY: a checkpoint closing a retransmission cycle carries the prompting report's serial; zero when no report prompted it
Checkpoint serial number never zeroclause 3.2.1MY: enforced on encode and decode
Report segment: serials, bounds, claim count, claimsclause 3.2.2OY
Report serial number never zeroclause 3.2.2MY
Claim offsets relative to the lower boundclause 3.2.2MY: ClaimedRanges() converts to block offsets
Claim length at least 1, within the boundsclause 3.2.2MY: validated on encode and decode
Claims in ascending order, non-overlapping, at least oneclause 3.2.2MY: validated on encode and decode; zero-claim reports are neither emitted nor accepted
Report acknowledgment segmentclause 3.2.3OY
Cancel segment reason codeclause 3.2.4OY: codes 0 to 5; 6 to 255 rejected as reserved
Cancel acknowledgment has no contentclause 3.2.5OY

A1.4 SESSION PROCEDURES

FeatureReferenceStatusSupport
Red-part reliable deliveryclause 6MY
Green-part best-effort deliveryclause 6OY
Mixed red and green blocksclause 3.1.1OY: no segment straddles the boundary
Checkpoint at end of red partclause 3.1.1MY
End-of-block flaggingclause 3.1.3MY
Reception reporting on checkpointclause 6.13MY: report upper bound covers the checkpoint's own end even before the EORP arrives
Duplicate checkpoints answered with the same reportclause 6.11MY: deduplicated on checkpoint serial; the original report is resent
Asynchronous reception reportingclause 6.2OY: RequestReport, checkpoint serial zero
Retransmission of unclaimed rangesclause 6.13MY
Retransmission cycle ends with a checkpointclause 6.9MY: the cycle's last segment is a checkpoint wherever it sits in the block
Report acknowledgmentclause 6.14MY: every report acknowledged, including the final one after the sender's session closes
Receiver closure gated on report acknowledgmentclause 6.11, clause 6.16MY: the session stays open until every report is acknowledged; an all-green session closes on the green EOB
Miscolored block detectionclause 3.2.4MY: cancels with reason MISCOLORED
Session cancellation from either endclause 6.19, clause 6.20OY
Cancel acknowledgmentclause 6.21MY: the sender acknowledges a cancel from the receiver, and the receiver one from the sender
Segments for other sessions ignoredclause 6MY: filtered on session ID

A1.5 EXCEPTIONS AND UNSUPPORTED FEATURES

FeatureReferenceSupportRationale
CCSDS 734.1-B-1 profile requirements734.1-B-1N
Timers: checkpoint, report, cancel retransmissionclause 6.7, clause 6.8N by design
Session multiplexingclause 6N
Authentication extensionclause 3.1.4, [LTPEXT]P
Cookie extensionclause 3.1.4, [LTPEXT]P
Random serial number generationclause 3.2.1, clause 3.2.2N by design
Deferred transmission and link-state cuesclause 6.5N

A1.6 IMPLEMENTATION LIMITS

LimitValueSource
SDNV value range0 to 2^64 - 1
Header extensions per segment15
Trailer extensions per segment15
Assembled block sizeMaxBlockSize, default 64 MiB
Cancel reason codes accepted0 to 5

Wire test vectors

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

File
ltp/header.json10 vectors
ltp/interop.json5 vectors, captured from ION-DTN
ltp/session.json4 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.