Astro~/0.3
** Conformance / TM Space Data Link Protocol * PAGE 06 / 23
** Astro * Conformance
** /conformance/tmdl

TM Space Data Link Protocol

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

Conformance Statement for pkg/tmdl, CCSDS 132.0-B-3


A2.1 GENERAL INFORMATION

A2.1.1 Identification of PICS

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

A2.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/tmdl
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing CCSDS TM Space Data Link Protocol. Full pipeline: PhysicalChannel (MC mux/demux) -> MasterChannel (VC mux, MC_FSH/MC_OCF insertion, frame gap detection) -> VirtualChannel (single frame buffer) -> Services (VCP with native multi-packet packing via FHP and PacketSizer-based reassembly with loss resync, VCA with user-set status fields, VC_FSH and VC_OCF suppliers, VCF). Fixed frame length enforcement and conformant OID idle frames (mandatory PN fill, packet-carrying VCID). The sync layer (ASM, CCSDS pseudo-randomization, CADU wrapping/unwrapping) is handled by the separate pkg/tmsc package.

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

A2.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 132.0-B-3 (TM Space Data Link Protocol, Blue Book, Issue 3, October 2021)
Have any exceptions been required?Yes [ ] No [X]

NOTE. Every mandatory item is supported: the frame codec, all seven transfer services (VCP, VCA, VC_FSH, VC_OCF, VCF, MC_FSH, MC_OCF, MCF), and the protocol procedures at both ends. Optional items not supported: TM-9 (Packet Quality Indicator), TM-89 (SDLS Protocol).


A2.2 REQUIREMENTS LIST

Table A-1: TM Service Data Units

ItemDescriptionReferenceStatusSupportNotes
TM-1Packet SDU3.2.2MYesSpace Packets are carried in TMTransferFrame.DataField. The VirtualChannelPacketService accepts packet data via Send(), pushes frames into a VirtualChannel, and delivers data via Receive().
TM-2VCA_SDU3.2.3MYesVirtualChannelAccessService accepts fixed-length VCA SDUs via Send() with VCASize enforcement, pushes frames into a VirtualChannel, and delivers them via Receive().
TM-3FSH_SDU3.2.4MYesSecondaryHeader.DataField carries the FSH SDU. Presence indicated by PrimaryHeader.FSHFlag. Encoded/decoded via SecondaryHeader.Encode() / SecondaryHeader.Decode().
TM-4OCF_SDU3.2.5MYesTMTransferFrame.OperationalControl, 4-byte OCF field. Presence indicated by PrimaryHeader.OCFFlag. Extracted during decode when present.
TM-5TM Transfer Frame3.2.6MYesTMTransferFrame struct with Encode() / DecodeTMTransferFrame() round-trip support. Composed of Primary Header, optional Secondary Header, Data Field, optional OCF, and Frame Error Control.

Table A-2: Service Parameters

