DTN controller and policy language for satellite networks
OCaml 95.5%
Perl 0.9%
Dune 0.8%
Standard ML 0.4%
Other 2.5%
10 1 0

Clone this repository

https://tangled.org/gazagnaire.org/borealis https://tangled.org/did:plc:jhift2vwcxhou52p3sewcrpx/borealis
git@git.recoil.org:gazagnaire.org/borealis git@git.recoil.org:did:plc:jhift2vwcxhou52p3sewcrpx/borealis

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Borealis#

DTN daemon with policy DSL for software-defined satellite networking.

Overview#

Borealis is a Delay-Tolerant Networking daemon with an embedded policy language (borealis-policy) for software-defined satellite networking. It provides:

  • Multi-tenant isolation via X.509 certificate-based resource delegation
  • Contact Graph Routing for time-varying satellite topologies
  • DTN-native control using admin bundles (no gRPC complexity)
  • Policy DSL for declarative routing and custody decisions

Architecture#

+------------------------------------------+
|       borealis-policy (compiled)         |
+------------------------------------------+
|             borealis daemon              |
|  +--------+  +--------+  +-----------+   |
|  | Bundle |  | CGR    |  | Admin     |   |
|  | Store  |  | Engine |  | Bundles   |   |
|  +--------+  +--------+  +-----------+   |
+------------------------------------------+
|      Convergence Layer Adapters          |
|  +-------+  +-----+  +-------+           |
|  | TCPCL |  | LTP |  | UDP   |           |
|  +-------+  +-----+  +-------+           |
+------------------------------------------+

Installation#

opam install borealis

Usage#

Running the Daemon#

# Start borealis with a config file
borealis run --config /etc/borealis/config.yaml

# Start with verbose logging
borealis run -vvv --config config.yaml

Control CLI#

# Show daemon status
borealis status

# Deploy a policy
borealis policy deploy policy.bp

# Update contact plan
borealis contacts update contacts.json

# List stored bundles
borealis bundles list

Policy DSL#

Borealis includes an embedded policy language for declarative routing:

(* Multi-tenant policy example *)
let policy =
  match_tenant "operator:imaging" (
    if_priority Expedited then
      forward ~custody:true via:ISL
    else
      store ~until:ground_contact
  ) @@
  match_tenant "operator:comms" (
    forward_immediate
  ) @@
  default (drop "unknown tenant")

Multi-Tenant Resource Delegation#

Uses ocaml-delegation for X.509 certificate-based hierarchical resource allocation:

Root CA (Mission Operator)
├── Operator Cert (100 bundles/sec, 1GB storage)
│   ├── Tenant A Cert (imaging: 50 bundles/sec, 500MB)
│   └── Tenant B Cert (comms: 30 bundles/sec, 200MB)

DTN-Native Control#

Control messages use Bundle Protocol administrative records rather than gRPC:

  • Single protocol for control and data
  • Store-and-forward tolerant
  • BPSec for authentication
  • CBOR-encoded, compact
  • ION - NASA's DTN implementation in C
  • HDTN - NASA's High-rate DTN in C++
  • µD3TN - Lightweight DTN implementation
  • Albatross - Unikernel orchestrator (inspiration for delegation model)

Borealis differs by:

  • Pure OCaml with minimal dependencies
  • Embedded policy DSL for software-defined networking
  • X.509-based multi-tenant resource delegation
  • DTN-native control plane (no gRPC)

License#

ISC License. See LICENSE.md.