[PATCH] fff-hoods: Use alfred for hood file redistribution

Tim Niemeyer tim at tn-x.org
Do Nov 2 10:18:19 CET 2017


Hi

Was hat der Alfred für einen Vorteil?

Ich sehe eigentlich für den kxv2 nur Nachteile. Es ist komplex, geht leicht kaputt, etc.

Tim

Am 1. November 2017 23:44:39 MEZ schrieb Adrian Schmutzler <freifunk at adrianschmutzler.de>:
>Please read inline comments. UNTESTED.
>
>Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
>---
>.../fff-hoods/files/lib/functions/fff/keyxchange   | 28
>++++++++++++++++++
>.../fff/fff-hoods/files/usr/sbin/configurehood     | 34
>++++++++++++++++++++--
> 2 files changed, 60 insertions(+), 2 deletions(-)
>
>diff --git
>a/src/packages/fff/fff-hoods/files/lib/functions/fff/keyxchange
>b/src/packages/fff/fff-hoods/files/lib/functions/fff/keyxchange
>index 9aeb434..2d645d0 100644
>--- a/src/packages/fff/fff-hoods/files/lib/functions/fff/keyxchange
>+++ b/src/packages/fff/fff-hoods/files/lib/functions/fff/keyxchange
>@@ -31,3 +31,31 @@ getUpgradePath() {
> 	fi
> 	return 0
> }
>+
>+getJsonTimestamp() {
>+	json=$1
>+	
>+	ts=0
>+	if [ -n "$json" ] && json_load "$json" &>/dev/null ; then
>+		json_select "hood" &>/dev/null && json_get_var ts timestamp
>+	fi
>+	echo "$ts"
>+}
>+
>+getJsonFromAlfred() {
>+	datafile=$1
>+
>+	tsold=0
>+	jsonused=""
>+
>+	while read -r line
>+	do
>+		json="$(echo "$line" | sed 's/[^,]*,\s*"//' | sed 's/"\s*},\s*$//' |
>sed 's/\\"/"/g')"
>+		ts="$(getJsonTimestamp "$json")"
>+		if [ "$ts" -gt "$tsold" ] ; then
>+			jsonused="$json"
>+			tsold="$ts"
>+		fi
>+	done < "$datafile"
>+	echo "$jsonused"
>+}
>diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
>b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
>index 8ffaced..981f7aa 100755
>--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
>+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
>@@ -9,6 +9,9 @@ sectorlocal=/etc/sectorfile
> sectortmp=/tmp/sectorfile
> sectorcopy=/www/hood/sectorfile
> 
>+alfredfile=/tmp/alfredhood
>+alfrednum="65"
>+
> rm -f "$hoodfile"
> 
> # Gatewaycheck function
>@@ -65,6 +68,29 @@ long=$(uci -q get system. at system[0].longitude)
> # 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"
>+	
>+	# Alfred will always have only one "entry" per sender address. Thus,
>old data will be overwritten by new one.
>+	# If the commented lines are enabled, the behavior will be altered:
>The router will only send data if no up-to-date information is already
>present.
>+	
>+	#hoodread="$(cat "$hoodfile")"
>+	#alfred -r "$alfrednum" > "$alfredfile"
>+	#alfrednewest="$(getJsonFromAlfred "$alfredfile")"
>+	#rm -f "$alfredfile"
>+	#tsinet="$(getJsonTimestamp "$hoodread")"
>+	#tsalfred="$(getJsonTimestamp "$alfrednewest")"
>+	#if [ "$tsinet" -gt "$tsalfred" ] ; then
>+		cat "$hoodfile" | alfred -s "$alfrednum"
>+	#fi
>+	
>+	# Note that data sent this way has a lifetime. The following case
>would be possible:
>+	# 1. The first uplink router will send data via alfred
>+	# 2. All routers won't send any data, since the data from the first
>is already present and up-to-date
>+	# 3. The alfred data send by the first router expires -> No alfred
>data present
>+	# 4. A random router will find no data and paste its own, restarting
>the cycle
>+	# Note that between 3. and 4. there is a gap where no data is
>present.
>+	# -> Advantage: The alfred information will be much smaller, leading
>to smaller files and less CPU for parsing (json = about 1 kB per
>Sender)
>+	# -> Disadvantage: There will be frequent gaps with no data available
>+
> 	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
>@@ -115,8 +141,12 @@ else
>			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"
>+		echo "We have a Gateway in Range, we collect files from the
>neighborhood"
>+		alfred -r "$alfrednum" > "$alfredfile"
>+		alfrednewest="$(getJsonFromAlfred "$alfredfile")"
>+		rm -f "$alfredfile"
>+		[ -n "$alfrednewest" ] && echo "$alfrednewest" > "$hoodfile"
>+		
> 		#UPLINK: Do nothing
> 	fi
> fi


Mehr Informationen über die Mailingliste franken-dev