ItemDescriptionReferenceStatusValues AllowedSupportNotes
VCP Packet Service Parameters
TM-6Packet3.3.2.2M-YesPacket data passed as []byte to VirtualChannelPacketService.Send(). Frame pushed into VirtualChannel. Delivered via Receive().
TM-7GVCID3.3.2.3M-YesDerived from PrimaryHeader.GVCID() (TFVN + SCID + VCID). VCID configured at service construction.
TM-8Packet Version Number3.3.2.4M-YesPVN validation was removed from the VCP service; it is delegated to the application layer. The first 3 bits of packet data carry the PVN per CCSDS.
TM-9Packet Quality Indicator3.3.2.5O-NoNot implemented.
TM-10Verification Status Code3.3.2.6C2(see reference [10])N/ASDLS Option not implemented.
VCA SDU Service Parameters
TM-11VCA SDU3.4.2.2M-YesFixed-length data passed to VirtualChannelAccessService.Send(). Size enforced against vcaSize. Frame pushed into VirtualChannel.
TM-12VCA Status Fields3.4.2.3M-YesBoth directions. Sending: VirtualChannelAccessService.SetSendStatus(VCAStatus{...}) sets the Packet Order Flag, Segment Length ID, and First Header Pointer carried by subsequent Send() calls, the mandatory VCA Status Fields parameter of the VCA.request primitive (clause 3.4.3.2.2), whose semantics are the user's. Receiving: LastStatus() returns VCAStatus{SyncFlag, PacketOrderFlag, SegmentLengthID, FirstHeaderPtr} from the last received frame. The Synchronization Flag is not a user field: Clause 4.1.2.7.3.2 fixes it at '1' for a VCA_SDU and Send() always sets it.
TM-13GVCID3.4.2.4M-YesDerived from PrimaryHeader.GVCID(). VCID configured at service construction.
TM-14VCA SDU Loss Flag3.4.2.5O-YesFrameGapDetector tracks VC frame count gaps. MasterChannel.VCFrameGap() returns gap count after each AddFrame().
TM-15Verification Status Code3.4.2.6C2(see reference [10])N/ASDLS Option not implemented.
VC FSH SDU Service Parameters
TM-16FSH SDU3.5.2.2M-YesSecondaryHeader.DataField carries the FSH_SDU on the wire. The VC_FSH service user installs it via SetFSHSupplier() on the VCP or VCA service, which fills the header of every frame that service emits (clause 3.5.1 makes the transfer synchronous with frame release), and reads it back with LastFSH(). Width is the channel's fixed ChannelConfig.FSHDataLength (clause 4.1.3.1.6).
TM-17GVCID3.5.2.3M-YesDerived from PrimaryHeader.GVCID().
TM-18FSH_SDU Loss Flag3.5.2.4O-YesMasterChannel.VCFrameGap() reports the Virtual Channel Frame Count gap, which clause 3.5.2.4 names as the derivation for this flag; read it alongside the service's LastFSH().
OCF SDU Service Parameters
TM-19OCF SDU3.6.2.2M-YesTMTransferFrame.OperationalControl, 4-byte field.
TM-20GVCID3.6.2.3M-YesDerived from PrimaryHeader.GVCID().
TM-21OCF SDU Frame Loss Flag3.6.2.4O-YesFrameGapDetector integrated into MasterChannel.AddFrame(). Gap detected via MC/VC frame count tracking.
VC Frame Service Parameters
TM-22TM Frame3.7.2.2M-YesVirtualChannelFrameService accepts and delivers complete *TMTransferFrame objects via Send() / Receive().
TM-23GVCID3.7.2.3M-YesDerived from PrimaryHeader.GVCID().
TM-24Frame Loss Flag3.7.2.4O-YesFrameGapDetector integrated into MasterChannel.AddFrame(). Gap detected via MC/VC frame count tracking.
MC FSH Service Parameters
TM-25FSH SDU3.8.2.2M-YesMasterChannel.SetFSHSupplier() installs the MC_FSH service user: its FSH_SDU is placed into the Transfer Frame Secondary Header of every frame released through the master channel (clause 4.2.5.2), idle frames included. MasterChannel.LastFSH() delivers the SDU decommutated from the most recently received frame (clause 4.3.5.2). The SDU width is the channel's fixed ChannelConfig.FSHDataLength (clause 4.1.3.1.6); a mismatch is refused with ErrFSHSizeMismatch rather than silently truncated.
TM-26MCID3.8.2.3M-YesPrimaryHeader.MCID() returns TFVN + SCID. It is the SAP address of the MC_FSH service: a MasterChannel is created for one SCID and rejects frames from another with ErrSCIDMismatch, so its FSH supplier and LastFSH() are scoped to that MCID.
TM-27FSH_SDU Loss Flag3.8.2.4O-YesMasterChannel.MCFrameGap() reports the Master Channel Frame Count gap after each AddFrame, which clause 3.8.2.4 names as the way to derive the flag; read it alongside LastFSH().
MC OCF Service Parameters
TM-28OCF SDU3.9.2.2M-YesMasterChannel.SetOCFSupplier() installs the MC_OCF service user: its 4-octet OCF_SDU is placed into the Operational Control Field of every frame released through the master channel (clause 4.2.5.3), idle frames included. MasterChannel.LastOCF() delivers the SDU from the most recently received frame (clause 4.3.5.2). Per-virtual-channel OCF remains available via the services' own SetOCFSupplier (VC_OCF, clause 3.6).
TM-29MCID3.9.2.3M-YesPrimaryHeader.MCID(), scoped as the MC_OCF service's SAP address by the owning MasterChannel (see TM-26).
TM-30OCF_SDU Loss Flag3.9.2.4O-YesMasterChannel.MCFrameGap() reports the Master Channel Frame Count gap after each AddFrame (clause 3.9.2.4); read it alongside LastOCF().
MC Frame Service Parameters
TM-31TM Frame3.10.2.2M-YesRealized by MasterChannel rather than a Service type: AddFrame() routes inbound frames to Virtual Channels by VCID, GetNextFrame() pulls from the integrated multiplexer, SCID matching enforced.
TM-32MCID3.10.2.3M-YesPrimaryHeader.MCID(). SCID validated in MasterChannel.AddFrame().
TM-33Frame Loss Flag3.10.2.4O-YesMasterChannel.MCFrameGap() and VCFrameGap() detect frame count gaps via FrameGapDetector.

