Exploring Delay Tolerant Networks
An experimental fork of µD3TN focused on the creation of a frugal delay tolerant network.
Note: This is a fork of original µD3TN released on https://gitlab.com/d3tn/ud3tn. This fork is implementing custom routing algorithms and experimental features that doesn't need to be merged to the main codebase.
Make sure you have necessary tools for C building, python3, pip and python libraries cbor installed globally
On debian :
apt get install build-essential python3 python3-pip python3-cbor
Clone this repository (with optional --depth 1 parameter for smaller repository size)
git clone https://github.com/EpicKiwi/archipel-core.git --depth 1 --recurse-submodulesChoose your routing algorithm by defining ROUTING environement variable (see next section).
Build
ROUTING=legacy make posixInstall (as root)
make install-posixArchipel core is now installed on your machine.
Archipel core support multiple routing algorithm. Choosing a routing algorithm depends of your use case and how much other nodes you will meet.
ROUTING=legacy Routing algorithm firstly implemented in ud3tn.
It will forward bundle if destination matches a currently connected node or if this node can reach bundle destination regardless of distance.
There is no wildcard forwarding or default forwarding in this routing algorithm.
ROUTING=epidemic Every bundle is forwarded to every new contact connected.
This is basic floody way of routing bundle.
Efficient on very small network but puts heavy load on larg networks.
This section describes node configuration for a system-wide process. In this scenario, you'll have an archipel-core process running in background on startup.
Prefer this scenario if you want to build a headless node. But use the next section procedure if you plan to let user control their own node.
Configure your node by copying default-conf.env to /etc/archipel-core/conf.env (as root)
mkdir -p /etc/archipel-core
cp default-conf.env /etc/archipel-core/conf.envEdit /etc/archipel-core/conf.env and change NODE_ID for your own name on the network (as root)
Start system-wide service (as root)
systemctl start archipel-coreEnable this service to start archipel core on boot
systemctl enable archipel-coreArchipel core is now configured and will start at boot time.
IPC socket is present on /run/archipel-core/archipel-core.socket
This section describes node configuration for each user with their own process and node. In this scenario, a node is startd on user-session opening and will shut down on session close.
This scenario is helpful to allow user control their very own node node on the network. It also run process as the current user and allow Archipel Core to use user resources such as removabled drives (archipel-file-carrier).
Configure your node by copying default-conf.env to ~/.config/archipel-core/conf.env
mkdir -p ~/.config/archipel-core
cp default-conf.env ~/.config/archipel-core/conf.envEdit ~/.config/archipel-core/conf.env and change NODE_ID for your own name on the network
Start user service
systemctl start --user archipel-coreEnable this service to start it on user session opening
systemctl enable --user archipel-coreIPC socket is present on /run/user/[user uid]/archipel-core/archipel-core.socket
Configure neighbour discovery by installing archipel-ipbeacon
Use USB drives to transmit bundle with archipel-file-carrier
Add a new remote if you don't have any
git remote add ud3tn "https://gitlab.com/d3tn/ud3tn.git"
Go on the ud3tn and pull master branch from µD3TN repository
git checkout ud3tn
git pull ud3tn master
Don't forget to pull the result on this repository
git push origin ud3tn
Here are some others experiments and projects around DTN and Archipel Core
- archipel-ipbeacon Neighbour discovery
- archipel-file-carrier Use USB drives to transmit bundles
- ud3tn-aap Rust implementation of ud3tn's aap protocol