[PATCH 2/2] configurehood: Check for timestamp of hood file over LAN
Adrian Schmutzler
freifunk at adrianschmutzler.de
Do Mär 8 21:24:55 CET 2018
This patch does no more take the first hood file it finds, but
compares the timestamps provided.
Additionally, we again started to check for the gateway at the
end, but only take the file if its newer and FROM THE SAME HOOD.
Thus, we enable updates, but prohobit switching from a cable
hood to a WiFi peer. (Bug # 68)
Fixes #95.
Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
NOT TESTED!
---
.../fff/fff-hoods/files/usr/sbin/configurehood | 26 ++++++++++++++++------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index 127ce5b..3a6fb9b 100755
--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
@@ -145,6 +145,7 @@ else
# check eth first
oldhood=""
+ oldtime="0"
ethfile="${hoodfile}eth"
for eth in $(batctl if | grep "eth" | sed -nE 's/.*(eth[^:]+):.*/\1/p'); do
for mac in $(batctl n | grep "$eth" | sed -nE 's/.*eth[0-9.]+\s+([^\s]+)\s.*/\1/p'); do
@@ -154,6 +155,7 @@ else
json_load "$(cat "$ethfile")"
json_select hood
json_get_var newhood name
+ json_get_var newtime timestamp
if [ -n "$oldhood" ] && [ -n "$newhood" ] && ( ! [ "$newhood" = "$oldhood" ] ) ; then
# 2nd hood found, kill interface and go on (next try in 5 min.)
echo "Two hoods detected. Remove cables to stay in just one."
@@ -161,18 +163,28 @@ else
touch "$resetnetworkfile"
continue 2 # go to the next interface
fi
- mv "$ethfile" "$hoodfile" # Only use hoodfile if sane
+ if [ "$oldtime" -lt "$newtime" ] ; then
+ mv "$ethfile" "$hoodfile" # Only use hoodfile if sane and newer
+ oldtime="$newtime"
+ fi
[ -n "$oldhood" ] || oldhood="$newhood" # only set oldhood once
fi
done
done
- if [ ! -s "$hoodfile" ]; then
- # Only load hoodfile from gateway if not already present from local network
- # - This gives local network a precedence (take the hood from local network)
- # - This prevents file insertion from a third person, as I will only connect via LAN to who I trust
- wget -T15 -t5 "http://[fe80::1%br-mesh]:2342/keyxchangev2data" -O "$hoodfile"
+
+ # check gateway
+ wget -T15 -t5 "http://[fe80::1%br-mesh]:2342/keyxchangev2data" -O "$ethfile"
+ if [ -s "$ethfile" ]; then
+ json_load "$(cat "$ethfile")"
+ json_select hood
+ json_get_var newhood name
+ json_get_var newtime timestamp
+ if [ -z "$oldhood" ] || [ "$newhood" = "$oldhood" ] ; then
+ # Gateway on same hood, check for newer hood file
+ [ "$oldtime" -lt "$newtime" ] && mv "$ethfile" "$hoodfile" # Only use hoodfile if sane and newer
+ fi
fi
- #UPLINK: Do nothing
+ #SECTORFILE: Do nothing
fi
fi
fi
--
2.7.4
Mehr Informationen über die Mailingliste franken-dev