C2: O if SDLS Option else N/A.

Table A-3: Service Primitives

ItemDescriptionReferenceStatusSupportNotes
VCP Service Primitives
TM-34VCP.request3.3.3.2MYesVirtualChannelPacketService.Send(data) implements VCP.request. When ChannelConfig is set, packs packets into fixed-length frames using native FHP (multi-packet packing: tail-of-previous + start-of-next in same frame). Flush() fills the remaining space with an SPP idle packet and emits the resulting frame(s).
TM-35VCP.indication3.3.3.3MYesVirtualChannelPacketService.Receive() implements VCP.indication. When ChannelConfig is set, uses FHP to locate packet boundaries and PacketSizer (via spp.PacketSizer) to extract complete packets. SetPacketSizer must be called explicitly. Resyncs via FHP after VC frame count gaps. Skips idle frames and discards extracted idle packets (APID 0x7FF).
VCA Service Primitives
TM-36VCA.request3.4.3.2MYesVirtualChannelAccessService.Send(data) implements VCA.request. Enforces fixed vcaSize, constructs a frame, stamps counters/CRC via stampFrame(), and pushes it into the VirtualChannel.
TM-37VCA.indication3.4.3.3MYesVirtualChannelAccessService.Receive() implements VCA.indication. Pulls the next frame from the VirtualChannel and returns its fixed-length Data Field.
VC FSH Service Primitives
TM-38VC_FSH.request3.5.3.2MYesSetFSHSupplier() on the VCP or VCA service is the VC_FSH.request path: the supplier is polled as each frame is built and its FSH_SDU written into the secondary header, giving the synchronous transfer of clause 3.5.1. Direct per-frame construction stays available via NewTMTransferFrame(..., secondaryHeaderData, ...), which sets the FSH flag automatically.
TM-39VC_FSH.indication3.5.3.3MYesDecodeTMTransferFrame() extracts the secondary header when the FSH flag is set; the VCP and VCA services deliver its SDU through LastFSH() as they decommutate each frame (clause 4.3.3.3), including on OID frames whose secondary header can still carry valid data (clause 4.1.4.6.3 note 1).
VC OCF Service Primitives
TM-40VC_OCF.request3.6.3.2MYesOCF data passed via NewTMTransferFrame(..., ocf). OCFFlag auto-set when OCF is present.
TM-41VC_OCF.indication3.6.3.3MYesDecodeTMTransferFrame() extracts 4-byte OCF when OCFFlag is set.
VC Frame Service Primitives
TM-42VCF.request3.7.3.2MYesVirtualChannelFrameService.Send(data) decodes frame bytes and pushes the frame into the VirtualChannel.
TM-43VCF.indication3.7.3.3MYesVirtualChannelFrameService.Receive() pulls the next frame from the VirtualChannel and returns it as encoded bytes.
MC FSH Service Primitives
TM-44MC_FSH.request3.8.3.2MYesMasterChannel.SetFSHSupplier() is the MC_FSH.request path: the supplier is polled at frame release and its FSH_SDU written into every frame of the master channel, which is the synchronous transfer clause 3.8.1 describes.
TM-45MC_FSH.indication3.8.3.3MYesMasterChannel.AddFrame() decommutates the secondary header per clause 4.3.5.2 and MasterChannel.LastFSH() delivers the FSH_SDU, with MCFrameGap() supplying the optional loss flag.
MC OCF Service Primitives
TM-46MC_OCF.request3.9.3.2MYesMasterChannel.SetOCFSupplier() is the MC_OCF.request path: the supplier is polled at frame release and its OCF_SDU written into every frame of the master channel.
TM-47MC_OCF.indication3.9.3.3MYesMasterChannel.AddFrame() decommutates the Operational Control Field per clause 4.3.5.2 and MasterChannel.LastOCF() delivers the OCF_SDU, with MCFrameGap() supplying the optional loss flag.
MC Frame Service Primitives
TM-48MCF.request3.10.3.2MYesRealized by MasterChannel.AddFrame(frame) rather than a Service type: accepts a *TMTransferFrame with SCID validation and routes it to the appropriate VirtualChannel by VCID.
TM-49MCF.indication3.10.3.3MYesRealized by MasterChannel.GetNextFrame(), which pulls the next frame from the integrated VirtualChannelMultiplexer.

