No description
Find a file
Felix Walter af197bca1b aap2.proto: Mention that creation timestamp and seqnum are ignored
When sending bundles, this is not implemented atm.

See: #274

Signed-off-by: Felix Walter <felix.walter@d3tn.com>
2026-05-12 11:48:17 +02:00
.gitlab/merge_request_templates MR template: Add note on extending the CHANGELOG.md file 2025-12-12 11:10:36 +01:00
components aap2.proto: Mention that creation timestamp and seqnum are ignored 2026-05-12 11:48:17 +02:00
doc nix: Remove default app from flake 2026-01-08 16:01:47 +01:00
dockerfiles fix: Added jansson dependency in dockerfile ud3tn 2026-04-30 10:04:31 +02:00
external Bump tinycbor dependency to v0.6.1 2025-06-05 08:55:07 +02:00
generated Implement status report support in AAP 2.0 2025-06-05 17:13:17 +02:00
include Pass timestamps in status reports 2026-03-19 19:22:45 +01:00
mk mk: Only build necessary tinycbor files 2026-04-21 11:25:11 +02:00
nix nix: Use nixfmt formatter 2026-01-08 16:01:47 +01:00
pyd3tn python: Implement 3-element ipn EID format 2026-02-03 09:22:53 +01:00
python-ud3tn-utils python-d3tn-utils: Add tool to track FIB changes 2026-03-23 08:36:16 +01:00
test aap2sendfile: Define _POSIX_C_SOURCE before including anything else 2026-04-21 10:58:33 +02:00
tools tools: Implement tool to send a bundle via MTCP 2025-08-29 14:51:50 +02:00
.dockerignore Reuse working directory files in uD3TN Dockerfile and add dockerignore 2021-01-12 14:35:29 +01:00
.gitignore .gitignore: Ignore files created for/by AI coding tools 2025-07-09 14:03:48 +02:00
.gitlab-ci.yml .gitlab-ci.yml: Enable MR pipelines 2026-05-05 13:56:54 +02:00
.gitmodules Add AAP 2.0 component stub with Protobuf support via Nanopb 2023-11-08 15:11:52 +01:00
CHANGELOG.md Update CHANGELOG 2026-03-23 08:36:16 +01:00
config.mk.example config.mk.example: Remove wrong comment 2026-03-19 18:58:07 +01:00
CONTRIBUTING.md Add merge request template and contribution guidelines 2024-06-03 13:10:58 +02:00
DCO.txt Add CONTRIBUTING.md and DCO.txt 2020-11-14 12:01:02 +01:00
flake.lock chore: Bump nixos-25.11 2026-01-08 16:01:47 +01:00
flake.nix nix: Use nixfmt formatter 2026-01-08 16:01:47 +01:00
LICENSE Update whole-package license to AGPLv3 and add contribution info 2024-06-03 13:10:58 +02:00
LICENSE.Apache-2.0 Update license to BSD-3-Clause OR Apache-2.0 2022-02-19 23:33:37 +01:00
Makefile Makefile: Drop recursive invocation 2026-04-21 10:48:21 +02:00
mkdocs.yaml doc: Add page documenting Link+Contact config. and CLA addresses 2025-07-24 09:06:50 +02:00
NOTICE Update NOTICE to new licensing scheme 2024-06-03 13:11:28 +02:00
README.md README: Add package names for common distros and what Nix is 2025-09-01 12:07:34 +02:00

About

µD3TN (pronounced "Micro-Dee-Tee-En") is a free, lean, and space-tested DTN protocol implementation running on POSIX (plus Linux ;-)). Though µD3TN is easily portable to further platforms, we currently only support POSIX-compliant systems (former versions also included support for STM32/FreeRTOS platforms).

µD3TN's documentation can be found here: https://d3tn.gitlab.io/ud3tn/

For quickly getting up to speed, check out our Quick Start Guide!

A general introduction of µD3TN is available on its project web site at https://d3tn.com/ud3tn.html and in our video series on YouTube.

What does µD3TN provide?

µD3TN currently implements:

Pre-compiled binaries

We provide pre-compiled Docker images in the GitLab Docker registry. Refer to https://gitlab.com/d3tn/ud3tn-docker-images/ for more information.

Usage

A comprehensive step-by-step tutorial for Linux and POSIX systems is included in the documentation. It covers a complete scenario in which two µD3TN instances create a small two-node DTN and external applications leverage the latter to exchange data.

