From patchwork Sun Feb 10 22:11:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: packages/fff: Add fff-gwinfo From: Adrian Schmutzler X-Patchwork-Id: 1028 Message-Id: <20190210221143.2130-1-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Date: Sun, 10 Feb 2019 23:11:43 +0100 This package sends IP addresses and DNS ranges to the Monitoring. The current code version for the main script is available at: https://github.com/FreifunkFranken/fff-monitoring/blob/master/gwinfo/gwinfofirmware.sh Signed-off-by: Adrian Schmutzler --- Ich würde auch diese Package gerne in die offizielle FW mit aufnehmen. Es gibt drei Möglichkeiten: - Default: Eintrag in fff-base und micrond aktiv - Optional/built-in: Die Package wird mit in die Firmware kompiliert, aber der micrond fehlt, sodass by default keine Daten gesendet werden. Wer möchte, kann gwinfo einfach aktivieren, ohne selbst eine FW bauen zu müssen. - Optional/not selected: Die Package enthält den micrond, aber wird nicht in fff-base als Dependency eintragen. Damit wird sie in der offiziellen FW nicht mit einkompiliert, wer selbst FW baut kann die Package aber mit reinnehmen (dies ist im aktuellen Patch der Fall). Ich bitte um Feedback, wie die Meinung zu gwinfo ist. --- src/packages/fff/fff-gwinfo/Makefile | 39 +++++++++++++++ .../fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo | 1 + src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo | 55 ++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/packages/fff/fff-gwinfo/Makefile create mode 100644 src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo create mode 100755 src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo diff --git a/src/packages/fff/fff-gwinfo/Makefile b/src/packages/fff/fff-gwinfo/Makefile new file mode 100644 index 00000000..b4f01ee3 --- /dev/null +++ b/src/packages/fff/fff-gwinfo/Makefile @@ -0,0 +1,39 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fff-gwinfo +PKG_VERSION:=1.4.6 +PKG_RELEASE:=3 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + SECTION:=base + CATEGORY:=Freifunk + TITLE:= Freifunk-Franken GWinfo + URL:=https://github.com/FreifunkFranken/fff-monitoring/blob/master/gwinfo/gwinfofirmware.sh + DEPENDS:=+fff-network +fff-dhcp +endef + +define Package/$(PKG_NAME)/description + This package sends IP addresses and DHCP ranges to the Monitoring +endef + +define Build/Prepare + echo "all: " > $(PKG_BUILD_DIR)/Makefile +endef + +define Build/Configure + # nothing +endef + +define Build/Compile + # nothing +endef + +define Package/$(PKG_NAME)/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo b/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo new file mode 100644 index 00000000..aaaeca3f --- /dev/null +++ b/src/packages/fff/fff-gwinfo/files/usr/lib/micron.d/fff-gwinfo @@ -0,0 +1 @@ +3-59/5 * * * * /usr/sbin/gwinfo diff --git a/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo b/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo new file mode 100755 index 00000000..566951a7 --- /dev/null +++ b/src/packages/fff/fff-gwinfo/files/usr/sbin/gwinfo @@ -0,0 +1,55 @@ +#!/bin/sh +# +# Gateway data script for FFF Monitoring +# Copyright Adrian Schmutzler, 2018. +# License GPLv3 +# +# Gateway-Firmware Version 1.4.6 +# + +# Config +api_urls="https://monitoring.freifunk-franken.de/api/gwinfo" # space-separated list of addresses (api_urls="url1 url2") +batctlpath=/usr/sbin/batctl +hostname="$(uci -q get system.@system[0].hostname)" +statslink="$(uci -q get gateway.@gateway[0].statslink)" + +# Code +tmp=$(/bin/mktemp) +echo "{\"version\":\"1.4.6\",\"hostname\":\"$hostname\",\"stats_page\":\"$statslink\",\"netifs\":[" > $tmp + +comma="" +for netif in $(ls /sys/class/net); do + if [ "$netif" = "lo" ] || echo "$netif" | grep -q "w" ; then # remove wXap, wXmesh, etc. + continue + fi + mac="$(cat "/sys/class/net/$netif/address")" + batctl="$("$batctlpath" -m "$netif" if | grep "eth" | sed -n 's/:.*//p')" + + ipv4="" + ipv6="" + dhcpstart="" + dhcpend="" + if [ "$netif" = "bat0" ]; then + ipv4="$(ip -4 addr show dev br-mesh | grep " 10\." | sed 's/.* \(10\.[^ ]*\/[^ ]*\) .*/\1/')" + ipv6="$(ip -6 addr show dev br-mesh | grep " fd43" | grep '::' | sed 's/.* \(fd43[^ ]*\) .*/\1/')" + [ "$(echo "$ipv6" | wc -l)" = "1" ] || ipv6="" + dhcpstart="$(uci -q get dhcp.mesh.start)" + fi + + echo "$comma{\"mac\":\"$mac\",\"netif\":\"$netif\",\"vpnif\":\"$batctl\",\"ipv4\":\"$ipv4\",\"ipv6\":\"$ipv6\",\"dhcpstart\":\"$dhcpstart\",\"dhcpend\":\"$dhcpend\"}" >> $tmp + comma="," +done + +echo "],\"admins\":[" >> $tmp + +comma="" +for admin in $(uci -q get gateway.@gateway[0].admin); do + echo "$comma\"$admin\"" >> $tmp && comma="," +done + +echo "]}" >> $tmp + +for api_url in $api_urls; do + /usr/bin/curl -k -v -H "Content-type: application/json; charset=UTF-8" --data-binary @$tmp "$api_url" +done +/bin/rm "$tmp"