Table A-4: TM Protocol Data Unit

ItemDescriptionReferenceStatusSupportNotes
TM-50TM Transfer Frame4.1.1MYesTMTransferFrame struct with Encode() / DecodeTMTransferFrame() round-trip.
TM-51Transfer Frame Primary Header4.1.2MYesPrimaryHeader, 6 octets (48 bits). All fields per CCSDS: Transfer Frame Version Number (2 bits, enforced as 00), Spacecraft ID (10 bits), Virtual Channel ID (3 bits), OCF Flag (1 bit), MC Frame Count (8 bits), VC Frame Count (8 bits), Transfer Frame Data Field Status (16 bits). Big-endian encoding via Encode() / Decode(). Validated via Validate().
TM-52Transfer Frame Secondary Header4.1.3MYesSecondaryHeader struct: Version Number (2 bits, enforced as 00), Header Length (6 bits, 0-63), Data Field (variable). Encode() / Decode() / Validate() methods. Presence controlled by FSHFlag.
TM-53Transfer Frame Data Field4.1.4MYesTMTransferFrame.DataField, the payload, sized by ChannelConfig.DataFieldCapacity() as the fixed frame length minus the primary header, secondary header, and trailer (clause 4.1.4.2). OID frames (clause 4.1.4.6) carry the mandatory Pseudo Noise fill: OIDSequence implements the 32-cell LFSR of clause 4.1.4.6.2 with polynomial D0+D1+D2+D22+D32 and the 'all ones' seed, and each MasterChannel keeps one generator for its lifetime so the sequence is never restarted between frames (clause 4.1.4.6.2.1).
TM-54Operational Control Field4.1.5MYesTMTransferFrame.OperationalControl, 4 bytes (32 bits). Included when OCFFlag is set. Extracted during decode.
TM-55Frame Error Control Field4.1.6MYesTMTransferFrame.FrameErrorControl, 16-bit CRC-16-CCITT (polynomial 0x1021, init 0xFFFF). Auto-computed on encode via crc.ComputeCRC16(). Verified on decode; CRC mismatch returns error.

