Message ID | 1505573269-5433-4-git-send-email-fff@chrisi01.de |
---|---|
State | Superseded |
Headers | show |
diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile new file mode 100644 index 0000000..f85178d --- /dev/null +++ b/src/packages/fff/fff-hoods/Makefile @@ -0,0 +1,39 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fff-hoods +PKG_VERSION:=0.0.1 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-hoods + +include $(INCLUDE_DIR)/package.mk + +define Package/fff-hoods + SECTION:=base + CATEGORY:=Freifunk + TITLE:= Freifunk-Franken hoods + URL:=http://www.freifunk-franken.de + DEPENDS:=+fff-network +endef + +define Package/fff-hoods/description + This package load and configures the current hood +endef + +define Build/Prepare + echo "all: " > $(PKG_BUILD_DIR)/Makefile +endef + +define Build/Configure + # nothing +endef + +define Build/Compile + # nothing +endef + +define Package/fff-hoods/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,fff-hoods)) diff --git a/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods new file mode 100644 index 0000000..49f53e3 --- /dev/null +++ b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods @@ -0,0 +1,5 @@ +#!/bin/sh +[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && { + sleep 3 + /usr/sbin/configurehood +} diff --git a/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods new file mode 100644 index 0000000..ca8d798 --- /dev/null +++ b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods @@ -0,0 +1 @@ +*/5 * * * * /usr/sbin/configurehood diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood new file mode 100755 index 0000000..b16f379 --- /dev/null +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -0,0 +1,201 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh +. /lib/functions/fff/wireless + +#Gatewaycheck function +isGatewayAvailable() { + if [ "$(batctl gwl | wc -l)" -gt 2 ]; then + return true; + else + return false; + fi +} + + +# hidden AP check + +if [ -f /tmp/hiddenapflag ]; then + if [ isGatewayAvailable ]; then + if ! wifiAddAP "$radio" "config.franken.freifunk.net" "configap" "configap" "1"; then + echo "Can't add AP interface on $radio." + exit 1 + else + #we must set here a fix ip adress + uci set network.configap=interface + uci set network.configap.proto='static' + uci set network.configap.ip6addr='fe80::1/64' + uci commit network + fi + else + rm /tmp/hiddenapflag + fi +fi + + +lat=$(uci get system.@system[0].latitude) +long=$(uci get system.@system[0].longitude) +hostname=$(cat /proc/sys/kernel/hostname) +[ "$hostname" = "OpenWrt" ] && hostname="" +[ "$hostname" = "" ] && hostname="$mac" + +test_ipv4_host1="keyserver.freifunk-franken.de" # Freifunk-Franken keyserver +test_ipv4_host2="8.8.8.8" # Google DNS +test_ipv6_host1="heise.de" # heise Zeitschriftenverlag + +# if we have Internet, we download the Hoodfile from the keyxchangev2 +if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null || + ping -w5 -c3 "$test_ipv4_host2" &>/dev/null || + ping6 -w5 -c3 "$test_ipv6_host1" &>/dev/null; then + wget -T15 -t5 "http://144.76.70.189/keyserver/json.php?lat=$lat&long=$long" -O /tmp/keyxchangev2data + #if no Internet, we connect to the hidden AP and download the file from another Node in range +else + # connect to wireless hidden ap here and download from the next router the json File -O /tmp/keyxchangev2data + # only to that, when we have no gateway in range. If the Uplinkrouter change the hood, we lost the GW and to this automatically again i think! Nice idea? + if [ ! isGatewayAvailable ]; then + #now we haven't a gateway in Range, we search for a hidden AP to get a keyxchangev2data file! + #first we delete all wifi settings + if ! wifiDelAll; 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 + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then + echo "$phy is 2.4 GHz" + radio=$(wifiAddPhy "$phy" "$BATMAN_CHANNEL") + if [ -z "$radio" ]; then + echo "Can't create radio for $phy" + exit 1 + fi + fi + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then + echo "$phy is 5 GHz" + radio=$(wifiAddPhy "$phy" "$BATMAN_CHANNEL_5GHZ") + if [ -z "$radio" ]; then + echo "Can't create radio for $phy" + exit 1 + fi + fi + #and here we add the station + if ! wifiAddSta "$radio" "config.franken.freifunk.net" "configSta"; then + echo "Can't add Sta interface on $radio." + exit 1 + 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]/keyxchangev2data" -O /tmp/keyxchangev2data + else + echo "We have a Gateway in Range, we load the keyxchangev2data from fe80::1" + wget -T15 -t5 "http://[fe80::1%br-mesh]/keyxchangev2data" -O /tmp/keyxchangev2data + fi + + +fi + +# we get a json file in this format: +# https://pw.freifunk-franken.de/patch/205/ +# but without signature, every hood file we get is valid! + +json_load "$(cat /tmp/keyxchangev2data)" +sumnew=$(sha256sum /tmp/keyxchangev2data | cut -f1 -d " ") +sumold=$(sha256sum /www/public/keyxchangev2data | cut -f1 -d " ") +if [ "$sumnew" != "$sumold" ] && [ -f /tmp/keyxchangev2data]; then + echo "New file detect, we reconfigure the Node"; + + # copy the file to webroot that other Meshrouter can download them + cp /tmp/keyxchangev2data /www/public/ + + json_select hood + + json_get_var hood name + json_get_var mesh_bssid mesh_bssid + json_get_var mesh_essid mesh_essid + json_get_var essid essid + # i think the next things we don't active this in the first version! we can do it later + #json_get_var channel2 channel2 + #json_get_var mode2 mode2 + #json_get_var type2 type2 + #json_get_var channel5 channel5 + #json_get_var mode5 mode5 + #json_get_var type5 type5 + #json_get_var protocol protocol + + echo "Setting hood name: $hood" + uci set system.@system[0].hood=$hood + + if ! wifiDelAll; then + echo "Can't delete current wifi setup" + exit 1 + fi + + for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then + echo "$phy is 2.4 GHz" + radio=$(wifiAddPhy "$phy" "1") + if [ -z "$radio" ]; then + echo "Can't create radio for $phy" + exit 1 + fi + fi + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then + echo "$phy is 5 GHz" + radio=$(wifiAddPhy "$phy" "13") + if [ -z "$radio" ]; then + echo "Can't create radio for $phy" + exit 1 + fi + fi + + if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0"; then + echo "Can't add AP interface on $radio." + exit 1 + fi + + # here we set a bit for add hidden AP + touch /tmp/hiddenapflag + + if ! wifiAddAdHocMesh "$radio" "$mesh_essid" "$mesh_bssid"; then + echo "Can't add AP interface on $radio." + exit 1 + fi + done + + echo "Loading wifi" + wifi + + +else + echo "we have no new file or we have no file get. We do nothing. We try it again in 5 minutes..."; +fi + +# and now we read the VPN Data and give this data to fff-vpn + + +json_select vpn +Index="1" +rm /tmp/fastd_fff_output +touch /tmp/fastd_fff_output +while json_select $Index > /dev/null +do + json_get_var protocol protocol + if [ "$protocol" == "fastd"]; then + json_get_var servername name + echo "####$servername.conf" >> /tmp/fastd_fff_output + echo "#name \"$servername\";" >> /tmp/fastd_fff_output + json_get_var key key + echo "key \"$key\";" >> /tmp/fastd_fff_output + json_get_var address address + json_get_var port port + echo "remote ipv4 \"$address\" port $port float;" >> /tmp/fastd_fff_output + fi + echo "" >> /tmp/fastd_fff_output + echo "###" >> /tmp/fastd_fff_output +done +#this we do every 5 minutes, because it can change the VPN Protocol +#and now we get to vpn-select Script and load VPNs +sh /usr/sbin/vpn-select
Hi Am Samstag, den 16.09.2017, 16:47 +0200 schrieb Christian Dresel: > ths packages connect to keyxchangev2 > after review we must change the serveradress! This is only a example > > > Signed-off-by: Christian Dresel <fff@chrisi01.de> > > Signed-off-by: Jan Kraus <mayosemmel@gmail.com> > > Update in v2: > - clean tabstops > - move the json vpn out of the if because we need this after reboot > > Update in v5: > !!UNTESTED!! > - change hidden AP ip to locallink > - Open hidden AP after more checks > - Load json File from Gateway if Gateway in Batman in Range > > Update in v6: > !!UNTESTED!! > - fix hidden station v6 > - fix -n to -f if > - Add function to check for a gateway and use this > - remove /etc/community.cfg and variables > - send fewer infos to keyxchangev2 > - add a check if /tmp/keyxchangev2 not downloadable and edit a bit on the wgets > - change the position from json_load and do this only 1 times > > > Signed-off-by: Christian Dresel <fff@chrisi01.de> > --- > src/packages/fff/fff-hoods/Makefile | 39 ++++ > .../files/etc/hotplug.d/iface/50-fff-hoods | 5 + > .../fff/fff-hoods/files/usr/lib/micron.d/fff-hoods | 1 + > .../fff/fff-hoods/files/usr/sbin/configurehood | 201 +++++++++++++++++++++ > 4 files changed, 246 insertions(+) > create mode 100644 src/packages/fff/fff-hoods/Makefile > create mode 100644 src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods > create mode 100644 src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods > create mode 100755 src/packages/fff/fff-hoods/files/usr/sbin/configurehood > > diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile > new file mode 100644 > index 0000000..f85178d > --- /dev/null > +++ b/src/packages/fff/fff-hoods/Makefile > @@ -0,0 +1,39 @@ > +include $(TOPDIR)/rules.mk > + > +PKG_NAME:=fff-hoods > +PKG_VERSION:=0.0.1 > +PKG_RELEASE:=1 > + > +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-hoods > + > +include $(INCLUDE_DIR)/package.mk > + > +define Package/fff-hoods > + SECTION:=base > + CATEGORY:=Freifunk > + TITLE:= Freifunk-Franken hoods > + URL:=http://www.freifunk-franken.de > + DEPENDS:=+fff-network > +endef > + > +define Package/fff-hoods/description > + This package load and configures the current hood > +endef > + > +define Build/Prepare > > + echo "all: " > $(PKG_BUILD_DIR)/Makefile > +endef > + > +define Build/Configure > > + # nothing > +endef > + > +define Build/Compile > > + # nothing > +endef > + > +define Package/fff-hoods/install > > + $(CP) ./files/* $(1)/ > +endef > + > +$(eval $(call BuildPackage,fff-hoods)) > diff --git a/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods > new file mode 100644 > index 0000000..49f53e3 > --- /dev/null > +++ b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods > @@ -0,0 +1,5 @@ > +#!/bin/sh > +[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && { > + sleep 3 > + /usr/sbin/configurehood > +} > diff --git a/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods > new file mode 100644 > index 0000000..ca8d798 > --- /dev/null > +++ b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods > @@ -0,0 +1 @@ > +*/5 * * * * /usr/sbin/configurehood > diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > new file mode 100755 > index 0000000..b16f379 > --- /dev/null > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > @@ -0,0 +1,201 @@ > +#!/bin/sh > + > +. /usr/share/libubox/jshn.sh > +. /lib/functions/fff/wireless Am Anfang des Scripts die /tmp/keyxchangev2data löschen. > +#Gatewaycheck function > +isGatewayAvailable() { > > + if [ "$(batctl gwl | wc -l)" -gt 2 ]; then > > + return true; > > + else > > + return false; > > + fi > +} > + > + > +# hidden AP check > + > +if [ -f /tmp/hiddenapflag ]; then > > + if [ isGatewayAvailable ]; then > > + if ! wifiAddAP "$radio" "config.franken.freifunk.net" "configap" "configap" "1"; then > > + echo "Can't add AP interface on $radio." > > + exit 1 > > + else > > + #we must set here a fix ip adress > > + uci set network.configap=interface > > + uci set network.configap.proto='static' > > + uci set network.configap.ip6addr='fe80::1/64' > > + uci commit network > > + fi > > + else > > + rm /tmp/hiddenapflag > > + fi > +fi > + > + > > +lat=$(uci get system.@system[0].latitude) > > +long=$(uci get system.@system[0].longitude) > +hostname=$(cat /proc/sys/kernel/hostname) > +[ "$hostname" = "OpenWrt" ] && hostname="" > +[ "$hostname" = "" ] && hostname="$mac" > + > +test_ipv4_host1="keyserver.freifunk-franken.de" # Freifunk-Franken keyserver > +test_ipv4_host2="8.8.8.8" # Google DNS > +test_ipv6_host1="heise.de" # heise Zeitschriftenverlag > + > +# if we have Internet, we download the Hoodfile from the keyxchangev2 > +if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null || > > + ping -w5 -c3 "$test_ipv4_host2" &>/dev/null || > > + ping6 -w5 -c3 "$test_ipv6_host1" &>/dev/null; then > > + wget -T15 -t5 "http://144.76.70.189/keyserver/json.php?lat=$lat&long=$long" -O /tmp/keyxchangev2data > > + #if no Internet, we connect to the hidden AP and download the file from another Node in range > +else > > + # connect to wireless hidden ap here and download from the next router the json File -O /tmp/keyxchangev2data > > + # only to that, when we have no gateway in range. If the Uplinkrouter change the hood, we lost the GW and to this automatically again i think! Nice idea? > > + if [ ! isGatewayAvailable ]; then > > + #now we haven't a gateway in Range, we search for a hidden AP to get a keyxchangev2data file! > > + #first we delete all wifi settings > > + if ! wifiDelAll; 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 > > + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then > > + echo "$phy is 2.4 GHz" > > + radio=$(wifiAddPhy "$phy" "$BATMAN_CHANNEL") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > > + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then > > + echo "$phy is 5 GHz" > > + radio=$(wifiAddPhy "$phy" "$BATMAN_CHANNEL_5GHZ") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > > + #and here we add the station > > + if ! wifiAddSta "$radio" "config.franken.freifunk.net" "configSta"; then > > + echo "Can't add Sta interface on $radio." > > + exit 1 > > + 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]/keyxchangev2data" -O /tmp/keyxchangev2data > > + else > > + echo "We have a Gateway in Range, we load the keyxchangev2data from fe80::1" > > + wget -T15 -t5 "http://[fe80::1%br-mesh]/keyxchangev2data" -O /tmp/keyxchangev2data > > + fi > + > + > +fi > + Prüfen, wenn /tmp/keyxchangev2data nicht da ist oder leer ist, dann einfach das Script beenden. Tim > +# we get a json file in this format: > +# https://pw.freifunk-franken.de/patch/205/ > +# but without signature, every hood file we get is valid! > + > +json_load "$(cat /tmp/keyxchangev2data)" > +sumnew=$(sha256sum /tmp/keyxchangev2data | cut -f1 -d " ") > +sumold=$(sha256sum /www/public/keyxchangev2data | cut -f1 -d " ") > +if [ "$sumnew" != "$sumold" ] && [ -f /tmp/keyxchangev2data]; then > > + echo "New file detect, we reconfigure the Node"; > + > > + # copy the file to webroot that other Meshrouter can download them > > + cp /tmp/keyxchangev2data /www/public/ > + > > + json_select hood > + > > + json_get_var hood name > > + json_get_var mesh_bssid mesh_bssid > > + json_get_var mesh_essid mesh_essid > > + json_get_var essid essid > > + # i think the next things we don't active this in the first version! we can do it later > > + #json_get_var channel2 channel2 > > + #json_get_var mode2 mode2 > > + #json_get_var type2 type2 > > + #json_get_var channel5 channel5 > > + #json_get_var mode5 mode5 > > + #json_get_var type5 type5 > > + #json_get_var protocol protocol > + > > + echo "Setting hood name: $hood" > > > + uci set system.@system[0].hood=$hood > + > > + if ! wifiDelAll; then > > + echo "Can't delete current wifi setup" > > + exit 1 > > + fi > + > > + for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do > > + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then > > + echo "$phy is 2.4 GHz" > > + radio=$(wifiAddPhy "$phy" "1") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > > + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then > > + echo "$phy is 5 GHz" > > + radio=$(wifiAddPhy "$phy" "13") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > + > > + if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0"; then > > + echo "Can't add AP interface on $radio." > > + exit 1 > > + fi > + > > + # here we set a bit for add hidden AP > > + touch /tmp/hiddenapflag > + > > + if ! wifiAddAdHocMesh "$radio" "$mesh_essid" "$mesh_bssid"; then > > + echo "Can't add AP interface on $radio." > > + exit 1 > > + fi > > + done > + > > + echo "Loading wifi" > > + wifi > + > + > +else > > + echo "we have no new file or we have no file get. We do nothing. We try it again in 5 minutes..."; > +fi > + > +# and now we read the VPN Data and give this data to fff-vpn > + > + > +json_select vpn > +Index="1" > +rm /tmp/fastd_fff_output > +touch /tmp/fastd_fff_output > +while json_select $Index > /dev/null > +do > > + json_get_var protocol protocol > > + if [ "$protocol" == "fastd"]; then > > + json_get_var servername name > > + echo "####$servername.conf" >> /tmp/fastd_fff_output > > + echo "#name \"$servername\";" >> /tmp/fastd_fff_output > > + json_get_var key key > > + echo "key \"$key\";" >> /tmp/fastd_fff_output > > + json_get_var address address > > + json_get_var port port > > + echo "remote ipv4 \"$address\" port $port float;" >> /tmp/fastd_fff_output > > + fi > > + echo "" >> /tmp/fastd_fff_output > > + echo "###" >> /tmp/fastd_fff_output > +done > +#this we do every 5 minutes, because it can change the VPN Protocol > +#and now we get to vpn-select Script and load VPNs > +sh /usr/sbin/vpn-select > -- > 2.1.4 >
Am Samstag, den 16.09.2017, 16:47 +0200 schrieb Christian Dresel: > ths packages connect to keyxchangev2 > after review we must change the serveradress! This is only a example > > > Signed-off-by: Christian Dresel <fff@chrisi01.de> > > Signed-off-by: Jan Kraus <mayosemmel@gmail.com> > > Update in v2: > - clean tabstops > - move the json vpn out of the if because we need this after reboot > > Update in v5: > !!UNTESTED!! > - change hidden AP ip to locallink > - Open hidden AP after more checks > - Load json File from Gateway if Gateway in Batman in Range > > Update in v6: > !!UNTESTED!! > - fix hidden station v6 > - fix -n to -f if > - Add function to check for a gateway and use this > - remove /etc/community.cfg and variables > - send fewer infos to keyxchangev2 > - add a check if /tmp/keyxchangev2 not downloadable and edit a bit on the wgets > - change the position from json_load and do this only 1 times > > > Signed-off-by: Christian Dresel <fff@chrisi01.de> > --- > src/packages/fff/fff-hoods/Makefile | 39 ++++ > .../files/etc/hotplug.d/iface/50-fff-hoods | 5 + > .../fff/fff-hoods/files/usr/lib/micron.d/fff-hoods | 1 + > .../fff/fff-hoods/files/usr/sbin/configurehood | 201 +++++++++++++++++++++ > 4 files changed, 246 insertions(+) > create mode 100644 src/packages/fff/fff-hoods/Makefile > create mode 100644 src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods > create mode 100644 src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods > create mode 100755 src/packages/fff/fff-hoods/files/usr/sbin/configurehood > > diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile > new file mode 100644 > index 0000000..f85178d > --- /dev/null > +++ b/src/packages/fff/fff-hoods/Makefile > @@ -0,0 +1,39 @@ > +include $(TOPDIR)/rules.mk > + > +PKG_NAME:=fff-hoods > +PKG_VERSION:=0.0.1 > +PKG_RELEASE:=1 > + > +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-hoods > + > +include $(INCLUDE_DIR)/package.mk > + > +define Package/fff-hoods > + SECTION:=base > + CATEGORY:=Freifunk > + TITLE:= Freifunk-Franken hoods > + URL:=http://www.freifunk-franken.de > + DEPENDS:=+fff-network > +endef > + > +define Package/fff-hoods/description > + This package load and configures the current hood > +endef > + > +define Build/Prepare > > + echo "all: " > $(PKG_BUILD_DIR)/Makefile > +endef > + > +define Build/Configure > > + # nothing > +endef > + > +define Build/Compile > > + # nothing > +endef > + > +define Package/fff-hoods/install > > + $(CP) ./files/* $(1)/ > +endef > + > +$(eval $(call BuildPackage,fff-hoods)) > diff --git a/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods > new file mode 100644 > index 0000000..49f53e3 > --- /dev/null > +++ b/src/packages/fff/fff-hoods/files/etc/hotplug.d/iface/50-fff-hoods > @@ -0,0 +1,5 @@ > +#!/bin/sh > +[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && { > + sleep 3 > + /usr/sbin/configurehood > +} > diff --git a/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods > new file mode 100644 > index 0000000..ca8d798 > --- /dev/null > +++ b/src/packages/fff/fff-hoods/files/usr/lib/micron.d/fff-hoods > @@ -0,0 +1 @@ > +*/5 * * * * /usr/sbin/configurehood > diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > new file mode 100755 > index 0000000..b16f379 > --- /dev/null > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > @@ -0,0 +1,201 @@ > +#!/bin/sh > + > +. /usr/share/libubox/jshn.sh > +. /lib/functions/fff/wireless > + > +#Gatewaycheck function > +isGatewayAvailable() { > > + if [ "$(batctl gwl | wc -l)" -gt 2 ]; then > > + return true; > > + else > > + return false; > > + fi > +} > + > + > +# hidden AP check > + > +if [ -f /tmp/hiddenapflag ]; then > > + if [ isGatewayAvailable ]; then > > + if ! wifiAddAP "$radio" "config.franken.freifunk.net" "configap" "configap" "1"; then > > + echo "Can't add AP interface on $radio." > > + exit 1 > > + else > > + #we must set here a fix ip adress > > + uci set network.configap=interface > > + uci set network.configap.proto='static' > > + uci set network.configap.ip6addr='fe80::1/64' > > + uci commit network > > + fi > > + else > > + rm /tmp/hiddenapflag > > + fi > +fi > + > + > > +lat=$(uci get system.@system[0].latitude) > > +long=$(uci get system.@system[0].longitude) > +hostname=$(cat /proc/sys/kernel/hostname) > +[ "$hostname" = "OpenWrt" ] && hostname="" > +[ "$hostname" = "" ] && hostname="$mac" > + > +test_ipv4_host1="keyserver.freifunk-franken.de" # Freifunk-Franken keyserver > +test_ipv4_host2="8.8.8.8" # Google DNS > +test_ipv6_host1="heise.de" # heise Zeitschriftenverlag > + > +# if we have Internet, we download the Hoodfile from the keyxchangev2 > +if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null || > > + ping -w5 -c3 "$test_ipv4_host2" &>/dev/null || > > + ping6 -w5 -c3 "$test_ipv6_host1" &>/dev/null; then > + wget -T15 -t5 "http://144.76.70.189/keyserver/json.php?lat=$lat&long=$long" -O /tmp/keyxchangev2data URL ist noch falsch: http://keyserver.freifunk-franken.de/v2/?lat=$lat&long=$long Tim > + #if no Internet, we connect to the hidden AP and download the file from another Node in range > +else > > + # connect to wireless hidden ap here and download from the next router the json File -O /tmp/keyxchangev2data > > + # only to that, when we have no gateway in range. If the Uplinkrouter change the hood, we lost the GW and to this automatically again i think! Nice idea? > > + if [ ! isGatewayAvailable ]; then > > + #now we haven't a gateway in Range, we search for a hidden AP to get a keyxchangev2data file! > > + #first we delete all wifi settings > > + if ! wifiDelAll; 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 > > + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then > > + echo "$phy is 2.4 GHz" > > + radio=$(wifiAddPhy "$phy" "$BATMAN_CHANNEL") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > > + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then > > + echo "$phy is 5 GHz" > > + radio=$(wifiAddPhy "$phy" "$BATMAN_CHANNEL_5GHZ") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > > + #and here we add the station > > + if ! wifiAddSta "$radio" "config.franken.freifunk.net" "configSta"; then > > + echo "Can't add Sta interface on $radio." > > + exit 1 > > + 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]/keyxchangev2data" -O /tmp/keyxchangev2data > > + else > > + echo "We have a Gateway in Range, we load the keyxchangev2data from fe80::1" > > + wget -T15 -t5 "http://[fe80::1%br-mesh]/keyxchangev2data" -O /tmp/keyxchangev2data > > + fi > + > + > +fi > + > +# we get a json file in this format: > +# https://pw.freifunk-franken.de/patch/205/ > +# but without signature, every hood file we get is valid! > + > +json_load "$(cat /tmp/keyxchangev2data)" > +sumnew=$(sha256sum /tmp/keyxchangev2data | cut -f1 -d " ") > +sumold=$(sha256sum /www/public/keyxchangev2data | cut -f1 -d " ") > +if [ "$sumnew" != "$sumold" ] && [ -f /tmp/keyxchangev2data]; then > > + echo "New file detect, we reconfigure the Node"; > + > > + # copy the file to webroot that other Meshrouter can download them > > + cp /tmp/keyxchangev2data /www/public/ > + > > + json_select hood > + > > + json_get_var hood name > > + json_get_var mesh_bssid mesh_bssid > > + json_get_var mesh_essid mesh_essid > > + json_get_var essid essid > > + # i think the next things we don't active this in the first version! we can do it later > > + #json_get_var channel2 channel2 > > + #json_get_var mode2 mode2 > > + #json_get_var type2 type2 > > + #json_get_var channel5 channel5 > > + #json_get_var mode5 mode5 > > + #json_get_var type5 type5 > > + #json_get_var protocol protocol > + > > + echo "Setting hood name: $hood" > > > + uci set system.@system[0].hood=$hood > + > > + if ! wifiDelAll; then > > + echo "Can't delete current wifi setup" > > + exit 1 > > + fi > + > > + for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do > > + if iw phy "$phy" info | grep -q -m1 "2... MHz"; then > > + echo "$phy is 2.4 GHz" > > + radio=$(wifiAddPhy "$phy" "1") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > > + if iw phy "$phy" info | grep -q -m1 "5... MHz"; then > > + echo "$phy is 5 GHz" > > + radio=$(wifiAddPhy "$phy" "13") > > + if [ -z "$radio" ]; then > > + echo "Can't create radio for $phy" > > + exit 1 > > + fi > > + fi > + > > + if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0"; then > > + echo "Can't add AP interface on $radio." > > + exit 1 > > + fi > + > > + # here we set a bit for add hidden AP > > + touch /tmp/hiddenapflag > + > > + if ! wifiAddAdHocMesh "$radio" "$mesh_essid" "$mesh_bssid"; then > > + echo "Can't add AP interface on $radio." > > + exit 1 > > + fi > > + done > + > > + echo "Loading wifi" > > + wifi > + > + > +else > > + echo "we have no new file or we have no file get. We do nothing. We try it again in 5 minutes..."; > +fi > + > +# and now we read the VPN Data and give this data to fff-vpn > + > + > +json_select vpn > +Index="1" > +rm /tmp/fastd_fff_output > +touch /tmp/fastd_fff_output > +while json_select $Index > /dev/null > +do > > + json_get_var protocol protocol > > + if [ "$protocol" == "fastd"]; then > > + json_get_var servername name > > + echo "####$servername.conf" >> /tmp/fastd_fff_output > > + echo "#name \"$servername\";" >> /tmp/fastd_fff_output > > + json_get_var key key > > + echo "key \"$key\";" >> /tmp/fastd_fff_output > > + json_get_var address address > > + json_get_var port port > > + echo "remote ipv4 \"$address\" port $port float;" >> /tmp/fastd_fff_output > > + fi > > + echo "" >> /tmp/fastd_fff_output > > + echo "###" >> /tmp/fastd_fff_output > +done > +#this we do every 5 minutes, because it can change the VPN Protocol > +#and now we get to vpn-select Script and load VPNs > +sh /usr/sbin/vpn-select > -- > 2.1.4 >