Skip to content

umr-ds/dtn7-go

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dtn7-go

PkgGoDev

Delay-Tolerant Networking software suite and library based on the Bundle Protocol Version 7 (RFC 9171).

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) (RFC draft expired)
  • QUIC Convergence Layer (QUICL) (Custom, not (yet) standardised)

Software

Installation

Install the Go programming language, version 1.24 or later.

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.

Application Agents

We provide different interfaces to allow communication from external programs with dtnd. A REST API, a WebSocket 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 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 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. Further inspection of the code via 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, especially because of the size of the project.

Assuming you have a supported version of the Go programming language 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, 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).

About

Delay-tolerant networking software suite, Bundle Protocol Version 7

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%