Table A-5: Protocol Procedures

ItemDescriptionReferenceStatusSupportNotes
TM-56Packet Processing Function4.2.2MYesVirtualChannelPacketService.Send() accepts packet data and packs it contiguously across fixed-length frames when ChannelConfig is set, with native FirstHeaderPtr management. Flush() fills spare data field space with SPP idle packets (APID 0x7FF), spanning into following frames when the spare space is under the 7-octet minimum packet size.
TM-57VC Generation Function4.2.3MYesNewTMTransferFrame() generates frames with SCID, VCID, data, optional secondary header, and optional OCF. CRC auto-computed. Frame counts applied by stampFrame() when a FrameCounter is provided.
TM-58VC Multiplexing Function4.2.4MYesVirtualChannelMultiplexer schedules frames from multiple Virtual Channels using weighted round-robin via GetNextFrame(). Integrated into MasterChannel. GetNextFrameOrIdle() creates the OID Transfer Frame clause 4.2.4.4 requires when no valid frame is available at release time: First Header Pointer '11111111110', a VCID that carries packets (clause 4.1.4.6.3, the lowest registered channel or the one pinned by SetIdleVCID()), a PN-filled data field, and MC/VC frame counts continuing the channel's sequence.
TM-59MC Generation Function4.2.5MYesMasterChannel.GetNextFrame() / GetNextFrameOrIdle() insert the MC_FSH and MC_OCF service data units into every frame released through the master channel (clause 4.2.5.2, clause 4.2.5.3) and refresh the frame error control field over the result, then hand the frame on. The Master Channel Frame Count is generated by the shared FrameCounter.
TM-60MC Multiplexing Function4.2.6MYesPhysicalChannel implements weighted round-robin MC multiplexing across registered MasterChannels via GetNextFrame(). GetNextFrameOrIdle() creates the OID Transfer Frame of clause 4.2.6.4 when no master channel has a frame ready, choosing the lowest registered SCID so the result is deterministic.
TM-61All Frames Generation Function4.2.7MYesPhysicalChannel.GetNextFrameOrIdle() keeps the transmitted stream continuous, delegating idle frame creation to the chosen MasterChannel so the OID frame carries that channel's counts, PN fill, and MC_FSH/MC_OCF data. The frame error control field is appended here by EncodeWithConfig() when the channel carries one. CADU wrapping (ASM prepending, CCSDS pseudo-randomization) is done by the tmsc package.
TM-62Packet Extraction Function4.3.2MYesVirtualChannelPacketService.Receive() uses FHP to locate packet starts and PacketSizer to extract complete packets per clause 4.3.2. Resyncs after frame loss by aborting partial packets and finding next FHP. Skips idle frames and discards extracted idle packets (APID 0x7FF) per clause 4.3.2.
TM-63VC Reception Function4.3.3MYesDecodeTMTransferFrame() parses raw octets into a TMTransferFrame, verifying CRC and extracting all fields. MasterChannel.AddFrame() routes received frames to the appropriate VirtualChannel by VCID.
TM-64VC Demultiplexing Function4.3.4MYesMasterChannel.AddFrame() demultiplexes inbound frames to Virtual Channels by VCID. TMServiceManager dispatches to the correct VC service.
TM-65MC Reception Function4.3.5MYesMasterChannel.GetNextFrame() pulls the next frame from the integrated multiplexer.
TM-66MC Demultiplexing Function4.3.6MYesPhysicalChannel.AddFrame() demultiplexes inbound frames to the correct MasterChannel by SCID.
TM-67All Frames Reception Function4.3.7MYestmsc.UnwrapCADU() handles ASM stripping and de-randomization. tmdl.DecodeTMTransferFrame() handles frame decoding.

Table A-6: Management Parameters

