diff --git a/src/packages/fff/fff-babeld/Makefile b/src/packages/fff/fff-babeld/Makefile
index 29fd8e5..b2ccac8 100644
--- a/src/packages/fff/fff-babeld/Makefile
+++ b/src/packages/fff/fff-babeld/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-babeld
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_BUILD_DIR:=$(BUILD_DIR)/fff-babeld
diff --git a/src/packages/fff/fff-babeld/files/usr/lib/nodewatcher.d/80-babeld.sh b/src/packages/fff/fff-babeld/files/usr/lib/nodewatcher.d/80-babeld.sh
new file mode 100755
index 0000000..8019697
--- /dev/null
+++ b/src/packages/fff/fff-babeld/files/usr/lib/nodewatcher.d/80-babeld.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+if pgrep babeld >/dev/null; then
+ neighbours="$(echo dump | nc ::1 33123 | grep '^add neighbour' |
+ awk '{
+ for (i=2; i < NF; i += 2) {
+ vars[$i] = $(i+1)
+ }
+ }
+ {
+ printf "%s%s%s", vars["address"], vars["if"], vars["cost"]
+ }')"
+ echo -n "$neighbours"
+fi
+
+exit 0
diff --git a/src/packages/fff/fff-batman-adv/Makefile b/src/packages/fff/fff-batman-adv/Makefile
index 3e4e9d1..aae462b 100644
--- a/src/packages/fff/fff-batman-adv/Makefile
+++ b/src/packages/fff/fff-batman-adv/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-batman-adv
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
diff --git a/src/packages/fff/fff-batman-adv/files/usr/lib/nodewatcher.d/30-batman-adv.sh b/src/packages/fff/fff-batman-adv/files/usr/lib/nodewatcher.d/30-batman-adv.sh
new file mode 100755
index 0000000..37100a2
--- /dev/null
+++ b/src/packages/fff/fff-batman-adv/files/usr/lib/nodewatcher.d/30-batman-adv.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+# Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
+# License; GPL v3
+
+debug() {
+ (>&2 echo "$1")
+}
+
+debug "$(date): Collecting information from batman advanced and its interfaces"
+#B.A.T.M.A.N. advanced
+if [ -f /sys/module/batman_adv/version ]; then
+ for iface in $(batctl if | sed 's/ //'); do
+ status=${iface##*:}
+ iface=${iface%%:*}
+ BATMAN_ADV_INTERFACES=$BATMAN_ADV_INTERFACES"<$iface>$iface$status$iface>"
+ done
+
+ echo -n "$BATMAN_ADV_INTERFACES"
+
+ # Build a list of direct neighbors
+ batman_adv_originators=$(/usr/sbin/batctl o -H | awk \
+ 'BEGIN { FS=" "; i=0 } # set the delimiter to " "
+ { sub("\\(", "", $0) # remove parentheses
+ sub("\\)", "", $0)
+ sub("\\[", "", $0)
+ sub("\\]", "", $0)
+ sub("\\*", "", $0)
+ sub(" ", " ", $0)
+ o=$1".*"$1 # build a regex to find lines that contains the $1 (=originator) twice
+ if ($0 ~ o) # filter for this regex (will remove entries without direct neighbor)
+ {
+ printf ""$1""$3""$4""$2""$5""
+ i++
+ }
+ }')
+
+ echo -n "$batman_adv_originators"
+
+ echo -n "$(/usr/sbin/batctl gw)"
+
+ batman_adv_gateway_list=$(/usr/sbin/batctl gwl -H | awk \
+ 'BEGIN { FS=" "; i=0 }
+ /No gateways/ { next }
+ { sub("\\(", "", $0)
+ sub("\\)", "", $0)
+ sub("\\[ *", "", $0)
+ sub("\\]:", "", $0)
+ sub("\\* ", "true ", $0)
+ sub(" ", "false ", $0)
+ printf ""$1""$2""$3""$4""$5""$6" "$7" "$8""
+ i++
+ }')
+
+ echo -n "$batman_adv_gateway_list"
+else
+ debug "$(date): No batman data .."
+ exit 1
+fi
+
+exit 0
diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile
index 0c7e2bd..88f3bb7 100644
--- a/src/packages/fff/fff-network/Makefile
+++ b/src/packages/fff/fff-network/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-network
-PKG_RELEASE:=18
+PKG_RELEASE:=19
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/94-fff-nodewatcher-network b/src/packages/fff/fff-network/files/etc/uci-defaults/94-fff-nodewatcher-network
new file mode 100644
index 0000000..353ab1b
--- /dev/null
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/94-fff-nodewatcher-network
@@ -0,0 +1,9 @@
+uci batch <&2 echo "$1")
+}
+
+inArray() {
+ local value
+ for value in $1; do
+ if [ "$value" = "$2" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+debug "$(date): Collecting information from network interfaces"
+
+#Get interfaces
+interface_data=""
+#Loop interfaces
+#for entry in $IFACES; do
+for filename in $(grep 'up\|unknown' /sys/class/net/*/operstate); do
+ ifpath=${filename%/operstate*}
+ iface=${ifpath#/sys/class/net/}
+ if inArray "$IFACEBLACKLIST" "$iface"; then
+ continue
+ fi
+
+ #Get interface data for whitelisted interfaces
+ # shellcheck disable=SC2016
+ awkscript='
+ /ether/ { printf ""$2"" }
+ /mtu/ { printf ""$5"" }'
+ if inArray "$IPWHITELIST" "$iface"; then
+ # shellcheck disable=SC2016
+ awkscript=$awkscript'
+ /inet / { split($2, a, "/"); printf ""a[1]"" }
+ /inet6/ && /scope global/ { printf ""$2"" }
+ /inet6/ && /scope link/ { printf ""$2""}'
+ fi
+ addrs=$(ip addr show dev "${iface}" | awk "$awkscript")
+
+ traffic_rx=$(cat "$ifpath/statistics/rx_bytes")
+ traffic_tx=$(cat "$ifpath/statistics/tx_bytes")
+
+ interface_data=$interface_data"<$iface>$iface$addrs$traffic_rx$traffic_tx"
+
+ interface_data=$interface_data$(iwconfig "${iface}" 2>/dev/null | awk -F':' '
+ /Mode/{ split($2, m, " "); printf ""m[1]"" }
+ /Cell/{ split($0, c, " "); printf ""c[5]"" }
+ /ESSID/ { split($0, e, "\""); printf ""e[2]"" }
+ /Freq/{ split($3, f, " "); printf ""f[1]f[2]"" }
+ /Tx-Power/{ split($0, p, "="); sub(/[[:space:]]*$/, "", p[2]); printf ""p[2]"" }
+ ')
+
+ interface_data=$interface_data$(iw dev "${iface}" info 2>/dev/null | awk '
+ /ssid/{ split($0, s, " "); printf ""s[2]"" }
+ /type/ { split($0, t, " "); printf ""t[2]"" }
+ /channel/{ split($0, c, " "); printf ""c[2]"" }
+ /width/{ split($0, w, ": "); sub(/ .*/, "", w[2]); printf ""w[2]"" }
+ ')
+
+ interface_data=$interface_data"$iface>"
+done
+
+echo -n "$interface_data"
+
+exit 0
diff --git a/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/50-clients.sh b/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/50-clients.sh
new file mode 100755
index 0000000..c4a0a61
--- /dev/null
+++ b/src/packages/fff/fff-network/files/usr/lib/nodewatcher.d/50-clients.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+# Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
+# License; GPL v3
+
+MESH_INTERFACE=$(uci get nodewatcher.@network[0].mesh_interface)
+
+debug() {
+ (>&2 echo "$1")
+}
+
+debug "$(date): Collecting information about connected clients"
+
+client_count=0
+dataclient=""
+CLIENT_INTERFACES=$(ls "/sys/class/net/$MESH_INTERFACE/brif" | grep -v '^bat')
+for clientif in ${CLIENT_INTERFACES}; do
+ cc=$(bridge fdb show br "$MESH_INTERFACE" brport "$clientif" | grep -v self | grep -v permanent -c)
+ client_count=$((client_count + cc))
+ dataclient="$dataclient<$clientif>$cc$clientif>"
+done
+
+echo -n "$client_count"
+echo -n "$dataclient"
+
+exit 0
diff --git a/src/packages/fff/fff-nodewatcher/Makefile b/src/packages/fff/fff-nodewatcher/Makefile
index 0ed6684..423b728 100644
--- a/src/packages/fff/fff-nodewatcher/Makefile
+++ b/src/packages/fff/fff-nodewatcher/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-nodewatcher
-PKG_RELEASE:=55
+PKG_RELEASE:=56
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
diff --git a/src/packages/fff/fff-nodewatcher/files/etc/uci-defaults/93-fff-nodewatcher b/src/packages/fff/fff-nodewatcher/files/etc/uci-defaults/93-fff-nodewatcher
index 4e56435..0fc2e90 100644
--- a/src/packages/fff/fff-nodewatcher/files/etc/uci-defaults/93-fff-nodewatcher
+++ b/src/packages/fff/fff-nodewatcher/files/etc/uci-defaults/93-fff-nodewatcher
@@ -8,10 +8,6 @@ uci batch <&2 echo "$1")
+}
+
+#Get system data from other locations
+debug "$(date): Collecting basic system status data"
+hostname="$(cat /proc/sys/kernel/hostname)"
+mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
+[ "$hostname" = "OpenWrt" ] && hostname="$mac"
+[ "$hostname" = "FFF" ] && hostname="$mac"
+description="$(uci -q get fff.system.description)"
+if [ -n "$description" ]; then
+ description=""
+fi
+latitude="$(uci -q get fff.system.latitude)"
+longitude="$(uci -q get fff.system.longitude)"
+if [ -n "$longitude" -a -n "$latitude" ]; then
+ geo="$latitude$longitude";
+fi
+position_comment="$(uci -q get fff.system.position_comment)"
+if [ -n "$position_comment" ]; then
+ position_comment=""
+fi
+contact="$(uci -q get fff.system.contact)"
+if [ -n "$contact" ]; then
+ contact="$contact"
+fi
+uptime=$(awk '{ printf ""$1""$2"" }' /proc/uptime)
+
+memory=$(awk '
+ /^MemTotal/ { printf ""$2"" }
+ /^Cached:/ { printf ""$2"" }
+ /^Buffers/ { printf ""$2"" }
+ /^MemFree/ { printf ""$2"" }
+' /proc/meminfo)
+cpu=$(awk -F': ' '
+ /model/ { printf ""$2"" }
+ /system type/ { printf ""$2"" }
+ /platform/ { printf ""$2"" }
+' /proc/cpuinfo)
+model="$(cat /var/sysinfo/model)"
+local_time="$(date +%s)"
+load=$(awk '{ printf ""$3""$4"" }' /proc/loadavg)
+
+debug "$(date): Collecting version information"
+
+batman_adv_version=$(cat /sys/module/batman_adv/version)
+kernel_version=$(uname -r)
+if [ -x /usr/bin/fastd ]; then
+ fastd_version="$(/usr/bin/fastd -v | awk '{ print $2 }')"
+fi
+nodewatcher_version=$SCRIPT_VERSION
+if [ -x /usr/sbin/babeld ]; then
+ babel_version="$(/usr/sbin/babeld -V 2>&1)"
+fi
+
+if [ -f "$SCRIPT_STATUS_FILE" ]; then
+ status_text="$(cat "$SCRIPT_STATUS_FILE")"
+fi
+
+# Checks if fastd is running
+if pidof fastd >/dev/null ; then
+ vpn_active="1"
+else
+ vpn_active="0"
+fi
+
+# example for /etc/openwrt_release:
+#DISTRIB_ID="OpenWrt"
+#DISTRIB_RELEASE="Attitude Adjustment"
+#DISTRIB_REVISION="r35298"
+#DISTRIB_CODENAME="attitude_adjustment"
+#DISTRIB_TARGET="atheros/generic"
+#DISTRIB_DESCRIPTION="OpenWrt Attitude Adjustment 12.09-rc1"
+. /etc/openwrt_release
+distname=$DISTRIB_ID
+distversion=$DISTRIB_RELEASE
+
+# example for /etc/firmware_release:
+#FIRMWARE_VERSION="95f36685e7b6cbf423f02cf5c7f1e785fd4ccdae-dirty"
+#BUILD_DATE="build date: Di 29. Jan 19:33:34 CET 2013"
+#OPENWRT_CORE_REVISION="35298"
+#OPENWRT_FEEDS_PACKAGES_REVISION="35298"
+. /etc/firmware_release
+
+SYSTEM_DATA="online"
+SYSTEM_DATA=$SYSTEM_DATA"$status_text"
+SYSTEM_DATA=$SYSTEM_DATA"$hostname"
+SYSTEM_DATA=$SYSTEM_DATA"${description}"
+SYSTEM_DATA=$SYSTEM_DATA"${geo}"
+SYSTEM_DATA=$SYSTEM_DATA"${position_comment}"
+SYSTEM_DATA=$SYSTEM_DATA"${contact}"
+SYSTEM_DATA=$SYSTEM_DATA"$(uci -q get "system.@system[0].hood")"
+SYSTEM_DATA=$SYSTEM_DATA"$(uci -q get "system.@system[0].hoodid")"
+SYSTEM_DATA=$SYSTEM_DATA"$distname"
+SYSTEM_DATA=$SYSTEM_DATA"$distversion"
+SYSTEM_DATA=$SYSTEM_DATA"$cpu"
+SYSTEM_DATA=$SYSTEM_DATA"$model"
+SYSTEM_DATA=$SYSTEM_DATA"$memory"
+SYSTEM_DATA=$SYSTEM_DATA"$load"
+SYSTEM_DATA=$SYSTEM_DATA"$uptime"
+SYSTEM_DATA=$SYSTEM_DATA"$local_time"
+SYSTEM_DATA=$SYSTEM_DATA"$batman_adv_version"
+SYSTEM_DATA=$SYSTEM_DATA"$kernel_version"
+SYSTEM_DATA=$SYSTEM_DATA"$fastd_version"
+SYSTEM_DATA=$SYSTEM_DATA"$nodewatcher_version"
+SYSTEM_DATA=$SYSTEM_DATA"$babel_version"
+SYSTEM_DATA=$SYSTEM_DATA"$FIRMWARE_VERSION"
+SYSTEM_DATA=$SYSTEM_DATA"$BUILD_DATE"
+SYSTEM_DATA=$SYSTEM_DATA"$OPENWRT_CORE_REVISION"
+SYSTEM_DATA=$SYSTEM_DATA"$OPENWRT_FEEDS_PACKAGES_REVISION"
+SYSTEM_DATA=$SYSTEM_DATA"$vpn_active"
+
+echo -n "$SYSTEM_DATA"
+
+exit 0
diff --git a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
index 42e5ce8..21880fb 100755
--- a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
+++ b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
@@ -7,327 +7,65 @@ test -f /tmp/started || exit
# Allow only one instance
lockfile="/var/lock/${0##*/}.lock"
if ! lock -n "$lockfile"; then
- echo "Only one instance of $0 allowed."
- exit 1
+ echo "Only one instance of $0 allowed."
+ exit 1
fi
trap "lock -u \"$lockfile\"" INT TERM EXIT
-SCRIPT_VERSION="55"
+[ -s /etc/config/nodewatcher ] || exit 1
-#Get the configuration from the uci configuration file
-#If it does not exists, then get it from a normal bash file with variables.
-if [ -f /etc/config/nodewatcher ];then
- SCRIPT_ERROR_LEVEL=$(uci get nodewatcher.@script[0].error_level)
- SCRIPT_LOGFILE=$(uci get nodewatcher.@script[0].logfile)
- SCRIPT_DATA_FILE=$(uci get nodewatcher.@script[0].data_file)
- MESH_INTERFACE=$(uci get nodewatcher.@network[0].mesh_interface)
- IFACEBLACKLIST=$(uci get nodewatcher.@network[0].iface_blacklist)
- IPWHITELIST=$(uci get nodewatcher.@network[0].ip_whitelist)
- SCRIPT_STATUS_FILE=$(uci get nodewatcher.@script[0].status_text_file)
-else
- . "$(dirname "$0")/nodewatcher_config"
-fi
+SCRIPT_ERROR_LEVEL=$(uci get nodewatcher.@script[0].error_level)
+SCRIPT_LOGFILE=$(uci get nodewatcher.@script[0].logfile)
+SCRIPT_DATA_FILE=$(uci get nodewatcher.@script[0].data_file)
if [ "$SCRIPT_ERROR_LEVEL" -gt "1" ]; then
- err() {
- echo "$1" >> "$SCRIPT_LOGFILE"
- }
+ debug() {
+ echo "$1" >> "$SCRIPT_LOGFILE"
+ }
else
- err() {
- :
- }
+ debug() {
+ :
+ }
fi
#This method checks if the log file has become too big and deletes the first X lines
delete_log() {
- if [ -f "$SCRIPT_LOGFILE" ]; then
- if [ "$(find "$SCRIPT_LOGFILE" -printf "%s")" -gt "6000" ]; then
- sed -i '1,60d' "$SCRIPT_LOGFILE"
- err "$(date): Logfile has been made smaller"
- fi
- fi
-}
-
-inArray() {
- local value
- for value in $1; do
- if [ "$value" = "$2" ]; then
- return 0
- fi
- done
- return 1
+ if [ -f "$SCRIPT_LOGFILE" ]; then
+ if [ "$(find "$SCRIPT_LOGFILE" -printf "%s")" -gt "6000" ]; then
+ sed -i '1,60d' "$SCRIPT_LOGFILE"
+ debug "$(date): Logfile has been made smaller"
+ fi
+ fi
}
#This method generates the crawl data XML file that is being fetched by netmon
#and provided by a small local httpd
crawl() {
- #Get system data from other locations
- err "$(date): Collecting basic system status data"
- hostname="$(cat /proc/sys/kernel/hostname)"
- mac=$(awk '{ mac=toupper($1); gsub(":", "", mac); print mac }' /sys/class/net/br-mesh/address 2>/dev/null)
- [ "$hostname" = "OpenWrt" ] && hostname="$mac"
- [ "$hostname" = "FFF" ] && hostname="$mac"
- description="$(uci -q get fff.system.description)"
- if [ -n "$description" ]; then
- description=""
- fi
- latitude="$(uci -q get fff.system.latitude)"
- longitude="$(uci -q get fff.system.longitude)"
- if [ -n "$longitude" -a -n "$latitude" ]; then
- geo="$latitude$longitude";
- fi
- position_comment="$(uci -q get fff.system.position_comment)"
- if [ -n "$position_comment" ]; then
- position_comment=""
- fi
- contact="$(uci -q get fff.system.contact)"
- if [ -n "$contact" ]; then
- contact="$contact"
- fi
- uptime=$(awk '{ printf ""$1""$2"" }' /proc/uptime)
+ debug "$(date): Putting all information into a XML-File and save it at $SCRIPT_DATA_FILE"
- memory=$(awk '
- /^MemTotal/ { printf ""$2"" }
- /^Cached:/ { printf ""$2"" }
- /^Buffers/ { printf ""$2"" }
- /^MemFree/ { printf ""$2"" }
- ' /proc/meminfo)
- cpu=$(awk -F': ' '
- /model/ { printf ""$2"" }
- /system type/ { printf ""$2"" }
- /platform/ { printf ""$2"" }
- ' /proc/cpuinfo)
- model="$(cat /var/sysinfo/model)"
- local_time="$(date +%s)"
- load=$(awk '{ printf ""$3""$4"" }' /proc/loadavg)
+ DATA=""
- err "$(date): Collecting version information"
+ for f in /usr/lib/nodewatcher.d/*.sh; do
+ tmp="$($f)"
+ DATA="$DATA$tmp"
+ done
- batman_adv_version=$(cat /sys/module/batman_adv/version)
- kernel_version=$(uname -r)
- if [ -x /usr/bin/fastd ]; then
- fastd_version="$(/usr/bin/fastd -v | awk '{ print $2 }')"
- fi
- nodewatcher_version=$SCRIPT_VERSION
- if [ -x /usr/sbin/babeld ]; then
- babel_version="$(/usr/sbin/babeld -V 2>&1)"
- fi
+ DATA="$DATA"
- if [ -f "$SCRIPT_STATUS_FILE" ]; then
- status_text="$(cat "$SCRIPT_STATUS_FILE")"
- fi
-
- # Checks if fastd is running
- if pidof fastd >/dev/null ; then
- vpn_active="1"
- else
- vpn_active="0"
- fi
-
- # example for /etc/openwrt_release:
- #DISTRIB_ID="OpenWrt"
- #DISTRIB_RELEASE="Attitude Adjustment"
- #DISTRIB_REVISION="r35298"
- #DISTRIB_CODENAME="attitude_adjustment"
- #DISTRIB_TARGET="atheros/generic"
- #DISTRIB_DESCRIPTION="OpenWrt Attitude Adjustment 12.09-rc1"
- . /etc/openwrt_release
- distname=$DISTRIB_ID
- distversion=$DISTRIB_RELEASE
-
- # example for /etc/firmware_release:
- #FIRMWARE_VERSION="95f36685e7b6cbf423f02cf5c7f1e785fd4ccdae-dirty"
- #BUILD_DATE="build date: Di 29. Jan 19:33:34 CET 2013"
- #OPENWRT_CORE_REVISION="35298"
- #OPENWRT_FEEDS_PACKAGES_REVISION="35298"
- . /etc/firmware_release
-
- SYSTEM_DATA="online"
- SYSTEM_DATA=$SYSTEM_DATA"$status_text"
- SYSTEM_DATA=$SYSTEM_DATA"$hostname"
- SYSTEM_DATA=$SYSTEM_DATA"${description}"
- SYSTEM_DATA=$SYSTEM_DATA"${geo}"
- SYSTEM_DATA=$SYSTEM_DATA"${position_comment}"
- SYSTEM_DATA=$SYSTEM_DATA"${contact}"
- SYSTEM_DATA=$SYSTEM_DATA"$(uci -q get "system.@system[0].hood")"
- SYSTEM_DATA=$SYSTEM_DATA"$(uci -q get "system.@system[0].hoodid")"
- SYSTEM_DATA=$SYSTEM_DATA"$distname"
- SYSTEM_DATA=$SYSTEM_DATA"$distversion"
- SYSTEM_DATA=$SYSTEM_DATA"$cpu"
- SYSTEM_DATA=$SYSTEM_DATA"$model"
- SYSTEM_DATA=$SYSTEM_DATA"$memory"
- SYSTEM_DATA=$SYSTEM_DATA"$load"
- SYSTEM_DATA=$SYSTEM_DATA"$uptime"
- SYSTEM_DATA=$SYSTEM_DATA"$local_time"
- SYSTEM_DATA=$SYSTEM_DATA"$batman_adv_version"
- SYSTEM_DATA=$SYSTEM_DATA"$kernel_version"
- SYSTEM_DATA=$SYSTEM_DATA"$fastd_version"
- SYSTEM_DATA=$SYSTEM_DATA"$nodewatcher_version"
- SYSTEM_DATA=$SYSTEM_DATA"$babel_version"
- SYSTEM_DATA=$SYSTEM_DATA"$FIRMWARE_VERSION"
- SYSTEM_DATA=$SYSTEM_DATA"$BUILD_DATE"
- SYSTEM_DATA=$SYSTEM_DATA"$OPENWRT_CORE_REVISION"
- SYSTEM_DATA=$SYSTEM_DATA"$OPENWRT_FEEDS_PACKAGES_REVISION"
- SYSTEM_DATA=$SYSTEM_DATA"$vpn_active"
-
- err "$(date): Collecting information from network interfaces"
-
- #Get interfaces
- interface_data=""
- #Loop interfaces
- #for entry in $IFACES; do
- for filename in $(grep 'up\|unknown' /sys/class/net/*/operstate); do
- ifpath=${filename%/operstate*}
- iface=${ifpath#/sys/class/net/}
- if inArray "$IFACEBLACKLIST" "$iface"; then
- continue
- fi
-
- #Get interface data for whitelisted interfaces
- # shellcheck disable=SC2016
- awkscript='
- /ether/ { printf ""$2"" }
- /mtu/ { printf ""$5"" }'
- if inArray "$IPWHITELIST" "$iface"; then
- # shellcheck disable=SC2016
- awkscript=$awkscript'
- /inet / { split($2, a, "/"); printf ""a[1]"" }
- /inet6/ && /scope global/ { printf ""$2"" }
- /inet6/ && /scope link/ { printf ""$2""}'
- fi
- addrs=$(ip addr show dev "${iface}" | awk "$awkscript")
-
- traffic_rx=$(cat "$ifpath/statistics/rx_bytes")
- traffic_tx=$(cat "$ifpath/statistics/tx_bytes")
-
- interface_data=$interface_data"<$iface>$iface$addrs$traffic_rx$traffic_tx"
-
- interface_data=$interface_data$(iwconfig "${iface}" 2>/dev/null | awk -F':' '
- /Mode/{ split($2, m, " "); printf ""m[1]"" }
- /Cell/{ split($0, c, " "); printf ""c[5]"" }
- /ESSID/ { split($0, e, "\""); printf ""e[2]"" }
- /Freq/{ split($3, f, " "); printf ""f[1]f[2]"" }
- /Tx-Power/{ split($0, p, "="); sub(/[[:space:]]*$/, "", p[2]); printf ""p[2]"" }
- ')
-
- interface_data=$interface_data$(iw dev "${iface}" info 2>/dev/null | awk '
- /ssid/{ split($0, s, " "); printf ""s[2]"" }
- /type/ { split($0, t, " "); printf ""t[2]"" }
- /channel/{ split($0, c, " "); printf ""c[2]"" }
- /width/{ split($0, w, ": "); sub(/ .*/, "", w[2]); printf ""w[2]"" }
- ')
-
- interface_data=$interface_data"$iface>"
- done
-
- err "$(date): Collecting information from batman advanced and its interfaces"
- #B.A.T.M.A.N. advanced
- if [ -f /sys/module/batman_adv/version ]; then
- for iface in $(batctl if | sed 's/ //'); do
- status=${iface##*:}
- iface=${iface%%:*}
- BATMAN_ADV_INTERFACES=$BATMAN_ADV_INTERFACES"<$iface>$iface$status$iface>"
- done
-
- # Build a list of direct neighbors
- batman_adv_originators=$(/usr/sbin/batctl o -H | awk \
- 'BEGIN { FS=" "; i=0 } # set the delimiter to " "
- { sub("\\(", "", $0) # remove parentheses
- sub("\\)", "", $0)
- sub("\\[", "", $0)
- sub("\\]", "", $0)
- sub("\\*", "", $0)
- sub(" ", " ", $0)
- o=$1".*"$1 # build a regex to find lines that contains the $1 (=originator) twice
- if ($0 ~ o) # filter for this regex (will remove entries without direct neighbor)
- {
- printf ""$1""$3""$4""$2""$5""
- i++
- }
- }')
-
- batman_adv_gateway_mode=$(/usr/sbin/batctl gw)
-
- batman_adv_gateway_list=$(/usr/sbin/batctl gwl -H | awk \
- 'BEGIN { FS=" "; i=0 }
- /No gateways/ { next }
- { sub("\\(", "", $0)
- sub("\\)", "", $0)
- sub("\\[ *", "", $0)
- sub("\\]:", "", $0)
- sub("\\* ", "true ", $0)
- sub(" ", "false ", $0)
- printf ""$1""$2""$3""$4""$5""$6" "$7" "$8""
- i++
- }')
- fi
- err "$(date): Collecting information about conected clients"
- #CLIENTS
- client_count=0
- dataclient=""
- CLIENT_INTERFACES=$(ls "/sys/class/net/$MESH_INTERFACE/brif" | grep -v '^bat')
- for clientif in ${CLIENT_INTERFACES}; do
- local cc=$(bridge fdb show br "$MESH_INTERFACE" brport "$clientif" | grep -v self | grep -v permanent -c)
- client_count=$((client_count + cc))
- dataclient="$dataclient<$clientif>$cc$clientif>"
- done
-
- dataair=""
- w2dump="$(iw dev w2ap survey dump 2> /dev/null | sed '/Survey/,/\[in use\]/d')"
- if [ -n "$w2dump" ] ; then
- w2_ACT="$(ACTIVE=$(echo "$w2dump" | grep "active time:"); set ${ACTIVE:-0 0 0 0 0}; echo -e "${4}")"
- w2_BUS="$(BUSY=$(echo "$w2dump" | grep "busy time:"); set ${BUSY:-0 0 0 0 0}; echo -e "${4}")"
- dataair="$dataair$w2_ACT$w2_BUS"
- fi
- w5dump="$(iw dev w5ap survey dump 2> /dev/null | sed '/Survey/,/\[in use\]/d')"
- if [ -n "$w5dump" ] ; then
- w5_ACT="$(ACTIVE=$(echo "$w5dump" | grep "active time:"); set ${ACTIVE:-0 0 0 0 0}; echo -e "${4}")"
- w5_BUS="$(BUSY=$(echo "$w5dump" | grep "busy time:"); set ${BUSY:-0 0 0 0 0}; echo -e "${4}")"
- dataair="$dataair$w5_ACT$w5_BUS"
- fi
-
- if pgrep babeld >/dev/null; then
- neighbours="$(echo dump | nc ::1 33123 | grep '^add neighbour' |
- awk '{
- for (i=2; i < NF; i += 2) {
- vars[$i] = $(i+1)
- }
- }
- {
- printf "%s%s%s", vars["address"], vars["if"], vars["cost"]
- }')"
- BABELS="$neighbours"
- fi
-
- err "$(date): Putting all information into a XML-File and save it at $SCRIPT_DATA_FILE"
-
- DATA=""
- DATA=$DATA"$SYSTEM_DATA"
- DATA=$DATA"$interface_data"
- DATA=$DATA"$BATMAN_ADV_INTERFACES"
- DATA=$DATA"$batman_adv_originators"
- DATA=$DATA"$batman_adv_gateway_mode"
- DATA=$DATA"$batman_adv_gateway_list"
- DATA=$DATA"$BABELS"
- DATA=$DATA"$client_count"
- DATA=$DATA"$dataclient"
- DATA=$DATA"$dataair"
- DATA=$DATA""
-
- #write data to xml file that provides the data on httpd
- SCRIPT_DATA_DIR=$(dirname "$SCRIPT_DATA_FILE")
- test -d "$SCRIPT_DATA_DIR" || mkdir -p "$SCRIPT_DATA_DIR"
- echo "$DATA" | gzip | tee "$SCRIPT_DATA_FILE" | alfred -s 64
+ #write data to xml file that provides the data on httpd
+ SCRIPT_DATA_DIR=$(dirname "$SCRIPT_DATA_FILE")
+ test -d "$SCRIPT_DATA_DIR" || mkdir -p "$SCRIPT_DATA_DIR"
+ echo "$DATA" | gzip | tee "$SCRIPT_DATA_FILE" | alfred -s 64
}
LANG=C
#Prüft ob das logfile zu groß geworden ist
-err "$(date): Check logfile"
+debug "$(date): Check logfile"
delete_log
#Erzeugt die statusdaten
-err "$(date): Generate actual status data"
+debug "$(date): Generate actual status data"
crawl
exit 0
diff --git a/src/packages/fff/fff-wireless/Makefile b/src/packages/fff/fff-wireless/Makefile
index 6b45975..9b83cd4 100644
--- a/src/packages/fff/fff-wireless/Makefile
+++ b/src/packages/fff/fff-wireless/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-wireless
-PKG_RELEASE:=16
+PKG_RELEASE:=17
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
diff --git a/src/packages/fff/fff-wireless/files/usr/lib/nodewatcher.d/60-airtime.sh b/src/packages/fff/fff-wireless/files/usr/lib/nodewatcher.d/60-airtime.sh
new file mode 100755
index 0000000..ca53d90
--- /dev/null
+++ b/src/packages/fff/fff-wireless/files/usr/lib/nodewatcher.d/60-airtime.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
+# License; GPL v3
+
+w2dump="$(iw dev w2ap survey dump 2> /dev/null | sed '/Survey/,/\[in use\]/d')"
+if [ -n "$w2dump" ] ; then
+ w2_ACT="$(ACTIVE=$(echo "$w2dump" | grep "active time:"); set ${ACTIVE:-0 0 0 0 0}; echo -e "${4}")"
+ w2_BUS="$(BUSY=$(echo "$w2dump" | grep "busy time:"); set ${BUSY:-0 0 0 0 0}; echo -e "${4}")"
+ echo -n "$dataair$w2_ACT$w2_BUS"
+fi
+w5dump="$(iw dev w5ap survey dump 2> /dev/null | sed '/Survey/,/\[in use\]/d')"
+if [ -n "$w5dump" ] ; then
+ w5_ACT="$(ACTIVE=$(echo "$w5dump" | grep "active time:"); set ${ACTIVE:-0 0 0 0 0}; echo -e "${4}")"
+ w5_BUS="$(BUSY=$(echo "$w5dump" | grep "busy time:"); set ${BUSY:-0 0 0 0 0}; echo -e "${4}")"
+ echo -n "$dataair$w5_ACT$w5_BUS"
+fi
+
+exit 0