From patchwork Tue Jun 12 19:07:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [v4,1/2] Move hoodfile acquisition into function From: Fabian Blaese X-Patchwork-Id: 856 Message-Id: <20180612190701.30651-1-fabian@blaese.de> To: franken-dev@freifunk.net Cc: Jan Kraus , Adrian Schmutzler Date: Tue, 12 Jun 2018 21:07:00 +0200 Signed-off-by: Fabian Bläse Tested-by: Fabian Bläse Reviewed-by: Adrian Schmutzler Reviewed-by: Tim Niemeyer --- Apply after MacKnocker patchset! Changes in v2: - Fix indentation - Remove shebang - Improve usage message - Add failure return value to getKeyserverHoodfile if no file was received Changes in v3: - Fix messed up v2 Changes in v4: - remove 't' - move coordinate aquisition into getKeyserver function - add optional coordinate parameter in getKeyserver function --- .../fff-hoods/files/usr/lib/functions/fff/hoodfile | 92 ++++++++++++++++++++++ .../fff/fff-hoods/files/usr/sbin/configurehood | 41 ++-------- 2 files changed, 97 insertions(+), 36 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..4efaa66 --- /dev/null +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile @@ -0,0 +1,92 @@ +. /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 + lat=$(uci -q get fff.system.latitude) + long=$(uci -q get fff.system.longitude) + elif [ $# == 3 ]; then + lat=$2 + long=$3 + else + echo "Usage: getKeyserverHoodfile [ ]" + return 1 + fi + file=$1 + + echo "Getting hoodfile from Keyserver" + + if wget -T15 -t5 -O "$file" "http://keyserver.freifunk-franken.de/v2/?lat=$lat&long=$long"; then + return 0 + else + return 1 + fi +} diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood index e2c1fab..d06a62d 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 @@ -69,16 +70,14 @@ if [ -s "$hoodfilecopy" ] && isGatewayAvailable ; then fi fi -lat=$(uci -q get fff.system.latitude) -long=$(uci -q get fff.system.longitude) - if [ -s "$hoodlocal" ]; then hoodfile="$hoodlocal" echo "Use local hood file" 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 +98,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