ItemDescriptionReferenceStatusValues AllowedSupportNotes
Managed Parameters for a Physical Channel
TM-68Physical Channel NameTable 5-1MCharacter StringYesPhysicalChannel.Name, configured at construction via NewPhysicalChannel(name, config).
TM-69Transfer Frame Length (octets)Table 5-1MIntegerYesChannelConfig.FrameLength defines the fixed frame length. Enforced by VCP (packing + idle-packet fill) and VCA (padding) during frame construction, and by the codec itself: EncodeWithConfig() and DecodeTMTransferFrameWithConfig() reject any other length with ErrFrameLengthMismatch. DataFieldCapacity() computes available data space.
TM-70Transfer Frame Version Number (TFVN)Table 5-1M'00' binaryYesPrimaryHeader.VersionNumber, enforced as 0 in Validate().
TM-71Valid Spacecraft IDsTable 5-1MIntegersYesPrimaryHeader.SpacecraftID, 10 bits (0-1023). Validated in Validate(). Configurable per frame via NewTMTransferFrame().
TM-72MC Multiplexing SchemeTable 5-1MMission SpecificYesPhysicalChannel implements weighted round-robin MC multiplexing. Priority weights configured per MasterChannel via AddMasterChannel().
TM-73Presence of Frame Error ControlTable 5-1MPresent ('1') / Absent ('0')YesConfigurable via ChannelConfig.HasFEC. The default entry points (Encode(), DecodeTMTransferFrame()) keep the field; EncodeWithConfig() / DecodeTMTransferFrameWithConfig() omit or verify it per the channel configuration, which is the Reed-Solomon case CCSDS permits.
Managed Parameters for a Master Channel
TM-74SCIDTable 5-2MIntegerYesMasterChannel.scid, configured at construction. Enforced in AddFrame().
TM-75Valid VCIDsTable 5-2MSelectable set of integers (0-7)YesPrimaryHeader.VirtualChannelID, 3 bits (0-7). MasterChannel.channels maps registered VCIDs.
TM-76VC Multiplexing SchemeTable 5-2MMission SpecificYesVirtualChannelMultiplexer implements weighted round-robin scheduling. Priority weights determine how many consecutive frames each VC can transmit before yielding. Integrated into MasterChannel.
TM-77Presence of MC_FSHTable 5-2MPresent ('1') / Absent ('0')YesPrimaryHeader.FSHFlag indicates presence. Secondary header included/excluded at frame construction.
TM-78MC_FSH Length (if present) (octets)Table 5-2MInteger (2-64)YesSecondaryHeader.HeaderLength, 6 bits (0-63). Data field length is variable.
TM-79Presence of MC_OCFTable 5-2MPresent ('1') / Absent ('0')YesPrimaryHeader.OCFFlag indicates presence. OCF included/excluded at frame construction.
Managed Parameters for a Virtual Channel
TM-80SCIDTable 5-3MIntegerYesPrimaryHeader.SpacecraftID. Set via NewTMTransferFrame().
TM-81VCIDTable 5-3M0 to 7YesPrimaryHeader.VirtualChannelID. VirtualChannel.VCID configured at construction.
TM-82Data Field ContentTable 5-3MPackets, VCA_SDUYesPrimaryHeader.SyncFlag distinguishes: 0 = packets (VCP), 1 = VCA SDUs.
TM-83Presence of VC_FSHTable 5-3MPresent ('1') / Absent ('0')YesChannelConfig.FSHDataLength > 0 makes the services emit a secondary header in every frame of the channel, which clause 4.1.2.7.2.3 requires to be static; PrimaryHeader.FSHFlag signals it on the wire.
TM-84VC_FSH Length (if present) (octets)Table 5-3MIntegerYesChannelConfig.FSHDataLength is the managed value, fixed for the channel per clause 4.1.3.1.6 and subtracted from the data field capacity by DataFieldCapacity(); SecondaryHeader.HeaderLength carries it on the wire as total-length-minus-one (clause 4.1.3.2.3.2).
TM-85Presence of VC_OCFTable 5-3MPresent ('1') / Absent ('0')YesPrimaryHeader.OCFFlag.
Managed Parameters for Packet Transfer
TM-86Valid PVNsTable 5-4MSet of IntegersYesPVN validation was removed from tmdl; the application layer is responsible for validating PVNs before passing packet data to the VCP service.
TM-87Maximum Packet Length (octets)Table 5-4MIntegerYesMaximum packet length bounded by PacketSizer (Space Packets: 65542 bytes max). Per-frame capacity derived from ChannelConfig.DataFieldCapacity(). Packets larger than one frame are automatically packed across multiple frames.
TM-88Whether incomplete Packets are required to be delivered to the user at the receiving endTable 5-4MRequired, not requiredYesPolicy: not required. VirtualChannelPacketService.Receive() delivers only complete reassembled packets. A packet left incomplete by frame loss is silently discarded when the receiver resynchronizes from the next First Header Pointer; it is never delivered and no dedicated error is raised.

