[PATCH] packages/fff: Add fff-gwinfo

Adrian Schmutzler freifunk at adrianschmutzler.de
So Feb 10 23:11:43 CET 2019


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 <freifunk at adrianschmutzler.de>

---

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. at system[0].hostname)"
+statslink="$(uci -q get gateway. at 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. at 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"
-- 
2.11.0



Mehr Informationen über die Mailingliste franken-dev