#!/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 ""