Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 29 days 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 (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-04-05T19:25:35.000Z (8 months ago)
- Last Synced: 2024-08-03T21:02:02.876Z (4 months ago)
- Topics: bundle-protocol, delay-tolerant-network, dtn, dtn7, rfc9171
- Language: Go
- Homepage: https://dtn7.github.io
- Size: 251 KB
- Stars: 4
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
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
[![PkgGoDev](https://pkg.go.dev/badge/github.com/dtn7/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
### InstallationInstall the [Go programming language](https://go.dev/), version 1.22 or later.
```bash
git clone https://github.com/dtn7/dtn7-go.git
cd dtn7-gogo build ./cmd/dtnd
```### 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).#### REST API
We provide different interfaces to allow communication from external programs with `dtnd`.
More precisely: a REST API and a WebSocket API.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.## 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).