CCSDS Space Packet / USDLP Transport Layer GSoC '21 Final Report

Sidharth's Report for GSoC 21 at LibreCube Initiative

This project implements the CCSDS (Consultative Committee for Space Data Systems) recommended protocol USDLP (Unified Space Data Link Protocol).

💡About the project

CCSDS

CCSDS (Consultative Committee for Space Data Systems) was founded in 1982 by various space agencies to discuss and standardize space data and information systems. They have designed specifications for space communications that are being implemented and used by several space agencies worldwide.

Space Packet Protocol

Space packets are fixed-length data units analogous to the IP packets. It contains fields such as the APID (Application process identifier) to identify the contents and source of the packet. The Space Packet Protocol defines methods to insert and extract data from space packets.

USDLP

Based on the OSI model [^1], the CCSDS has specifications for various layers in their networking stack. The Data Link Layer is one such layer that is responsible for data transfer between 2 connected entities. Errors that may occur in the Physical Layer are detected (also corrected) in this layer. Relationship with OSI Layers Currently, most space communication systems use the TM/TC and AOS [^2] protocols in the data link layer. Each of them provides the capability to transfer various types of data for different purposes. The USDLP is a configurable and relatively new data link layer protocol from CCSDS that unifies all the other data link layer protocols. There are limited implementations of this protocol available right now. My work this summer for Google Summer of Code 2021 at LibreCube Initiative was to implement the USDLP protocol in python.

Overview of USDLP

This protocol provides several services to transfer data units over a space link. These data units are known as the USLP Transfer Frames. Each transfer frame has fields such as the primary header, the transfer frame data zone, the operational control field and the frame error control field. Each of these serves different purposes. For example, the primary header holds several data indicating the type of data the frame is carrying, instructions to decode the frame's contents, length of the frame, etc. The protocol also defines methods from both the sender and receiver's sides. On the sender's side, CCSDS has defined methods to add data into the transfer frames and to multiplex the frames into different channels before sending them to the next layer. Similarly, on the receiver's side, we have methods to demultiplex the incoming stream of bytes and extract the transfer frames and data from the frames if there is no error [^3].

Here is a complete flowchart of the entire USDLP specification from both the sender and receiver sides. USLP procedures at the sender's end USLP procedures at the receiver's end

✅What's done!

Space Packet Protocol

DescriptionLinks
Added encode and decode functionality by packing fields together and bitshiftingfeat: add encode and decode functions
Added example to send a single packet using UDP as transportfeat: added simple udp server side
Added support for secondary headerfeat: add secondary header

USDLP

DescriptionLinks
Added MAPP Service, Virtual Channel and Master Channel generation, reception, multiplexing and demultiplexingfeat: add uslp machine

Other Contributions

DescriptionLinks
Added TM/TC and USLP Frame and Packet classes using the construct library as it is more readable than bit-shifting.feat: add tctf, encode in spp and tmtf feat: add uslp frame
Added SPP transport test for CFDPtest: add spp transport test
Added Virtual Channel Generation for TM protocolfeat: add vc channel generator for space packets
Also helped in setting up the ci/cd pipeline to automatically publish packages from the master branch to PyPi.python-cfdp python-sle

👨‍💻What's left? / What's next?

The current USDLP implementation is not complete. As of now, it allows for transfer using the MAP Packet service. Here is a list of things to implement in the future:

  • Other MAP services such as the octet stream and access service.
  • Communications Operation Procedure Management service
  • Transfer Frame Insert Zone Support and service.
  • USLP Master Channel Operational Control Field service.
  • Frame Error Control Field 32 bit coding procedure.
  • Demonstration example of USLP.

⭐Acknowledgements

This project would not have been possible without the guidance of my mentors Artur Scholz and Milenko Starcik. I would also like to thank Shayan Majumder and Sarah Quehl for assisting me throughout the programme. I am grateful to LibreCube and GSoC for giving me this opportunity.

Ciao! GSoC x LibreCube

[^1]: The Open Systems Interconnection (OSI) model is an architectural framework for inter-computer communications. [^2]: Telemetry/Telecommand and the Advanced Orbiting Systems protocols. CCSDS Space Data Link Protocols - Greenbook [^3]: Errors in the frame are detected using the frame error control field which is the Cyclic Redundancy Check value computed from the rest of the frame.

Did you find this article valuable?

Support shambu2k's blog by becoming a sponsor. Any amount is appreciated!