diff --git a/src/packages/fff/fff-babeld/Makefile b/src/packages/fff/fff-babeld/Makefile index 29fd8e53..b2ccac89 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 00000000..80196970 --- /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 3e4e9d1b..aae462ba 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 00000000..37100a2d --- /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" + 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 0c7e2bd5..88f3bb71 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 00000000..353ab1b4 --- /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"" +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 00000000..c4a0a614 --- /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" +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 0ed6684d..423b7288 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 4e564352..0fc2e90e 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 42e5ce8f..21880fbe 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"" - 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" - 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" - 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 6b459757..9b83cd4a 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 00000000..ca53d904 --- /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