From b153d1dab55af5eddc83f41b16126386f3603a20 Mon Sep 17 00:00:00 2001 From: FFS-Roland <roland.volkmann@t-online.de> Date: Wed, 14 Dec 2016 17:20:40 +0100 Subject: [PATCH] Initial code for segment assignment by DNS --- ffs-set-segment/Makefile | 38 +++++++++++++++ .../files/etc/init.d/ffs-set-segment | 15 ++++++ .../files/usr/lib/micron.d/ffs-set-segment | 1 + .../files/usr/sbin/ffs-set-segment | 48 +++++++++++++++++++ ffs-set-segment/ipkg/postinst | 3 ++ 5 files changed, 105 insertions(+) create mode 100644 ffs-set-segment/Makefile create mode 100644 ffs-set-segment/files/etc/init.d/ffs-set-segment create mode 100644 ffs-set-segment/files/usr/lib/micron.d/ffs-set-segment create mode 100644 ffs-set-segment/files/usr/sbin/ffs-set-segment create mode 100644 ffs-set-segment/ipkg/postinst diff --git a/ffs-set-segment/Makefile b/ffs-set-segment/Makefile new file mode 100644 index 0000000..5a916bf --- /dev/null +++ b/ffs-set-segment/Makefile @@ -0,0 +1,38 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=ffs-set-segment-patches +PKG_VERSION:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(GLUONDIR)/include/package.mk + +PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG) + + +define Package/ffs-set-segment-patches + SECTION:=gluon + CATEGORY:=Gluon + TITLE:=Patch files for setting correct segment +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/ffs-set-segment-patches/install + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/etc/init.d/ffs-set-segment $(1)/etc/init.d/ffs-set-segment + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) ./files/usr/sbin/ffs-set-segment $(1)/usr/sbin/ffs-set-segment + $(INSTALL_DIR) $(1)/usr/lib/micron.d + $(INSTALL_BIN) ./files/usr/lib/micron.d/ffs-set-segment $(1)/usr/lib/micron.d/ffs-set-segment +endef + +$(eval $(call BuildPackage,ffs-set-segment-patches)) diff --git a/ffs-set-segment/files/etc/init.d/ffs-set-segment b/ffs-set-segment/files/etc/init.d/ffs-set-segment new file mode 100644 index 0000000..d49e3b6 --- /dev/null +++ b/ffs-set-segment/files/etc/init.d/ffs-set-segment @@ -0,0 +1,15 @@ +#!/bin/sh /etc/rc.common + +START=97 + +start () { + uci set fastd.mesh_vpn.on_connect='/usr/sbin/ffs-set-segment' + uci set fastd.mesh_vpn_backbone.auto_segment='1' + /usr/sbin/ffs-set-segment + /etc/init.d/micrond enable + /etc/init.d/micrond restart +} + +stop() { + true +} diff --git a/ffs-set-segment/files/usr/lib/micron.d/ffs-set-segment b/ffs-set-segment/files/usr/lib/micron.d/ffs-set-segment new file mode 100644 index 0000000..b18ef12 --- /dev/null +++ b/ffs-set-segment/files/usr/lib/micron.d/ffs-set-segment @@ -0,0 +1 @@ +* * * * * /usr/sbin/ffs-set-segment diff --git a/ffs-set-segment/files/usr/sbin/ffs-set-segment b/ffs-set-segment/files/usr/sbin/ffs-set-segment new file mode 100644 index 0000000..17b69ac --- /dev/null +++ b/ffs-set-segment/files/usr/sbin/ffs-set-segment @@ -0,0 +1,48 @@ +#!/bin/sh +if [ $(ps | grep -c "{$(basename $0)}") -gt 4 ]; then + echo started twice + exit 1 +fi + +if [ $(ps | grep -c "fastd") -lt 2 ]; then + echo fastd not running + exit 1 +fi + +if [ "$(uci get fastd.mesh_vpn_backbone.auto_segment)" = "0" ]; then + echo auto_segment disabled + exit 1 +fi + +NODEID=`uci get network.bat0.macaddr` +for i in `seq 1 5`; +do + NODEID=${NODEID/\:/} +done +NODEID=ffs-$NODEID +SEGMENT=`nslookup $NODEID.configserver.selfhosted.de [::1]:54 |tail -n1 ` +if [[ -z "${SEGMENT// }" ]]; then + echo Node not known + exit 1 +fi +SEGMENT=${SEGMENT/Address 1: 2001:2::/} +let PORT=SEGMENT+10040 +SEGNUM=$(printf "%02d" $SEGMENT) + +CHANGED=0 +for i in `seq 1 10`; +do + GW=$(printf "gw%02d" $i) + OLDPEER=`uci get fastd.mesh_vpn_backbone_peer_$GW.remote` + NEWPEER="\"${GW}s$SEGNUM.freifunk-stuttgart.de\" port $PORT" + + if [ "$NEWPEER" != "$OLDPEER" ]; then + uci set fastd.mesh_vpn_backbone_peer_$GW.remote="$NEWPEER" + CHANGED=1 + fi +done + +if [ "$CHANGED" = "1" ]; then + /etc/init.d/fastd restart + echo Segment set to $SEGNUM +fi diff --git a/ffs-set-segment/ipkg/postinst b/ffs-set-segment/ipkg/postinst new file mode 100644 index 0000000..e1b99de --- /dev/null +++ b/ffs-set-segment/ipkg/postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +/etc/init.d/ffs-set-segment enable -- GitLab