No description
Find a file
Felix Walter ca0ffd2ef4 doc: Add white background with some spacing to SVG figures
This improves their appearance and readability in dark mode.

Signed-off-by: Felix Walter <felix.walter@d3tn.com>
2024-11-16 12:01:22 +01:00
.gitlab/merge_request_templates Add merge request template and contribution guidelines 2024-06-03 13:10:58 +02:00
components aap2_agent: Extend liveliness check to improve TCP support 2024-11-04 17:00:44 +01:00
doc doc: Add white background with some spacing to SVG figures 2024-11-16 12:01:22 +01:00
dockerfiles cla_sqlite: Add SQLite-based storage CLA skeleton 2024-06-03 13:41:58 +02:00
external external/checkpatch: Import new version from linux v6.10 2024-09-11 10:10:43 +02:00
generated Refactor FIB: Separate node entry from CLA link 2024-08-23 11:59:02 +02:00
include bundle7: Limit allowed values for bundle block type and fix assertion 2024-10-22 09:44:55 +02:00
mk Re-integrate v0.13.0 routing code as "integrated default BDM" 2024-07-15 00:46:14 +02:00
nix Merge branch 'feature/mkdocs' 2024-11-15 13:06:32 +01:00
pyd3tn Bump version to v0.14.1 2024-10-28 09:47:24 +01:00
python-ud3tn-utils Merge branch 'feature/mkdocs' 2024-11-15 13:06:32 +01:00
test test/run_hdtn_test: Increase timeout and prevent unbound var 2024-10-22 11:39:34 +02:00
tools tools, mk: clang-{check,tidy}: Simplify invocation, add missing dirs 2024-09-11 10:10:43 +02:00
.dockerignore Reuse working directory files in uD3TN Dockerfile and add dockerignore 2021-01-12 14:35:29 +01:00
.gitignore doc: Add MkDocs skeleton 2024-10-16 13:58:40 +02:00
.gitlab-ci.yml Merge branch 'feature/mkdocs' 2024-11-15 13:06:32 +01:00
.gitmodules Add AAP 2.0 component stub with Protobuf support via Nanopb 2023-11-08 15:11:52 +01:00
CHANGELOG Update CHANGELOG for v0.14.1 2024-10-28 09:46:55 +01:00
config.mk.example cmdline: Documentation fixes related to AAP v1 arguments 2024-10-02 07:49:46 +02: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 flake.lock: Update 2024-07-17 11:17:39 +02:00
flake.nix doc: Add MkDocs skeleton 2024-10-16 13:58:40 +02: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 tools, mk: clang-{check,tidy}: Simplify invocation, add missing dirs 2024-09-11 10:10:43 +02:00
mkdocs.yaml doc, README: Move "build and run" instructions to documentation 2024-11-16 12:01:22 +01:00
NOTICE Update NOTICE to new licensing scheme 2024-06-03 13:11:28 +02:00
README.md doc, README: Move "build and run" instructions to documentation 2024-11-16 12:01:22 +01: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:

  • GNU make, gcc, binutils
  • the sqlite development package

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:

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.8), 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 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. 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.