From patchwork Sun Jul 9 21:58:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFC,v3] fff-autorestart: Add autorestart package From: Adrian Schmutzler X-Patchwork-Id: 377 Message-Id: <1499637512-24993-1-git-send-email-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Cc: Adrian Schmutzler Date: Sun, 9 Jul 2017 23:58:32 +0200 This package implements an auto-restart if the router has not been able to connect to a gateway for more than 30 minutes. If there had been an error or crash causing the interruption, it may be resolved by the restart while no harm is done. Setting /tmp/gatewayoff to '0' disables the whole process. This is an RFC patch, as I'm interested in implementing this into the firmware of the routers I administer. Thus, any comments, suggestions and so forth are welcome! Signed-off-by: Adrian Schmutzler Tested-by: Adrian Schmutzler --- src/packages/fff/fff-autorestart/Makefile | 40 ++++++++++++++++++++++ .../files/usr/lib/micron.d/fff-autorestart | 1 + .../fff-autorestart/files/usr/sbin/offlinerestart | 40 ++++++++++++++++++++++ src/packages/fff/fff/Makefile | 1 + 4 files changed, 82 insertions(+) create mode 100755 src/packages/fff/fff-autorestart/Makefile create mode 100644 src/packages/fff/fff-autorestart/files/usr/lib/micron.d/fff-autorestart create mode 100755 src/packages/fff/fff-autorestart/files/usr/sbin/offlinerestart diff --git a/src/packages/fff/fff-autorestart/Makefile b/src/packages/fff/fff-autorestart/Makefile new file mode 100755 index 0000000..b48542a --- /dev/null +++ b/src/packages/fff/fff-autorestart/Makefile @@ -0,0 +1,40 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fff-autorestart +PKG_VERSION:=1 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-autorestart + +include $(INCLUDE_DIR)/package.mk + +define Package/fff-autorestart + SECTION:=base + CATEGORY:=Freifunk + TITLE:= Freifunk-Franken Auto-Restart + URL:=http://www.freifunk-franken.de + DEPENDS:=+micrond +endef + +define Package/fff-autorestart/description + This restarts the router if no connection + to gateways is available +endef + +define Build/Prepare + echo "all: " > $(PKG_BUILD_DIR)/Makefile +endef + +define Build/Configure + # nothing +endef + +define Build/Compile + # nothing +endef + +define Package/fff-autorestart/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,fff-autorestart)) diff --git a/src/packages/fff/fff-autorestart/files/usr/lib/micron.d/fff-autorestart b/src/packages/fff/fff-autorestart/files/usr/lib/micron.d/fff-autorestart new file mode 100644 index 0000000..885b50a --- /dev/null +++ b/src/packages/fff/fff-autorestart/files/usr/lib/micron.d/fff-autorestart @@ -0,0 +1 @@ +*/5 * * * * /usr/sbin/offlinerestart diff --git a/src/packages/fff/fff-autorestart/files/usr/sbin/offlinerestart b/src/packages/fff/fff-autorestart/files/usr/sbin/offlinerestart new file mode 100755 index 0000000..36e8582 --- /dev/null +++ b/src/packages/fff/fff-autorestart/files/usr/sbin/offlinerestart @@ -0,0 +1,40 @@ +#!/bin/sh + +UPPER_LIMIT='50' # Above this limit the gateway will be considered online +LOWER_LIMIT='20' # Below this limit the gateway will be considered offline +# In-between these two values the state is not changed + +NOW=$(date +%s) + +if [ -s /tmp/gatewayoff ] && grep -q '0' /tmp/gatewayoff ; then + exit 0 +fi + +GATEWAY_TQ=$(batctl gwl | grep "^=>" | awk -F'[()]' '{print $2}'| tr -d " ") # Grep the connection quality of the gateway which is currently used +if [ ! "$GATEWAY_TQ" ]; # If there is no gateway there will be errors in the following if clauses +then + GATEWAY_TQ=0 # Just an easy way to get an valid value if there is no gateway +fi +if [ $GATEWAY_TQ -gt $UPPER_LIMIT ]; +then + echo "Gateway TQ is $GATEWAY_TQ - Node is online" + if [ -s /tmp/gatewayoff ] ; then + rm -f /tmp/gatewayoff + fi +fi +if [ $GATEWAY_TQ -lt $LOWER_LIMIT ]; +then + echo "Gateway TQ is $GATEWAY_TQ - Node is considered offline" + if [ ! -s /tmp/gatewayoff ] ; then + echo "$NOW" > /tmp/gatewayoff + fi + OFFLINESINCE=$(($(date +%s)-1800)) # Restart after 30 minutes + if [ "$(cat /tmp/gatewayoff)" -lt "$OFFLINESINCE" ] ; then + #rm -f /tmp/gatewayoff + reboot && exit + fi +fi +if [ $GATEWAY_TQ -ge $LOWER_LIMIT ] && [ $GATEWAY_TQ -le $UPPER_LIMIT ]; # This is just to get a clean run if we are in-between the grace periode +then + echo "Gateway TQ is $GATEWAY_TQ - Do nothing" +fi diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile index b039c2d..21ed827 100644 --- a/src/packages/fff/fff/Makefile +++ b/src/packages/fff/fff/Makefile @@ -18,6 +18,7 @@ define Package/fff-base +ip6tables \ +odhcp6c \ +micrond \ + +fff-autorestart \ +fff-nodewatcher \ +fff-web \ +fff-uradvd \