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

Adrian Schmutzler mail at adrianschmutzler.de
Do Nov 2 10:28:30 CET 2017


Hallo Tim,

das ist die Lösung für das problem, dass nur ein Gateway fe80::1 haben kann.

Grüße

Adrian

On November 2, 2017 10:18:19 AM GMT+01:00, Tim Niemeyer <tim at tn-x.org> wrote:
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
-- 
franken-dev mailing list
franken-dev at freifunk.net
http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20171102/52679c8a/attachment.html>


Mehr Informationen über die Mailingliste franken-dev