https://github.com/dtn7/dtn7-go
Delay-tolerant networking software suite, Bundle Protocol Version 7
https://github.com/dtn7/dtn7-go
bundle-protocol delay-tolerant-network dtn dtn7 rfc9171
Last synced: 5 months ago
JSON representation
Delay-tolerant networking software suite, Bundle Protocol Version 7
- Host: GitHub
- URL: https://github.com/dtn7/dtn7-go
- Owner: dtn7
- License: other
- Created: 2023-06-19T13:08:01.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-11-06T22:49:20.000Z (7 months ago)
- Last Synced: 2025-11-07T00:20:52.526Z (7 months ago)
- Topics: bundle-protocol, delay-tolerant-network, dtn, dtn7, rfc9171
- Language: Go
- Homepage: https://dtn7.github.io
- Size: 294 KB
- Stars: 21
- Watchers: 2
- Forks: 5
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-dtn - dtn7-go - Delay-tolerant networking software suite (Bundle Protocol Version 7 - RFC 9171)
README
# dtn7-go
[](https://pkg.go.dev/github.com/dtn7/dtn7-go)
Delay-Tolerant Networking software suite and library based on the Bundle Protocol Version 7 ([RFC 9171](https://datatracker.ietf.org/doc/html/rfc9171)).
### Convergence Layer
A *convergence layer* in bundle protocol parlance is the abstraction for peer-to-peer communication.
We have implemented the following protocols:
- Minimal TCP Convergence-Layer Protocol (`mtcp`) ([draft-ietf-dtn-mtcpcl-01](https://tools.ietf.org/html/draft-ietf-dtn-mtcpcl-01)) (RFC draft expired)
- QUIC Convergence Layer (QUICL) (Custom, not (yet) standardised)
## Software
### Installation
Install the [Go programming language](https://go.dev/), version 1.24 or later.
```bash
git clone https://github.com/dtn7/dtn7-go.git
cd dtn7-go
go build ./cmd/dtnd
go build ./cmd/dtnclient
```
### dtnd
`dtnd` is a delay-tolerant networking daemon.
It acts as a node in the network and can transmit, receive and forward bundles to other nodes.
A node's neighbours may be specified in the configuration or detected within the local network through a peer discovery.
Bundles might be sent and received through a REST-like web interface.
The features and configuration are described inside the provided example [`configuration.toml`](https://github.com/dtn7/dtn7-go/blob/master/cmd/dtnd/configuration.toml).
#### Application Agents
We provide different interfaces to allow communication from external programs with `dtnd`.
A REST API and an API based on UNIX domain sockets.
The REST API allows a client to register itself with an address, receive bundles and create/dispatch new ones simply by POSTing JSON objects to `dtnd`'s RESTful HTTP server.
The endpoints and structure of the JSON objects are described in the [documentation](https://pkg.go.dev/github.com/dtn7/dtn7-go) for the `github.com/dtn7/dtn7-go/agent.RestAgent` type.
The UNIX API is meant to be somewhat simpler and faster than the HTTP-based alternatives.
The message formats are described in `pkg/application_agent/unix_agent/messages.go` type.
Messages are to be marshaled using the [msgpack](https://github.com/vmihailenco/msgpack) format.
The communication protocol is very simple - first send the length of the message (encoded as a uint64, big endian), and then send the message.
### dtnclient
`dtnclient` is a cli for interacting with `dtnd` via the UNIX application agent.
For usage see `dtnclient -h`.
## Go Library
Most components of this software are usable as a Go library.
Those libraries are available within the `pkg`-directory.
For example, the `bpv7`-package contains code for bundle modification, serialization and deserialization and would most likely be the most interesting part.
## Contributing
We warmly welcome any contribution.
Please format your code using [Gofmt](https://blog.golang.org/gofmt).
Further inspection of the code via [golangci-lint](https://github.com/golangci/golangci-lint) is highly recommended.
As a development environment, you may, of course, use whatever you personally like best.
However, we have had a good experience with [GoLand](https://www.jetbrains.com/go/), especially because of the size of the project.
Assuming you have a supported version of the [Go programming language](https://go.dev/) installed, just clone the repository and install the dependencies as documented in the _Installation, From Source_ section above.
### OS-specific
#### macOS
Installing Go via [homebrew](https://brew.sh), should solve permission errors while trying to fetch the dependencies.
## License
This project's code is licensed under the [GNU General Public License version 3 (_GPL-3.0-or-later_)](LICENSE).
## Acknowledging this work
If you use this software in a scientific publication, please cite the following papers:
```BibTeX
@inproceedings{penning2019dtn,
title = {DTN7: An Open-Source Disruption-Tolerant Networking Implementation of Bundle Protocol 7},
author = {Penning, Alvar and Baumgärtner, Lars and Höchst, Jonas and Sterz, Artur and Mezini, Mira and Freisleben, Bernd},
year = 2019,
booktitle = {Ad-Hoc, Mobile, and Wireless Networks},
publisher = {Springer International Publishing},
address = {Cham},
pages = {196--209},
isbn = {978-3-030-31831-4},
editor = {Palattella, Maria Rita and Scanzio, Stefano and Coleri Ergen, Sinem},
}
@article{sommer2025quicl,
title = {QUICL: Disruption-tolerant networking via a QUIC convergence layer},
author = {Markus Sommer and Artur Sterz and Markus Vogelbacher and Hicham Bellafkir and Bernd Freisleben},
year = 2025,
journal = {Computer Communications},
volume = 241,
pages = 108247,
doi = {https://doi.org/10.1016/j.comcom.2025.108247},
issn = {0140-3664},
url = {https://www.sciencedirect.com/science/article/pii/S014036642500204X},
keywords = {Disruption-tolerant networks, QUIC, Go},
}
```