Table A-7: Protocol Specification with SDLS Option

ItemDescriptionReferenceStatusSupportNotes
TM-89SDLS Protocol(see ref. [10])ONoSDLS Option not implemented.
TM-90Security Header6.3.4C3N/ASDLS Option not implemented.
TM-91Transfer Frame Data Field in a TM Frame with SDLS6.3.5C3N/ASDLS Option not implemented.
TM-92Security Trailer6.3.6C4N/ASDLS Option not implemented.
TM-93Operational Control Field in a TM Frame with SDLS6.3.7.2C3N/ASDLS Option not implemented.
TM-94Frame Error Control Field in a TM Frame with SDLS6.3.8.2C3N/ASDLS Option not implemented.
TM-95Packet Processing Function with SDLS6.4.2.2C3N/ASDLS Option not implemented.
TM-96Virtual Channel Generation Function with SDLS6.4.3.2, 6.4.3.3C3N/ASDLS Option not implemented.
TM-97Virtual Channel Multiplexing Function with SDLS6.4.4.2C3N/ASDLS Option not implemented.
TM-98Master Channel Multiplexing Function with SDLS6.4.6.2C3N/ASDLS Option not implemented.
TM-99Error reporting6.5.2.2C4N/ASDLS Option not implemented.
TM-100Packet Extraction Function with SDLS6.5.3.2C3N/ASDLS Option not implemented.
TM-101Virtual Channel Reception Function with SDLS6.5.4.2, 6.5.4.3C3N/ASDLS Option not implemented.
TM-102Virtual Channel Demultiplexing Function with SDLS6.5.5.2C3N/ASDLS Option not implemented.

C3: M if SDLS Option else N/A. C4: O if SDLS Option else N/A.

Table A-8: Additional Managed Parameters with SDLS Option

ItemDescriptionReferenceStatusValues AllowedSupportNotes
TM-103Presence of Space Data Link Security HeaderTable 6-1C5Present ('1') / Absent ('0')N/ASDLS Option not implemented.
TM-104Presence of Space Data Link Security TrailerTable 6-1C5Present ('1') / Absent ('0')N/ASDLS Option not implemented.
TM-105Length of Space Data Link Security Header (octets)Table 6-1C5Integer (see ref. [10])N/ASDLS Option not implemented.
TM-106Length of Space Data Link Security Trailer (octets)Table 6-1C5Integer (see ref. [10])N/ASDLS Option not implemented.

C5: M if SDLS Option else N/A.


A2.3 CONFORMANCE SUMMARY

Overall Statistics

CategoryTotal ItemsSupportedPartialNot Supported
Mandatory (M)787800
Optional (O)9702
Conditional (C2)2000 (N/A)
Conditional (C3)11000 (N/A)
Conditional (C4)2000 (N/A)
Conditional (C5)4000 (N/A)
Total1068502 + 19 N/A