The build process and runtime options of µD3TN are outlined on a dedicated documentation page

Dependencies:

  • Git
  • GNU make, gcc, binutils
  • the sqlite and jansson development packages

Examples for common distributions:

# Debian / Ubuntu
[sudo] apt install git build-essential libsqlite3-dev libjansson-dev
# Fedora
[sudo] dnf install git make gcc sqlite-devel jansson-devel
# Arch Linux / Manjaro
[sudo] pacman -Sy git base-devel sqlite jansson

Obtain the code:

# Do not forget --recursive to initialize all Git submodules!
git clone --recursive https://gitlab.com/d3tn/ud3tn.git

Build and run without Nix:

# Build uD3TN with 8 threads in parallel (default options).
make posix -j8
# Execute the binary directly with the -h argument to get usage instructions.
build/posix/ud3tn -h
# Run uD3TN with the default options.
# Can also be used without the previous build command and will build missing parts.
make run-posix

Optimized release build:

# Remove binaries and object files built previously when changing the build configuration.
make clean
# Release build
make posix type=release optimize=yes

Build with Nix:

Alternatively to installing everything manually, Nix can be used, which automatically takes care of providing the correct (pinned) dependencies and a working development environment.

nix --experimental-features 'nix-command flakes' build '.?submodules=1#ud3tn'

Nix development environment:

nix --experimental-features 'nix-command flakes' develop '.?submodules=1'

For more details, see the documentation page on building and running µD3TN.

Test

The µD3TN development is accompanied by extensive testing. For this purpose, you should install gdb and a recent version of Python 3 (>= 3.9), plus the, venv and pip packages for your Python version. Our test suite covering static analysis, unit, and integration tests is documented in the Testing Guide.

Contribute

Contributions in any form (e.g., bug reports, feature, or merge requests) are very welcome! Please have a look at CONTRIBUTING.md first for a smooth experience. The project structure is organized as follows:

.
├── components             C source code
├── doc                    documentation
├── dockerfiles            Templates for creating Docker images
├── external               3rd party source code
├── generated              generated source code (e.g. for Protobuf)
├── include                C header files
├── mk                     make scripts
├── nix                    nix derivations, modules and tests
├── pyd3tn                 Python implementation of several DTN protocols
├── python-ud3tn-utils     Python bindings for AAP
├── test                   various test routines
└── tools                  various utility scripts

The entry point is implemented in components/daemon/main.c.

License

This work is licensed as a whole under the GNU Affero General Public License v3.0, with some parts and components being licensed under the BSD 3-Clause, Apache 2.0, MIT, zLib, and GPL v2.0 licenses. This licensing scheme is applied since early 2024, after the release of version v0.13.0 under the Apache 2.0 and BSD 3-Clause licenses.

All code files, except those under the external/ directory tree, contain an SPDX license identifier at the top, to indicate the license that applies to the specific file. Specifically, the Python libraries and tools as well as Protobuf definitions necessary to build clients remain under the permissive license without copyleft. The external libraries shipped with µD3TN and contained in external/ are subject to their own licenses, documented in LICENSE-3RD-PARTY.txt.

SPDX-License-Identifier: AGPL-3.0-or-later

Ecosystem

  • ud3tn-utils is a Python package that provides bindings for µD3TN's Application Agent Protocol and Application Agent Protocol v2.
  • aap.lua is a Wireshark dissector for µD3TN's Application Agent Protocol. It can be installed by copying it into one of the Lua script folders listed in the Wireshark GUI at Help > About Wireshark > Folders.
  • pyD3TN is a Python package that provides implementations of several DTN related RFCs.
  • aiodtnsim is a minimal framework for performing DTN simulations based on Python 3.7 and asyncio.
  • dtn-tvg-util is a Python package simplifying the analysis and simulation of DTNs based on time-varying network graphs.

See also

  • µD3TN's web documentation
  • RFC 4838 for a general introduction about DTN networks.
  • ION: NASA's (JPL) bundle protocol implementation that has been successfully demonstrated to be interoperable with µD3TN.
  • HDTN: NASA's performance optimized implementation of the DTN standard.
  • DTN7-rs: Rust implementation of a disruption-tolerant networking (DTN) daemon for the Bundle Protocol version 7 - RFC9171.