From patchwork Sat Jun 9 14:51:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [1/2] Move hoodfile acquisition into function From: Fabian Blaese X-Patchwork-Id: 845 Message-Id: <20180609145129.28707-1-fabian@blaese.de> To: franken-dev@freifunk.net Date: Sat, 9 Jun 2018 16:51:28 +0200 Signed-off-by: Fabian Bläse Reviewed-by: Christian Dresel Reviewed-by: Adrian Schmutzler --- .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 87 ++++++++++++++++++++++ .../fff/fff-hoods/files/usr/sbin/configurehood | 38 ++-------- 2 files changed, 92 insertions(+), 33 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..62487f9 --- /dev/null +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile @@ -0,0 +1,87 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh +. /lib/functions/fff/wireless + +getWirelessHoodfile() { + if [ $# != 1 ] + then + echo "Usage: getWirelessHoodfile " + 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 " + 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 + echo "Usage: getKeyserverHoodfile " + return 1 + fi + file=$1 + + echo "Getting hoodfile from Keyserver" + + wget -T15 -t5 -O "$file" "http://keyserver.freifunk-franken.de/v2/?lat=$lat&long=$long" +} diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood index e2c1fab..aee20e5 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 @@ -78,7 +79,8 @@ if [ -s "$hoodlocal" ]; then 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 +101,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