[PATCH 1/2] Move hoodfile acquisition into function

Fabian Bläse fabian at blaese.de
Sa Jun 9 16:51:28 CEST 2018


Signed-off-by: Fabian Bläse <fabian at blaese.de>
---
 .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 87 ++++++++++++++++++++++
 .../fff/fff-hoods/files/usr/sbin/configurehood     | 38 ++--------
 2 files changed, 92 insertions(+), 33 deletions(-)
 create mode 100644 src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile

diff --git a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
new file mode 100644
index 0000000..62487f9
--- /dev/null
+++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+. /usr/share/libubox/jshn.sh
+. /lib/functions/fff/wireless
+
+getWirelessHoodfile() {
+    if [ $# != 1 ]
+	then
+		echo "Usage: getWirelessHoodfile <download-location>"
+		return 1
+	fi
+    file=$1
+
+    echo "Trying to get hoodfile from wireless neighbor..."
+    echo "All wireless interfaces will be disabled temporarily!"
+
+    # only change temporarily
+
+    if ! wifiDelIface; then
+        echo "Can't delete current wifi setup"
+        exit 1
+    fi
+    #now we look for phy and add this
+    for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
+        radio="$(wifiAddPhyCond "$phy" "2" "auto")"
+        radio5="$(wifiAddPhyCond "$phy" "5" "auto5")"
+        if [ -n "$radio5" ] ; then
+            radio="$radio5"
+            staiface="w5sta"
+        else
+            staiface="w2sta"
+        fi
+
+        #and here we add the station
+        if ! wifiAddSta "$radio" "config.franken.freifunk.net" "configSta" "$staiface" ; then
+            echo "Can't add Sta interface on $radio."
+            exit 1
+        else
+            uci -q set network.configSta=interface
+            uci -q set network.configSta.proto='static'
+            uci -q commit network
+            reload_config
+        fi
+    done
+
+    wifi
+    # wait a moment to start the interface
+    sleep 10;
+
+    if wget -T15 -t5 -O "$file" "http://[fe80::1%w2sta]:2342/keyxchangev2data"; then
+        return 0
+    elif wget -T15 -t5 -O "$file" "http://[fe80::1%w5sta]:2342/keyxchangev2data"; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+getGatewayHoodfile() {
+    if [ $# != 1 ]
+	then
+		echo "Usage: getGatewayHoodfile <download-location>"
+		return 1
+	fi
+    file=$1
+
+    echo "Trying to get hoodfile from gateway..."
+
+    if wget -T15 -t5 -O "$file" "http://[fe80::1%br-mesh]:2342/keyxchangev2data"; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+getKeyserverHoodfile() {
+    if [ $# != 1 ]
+	then
+		echo "Usage: getKeyserverHoodfile <download-location>"
+		return 1
+	fi
+    file=$1
+
+    echo "Getting hoodfile from Keyserver"
+
+    wget -T15 -t5 -O "$file" "http://keyserver.freifunk-franken.de/v2/?lat=$lat&long=$long"
+}
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index e2c1fab..aee20e5 100755
--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
@@ -5,6 +5,7 @@
 . /lib/functions/fff/network
 . /lib/functions/fff/wireless
 . /lib/functions/fff/timeserver
+. /usr/lib/functions/fff/hoodfile
 
 sectorlocal=/etc/sectorfile
 sectortmp=/tmp/sectorfile
@@ -78,7 +79,8 @@ if [ -s "$hoodlocal" ]; then
 else
 	# if we have Internet, we download the Hoodfile from the keyxchangev2
 	if hasInternet ; then
-		wget -T15 -t5 "http://keyserver.freifunk-franken.de/v2/?lat=$lat&long=$long" -O "$hoodfile"
+		getKeyserverHoodfile "$hoodfile"
+
 		rm -f "$sectortmp"
 		[ -s "$sectorlocal" ] || rm -f "$sectorcopy" # If internet present, no custom config should be distributed, except when local file is present
 		#UPLINK: No uplink download if internet present
@@ -99,45 +101,15 @@ else
 		
 			sleep 30 # Wait for the config AP, which may be created at the same time as this script has started
 
-			if ! wifiDelIface; then
-				echo "Can't delete current wifi setup"
-				exit 1
-			fi
-			#now we look for phy and add this
-			for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
-				radio="$(wifiAddPhyCond "$phy" "2" "auto")"
-				radio5="$(wifiAddPhyCond "$phy" "5" "auto5")"
-				if [ -n "$radio5" ] ; then
-					radio="$radio5"
-					staiface="w5sta"
-				else
-					staiface="w2sta"
-				fi
+			getWirelessHoodfile "$hoodfile"
 
-				#and here we add the station
-				if ! wifiAddSta "$radio" "config.franken.freifunk.net" "configSta" "$staiface" ; then
-					echo "Can't add Sta interface on $radio."
-					exit 1
-				else
-					uci -q set network.configSta=interface
-					uci -q set network.configSta.proto='static'
-					uci -q commit network
-					reload_config
-				fi
-			done
-		
-			wifi
-			# wait a moment to start the interface
-			sleep 10;
-			# and here we can download the Hoodfile from the other node
-			wget -T15 -t5 "http://[fe80::1%w2sta]:2342/keyxchangev2data" -O "$hoodfile" || wget -T15 -t5 "http://[fe80::1%w5sta]:2342/keyxchangev2data" -O "$hoodfile"
 			#UPLINK: Set up uplink data on first contact:
 			if [ -s /tmp/keyxchangev2data ]; then
 				wget -T15 -t5 "http://[fe80::1%w2sta]:2342/sectorfile" -O "$sectortmp" || wget -T15 -t5 "http://[fe80::1%w5sta]:2342/sectorfile" -O "$sectortmp"
 			fi
 		else
 			echo "We have a Gateway in Range, we load the keyxchangev2data from fe80::1"
-			wget -T15 -t5 "http://[fe80::1%br-mesh]:2342/keyxchangev2data" -O "$hoodfile"
+			getGatewayHoodfile "$hoodfile"
 			#UPLINK: Do nothing
 		fi
 	fi
-- 
2.11.0



Mehr Informationen über die Mailingliste franken-dev