An implementation of the QUIC protocol as a library for the core Flight System, replacing SDLS and/or CryptoLib. This repo provides a working demo of the library as a Docker container.
ℹ️ To use spaceQUIC standalone in an existing cFS project, take the library from
/code/libs/space_quic
.
Running the container requires setting kernel parameters (--sysctl
) and ulimits (--ulimit
) which do not work on the Mac OS Docker host.
The container is currently untested on the Windows host; Linux is recommended.
To build natively, ensure the requirements for each of the following is met:
The following instructions assume the use of Docker for building dependencies and compiling cFS. See the Dockerfile for the full build process.
Clone the repo:
git clone --recurse-submodules https://github.com/ssloxford/spaceQUIC.git
cd spaceQUIC
ℹ️ Make sure to use the
--recurse-submodules
flag, or dependencies will be missing.
Build the container:
./build.sh
Generate a self-signed TLS certificate and key:
mkdir cert
cd cert
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out certificate.crt -keyout private.key
ℹ️ To change the certificate/key location: Modify the certificate info in
/code/libs/space_quic/fsw/src/quic/serv.c
.
Run cFS and the benchmark ground system:
./run-interactive.sh
cd /code/build/exe/cpu1
./core-cpu1 &
cd /code/build/tools/benchmark
./benchmark
Run cFS only:
./run-sat.sh
Run the benchmark ground system only:
./run-ground.sh
Run the container with an interactive shell:
./run-interactive.sh
ℹ️ To run the ground system in a separate container/machine: Modify the
CFS_HOST
IP address in/code/tools/benchmark/benchmark.c
.
Code is provided as-is, as a starting point for future work. This project is no longer actively maintained, but pull requests for bug fixes and new features are welcomed. We will try to review any pull requests in a timely manner.
The following features have not yet been implemented:
- cFS with QUIC running in Docker
- CLI ground system
- Easier OpenSSL/WolfSSL switch
- Custom certificate/key files
- Remove hardcoded paths from build process (particularly
CMakeLists.txt
files)