#!/bin/sh
# SPDX-License-Identifier: GPL-3.0-only
#
# Netmon Nodewatcher (C) 2010-2012 Freifunk Oldenburg
IFACEBLACKLIST=$(uci get nodewatcher.@network[0].iface_blacklist)
IPWHITELIST=$(uci get nodewatcher.@network[0].ip_whitelist)
debug() {
(>&2 echo "nodewatcher: $1")
}
inArray() {
local value
for value in $1; do
[ "$value" = "$2" ] && return 0
done
return 1
}
debug "Collecting information from network interfaces"
interface_data=""
# Loop through 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/}
inArray "$IFACEBLACKLIST" "$iface" && continue
#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$(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]"" }
/txpower/{ sub(/\.../, "", $2); print ""$2" dBm" }
')
interface_data=$interface_data"$iface>"
done
echo -n "$interface_data"
exit 0