diff --git a/ffs-set-segment/Makefile b/ffs-set-segment/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5a916bf1ec5d38b53b60d447670997715d6d69c4 --- /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 0000000000000000000000000000000000000000..d49e3b624de7770f47e45bb160b0eebfabb9626f --- /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 0000000000000000000000000000000000000000..b18ef124cc452895552d2469bc68d04a9631b26a --- /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 0000000000000000000000000000000000000000..17b69ac93709e547bfc058bdda7060e183636dd0 --- /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 0000000000000000000000000000000000000000..e1b99deb70a89afd525bd96b3fd6d4904bc2d2cb --- /dev/null +++ b/ffs-set-segment/ipkg/postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +/etc/init.d/ffs-set-segment enable