Add packages for Delay and Disruption Tolerant Networkinglilik-openwrt-22.03
@ -0,0 +1,47 @@ | |||||
# | |||||
# Copyright (C) 2014 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=dtndht | |||||
PKG_VERSION:=0.2.3 | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:=http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases | |||||
PKG_MD5SUM:=37c33910ac7e760aad4db81724aeb4fb | |||||
PKG_MAINTAINER:=Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de> | |||||
PKG_LICENSE:=Apache-2.0 | |||||
PKG_INSTALL:=1 | |||||
PKG_FIXUP:=libtool | |||||
PKG_BUILD_DEPENDS:=libopenssl | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/dtndht | |||||
SECTION:=libs | |||||
CATEGORY:=Libraries | |||||
DEPENDS:=+libopenssl | |||||
TITLE:=Library for DHT lookups for DTNs | |||||
endef | |||||
define Package/dtndht/description | |||||
A library with DHT functions for DTN name lookups. | |||||
endef | |||||
define Build/InstallDev | |||||
$(INSTALL_DIR) $(1) | |||||
$(CP) $(PKG_INSTALL_DIR)/* $(1)/ | |||||
endef | |||||
define Package/dtndht/install | |||||
$(INSTALL_DIR) $(1)/usr/lib | |||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib$(PKG_NAME){.so,-$(PKG_VERSION_MAJOR).$(PKG_VERSION_MINOR).so.*} $(1)/usr/lib/ | |||||
endef | |||||
$(eval $(call BuildPackage,dtndht)) |
@ -0,0 +1,50 @@ | |||||
# | |||||
# Copyright (C) 2014 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=ibrcommon | |||||
PKG_VERSION:=0.12.1 | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:=http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases | |||||
PKG_MD5SUM:=45681f48138bbbbd17384d25dc91454a | |||||
PKG_MAINTAINER:=Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de> | |||||
PKG_LICENSE:=Apache-2.0 | |||||
PKG_INSTALL:=1 | |||||
PKG_FIXUP:=libtool | |||||
PKG_BUILD_DEPENDS:=libnl libopenssl | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/ibrcommon | |||||
SECTION:=libs | |||||
CATEGORY:=Libraries | |||||
DEPENDS:=+libstdcpp +libpthread +librt +libnl +libopenssl | |||||
TITLE:=IBR Common C++ Library | |||||
endef | |||||
CONFIGURE_ARGS += \ | |||||
--with-openssl | |||||
define Package/ibrcommon/description | |||||
A library with common functions for C++. | |||||
endef | |||||
define Build/InstallDev | |||||
$(INSTALL_DIR) $(1) | |||||
$(CP) $(PKG_INSTALL_DIR)/* $(1)/ | |||||
endef | |||||
define Package/ibrcommon/install | |||||
$(INSTALL_DIR) $(1)/usr/lib | |||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib$(PKG_NAME){.so,-$(PKG_VERSION_MAJOR).$(PKG_VERSION_MINOR).so.*} $(1)/usr/lib/ | |||||
endef | |||||
$(eval $(call BuildPackage,ibrcommon)) |
@ -0,0 +1,50 @@ | |||||
# | |||||
# Copyright (C) 2014 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=ibrdtn | |||||
PKG_VERSION:=0.12.1 | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:=http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases | |||||
PKG_MD5SUM:=96428dd4af541ea0c52db80776976a65 | |||||
PKG_MAINTAINER:=Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de> | |||||
PKG_LICENSE:=Apache-2.0 | |||||
PKG_INSTALL:=1 | |||||
PKG_FIXUP:=libtool | |||||
PKG_BUILD_DEPENDS:=ibrcommon zlib | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/ibrdtn | |||||
SECTION:=libs | |||||
CATEGORY:=Libraries | |||||
DEPENDS:=+ibrcommon +zlib | |||||
TITLE:=IBR-DTN Library | |||||
endef | |||||
define Package/ibrdtn/description | |||||
Base library for IBR-DTN daemon and tools. | |||||
endef | |||||
CONFIGURE_ARGS += \ | |||||
--with-compression | |||||
define Build/InstallDev | |||||
$(INSTALL_DIR) $(1) | |||||
$(CP) $(PKG_INSTALL_DIR)/* $(1)/ | |||||
endef | |||||
define Package/ibrdtn/install | |||||
$(INSTALL_DIR) $(1)/usr/lib | |||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib$(PKG_NAME){.so,-$(PKG_VERSION_MAJOR).$(PKG_VERSION_MINOR).so.*} $(1)/usr/lib/ | |||||
endef | |||||
$(eval $(call BuildPackage,ibrdtn)) |
@ -0,0 +1,52 @@ | |||||
# | |||||
# Copyright (C) 2014 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=libarchive | |||||
PKG_VERSION:=3.1.2 | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:=http://www.libarchive.org/downloads | |||||
PKG_MD5SUM:=efad5a503f66329bb9d2f4308b5de98a | |||||
PKG_MAINTAINER:=Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de> | |||||
PKG_LICENSE:=BSD-2-Clause | |||||
PKG_INSTALL:=1 | |||||
PKG_FIXUP:=autoreconf | |||||
PKG_BUILD_DEPENDS:=libxml2 libopenssl zlib | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/libarchive/Default | |||||
SECTION:=libs | |||||
CATEGORY:=Libraries | |||||
URL:=http://www.libarchive.org | |||||
endef | |||||
define Package/libarchive | |||||
$(call Package/libarchive/Default) | |||||
DEPENDS:=+libxml2 +libopenssl +zlib | |||||
TITLE:=Multi-format archive and compression library | |||||
endef | |||||
define Package/libarchive/description | |||||
Multi-format archive and compression library. | |||||
endef | |||||
define Build/InstallDev | |||||
$(INSTALL_DIR) $(1) | |||||
$(CP) $(PKG_INSTALL_DIR)/* $(1)/ | |||||
endef | |||||
define Package/libarchive/install | |||||
$(INSTALL_DIR) $(1)/usr/lib | |||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libarchive.so.* $(1)/usr/lib/ | |||||
endef | |||||
$(eval $(call BuildPackage,libarchive)) |
@ -0,0 +1,49 @@ | |||||
# | |||||
# Copyright (C) 2014 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=ibrdtn-tools | |||||
PKG_VERSION:=0.12.1 | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:=http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases | |||||
PKG_MD5SUM:=0ce0c6e754263919ad48661967c2f6fd | |||||
PKG_MAINTAINER:=Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de> | |||||
PKG_LICENSE:=Apache-2.0 | |||||
PKG_INSTALL:=1 | |||||
PKG_BUILD_DEPENDS:=libarchive ibrdtn | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/ibrdtn-tools | |||||
SECTION:=net | |||||
CATEGORY:=Network | |||||
DEPENDS:=+ibrdtn +libarchive | |||||
TITLE:=DTN Tools | |||||
endef | |||||
define Package/ibrdtn-tools/description | |||||
The IBR-DTN Tools include functionality for sending and receiving files (dtnsend/dtnrecv) | |||||
and a tools to ping a DTN node (dtnping). | |||||
endef | |||||
define Package/ibrdtn-tools/install | |||||
$(INSTALL_DIR) $(1)/usr/bin/ | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtnping $(1)/usr/bin/dtnping | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtnsend $(1)/usr/bin/dtnsend | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtnrecv $(1)/usr/bin/dtnrecv | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtninbox $(1)/usr/bin/dtninbox | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtnoutbox $(1)/usr/bin/dtnoutbox | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtntrigger $(1)/usr/bin/dtntrigger | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtntracepath $(1)/usr/bin/dtntracepath | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dtnstream $(1)/usr/bin/dtnstream | |||||
endef | |||||
$(eval $(call BuildPackage,ibrdtn-tools)) |
@ -0,0 +1,58 @@ | |||||
# | |||||
# Copyright (C) 2014 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=ibrdtnd | |||||
PKG_VERSION:=0.12.1 | |||||
PKG_RELEASE:=1 | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||||
PKG_SOURCE_URL:=http://www.ibr.cs.tu-bs.de/projects/ibr-dtn/releases | |||||
PKG_MD5SUM:=8dad5ebbcfaa4c16ba151c9c289066c3 | |||||
PKG_MAINTAINER:=Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de> | |||||
PKG_LICENSE:=Apache-2.0 | |||||
PKG_INSTALL:=1 | |||||
PKG_BUILD_DEPENDS:=dtndht ibrdtn libsqlite3 | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/ibrdtnd | |||||
SECTION:=net | |||||
CATEGORY:=Network | |||||
DEPENDS:=+dtndht +ibrdtn +libsqlite3 | |||||
TITLE:=DTN Deamon | |||||
endef | |||||
define Package/ibrdtnd/conffiles | |||||
/etc/config/ibrdtn | |||||
endef | |||||
define Package/ibrdtnd/description | |||||
The implementation of the bundle protocol of the IBR (TU Braunschweig). | |||||
endef | |||||
CONFIGURE_ARGS += \ | |||||
--with-tls --with-sqlite --with-dht | |||||
define Package/ibrdtnd/install | |||||
$(INSTALL_DIR) $(1)/usr/sbin/ | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dtnd $(1)/usr/sbin/ | |||||
$(INSTALL_BIN) files/safety-wrapper.sh $(1)/usr/sbin/dtnd-safety-wrapper.sh | |||||
$(INSTALL_DIR) $(1)/usr/share/ibrdtn/ | |||||
$(INSTALL_BIN) files/build-config.sh $(1)/usr/share/ibrdtn/build-config.sh | |||||
$(INSTALL_BIN) files/mkcontainer.sh $(1)/usr/share/ibrdtn/mkcontainer.sh | |||||
$(INSTALL_BIN) files/mountcontainer.sh $(1)/usr/share/ibrdtn/mountcontainer.sh | |||||
$(INSTALL_BIN) files/systemcheck.sh $(1)/usr/share/ibrdtn/systemcheck.sh | |||||
$(INSTALL_DIR) $(1)/etc/init.d/ | |||||
$(INSTALL_BIN) files/ibrdtn.init $(1)/etc/init.d/ibrdtn | |||||
$(INSTALL_DIR) $(1)/etc/config | |||||
$(INSTALL_CONF) files/ibrdtn.uci $(1)/etc/config/ibrdtn | |||||
endef | |||||
$(eval $(call BuildPackage,ibrdtnd)) |
@ -0,0 +1,168 @@ | |||||
#!/bin/sh | |||||
# | |||||
# convert uci configuration into daemon specific format | |||||
# | |||||
UCI=/sbin/uci | |||||
create_file() { | |||||
echo "# -- DO NOT EDIT THIS FILE --" > $1 | |||||
echo "# automatic generated configuration file for IBR-DTN daemon" >> $1 | |||||
echo "#" >> $1 | |||||
} | |||||
add_param() { | |||||
VALUE=`$UCI -q get $2` | |||||
if [ $? == 0 ]; then | |||||
echo "$3 = $VALUE" >> $1 | |||||
fi | |||||
} | |||||
getconfig() { | |||||
$UCI -q get ibrdtn.$1 | |||||
return $? | |||||
} | |||||
if [ "$1" == "--safe-mode" ]; then | |||||
SAFEMODE=yes | |||||
CONFFILE=$2 | |||||
else | |||||
SAFEMODE=no | |||||
CONFFILE=$1 | |||||
fi | |||||
# create the file and write some header info | |||||
create_file $CONFFILE | |||||
add_param $CONFFILE "ibrdtn.main.uri" "local_uri" | |||||
add_param $CONFFILE "ibrdtn.main.routing" "routing" | |||||
add_param $CONFFILE "ibrdtn.main.fragmentation" "fragmentation" | |||||
if [ "$SAFEMODE" == "yes" ]; then | |||||
if [ -n "`getconfig safemode.forwarding`" ]; then | |||||
add_param $CONFFILE "ibrdtn.safemode.forwarding" "routing_forwarding" | |||||
else | |||||
add_param $CONFFILE "ibrdtn.main.forwarding" "routing_forwarding" | |||||
fi | |||||
if [ -n "`getconfig safemode.maxblock`" ]; then | |||||
add_param $CONFFILE "ibrdtn.safemode.maxblock" "limit_blocksize" | |||||
else | |||||
add_param $CONFFILE "ibrdtn.main.blocksize" "limit_blocksize" | |||||
fi | |||||
if [ -n "`getconfig safemode.storage`" ]; then | |||||
add_param $CONFFILE "ibrdtn.safemode.storage" "limit_storage" | |||||
else | |||||
add_param $CONFFILE "ibrdtn.storage.limit" "limit_storage" | |||||
fi | |||||
else | |||||
add_param $CONFFILE "ibrdtn.main.forwarding" "routing_forwarding" | |||||
add_param $CONFFILE "ibrdtn.main.blocksize" "limit_blocksize" | |||||
add_param $CONFFILE "ibrdtn.storage.limit" "limit_storage" | |||||
add_param $CONFFILE "ibrdtn.storage.blobs" "blob_path" | |||||
add_param $CONFFILE "ibrdtn.storage.bundles" "storage_path" | |||||
add_param $CONFFILE "ibrdtn.storage.engine" "storage" | |||||
fi | |||||
add_param $CONFFILE "ibrdtn.main.max_predated_timestamp" "limit_predated_timestamp" | |||||
add_param $CONFFILE "ibrdtn.main.limit_lifetime" "limit_lifetime" | |||||
add_param $CONFFILE "ibrdtn.main.foreign_blocksize" "limit_foreign_blocksize" | |||||
add_param $CONFFILE "ibrdtn.discovery.address" "discovery_address" | |||||
add_param $CONFFILE "ibrdtn.discovery.timeout" "discovery_timeout" | |||||
add_param $CONFFILE "ibrdtn.discovery.version" "discovery_version" | |||||
add_param $CONFFILE "ibrdtn.discovery.crosslayer" "discovery_crosslayer" | |||||
add_param $CONFFILE "ibrdtn.tcptuning.idle_timeout" "tcp_idle_timeout" | |||||
add_param $CONFFILE "ibrdtn.tcptuning.nodelay" "tcp_nodelay" | |||||
add_param $CONFFILE "ibrdtn.tcptuning.chunksize" "tcp_chunksize" | |||||
add_param $CONFFILE "ibrdtn.security.level" "security_level" | |||||
add_param $CONFFILE "ibrdtn.security.bab_key" "security_bab_default_key" | |||||
add_param $CONFFILE "ibrdtn.security.key_path" "security_path" | |||||
add_param $CONFFILE "ibrdtn.security.generate_dh" "generate_dh_params" | |||||
add_param $CONFFILE "ibrdtn.tls.certificate" "security_certificate" | |||||
add_param $CONFFILE "ibrdtn.tls.key" "security_key" | |||||
add_param $CONFFILE "ibrdtn.tls.trustedpath" "security_trusted_ca_path" | |||||
add_param $CONFFILE "ibrdtn.tls.required" "security_tls_required" | |||||
add_param $CONFFILE "ibrdtn.tls.noencryption" "security_tls_disable_encryption" | |||||
add_param $CONFFILE "ibrdtn.tls.fallback_badclock" "security_tls_fallback_badclock" | |||||
add_param $CONFFILE "ibrdtn.timesync.reference" "time_reference" | |||||
add_param $CONFFILE "ibrdtn.timesync.synchronize" "time_synchronize" | |||||
add_param $CONFFILE "ibrdtn.timesync.discovery_announcement" "time_discovery_announcements" | |||||
add_param $CONFFILE "ibrdtn.timesync.sigma" "time_sigma" | |||||
add_param $CONFFILE "ibrdtn.timesync.psi" "time_psi" | |||||
add_param $CONFFILE "ibrdtn.timesync.sync_level" "time_sync_level" | |||||
add_param $CONFFILE "ibrdtn.timesync.time_set_clock" "time_set_clock" | |||||
add_param $CONFFILE "ibrdtn.dht.enabled" "dht_enabled" | |||||
add_param $CONFFILE "ibrdtn.dht.port" "dht_port" | |||||
add_param $CONFFILE "ibrdtn.dht.id" "dht_id" | |||||
add_param $CONFFILE "ibrdtn.dht.bootstrap" "dht_bootstrapping" | |||||
add_param $CONFFILE "ibrdtn.dht.nodesfile" "dht_nodes_file" | |||||
add_param $CONFFILE "ibrdtn.dht.enable_ipv4" "dht_enable_ipv4" | |||||
add_param $CONFFILE "ibrdtn.dht.enable_ipv6" "dht_enable_ipv6" | |||||
add_param $CONFFILE "ibrdtn.dht.bind_ipv4" "dht_bind_ipv4" | |||||
add_param $CONFFILE "ibrdtn.dht.bind_ipv6" "dht_bind_ipv6" | |||||
add_param $CONFFILE "ibrdtn.dht.ignore_neighbour_informations" "dht_ignore_neighbour_informations" | |||||
add_param $CONFFILE "ibrdtn.dht.allow_neighbours_to_announce_me" "dht_allow_neighbours_to_announce_me" | |||||
add_param $CONFFILE "ibrdtn.dht.allow_neighbour_announcement" "dht_allow_neighbour_announcement" | |||||
# iterate through all network interfaces | |||||
iter=0 | |||||
netinterfaces= | |||||
while [ 1 == 1 ]; do | |||||
$UCI -q get "ibrdtn.@network[$iter]" > /dev/null | |||||
if [ $? == 0 ]; then | |||||
netinterfaces="${netinterfaces} lan${iter}" | |||||
add_param $CONFFILE "ibrdtn.@network[$iter].type" "net_lan${iter}_type" | |||||
add_param $CONFFILE "ibrdtn.@network[$iter].interface" "net_lan${iter}_interface" | |||||
add_param $CONFFILE "ibrdtn.@network[$iter].port" "net_lan${iter}_port" | |||||
else | |||||
break | |||||
fi | |||||
let iter=iter+1 | |||||
done | |||||
# write list of network interfaces | |||||
echo "net_interfaces =$netinterfaces" >> $CONFFILE | |||||
# iterate through all static routes | |||||
iter=0 | |||||
while [ 1 == 1 ]; do | |||||
$UCI -q get "ibrdtn.@static-route[$iter]" > /dev/null | |||||
if [ $? == 0 ]; then | |||||
PATTERN=`$UCI -q get "ibrdtn.@static-route[$iter].pattern"` | |||||
DESTINATION=`$UCI -q get "ibrdtn.@static-route[$iter].destination"` | |||||
let NUMBER=iter+1 | |||||
echo "route$NUMBER = $PATTERN $DESTINATION" >> $CONFFILE | |||||
else | |||||
break | |||||
fi | |||||
let iter=iter+1 | |||||
done | |||||
#iterate through all static connections | |||||
iter=0 | |||||
while [ 1 == 1 ]; do | |||||
$UCI -q get "ibrdtn.@static-connection[$iter]" > /dev/null | |||||
if [ $? == 0 ]; then | |||||
let NUMBER=iter+1 | |||||
add_param $CONFFILE "ibrdtn.@static-connection[$iter].uri" "static${NUMBER}_uri" | |||||
add_param $CONFFILE "ibrdtn.@static-connection[$iter].address" "static${NUMBER}_address" | |||||
add_param $CONFFILE "ibrdtn.@static-connection[$iter].port" "static${NUMBER}_port" | |||||
add_param $CONFFILE "ibrdtn.@static-connection[$iter].protocol" "static${NUMBER}_proto" | |||||
add_param $CONFFILE "ibrdtn.@static-connection[$iter].immediately" "static${NUMBER}_immediately" | |||||
else | |||||
break | |||||
fi | |||||
let iter=iter+1 | |||||
done |
@ -0,0 +1,71 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
# Copyright (C) 2007 OpenWrt.org | |||||
START=90 | |||||
start() { | |||||
# check if the daemon is disabled | |||||
if [ "`/sbin/uci -P/var/state -q get ibrdtn.disable`" == "1" ]; then | |||||
/bin/echo "dtnd is disabled" | |||||
return | |||||
fi | |||||
/bin/echo -n "running dtnd ..." | |||||
# startup the safety-wrapper for the daemon | |||||
/usr/sbin/dtnd-safety-wrapper.sh & | |||||
# store the pid of the process in uci states | |||||
/sbin/uci -P/var/state -q set ibrdtn.safetypid=`echo $!` | |||||
/bin/echo " done" | |||||
} | |||||
stop() { | |||||
# check if the daemon is disabled | |||||
if [ "`/sbin/uci -P/var/state -q get ibrdtn.disable`" == "1" ]; then | |||||
/bin/echo "dtnd is disabled" | |||||
return | |||||
fi | |||||
/bin/echo -n "stopping dtnd ..." | |||||
# set state to None, this indicates a clear shutdown to the safety-wrapper. | |||||
/sbin/uci -P/var/state -q set ibrdtn.state=None | |||||
# stop the safety-wrapper | |||||
if [ -n "`/sbin/uci -P/var/state -q get ibrdtn.safetypid`" ]; then | |||||
/usr/bin/kill `/sbin/uci -P/var/state -q get ibrdtn.safetypid` 2> /dev/null >/dev/null | |||||
fi | |||||
# finally kill really all safety-wrapper! | |||||
/bin/sleep 2 | |||||
/usr/bin/killall -9 dtnd-safety-wrapper.sh | |||||
# send a kill signal to the daemon | |||||
/usr/bin/killall dtnd 2> /dev/null >/dev/null | |||||
# wait for some time | |||||
TIMEOUT=0; | |||||
# check if the daemon is running | |||||
while [ -n "`ps | grep dtnd | grep -v grep`" ]; do | |||||
# check if the daemon is still running | |||||
if [ $TIMEOUT -ge 10 ]; then | |||||
/bin/echo " killing" | |||||
# kill all processes of dtnd | |||||
/usr/bin/killall -9 dtnd 2> /dev/null >/dev/null | |||||
return | |||||
fi | |||||
# increment timeout | |||||
TIMEOUT=`expr $TIMEOUT + 1` | |||||
echo -n "." | |||||
# wait some time | |||||
/bin/sleep 1 | |||||
done | |||||
echo " done" | |||||
} |
@ -0,0 +1,175 @@ | |||||
##################################### | |||||
# IBR-DTN daemon # | |||||
##################################### | |||||
config 'daemon' 'main' | |||||
# The local eid of the dtn node. Default is the hostname. | |||||
# option uri dtn://node.dtn | |||||
# logfile for standard output | |||||
option logfile /tmp/ibrdtn.log | |||||
option errfile /tmp/ibrdtn.err | |||||
# debug level | |||||
# option debug 20 | |||||
# block size limit | |||||
# option blocksize 512M | |||||
# option foreign_blocksize 128M | |||||
# | |||||
# If something bad happened, the safe mode will be activated. | |||||
# These are the restrictions for safe mode only. | |||||
# | |||||
config 'daemon' 'safemode' | |||||
option forwarding no | |||||
option storage 64M | |||||
option maxblock 16M | |||||
# option wait_mount /dev/sda1 | |||||
##################################### | |||||
# storage configuration # | |||||
##################################### | |||||
config 'daemon' 'storage' | |||||
# possible engines are: simple, sqlite | |||||
option engine simple | |||||
option blobs /tmp/ibrdtn/blobs | |||||
option bundles /tmp/ibrdtn/bundles | |||||
# option container /tmp/ibrdtn/container.img | |||||
# option path /tmp/ibrdtn/container | |||||
# option limit 1G | |||||
##################################### | |||||
# routing configuration # | |||||
##################################### | |||||
# | |||||
# In the "default" the daemon only delivers bundles to neighbors and static | |||||
# available nodes. The alternative module "epidemic" spread all bundles to | |||||
# all available neighbors. | |||||
# | |||||
config 'daemon' 'main' | |||||
# values: none | default | epidemic | flooding | prophet | |||||
option routing prophet | |||||
# option forwarding no | |||||
# option fragmentation yes | |||||
# | |||||
# static routing rules | |||||
# - a rule is a regex pattern | |||||
# - format is <target-scheme> <routing-node> | |||||
# | |||||
#config 'static-route' | |||||
# list pattern ^dtn://[[:alpha:]].moon.dtn/[[:alpha:]] | |||||
# option destination dtn://router.dtn | |||||
##################################### | |||||
# static connections | |||||
##################################### | |||||
#config 'static-connection' | |||||
# option uri dtn://node-five.dtn | |||||
# option address 10.0.0.5 | |||||
# option port 4556 | |||||
# option protocol tcp | |||||
# option immediately yes | |||||
#config 'static-connection' | |||||
# option uri dtn://node-ten | |||||
# option address 10.0.0.10 | |||||
# option port 4556 | |||||
# option protocol udp | |||||
# option immediately no | |||||
##################################### | |||||
# convergence layer configuration # | |||||
##################################### | |||||
# | |||||
# You can specify an multicast address to listen to for discovery announcements. | |||||
# If no address is specified the multicast equivalent of broadcast is used. | |||||
# | |||||
config 'daemon' 'discovery' | |||||
# option address 224.0.0.1 | |||||
# option timeout 5 | |||||
# option crosslayer yes | |||||
config 'daemon' 'tcptuning' | |||||
# option 'idle_timeout' 120 | |||||
# option 'nodelay' yes | |||||
# option 'chunksize' 4096 | |||||
config 'network' | |||||
option type tcp | |||||
option interface eth0 | |||||
option port 4556 | |||||
#config 'network' | |||||
# option type tcp | |||||
# option interface wlan0 | |||||
# option port 4556 | |||||
##################################### | |||||
# bundle security protocol # | |||||
##################################### | |||||
# | |||||
# the level specifies the security constains | |||||
# | |||||
# 0 = no constrains (default) | |||||
# 1 = accept only BAB authenticated bundles | |||||
# 2 = accept only encrypted bundles | |||||
# 3 = accept only BAB authenticated and encrypted bundles | |||||
# | |||||
#config 'daemon' 'security' | |||||
# option level 0 | |||||
# option bab_key /path/to/default-bab-key.mac | |||||
# option key_path /path/to/security-keys | |||||
# option generate_dh yes | |||||
#config 'daemon' 'tls' | |||||
# option certificate /path/to/tls-cert.crt | |||||
# option key /path/to/tls-key.key | |||||
# option trustedpath /path/to/tls-ca | |||||
# option required no | |||||
# option noencryption no | |||||
##################################### | |||||
# time synchronization # | |||||
##################################### | |||||
#config 'daemon' 'timesync' | |||||
# option reference yes | |||||
# option synchronize yes | |||||
# option discovery_announcement yes | |||||
# option sigma 1.001 | |||||
# option psi 0.9 | |||||
# option sync_level 0.1 | |||||
##################################### | |||||
# DHT # | |||||
##################################### | |||||
config 'daemon' 'dht' | |||||
# option 'enabled' 'yes' | |||||
# option 'id' '<enter your unique id here>' | |||||
option 'bootstrap' 'yes' | |||||
# option 'nodesfile' '/tmp/dht_nodes.dat' | |||||
option 'port' '9999' | |||||
option 'enable_ipv6' 'no' | |||||
# option 'enable_ipv4' 'no' | |||||
# option 'bind_ipv4' '127.0.0.1' | |||||
# option 'bind_ipv6' '::1' | |||||
option 'ignore_neighbour_informations' 'yes' | |||||
option 'allow_neighbours_to_announce_me' 'no' | |||||
option 'allow_neighbour_announcement' 'no' | |||||
@ -0,0 +1,43 @@ | |||||
#!/bin/sh | |||||
# | |||||
# This script creates a bundle storage of a given size. | |||||
# | |||||
# $1 = container file | |||||
# $2 = size of the container in MB | |||||
# | |||||
help_message() { | |||||
echo "usage: " | |||||
echo " $0 <container file> <size in MB>" | |||||
} | |||||
if [ $# -le 1 ]; then | |||||
help_message | |||||
exit 1 | |||||
fi | |||||
CONTAINER=$(cd "$(dirname "$1")"; pwd)/$(basename $1) | |||||
SIZE=$2 | |||||
# check if the container already exists | |||||
if [ -f $CONTAINER ]; then | |||||
echo "Aborted! The specified container already exists." | |||||
exit 1 | |||||
fi | |||||
# create the container | |||||
echo -n "creating the container file..." | |||||
/bin/dd if=/dev/zero of=$CONTAINER bs=1M count=$SIZE >/dev/null 2>/dev/null | |||||
echo " done" | |||||
# create file system | |||||
echo -n "initializing ext3 filesystem for the container..." | |||||
/usr/sbin/mkfs.ext3 -q -F $CONTAINER > /dev/null | |||||
echo " done" | |||||
# final hint | |||||
echo "The container is now ready. To use it with IBR-DTN set the container with:" | |||||
echo "# uci set ibrdtn.storage.container=$CONTAINER" | |||||
echo "# uci set ibrdtn.storage.container_size=$SIZE" | |||||
exit 0 |
@ -0,0 +1,122 @@ | |||||
#!/bin/sh | |||||
# | |||||
CONTAINER=`/sbin/uci -q get ibrdtn.storage.container` | |||||
CPATH=`/sbin/uci -q get ibrdtn.storage.path` | |||||
check_var() { | |||||
if [ -z "$1" ]; then | |||||
echo "$2" | |||||
exit 1 | |||||
fi | |||||
} | |||||
check_path() { | |||||
if [ ! -d "$1" ]; then | |||||
echo "$2" | |||||
return 1 | |||||
fi | |||||
} | |||||
check_file() { | |||||
if [ ! -f "$1" ]; then | |||||
echo "$2" | |||||
exit 1 | |||||
fi | |||||
} | |||||
container_mount() { | |||||
CONTAINER=`/sbin/uci -q get ibrdtn.storage.container` | |||||
CPATH=`/sbin/uci -q get ibrdtn.storage.path` | |||||
if [ -z "`mount | grep ' on $CPATH '`" ]; then | |||||
# try to mount the container | |||||
/bin/mount -o loop $CONTAINER $CPATH | |||||
return $? | |||||
fi | |||||
return 0 | |||||
} | |||||
container_reinitialize() { | |||||
SIZE=`/sbin/uci get -q ibrdtn.storage.container_size` | |||||
CONTAINER=`/sbin/uci -q get ibrdtn.storage.container` | |||||
# try to rebuild the container | |||||
if [ -n "$SIZE" ]; then | |||||
/bin/rm -f $CONTAINER | |||||
/usr/share/ibrdtn/mkcontainer.sh $CONTAINER $SIZE | |||||
if [ $? -eq 0 ]; then | |||||
container_mount | |||||
return $? | |||||
fi | |||||
return 1 | |||||
fi | |||||
return 1 | |||||
} | |||||
check_var $CONTAINER "Storage container not set in uci.\nuse: uci set ibrdtn.storage.container=<container-file>" | |||||
check_var $CPATH "Storage container mount path not set in uci.\nuse: uci set ibrdtn.storage.path=<mount-path>" | |||||
check_path $CPATH "Storage container mount path does not exist." | |||||
if [ $? -gt 0 ]; then | |||||
/bin/mkdir -p $CPATH | |||||
if [ $? -gt 0 ]; then | |||||
echo "can not create container mount path." | |||||
exit 1 | |||||
fi | |||||
fi | |||||
if [ "$1" == "-u" ]; then | |||||
/bin/umount $CPATH | |||||
exit 0 | |||||
fi | |||||
if [ -n "`/bin/mount | grep $CPATH`" ]; then | |||||
echo "Container already mounted" | |||||
exit 0 | |||||
fi | |||||
if [ ! -f "$CONTAINER" ]; then | |||||
echo "Storage container file $CONTAINER does not exist." | |||||
container_reinitialize | |||||
exit $? | |||||
fi | |||||
# try to mount the container | |||||
container_mount | |||||
if [ $? -gt 0 ]; then | |||||
echo -n "can not mount container file. checking... " | |||||
/usr/sbin/e2fsck -p $CONTAINER | |||||
if [ $? -gt 0 ]; then | |||||
echo " error" | |||||
echo "Container file $CONTAINER broken. Try to reinitialize the container." | |||||
container_reinitialize | |||||
if [ $? -eq 0 ]; then | |||||
echo "container ready!" | |||||
exit 0 | |||||
else | |||||
exit 1 | |||||
fi | |||||
fi | |||||
echo "done" | |||||
container_mount | |||||
if [ $? -gt 0 ]; then | |||||
echo "mount failed!" | |||||
exit 1 | |||||
fi | |||||
fi | |||||
echo "container ready!" | |||||
exit 0 | |||||
@ -0,0 +1,172 @@ | |||||
#!/bin/sh | |||||
# | |||||
# safety wrapper for IBR-DTN daemon | |||||
# | |||||
# Tasks: | |||||
# * start IBR-DTN daemon | |||||
# * restart the daemon after a crash | |||||
# * if respawning to fast, then slow down with backoff | |||||
# * check for enough space on disk and delete bundles if necessary. | |||||
# * clean the blob directory on startup | |||||
# | |||||
DTND=/usr/sbin/dtnd | |||||
TMPCONF=/tmp/ibrdtn.config | |||||
UCI=/sbin/uci | |||||
getstate() { | |||||
$UCI -P/var/state -q get ibrdtn.$1 | |||||
return $? | |||||
} | |||||
setstate() { | |||||
$UCI -P/var/state -q set ibrdtn.$1=$2 | |||||
return $? | |||||
} | |||||
getconfig() { | |||||
$UCI -q get ibrdtn.$1 | |||||
return $? | |||||
} | |||||
setconfig() { | |||||
$UCI -q set ibrdtn.$1=$2 | |||||
return $? | |||||
} | |||||
# remove the old state file | |||||
/bin/rm /var/state/ibrdtn | |||||
# read uci configuration | |||||
BLOB_PATH=`getconfig storage.blobs` | |||||
BUNDLE_PATH=`getconfig storage.bundles` | |||||
CONTAINER_PATH=`getconfig storage.path` | |||||
CONTAINER_FILE=`getconfig storage.container` | |||||
LOG_FILE=`getconfig main.logfile` | |||||
ERR_FILE=`getconfig main.errfile` | |||||
DEBUG_LEVEL=`getconfig main.debug` | |||||
SAFEMODE=no | |||||
# run a system check | |||||
/bin/sh /usr/share/ibrdtn/systemcheck.sh | |||||
if [ $? -eq 0 ]; then | |||||
# mount container if specified | |||||
if [ -n "$CONTAINER_FILE" ] && [ -n "$CONTAINER_PATH" ]; then | |||||
/bin/sh /usr/share/ibrdtn/mountcontainer.sh | |||||
# if the mount of the container failed | |||||
# switch to safe mode! | |||||
if [ $? -gt 0 ]; then | |||||
SAFEMODE=yes | |||||
fi | |||||
fi | |||||
else | |||||
SAFEMODE=yes | |||||
fi | |||||
# create blob & bundle path | |||||
if [ -n "$BLOB_PATH" ]; then | |||||
/bin/mkdir -p $BLOB_PATH | |||||
# clean the blob directory on startup | |||||
/bin/rm -f $BLOB_PATH/file* | |||||
fi | |||||
if [ -n "$BUNDLE_PATH" ]; then | |||||
/bin/mkdir -p $BUNDLE_PATH | |||||
fi | |||||
LOGGING="" | |||||
if [ -n "$LOG_FILE" ]; then | |||||
LOGGING="$LOGGING > $LOG_FILE" | |||||
else | |||||
LOGGING="$LOGGING > /dev/null" | |||||
fi | |||||
if [ -n "$ERR_FILE" ]; then | |||||
LOGGING="$LOGGING 2> $ERR_FILE" | |||||
else | |||||
LOGGING="$LOGGING 2> /dev/null" | |||||
fi | |||||
if [ -z "$LOG_FILE" ] && [ -z "$ERR_FILE" ]; then | |||||
LOGGING="-q" | |||||
fi | |||||
# check for debugging option | |||||
if [ -n "$DEBUG_LEVEL" ]; then | |||||
DEBUG_ARGS="-v -d ${DEBUG_LEVEL}" | |||||
else | |||||
DEBUG_ARGS="" | |||||
fi | |||||
# create configuration | |||||
if [ "$SAFEMODE" == "yes" ]; then | |||||
/bin/sh /usr/share/ibrdtn/build-config.sh --safe-mode $TMPCONF | |||||
else | |||||
/bin/sh /usr/share/ibrdtn/build-config.sh $TMPCONF | |||||
fi | |||||
# set the crash counter to zero | |||||
CRASH=0 | |||||
# run the daemon | |||||
setstate state running | |||||
while [ "`getstate state`" == "running" ]; do | |||||
# run a system check | |||||
/bin/sh /usr/share/ibrdtn/systemcheck.sh | |||||
# run in safe mode if the system check has failed | |||||
if [ $? -gt 0 ] && [ "$SAFEMODE" == "no" ]; then | |||||
SAFEMODE=yes | |||||
/usr/bin/logger -t "ibrdtn-safe-wrapper" -p 2 "system check failed! Switch to safe-mode settings." | |||||
/bin/sh /usr/share/ibrdtn/build-config.sh --safe-mode $TMPCONF | |||||
fi | |||||
# measure the running time | |||||
TIMESTART=`/bin/date +%s` | |||||
# run the daemon | |||||
echo "${DTND} ${DEBUG_ARGS} -c ${TMPCONF} ${LOGGING}" | /bin/sh | |||||
# measure the stopping time | |||||
TIMESTOP=`/bin/date +%s` | |||||
# calc the running time | |||||
let TIMERUN=$TIMESTOP-$TIMESTART | |||||
# reset the CRASH counter if there is one hour between the crashes | |||||
if [ $TIMERUN -ge 3600 ]; then | |||||
CRASH=0 | |||||
fi | |||||
# check if the daemon is crashed | |||||
if [ "`getstate state`" == "running" ]; then | |||||
# if the crash counter is higher than 20 switch to safe-mode settings | |||||
if [ $CRASH -eq 20 ] && [ "$SAFEMODE" == "no" ]; then | |||||
SAFEMODE=yes | |||||
/usr/bin/logger -t "ibrdtn-safe-wrapper" -p 2 "IBR-DTN daemon crashed 20 times! Switch to safe-mode settings." | |||||
/bin/sh /usr/share/ibrdtn/build-config.sh --safe-mode $TMPCONF | |||||
fi | |||||
# increment the crash counter | |||||
let CRASH=$CRASH+1 | |||||
# backoff wait timer | |||||
let WAIT=2**$CRASH | |||||
# set a upper limit for the wait time | |||||
if [ $WAIT -ge 1800 ]; then | |||||
WAIT=1800 | |||||
fi | |||||
# log the crash | |||||
/usr/bin/logger -t "ibrdtn-safe-wrapper" -p 2 "IBR-DTN daemon crashed $CRASH times! Wait $WAIT seconds." | |||||
# wait sometime | |||||
/bin/sleep $WAIT | |||||
fi | |||||
done | |||||
@ -0,0 +1,101 @@ | |||||
#!/bin/sh | |||||
# | |||||
# | |||||
check_mounted() { | |||||
DIR=$1 | |||||
while [ "$DIR" != "/" ]; do | |||||
if [ -n "`mount | grep "$DIR"`" ]; then | |||||
return 0 | |||||
fi | |||||
DIR=`dirname $DIR` | |||||
done | |||||
return 1 | |||||
} | |||||
check_writable() { | |||||
CHECKFILE="$1/.container-lock" | |||||
/bin/touch $CHECKFILE | |||||
if [ $? -gt 0 ]; then | |||||
return 1; | |||||
fi | |||||
/bin/echo "0123456789" >> $CHECKFILE | |||||
if [ $? -gt 0 ]; then | |||||
return 2; | |||||
fi | |||||
/bin/rm $CHECKFILE | |||||
if [ $? -gt 0 ]; then | |||||
return 3; | |||||
fi | |||||
} | |||||
check_mountdev() { | |||||
# get wait_mount option | |||||
WAIT_MOUNT_DEV=`uci -q get ibrdtn.safemode.wait_mount` | |||||
if [ $? -ne 0 ]; then | |||||
return 0 | |||||
fi | |||||
DATA=`mount | grep ${WAIT_MOUNT_DEV}` | |||||
if [ -n "${DATA}" ]; then | |||||
return 0 | |||||
fi | |||||
return 1 | |||||
} | |||||
# check the storage device | |||||
check_mountdev | |||||
RET=$? | |||||
if [ ${RET} -ne 0 ]; then | |||||
WAIT_SECONDS=60 | |||||
/usr/bin/logger -t "systemcheck.sh" -p 2 "disk storage not ready, wait max. ${WAIT_SECONDS} seconds until it is mounted" | |||||
while [ ${RET} -ne 0 ] && [ ${WAIT_SECONDS} -ne 0 ]; do | |||||
sleep 1 | |||||
let WAIT_SECONDS=WAIT_SECONDS-1 | |||||
check_mountdev | |||||
RET=$? | |||||
done | |||||
fi | |||||
if [ ${RET} -ne 0 ]; then | |||||
# failed, storage not mounted | |||||
exit 1 | |||||
fi | |||||
# get the path for the container | |||||
CONTAINER=`uci -q get ibrdtn.storage.container` | |||||
if [ -z "$CONTAINER" ]; then | |||||
exit 0 | |||||
fi | |||||
CONTAINER_PATH=`dirname $CONTAINER` | |||||
if [ -n "$CONTAINER_PATH" ]; then | |||||
# check if the container is on a mounted device | |||||
check_mounted $CONTAINER_PATH | |||||
if [ $? -gt 0 ]; then | |||||
# failed | |||||
exit 1 | |||||
fi | |||||
# check if the device is writable | |||||
check_writable $CONTAINER_PATH | |||||
if [ $? -gt 0 ]; then | |||||
# failed | |||||
exit 1 | |||||
fi | |||||
fi | |||||