mirror of
https://gitlab.com/d3tn/ud3tn.git
synced 2026-08-20 13:28:22 +02:00
This adds a function to decode JSON configuration via Jansson to the router agent. The JSON functionality and, thus, the dependency on Jansson, can be disabled during the build process by setting the `DISABLE_JSON` compile-time flag (see `config.mk.example` for details). Signed-off-by: Felix Walter <felix.walter@d3tn.com>
132 lines
7.1 KiB
Markdown
132 lines
7.1 KiB
Markdown
## 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/**](https://d3tn.gitlab.io/ud3tn/)
|
|
|
|
For quickly getting up to speed, check out our [**Quick Start Guide**](https://d3tn.gitlab.io/ud3tn/posix_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](https://www.youtube.com/watch?v=ETs_BgazRJI&list=PLED8xrzySss-B2966X98dwLLb1BJQu6Ua).
|
|
|
|
### What does µD3TN provide?
|
|
|
|
µD3TN currently implements:
|
|
|
|
- Bundle Protocol version 6 ([RFC 5050](https://datatracker.ietf.org/doc/html/rfc5050)),
|
|
- Bundle Protocol version 7 ([RFC 9171](https://datatracker.ietf.org/doc/html/rfc9171)),
|
|
- several Bundle Protocol convergence layers, such as:
|
|
- MTCP ([draft version 0](https://datatracker.ietf.org/doc/html/draft-ietf-dtn-mtcpcl-00)),
|
|
- TCPCLv3 ([RFC 7242](https://datatracker.ietf.org/doc/html/rfc7242)),
|
|
- CCSDS Space Packet Protocol ([SPP](https://public.ccsds.org/Pubs/133x0b2e1.pdf)),
|
|
- BIBE ([draft version 3](https://datatracker.ietf.org/doc/html/draft-ietf-dtn-bibect-03), see [doc/Bundle-in-Bundle Encapsulation_(BIBE).md](doc/Bundle-in-Bundle Encapsulation_(BIBE).md)),
|
|
- a persistent storage backend based on SQLite (see [doc/sqlite-storage.md](doc/sqlite-storage.md)).
|
|
|
|
## Pre-compiled binaries
|
|
|
|
We provide pre-compiled Docker images in the [GitLab Docker registry](https://gitlab.com/d3tn/ud3tn-docker-images/container_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](https://d3tn.gitlab.io/ud3tn/posix_quick_start_guide/). 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**](https://d3tn.gitlab.io/ud3tn/usage/build-and-run/)
|
|
|
|
**Dependencies:**
|
|
|
|
- GNU `make`, `gcc`, `binutils`
|
|
- the `sqlite` and `jansson` development packages
|
|
|
|
**Obtain the code:**
|
|
|
|
```sh
|
|
# Do not forget --recursive to initialize all Git submodules!
|
|
git clone --recursive https://gitlab.com/d3tn/ud3tn.git
|
|
```
|
|
|
|
**Build and run without Nix:**
|
|
|
|
```sh
|
|
# 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:**
|
|
|
|
```sh
|
|
# 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](https://nixos.wiki/wiki/Nix_package_manager):**
|
|
|
|
```sh
|
|
nix --experimental-features 'nix-command flakes' build '.?submodules=1#ud3tn'
|
|
```
|
|
|
|
**Nix development environment:**
|
|
|
|
```sh
|
|
nix --experimental-features 'nix-command flakes' develop '.?submodules=1'
|
|
```
|
|
|
|
For more details, see the [documentation page on building and running µD3TN](https://d3tn.gitlab.io/ud3tn/usage/build-and-run/).
|
|
|
|
### 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](https://d3tn.gitlab.io/ud3tn/testing/).
|
|
|
|
### Contribute
|
|
|
|
Contributions in any form (e.g., bug reports, feature, or merge requests) are very welcome! Please have a look at [CONTRIBUTING.md](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`](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](https://spdx.dev/) 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`](external/LICENSE-3RD-PARTY.txt).
|
|
|
|
`SPDX-License-Identifier: AGPL-3.0-or-later`
|
|
|
|
## Ecosystem
|
|
|
|
- [`ud3tn-utils`](https://pypi.org/project/ud3tn-utils/) is a Python package that provides bindings for µD3TN's [Application Agent Protocol](doc/ud3tn_aap.md) and [Application Agent Protocol v2](doc/aap20.md).
|
|
- [`aap.lua`](tools/aap.lua) is a Wireshark dissector for µD3TN's [Application Agent Protocol](doc/ud3tn_aap.md). 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`](https://pypi.org/project/pyD3TN/) is a Python package that provides implementations of several DTN related RFCs.
|
|
- [`aiodtnsim`](https://gitlab.com/d3tn/aiodtnsim) is a minimal framework for performing DTN simulations based on Python 3.7 and asyncio.
|
|
- [`dtn-tvg-util`](https://gitlab.com/d3tn/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](https://d3tn.gitlab.io/ud3tn/)
|
|
- [RFC 4838](https://datatracker.ietf.org/doc/html/rfc4838) for a general introduction about DTN networks.
|
|
- [ION](https://github.com/nasa-jpl/ION-DTN): NASA's (JPL) bundle protocol implementation that has been successfully demonstrated to be interoperable with µD3TN.
|
|
- [HDTN](https://github.com/nasa/HDTN): NASA's performance optimized implementation of the DTN standard.
|
|
- [DTN7-rs](https://github.com/dtn7/dtn7-rs): Rust implementation of a disruption-tolerant networking (DTN) daemon for the Bundle Protocol version 7 - RFC9171.
|