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

mail at adrianschmutzler.de mail at adrianschmutzler.de
So Aug 20 22:50:24 CEST 2017


Hallo Christian,

bei den Geräten mit einem Lan-Port (z.B. Picostation) gibt es die Datei
/sys/class/net/${wanif}/statistics/rx_bytes nicht, wenn der Port als BATMAN
oder CLIENT konfiguriert ist (da es dann auch kein wanif gibt). Wenn du auf
einem solchen Gerät show_info ausführst, kommt an der entsprechenden Stelle
eine Fehlermeldung, dass die Datei (rx_bytes, tx_bytes) nicht existiert.
Dies wird zunächst unterdrückt (2>dev/null).

Zusätzlich funktioniert human_bytes() nur, wenn es eine Zahl als Argument
bekommt. Im Falle des o.g. Fehlers bekommt die Funktion aber einen leeren
String als Argument. Das siehst du sowohl im show_info als auch im WebUI (da
steht dann nicht 0 B, sondern nichts) auf z.B. einer Picostation.
Entsprechend wird in solchen Fällen dann eben nach der Änderung ein Minus
"-" zurückgegeben.

Grüße

Adrian

-----Original Message-----
From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf Of
Christian Dresel
Sent: Sonntag, 20. August 2017 12:44
To: Adrian Schmutzler <freifunk at adrianschmutzler.de>;
franken-dev at freifunk.net
Subject: Re: [PATCH 2/2] show_info: Fix traffic statistics and add
assignment without switch

Hi

kannst du mir mal kurz erklären was das Problem ist? Ich hab aktuell leider
nur einen Router zur Hand wo ich aufs WebUI drauf komme, dem dem es sowohl
davor als auch danach geht, seh also keinen Unterschied. Was genau ist also
der Grund das zu ändern?

mfg

Christian

On 10.08.2017 15:53, Adrian Schmutzler wrote:
> 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       | 105
++++++++++++---------
>  1 file changed, 58 insertions(+), 47 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 fc7cffb..8677aad 100755
> --- a/src/packages/fff/fff-support/files/usr/sbin/show_info
> +++ b/src/packages/fff/fff-support/files/usr/sbin/show_info
> @@ -9,15 +9,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:') @@ 
> -125,16 +126,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)"
>  
> @@ -149,7 +150,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"
> @@ -162,49 +163,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 "VLAN\s" | 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"
> 




Mehr Informationen über die Mailingliste franken-dev