[PATCH v2] show_info: Fix traffic statistics and add assignment without switch

Adrian Schmutzler freifunk at adrianschmutzler.de
So Okt 15 18:16:29 CEST 2017


Changes in v2:
Fix VLAN grep to also work on 1043 V1.

Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>

Tested-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
 .../fff/fff-support/files/usr/sbin/show_info       | 107 ++++++++++++---------
 1 file changed, 59 insertions(+), 48 deletions(-)

diff --git a/src/packages/fff/fff-support/files/usr/sbin/show_info b/src/packages/fff/fff-support/files/usr/sbin/show_info
index 3914391..1e7c498 100755
--- a/src/packages/fff/fff-support/files/usr/sbin/show_info
+++ b/src/packages/fff/fff-support/files/usr/sbin/show_info
@@ -8,15 +8,16 @@ HOSTNAME=$(uci -q get 'system. at system[0].hostname')
 
 human_bytes() {
 	while read B ; do
-		[ $B -lt 1024 ] && echo ${B} B && break
+		[ $B -lt 1024 ] && echo ${B} B && return
 		KB=$(((B+512)/1024))
-		[ $KB -lt 1024 ] && echo ${KB} KB && break
+		[ $KB -lt 1024 ] && echo ${KB} KB && return
 		MB=$(((KB+512)/1024))
-		[ $MB -lt 1024 ] && echo ${MB} MB && break
+		[ $MB -lt 1024 ] && echo ${MB} MB && return
 		GB=$(((MB+512)/1024))
-		[ $GB -lt 1024 ] && echo ${GB} GB && break
-		echo $(((GB+512)/1024)) TB
+		[ $GB -lt 1024 ] && echo ${GB} GB && return
+		echo $(((GB+512)/1024)) TB && return
 	done
+	echo "-"
 }
 format_state() {
 	batmanports=$(swconfig dev switch0 vlan 3 show | grep 'ports:')
@@ -50,7 +51,7 @@ format_port() {
 	format_state "${port}"
 	printf '%-26s' "@ $speed $duplex "
 	
-	swconfig dev switch0 show | grep "VLAN\s" | while read line ; do
+	swconfig dev switch0 show | grep -E "VLAN\s[0-9]+:[ \t]*$" | while read line ; do
 		vid=$(echo "$line" | sed 's/.*VLAN \([^:]*\).*/\1/')
 		vports=$(swconfig dev switch0 vlan "$vid" show | grep 'ports:')
 		if echo "$vports" | grep -q "${port}t" ; then
@@ -124,16 +125,16 @@ echo "Fastd Version: $(fastd --version 2> /dev/null | cut -d' ' -f 2)"
 echo ""
 echo "-> Netz: FREIFUNK"
 echo "Nutzer: $(cat /sys/kernel/debug/batman_adv/bat0/transtable_local 2> /dev/null | grep -c 'W')"
-echo "Empfangen: $(cat /sys/class/net/br-mesh/statistics/rx_bytes | human_bytes)"
-echo "Gesendet: $(cat /sys/class/net/br-mesh/statistics/tx_bytes | human_bytes)"
+echo "Empfangen: $(cat /sys/class/net/br-mesh/statistics/rx_bytes 2> /dev/null | human_bytes)"
+echo "Gesendet: $(cat /sys/class/net/br-mesh/statistics/tx_bytes 2> /dev/null | human_bytes)"
 echo "IPv4 Adressen: $(addr 4 br-mesh)"
 echo "IPv6 Adressen: $(addr 6 br-mesh)"
 
 echo ""
 echo "-> Netz: WAN"
 echo "Internet vorhanden: ${internet_active}"
-echo "Empfangen: $(cat /sys/class/net/${wanif}/statistics/rx_bytes | human_bytes)"
-echo "Gesendet: $(cat /sys/class/net/${wanif}/statistics/tx_bytes | human_bytes)"
+echo "Empfangen: $(cat /sys/class/net/${wanif}/statistics/rx_bytes 2> /dev/null | human_bytes)"
+echo "Gesendet: $(cat /sys/class/net/${wanif}/statistics/tx_bytes 2> /dev/null | human_bytes)"
 echo "IPv4 Adressen: $(addr 4 $wanif)"
 echo "IPv6 Adressen: $(addr 6 $wanif)"
 
@@ -148,7 +149,7 @@ echo "E-Mail Adresse: $(uci -q get 'system. at system[0].contact')"
 
 echo ""
 echo "-> BITRATEN-BEGRENZUNG"
-if [ "$(uci -q get 'simple-tc.example.enabled')" == "1" ] ; then
+if [ "$(uci -q get 'simple-tc.example.enabled')" = "1" ] ; then
 	echo "Aktiv: ja"
 else
 	echo "Aktiv: nein"
@@ -161,49 +162,59 @@ if grep -q 'PORTORDER=' /etc/network.$board_name ; then
 fi
 
 echo ""
-if [ -n "$portorder" ] ; then
-	echo "-> SWITCH (tatsaechliche Portreihenfolge)"
-else
-	echo "-> SWITCH (interne logische Portreihenfolge)"
-fi
+if swconfig list | grep -q switch0 ; then
+	if [ -n "$portorder" ] ; then
+		echo "-> SWITCH (tatsaechliche Portreihenfolge)"
+	else
+		echo "-> SWITCH (interne logische Portreihenfolge)"
+	fi
 
-printf '%-54s' "VLAN-IDs:"
-swconfig dev switch0 show | grep "VLAN\s" | while read line ; do
-	vid=$(echo "$line" | sed 's/.*VLAN \([^:]*\).*/\1/')
-	printf '%-2s ' "$vid"
-done
-echo ""
-echo ""
+	printf '%-54s' "VLAN-IDs:"
+	swconfig dev switch0 show | grep -E "VLAN\s[0-9]+:[ \t]*$" | while read line ; do
+		vid=$(echo "$line" | sed 's/.*VLAN \([^:]*\).*/\1/')
+		printf '%-2s ' "$vid"
+	done
+	echo ""
+	echo ""
 
-if [ ! "$(awk -F= '/WANDEV=/ { print $2 }' /etc/network.$board_name)" = "$(awk -F= '/SWITCHDEV=/ { print $2 }' /etc/network.$board_name)" ] ; then
-	wanif=$(uci -q get network.wan.ifname)
-	link=$(cat /sys/class/net/${wanif}/operstate)
-	if [ "$link" = "up" ] ; then
-		speed="connected"
-	else
-		speed="no link"
+	if [ ! "$(awk -F= '/WANDEV=/ { print $2 }' /etc/network.$board_name)" = "$(awk -F= '/SWITCHDEV=/ { print $2 }' /etc/network.$board_name)" ] ; then
+		wanif=$(uci -q get network.wan.ifname)
+		link=$(cat /sys/class/net/${wanif}/operstate)
+		if [ "$link" = "up" ] ; then
+			speed="connected"
+		else
+			speed="no link"
+		fi
+		printf '%-10s%-5s%-13s%s\n' "WAN-Port: " "${link} " "- WAN " "@ $speed"
 	fi
-	printf '%-10s%-5s%-13s%s\n' "WAN-Port: " "${link} " "- WAN " "@ $speed"
-fi
 
-for internalport in $portorder
-do
-	line=$(swconfig dev switch0 port "$internalport" show | tr -d '\n' | tr -d '\t')
-	port=$(echo "$line" | sed 's/.* port:\([^ ]*\) .*/\1/')
-	printf '%-10s' "Port #${port}: "
-	format_port "${line}"
-done
-echo ""
+	for internalport in $portorder
+	do
+		line=$(swconfig dev switch0 port "$internalport" show | tr -d '\n' | tr -d '\t')
+		port=$(echo "$line" | sed 's/.* port:\([^ ]*\) .*/\1/')
+		printf '%-10s' "Port #${port}: "
+		format_port "${line}"
+	done
+	echo ""
 
-swconfig dev switch0 show | grep "\t*link:" | while read line ; do
-	line=$(echo "$line" | tr -d '\n' | tr -d '\t')
-	port=$(echo "$line" | sed 's/.* port:\([^ ]*\) .*/\1/')
-	if echo "$portorder" | grep -q "$port" ; then
-		continue
+	swconfig dev switch0 show | grep "\t*link:" | while read line ; do
+		line=$(echo "$line" | tr -d '\n' | tr -d '\t')
+		port=$(echo "$line" | sed 's/.* port:\([^ ]*\) .*/\1/')
+		if echo "$portorder" | grep -q "$port" ; then
+			continue
+		fi
+		printf '%-10s' "Port #${port}: "
+		format_port "${line}"
+	done
+else
+	echo "-> PORT ASSIGNMENT"
+	if grep -q "ONE_PORT" "/etc/network.$board_name" || grep -q "ETHPORT" "/etc/network.$board_name" ; then
+		# Device has a port set by $ETHMODE
+		. /etc/network.mode
+		. /etc/network.config
+		echo "Port Modus: $ETHMODE"
 	fi
-	printf '%-10s' "Port #${port}: "
-	format_port "${line}"
-done
+fi
 
 echo ""
 echo "END"
-- 
2.7.4



Mehr Informationen über die Mailingliste franken-dev