diff --git a/src/packages/fff/fff-s2nproxy/Makefile b/src/packages/fff/fff-s2nproxy/Makefile new file mode 100644 index 00000000..ed534a59 --- /dev/null +++ b/src/packages/fff/fff-s2nproxy/Makefile @@ -0,0 +1,32 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fff-s2nproxy +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/fff-mqtt + +include $(INCLUDE_DIR)/package.mk + +define Package/fff-s2nproxy + SECTION:=base + CATEGORY:=Freifunk + TITLE:=Freifunk-Franken snmp 2 nodewatcher proxy + URL:=https://www.freifunk-franken.de + DEPENDS:= \ + +fff-nodewatcher \ + +snmp-utils +endef + +define Package/fff-s2nproxy/description + This package can be used to monitor snmp devices +endef + +define Build/Compile + # nothing +endef + +define Package/fff-s2nproxy/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,fff-s2nproxy)) diff --git a/src/packages/fff/fff-s2nproxy/files/etc/config/s2nproxy b/src/packages/fff/fff-s2nproxy/files/etc/config/s2nproxy new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/packages/fff/fff-s2nproxy/files/etc/config/s2nproxy @@ -0,0 +1 @@ + diff --git a/src/packages/fff/fff-s2nproxy/files/usr/lib/nodewatcher.d/95-s2nproxy.sh b/src/packages/fff/fff-s2nproxy/files/usr/lib/nodewatcher.d/95-s2nproxy.sh new file mode 100644 index 00000000..f14b08df --- /dev/null +++ b/src/packages/fff/fff-s2nproxy/files/usr/lib/nodewatcher.d/95-s2nproxy.sh @@ -0,0 +1,200 @@ +#!/bin/sh +. /lib/functions.sh + +# Example for /etc/config/s2nproxy +# +# config s2nproxy 'DEVICE_NAME' +# option ip 'IP_ADDRESS' +# option device 'DEVICE_TYPE' +# option community 'COMMUNITY' + +# SNMP Walk +walk() { + community=$1 + ip=$2 + oid=$3 + echo $(snmpwalk -O vQ -P e -L n -v 1 -c $community $ip $oid) +} + +# Format the dirty mikrotik mac address result +format_mac() { + echo $(echo $1 | xargs | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | sed 's/\ /\:/g') +} + +# Reset variables to empty +reset_variables() { + signal="" + capacity="" + latency="" + name="" + fw="" + hw="" + frequency="" + frequency2="" + mac="" + clients="" + remotemac="" +} + +printf "" + +s2np() { + if [ -z "$(uci -q get s2nproxy.$1.community)" ]; then + community="public" + else + community=$(uci get s2nproxy.$1.community) + fi + + ip=$(uci get s2nproxy.$1.ip) + + # Check if host is available + if ping -c 1 -W 1 $ip &> /dev/null ; then + + # Switch throught device types + case "$(uci -q get s2nproxy.$1.device)" in + airmaxac) + # Ubiquity AirMAX Richtfunk + reset_variables + name=$(walk $community $ip "iso.3.6.1.2.1.1.5.0" | xargs) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.8)") + hw=$(walk $community $ip "iso.3.6.1.4.1.41112.1.4.1.1.9.1" | xargs) + signal=$(walk $community $ip "iso.3.6.1.4.1.41112.1.4.5.1.5") + capacity=$(walk $community $ip "iso.3.6.1.4.1.41112.1.4.5.1.10" / 1024) + capacity=$(printf %.2f "$((10**9 * $capacity / 1048576))e-9") + remotemac=$(format_mac "$(walk $community $ip iso.3.6.1.4.1.41112.1.4.5.1.4.1)") + echo "" + for OUTPUT in $(walk $community $ip 1.3.6.1.2.1.2.2.1.1) + do + portname=$(echo $(walk $community $ip iso.3.6.1.2.1.2.2.1.2.$OUTPUT) | sed 's/"//g') + traffic_rx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.10.$OUTPUT) + traffic_tx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.16.$OUTPUT) + printf "<$portname>$traffic_rx$traffic_tx$portname" + done + echo "" + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$name$ip$mac$hw$signal$capacity$latency$remotemac" + ;; + + mikrotikap) + # Mikrotik AP + reset_variables + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.7.1 | xargs) + frequency2=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.7.2 | xargs) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + clients=$(( $(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.6.1) + $(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.3.1.6.2) )) + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$name$ip$mac$fw$hw$frequency$frequency2$clients" + ;; + + mikrotikw60grfap) + # Mikrotik 60GHz Richtfunk AP + reset_variables + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + signal=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.8.1) + capacity=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.13.1) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.6.1) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + remotemac=$(format_mac "$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.5.1)") + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$name$ip$mac$fw$hw$signal$capacity$latency$frequency$remotemac" + ;; + + mikrotikw60grfsta) + # Mikrotik 60GHz Richtfunk Station + reset_variables + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + signal=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.12.1) + capacity=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.13.1) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.6.1) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + remotemac=$(format_mac "$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.5.1)") + echo "" + for OUTPUT in $(walk $community $ip 1.3.6.1.2.1.2.2.1.1) + do + portname=$(echo $(walk $community $ip iso.3.6.1.2.1.2.2.1.2.$OUTPUT) | sed 's/"//g') + traffic_rx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.10.$OUTPUT) + traffic_tx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.16.$OUTPUT) + printf "<$portname>$traffic_rx$traffic_tx$portname" + done + echo "" + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$name$ip$mac$fw$hw$signal$capacity$latency$frequency$remotemac" + ;; + + mikrotikw60gst) + # Mikrotik 60GHz Sektor + reset_variables + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) + fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) + hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + frequency=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.1.8.1.6.1) + mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$name$ip$mac$fw$hw$latency$frequency" + ;; + + latenz) + reset_variables + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$ip$latency" + ;; + + ciscoap) + # Cisco AP + reset_variables + name=$(walk $community $ip 1.3.6.1.2.1.1.5 | xargs) +# fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) +# hw=$(walk $community $ip 1.3.6.1.2.1.47.1.1.1.1.13.1 | xargs) +# frequency=$(walk $community $ip 1.3.6.1.4.1.9.9.607.1.1.2.1.6.1 | xargs) #channel +# frequency2=$(walk $community $ip 1.3.6.1.4.1.9.9.607.1.1.2.1.6.2 | xargs) #channel +# mac=$(format_mac "$(walk $community $ip 1.3.6.1.2.1.2.2.1.6.1)") + clients=$(( $(walk $community $ip 1.3.6.1.4.1.9.9.273.1.1.2.1.1.1) + $(walk $community $ip 1.3.6.1.4.1.9.9.273.1.1.2.1.1.2) )) + echo "" + for OUTPUT in $(walk $community $ip 1.3.6.1.2.1.2.2.1.1) + do + portname=$(echo $(walk $community $ip iso.3.6.1.2.1.2.2.1.2.$OUTPUT) | sed 's/"//g') + traffic_rx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.10.$OUTPUT) + traffic_tx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.16.$OUTPUT) + printf "<$portname>$traffic_rx$traffic_tx$portname" + done + echo "" + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "<$1>$name$ip$clients$latency" + ;; + + switch) + # könnte für alle Switche gelten, getestet mit Netgear GS310TP + reset_variables + name=$(walk $community $ip 1.3.6.1.2.1.1.5.0 | xargs) + printf "<$1>$name" +# fw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.7 | xargs) +# hw=$(walk $community $ip 1.3.6.1.4.1.14988.1.1.7.9 | xargs) + echo "" + for OUTPUT in $(walk $community $ip 1.3.6.1.2.1.2.2.1.1) + do + portname=$(echo $(walk $community $ip iso.3.6.1.2.1.2.2.1.2.$OUTPUT) | sed 's/"//g') + traffic_rx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.10.$OUTPUT) + traffic_tx=$(walk $community $ip 1.3.6.1.2.1.2.2.1.16.$OUTPUT) + printf "<$portname>$traffic_rx$traffic_tx$portname" + done + echo "" + latency=$(ping -qc1 $ip 2>&1 | awk -F'/' 'END{ print (/^round-trip/? $4:"0") }') + printf "$latency" + ;; + + esac + fi +} + +config_load s2nproxy +config_foreach s2np s2nproxy + +printf "" +