[v4,1/2] Move hoodfile acquisition into function

Submitted by Fabian Blaese on June 12, 2018, 7:07 p.m.

Details

Message ID 20180612190701.30651-1-fabian@blaese.de
State Accepted
Headers show

Commit Message

Fabian Blaese June 12, 2018, 7:07 p.m.
Signed-off-by: Fabian Bläse <fabian@blaese.de>
Tested-by: Fabian Bläse <fabian@blaese.de>
---
Apply after MacKnocker patchset!

Changes in v2:
- Fix indentation
- Remove shebang
- Improve usage message
- Add failure return value to getKeyserverHoodfile if no file was received

Changes in v3:
- Fix messed up v2

Changes in v4:
- remove 't'
- move coordinate aquisition into getKeyserver function
- add optional coordinate parameter in getKeyserver function
---
 .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 92 ++++++++++++++++++++++
 .../fff/fff-hoods/files/usr/sbin/configurehood     | 41 ++--------
 2 files changed, 97 insertions(+), 36 deletions(-)
 create mode 100644 src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile

Patch hide | download patch | download mbox

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..4efaa66
--- /dev/null
+++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
@@ -0,0 +1,92 @@ 
+. /usr/share/libubox/jshn.sh
+. /lib/functions/fff/wireless
+
+getWirelessHoodfile() {
+	if [ $# != 1 ]; then
+		echo "Usage: getWirelessHoodfile <target-file>"
+		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 <target-file>"
+		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
+		lat=$(uci -q get fff.system.latitude)
+		long=$(uci -q get fff.system.longitude)
+	elif [ $# == 3 ]; then
+		lat=$2
+		long=$3
+	else
+		echo "Usage: getKeyserverHoodfile <target-file> [<latitude> <longitude>]"
+		return 1
+	fi
+	file=$1
+
+	echo "Getting hoodfile from Keyserver"
+
+	if wget -T15 -t5 -O "$file" "http://keyserver.freifunk-franken.de/v2/?lat=$lat&long=$long"; then
+		return 0
+	else
+		return 1
+	fi
+}
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index e2c1fab..d06a62d 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
@@ -69,16 +70,14 @@  if [ -s "$hoodfilecopy" ] && isGatewayAvailable ; then
 	fi
 fi
 
-lat=$(uci -q get fff.system.latitude)
-long=$(uci -q get fff.system.longitude)
-
 if [ -s "$hoodlocal" ]; then
 	hoodfile="$hoodlocal"
 	echo "Use local hood file"
 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 +98,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

Comments

Adrian Schmutzler June 13, 2018, 2:03 p.m.
Hallo,

schön gelöst.

Reviewed-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of Fabian Bläse
> Sent: Dienstag, 12. Juni 2018 21:07
> To: franken-dev@freifunk.net
> Cc: Jan Kraus <mayosemmel@gmail.com>; Adrian Schmutzler
> <freifunk@adrianschmutzler.de>
> Subject: [PATCH v4 1/2] Move hoodfile acquisition into function
> 
> Signed-off-by: Fabian Bläse <fabian@blaese.de>
> Tested-by: Fabian Bläse <fabian@blaese.de>
> ---
> Apply after MacKnocker patchset!
> 
> Changes in v2:
> - Fix indentation
> - Remove shebang
> - Improve usage message
> - Add failure return value to getKeyserverHoodfile if no file was received
> 
> Changes in v3:
> - Fix messed up v2
> 
> Changes in v4:
> - remove 't'
> - move coordinate aquisition into getKeyserver function
> - add optional coordinate parameter in getKeyserver function
> ---
>  .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 92
> ++++++++++++++++++++++
>  .../fff/fff-hoods/files/usr/sbin/configurehood     | 41 ++--------
>  2 files changed, 97 insertions(+), 36 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..4efaa66
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> @@ -0,0 +1,92 @@
> +. /usr/share/libubox/jshn.sh
> +. /lib/functions/fff/wireless
> +
> +getWirelessHoodfile() {
> +	if [ $# != 1 ]; then
> +		echo "Usage: getWirelessHoodfile <target-file>"
> +		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 <target-file>"
> +		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
> +		lat=$(uci -q get fff.system.latitude)
> +		long=$(uci -q get fff.system.longitude)
> +	elif [ $# == 3 ]; then
> +		lat=$2
> +		long=$3
> +	else
> +		echo "Usage: getKeyserverHoodfile <target-file> [<latitude>
> <longitude>]"
> +		return 1
> +	fi
> +	file=$1
> +
> +	echo "Getting hoodfile from Keyserver"
> +
> +	if wget -T15 -t5 -O "$file" "http://keyserver.freifunk-
> franken.de/v2/?lat=$lat&long=$long"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index e2c1fab..d06a62d 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
> @@ -69,16 +70,14 @@ if [ -s "$hoodfilecopy" ] && isGatewayAvailable ; then
>  	fi
>  fi
> 
> -lat=$(uci -q get fff.system.latitude)
> -long=$(uci -q get fff.system.longitude)
> -
>  if [ -s "$hoodlocal" ]; then
>  	hoodfile="$hoodlocal"
>  	echo "Use local hood file"
>  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
> +98,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
Tim Niemeyer June 13, 2018, 7:45 p.m.
Am Dienstag, den 12.06.2018, 21:07 +0200 schrieb Fabian Bläse:
> Signed-off-by: Fabian Bläse <fabian@blaese.de>
> Tested-by: Fabian Bläse <fabian@blaese.de>
Reviewed-by: Tim Niemeyer <tim@tn-x.org>

Tim

> ---
> Apply after MacKnocker patchset!
> 
> Changes in v2:
> - Fix indentation
> - Remove shebang
> - Improve usage message
> - Add failure return value to getKeyserverHoodfile if no file was
> received
> 
> Changes in v3:
> - Fix messed up v2
> 
> Changes in v4:
> - remove 't'
> - move coordinate aquisition into getKeyserver function
> - add optional coordinate parameter in getKeyserver function
> ---
>  .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 92
> ++++++++++++++++++++++
>  .../fff/fff-hoods/files/usr/sbin/configurehood     | 41 ++--------
>  2 files changed, 97 insertions(+), 36 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..4efaa66
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> @@ -0,0 +1,92 @@
> +. /usr/share/libubox/jshn.sh
> +. /lib/functions/fff/wireless
> +
> +getWirelessHoodfile() {
> +	if [ $# != 1 ]; then
> +		echo "Usage: getWirelessHoodfile <target-file>"
> +		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/key
> xchangev2data"; then
> +		return 0
> +	elif wget -T15 -t5 -O "$file" "http://[fe80::1%w5sta]:2342/k
> eyxchangev2data"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> +
> +getGatewayHoodfile() {
> +	if [ $# != 1 ]; then
> +		echo "Usage: getGatewayHoodfile <target-file>"
> +		return 1
> +	fi
> +	file=$1
> +
> +	echo "Trying to get hoodfile from gateway..."
> +
> +	if wget -T15 -t5 -O "$file" "http://[fe80::1%br-mesh]:2342/k
> eyxchangev2data"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> +
> +getKeyserverHoodfile() {
> +	if [ $# == 1 ]; then
> +		lat=$(uci -q get fff.system.latitude)
> +		long=$(uci -q get fff.system.longitude)
> +	elif [ $# == 3 ]; then
> +		lat=$2
> +		long=$3
> +	else
> +		echo "Usage: getKeyserverHoodfile <target-file>
> [<latitude> <longitude>]"
> +		return 1
> +	fi
> +	file=$1
> +
> +	echo "Getting hoodfile from Keyserver"
> +
> +	if wget -T15 -t5 -O "$file" "http://keyserver.freifunk-frank
> en.de/v2/?lat=$lat&long=$long"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index e2c1fab..d06a62d 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
> @@ -69,16 +70,14 @@ if [ -s "$hoodfilecopy" ] && isGatewayAvailable ;
> then
>  	fi
>  fi
>  
> -lat=$(uci -q get fff.system.latitude)
> -long=$(uci -q get fff.system.longitude)
> -
>  if [ -s "$hoodlocal" ]; then
>  	hoodfile="$hoodlocal"
>  	echo "Use local hood file"
>  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 +98,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/k
> eyxchangev2data" -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
Tim Niemeyer June 15, 2018, 10:37 p.m.
Hi

beide applied.

Tim

Am Dienstag, den 12.06.2018, 21:07 +0200 schrieb Fabian Bläse:
> Signed-off-by: Fabian Bläse <fabian@blaese.de>
> Tested-by: Fabian Bläse <fabian@blaese.de>
> ---
> Apply after MacKnocker patchset!
> 
> Changes in v2:
> - Fix indentation
> - Remove shebang
> - Improve usage message
> - Add failure return value to getKeyserverHoodfile if no file was
> received
> 
> Changes in v3:
> - Fix messed up v2
> 
> Changes in v4:
> - remove 't'
> - move coordinate aquisition into getKeyserver function
> - add optional coordinate parameter in getKeyserver function
> ---
>  .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 92
> ++++++++++++++++++++++
>  .../fff/fff-hoods/files/usr/sbin/configurehood     | 41 ++--------
>  2 files changed, 97 insertions(+), 36 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..4efaa66
> --- /dev/null
> +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> @@ -0,0 +1,92 @@
> +. /usr/share/libubox/jshn.sh
> +. /lib/functions/fff/wireless
> +
> +getWirelessHoodfile() {
> +	if [ $# != 1 ]; then
> +		echo "Usage: getWirelessHoodfile <target-file>"
> +		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/key
> xchangev2data"; then
> +		return 0
> +	elif wget -T15 -t5 -O "$file" "http://[fe80::1%w5sta]:2342/k
> eyxchangev2data"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> +
> +getGatewayHoodfile() {
> +	if [ $# != 1 ]; then
> +		echo "Usage: getGatewayHoodfile <target-file>"
> +		return 1
> +	fi
> +	file=$1
> +
> +	echo "Trying to get hoodfile from gateway..."
> +
> +	if wget -T15 -t5 -O "$file" "http://[fe80::1%br-mesh]:2342/k
> eyxchangev2data"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> +
> +getKeyserverHoodfile() {
> +	if [ $# == 1 ]; then
> +		lat=$(uci -q get fff.system.latitude)
> +		long=$(uci -q get fff.system.longitude)
> +	elif [ $# == 3 ]; then
> +		lat=$2
> +		long=$3
> +	else
> +		echo "Usage: getKeyserverHoodfile <target-file>
> [<latitude> <longitude>]"
> +		return 1
> +	fi
> +	file=$1
> +
> +	echo "Getting hoodfile from Keyserver"
> +
> +	if wget -T15 -t5 -O "$file" "http://keyserver.freifunk-frank
> en.de/v2/?lat=$lat&long=$long"; then
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index e2c1fab..d06a62d 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
> @@ -69,16 +70,14 @@ if [ -s "$hoodfilecopy" ] && isGatewayAvailable ;
> then
>  	fi
>  fi
>  
> -lat=$(uci -q get fff.system.latitude)
> -long=$(uci -q get fff.system.longitude)
> -
>  if [ -s "$hoodlocal" ]; then
>  	hoodfile="$hoodlocal"
>  	echo "Use local hood file"
>  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 +98,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/k
> eyxchangev2data" -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