Partially Supported Mandatory Items

None. Every mandatory item is fully supported.

The MC_FSH and MC_OCF services were the last gap. They are now master-channel level services: MasterChannel.SetFSHSupplier() and SetOCFSupplier() insert their service data units into every frame the master channel releases (the Master Channel Generation Function of clause 4.2.5), and LastFSH() / LastOCF() deliver what arrives (clause 4.3.5.2). The virtual-channel counterparts VC_FSH and VC_OCF have per-service suppliers of the same shape.

Non-Supported Optional Items

ItemDescriptionReason
TM-9Packet Quality IndicatorNot implemented. No packet quality/confidence reporting.
TM-89SDLS ProtocolSDLS Option not implemented. Planned for future phase.

Supported Optional Items

ItemDescriptionImplementation
TM-14VCA SDU Loss FlagFrameGapDetector via MasterChannel.VCFrameGap().
TM-18FSH_SDU Loss FlagFrameGapDetector via MasterChannel.MCFrameGap() / VCFrameGap().
TM-21OCF SDU Frame Loss FlagFrameGapDetector via MasterChannel.MCFrameGap() / VCFrameGap().
TM-24Frame Loss Flag (VC Frame)FrameGapDetector via MasterChannel.VCFrameGap().
TM-27FSH_SDU Loss Flag (MC)MasterChannel.MCFrameGap(), read alongside LastFSH().
TM-30OCF_SDU Loss Flag (MC)MasterChannel.MCFrameGap(), read alongside LastOCF().
TM-33Frame Loss Flag (MC Frame)FrameGapDetector via MasterChannel.MCFrameGap() / VCFrameGap().

Fully Supported Mandatory Items

All 78 mandatory items are fully supported. Key implementations:

AreaItemsImplementation
Service Data UnitsTM-1-5TMTransferFrame encode/decode, SecondaryHeader, OperationalControl.
VCP ServiceTM-6-8, TM-34-35VirtualChannelPacketService with native multi-packet packing via FHP, SPP idle-packet fill, PacketSizer-based reassembly with FHP resync on loss and idle-packet discard.
VCA ServiceTM-11-13, TM-36-37VirtualChannelAccessService with fixed SDU size enforcement, LastStatus() for status fields.
VCF ServiceTM-22-23, TM-42-43VirtualChannelFrameService with encode/decode via VirtualChannel.
VC FSH/OCF ServicesTM-16-21, TM-38-41Secondary header and OCF via NewTMTransferFrame() / DecodeTMTransferFrame(), per-channel OCF via SetOCFSupplier.
MC Frame ServiceTM-31-33, TM-48-49MasterChannel with SCID validation, AddFrame() / GetNextFrame().
Protocol Data UnitTM-50-55PrimaryHeader (48-bit), SecondaryHeader, CRC-16-CCITT.
Packet ProcessingTM-56, TM-62VCP native multi-packet packing with FHP, SPP idle-packet fill on Flush(), PacketSizer-based extraction with FHP resync after loss and idle-packet discard.
VC FunctionsTM-57-58, TM-63-64NewTMTransferFrame(), VirtualChannelMultiplexer (weighted round-robin), MasterChannel demux by VCID.
MC FunctionsTM-59-60, TM-65-66MasterChannel.AddFrame() routes by VCID. PhysicalChannel MC mux/demux by SCID.
Physical ChannelTM-61, TM-67-69, TM-72PhysicalChannel with MC mux/demux, Name, ChannelConfig.FrameLength (codec-enforced), MC multiplexing scheme, and conformant OID frames (PN-filled, packet-carrying VCID, counter-stamped, deterministic SCID). CADU wrapping (ASM + randomization) handled by tmsc package.
Management ParamsTM-70-88TFVN enforced, SCID/VCID validated, SyncFlag, FSHFlag, OCFFlag, configurable FECF presence, complete packet delivery.