Merge pull request #221 from ejonny/master
Add packages for Delay and Disruption Tolerant Networking
This commit is contained in:
commit
557243ccfc
13 changed files with 1158 additions and 0 deletions
47
libs/dtndht/Makefile
Normal file
47
libs/dtndht/Makefile
Normal file
|
@ -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))
|
50
libs/ibrcommon/Makefile
Normal file
50
libs/ibrcommon/Makefile
Normal file
|
@ -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))
|
50
libs/ibrdtn/Makefile
Normal file
50
libs/ibrdtn/Makefile
Normal file
|
@ -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))
|
52
libs/libarchive/Makefile
Normal file
52
libs/libarchive/Makefile
Normal file
|
@ -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))
|
49
net/ibrdtn-tools/Makefile
Normal file
49
net/ibrdtn-tools/Makefile
Normal file
|
@ -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))
|
58
net/ibrdtnd/Makefile
Normal file
58
net/ibrdtnd/Makefile
Normal file
|
@ -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))
|
168
net/ibrdtnd/files/build-config.sh
Normal file
168
net/ibrdtnd/files/build-config.sh
Normal file
|
@ -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
|
71
net/ibrdtnd/files/ibrdtn.init
Normal file
71
net/ibrdtnd/files/ibrdtn.init
Normal file
|
@ -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"
|
||||
}
|
175
net/ibrdtnd/files/ibrdtn.uci
Normal file
175
net/ibrdtnd/files/ibrdtn.uci
Normal file
|
@ -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'
|
||||
|
43
net/ibrdtnd/files/mkcontainer.sh
Normal file
43
net/ibrdtnd/files/mkcontainer.sh
Normal file
|
@ -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
|
122
net/ibrdtnd/files/mountcontainer.sh
Normal file
122
net/ibrdtnd/files/mountcontainer.sh
Normal file
|
@ -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
|
||||
|
172
net/ibrdtnd/files/safety-wrapper.sh
Normal file
172
net/ibrdtnd/files/safety-wrapper.sh
Normal file
|
@ -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
|
||||
|
101
net/ibrdtnd/files/systemcheck.sh
Normal file
101
net/ibrdtnd/files/systemcheck.sh
Normal file
|
@ -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
|
||||
|
Loading…
Reference in a new issue