From patchwork Thu Mar 8 20:24:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2/2] configurehood: Check for timestamp of hood file over LAN From: Adrian Schmutzler X-Patchwork-Id: 816 Message-Id: <1520540695-4303-2-git-send-email-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Date: Thu, 8 Mar 2018 21:24:55 +0100 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 Tested-by: Adrian Schmutzler --- 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