[PATCH] show_info: Add extended switch scheme and bandwidth control

Christian Dresel fff at chrisi01.de
So Aug 20 13:13:13 CEST 2017


hi

das Ding hat mich erstmal geschockt weil es auf meinen Test wdr4900 mit
alten OpenWRT nicht ging. Habs dann nochmal auf einen LEDE wdr4900
getestet und da tut es. Sieht klasse aus, so langsam freunde ich mich
vielleicht doch an das Script an wenn auch bei vielen VLANs etwas
unübersichtlich:

-> SWITCH (interne logische Portreihenfolge)
VLAN-IDs:                                             1  2  3  4  5  6
7  8  9  10 11 12 13 14 15 16


Port #0:  up   - Multi-Link @ 1000baseT full-duplex   t  t  t  t  t  t
t  t  t  t  t  t  t  t  t  t
Port #1:  down - CLIENT     @ no link                 u  -  -  -  -  -
-  -  -  -  -  -  -  -  -  -
Port #2:  down - Multi-Link @ no link                 t  -  u  -  -  -
-  -  -  -  -  -  -  -  -  -
Port #3:  down - Multi-Link @ no link                 t  -  u  -  -  -
-  -  -  -  -  -  -  -  -  -
Port #4:  up   - CLIENT     @ 100baseT full-duplex    u  -  -  t  t  t
t  t  t  t  t  t  t  t  t  t
Port #5:  up   - CLIENT     @ 1000baseT full-duplex   u  -  -  t  t  t
t  t  t  t  t  t  t  t  t  t
Port #6:  down - Unknown    @ no link                 -  -  -  -  -  -
-  -  -  -  -  -  -  -  -  -

ist aber vermutlich ja nicht die Regel. Ich hab es jetzt nur ohne
Portorder getestet:

Reviewed-by: Christian Dresel <fff at chrisi01.de>

mfg

Christian

On 09.08.2017 23:38, 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       | 119 ++++++++++++++++++---
>  1 file changed, 103 insertions(+), 16 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 17fbb9f..fc7cffb 100755
> --- a/src/packages/fff/fff-support/files/usr/sbin/show_info
> +++ b/src/packages/fff/fff-support/files/usr/sbin/show_info
> @@ -3,6 +3,8 @@
>  . /etc/community.cfg
>  . /etc/firmware_release
>  
> +board_name=$(uci -q get board.model.name)
> +
>  HOSTNAME=$(uci -q get 'system. at system[0].hostname')
>  
>  human_bytes() {
> @@ -17,6 +19,51 @@ human_bytes() {
>  		echo $(((GB+512)/1024)) TB
>  	done
>  }
> +format_state() {
> +	batmanports=$(swconfig dev switch0 vlan 3 show | grep 'ports:')
> +	clientports=$(swconfig dev switch0 vlan 1 show | grep 'ports:')
> +	wanports=$(swconfig dev switch0 vlan 2 show | grep 'ports:')
> +	
> +	if (echo "$clientports" | grep -q "${1}") && (echo "$batmanports" | grep -q "${1}") ; then
> +		linkstate="Multi-Link"
> +	elif echo "$clientports" | grep -q "${1}" ; then
> +		linkstate="CLIENT"
> +	elif echo "$batmanports" | grep -q "${1}" ; then
> +		linkstate="BATMAN"
> +	elif echo "$wanports" | grep -q "${1}" ; then
> +		linkstate="WAN"
> +	else
> +		linkstate="Unknown"
> +	fi
> +	printf '%-11s' "$linkstate "
> +}
> +format_port() {
> +	port=$(echo "$1" | sed 's/.* port:\([^ ]*\) .*/\1/')
> +	link=$(echo "$1" | sed 's/.* link:\([^ ]*\).*/\1/')
> +	if [ "$link" = "up" ] ; then
> +		speed=$(echo "$1" | sed 's/.* speed:\([^ ]*\).*/\1/')
> +		duplex=$(echo "$1" | sed 's/.* \([^ ]*-duplex\).*/\1/')
> +	else
> +		speed="no link"
> +		duplex=""
> +	fi
> +	printf '%-5s%s' "${link} " "- "
> +	format_state "${port}"
> +	printf '%-26s' "@ $speed $duplex "
> +	
> +	swconfig dev switch0 show | grep "VLAN\s" | 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
> +			printf '%-2s ' "t"
> +		elif echo "$vports" | grep -q "${port}" ; then
> +			printf '%-2s ' "u"
> +		else
> +			printf '%-2s ' "-"
> +		fi
> +	done
> +	echo ""
> +}
>  
>  if pidof fastd >/dev/null ; then
>  	vpn_active="aktiv"
> @@ -101,23 +148,63 @@ echo "Standortbeschreibung: $(uci -q get 'system. at system[0].position_comment')"
>  echo "E-Mail Adresse: $(uci -q get 'system. at system[0].contact')"
>  
>  echo ""
> -echo "-> SWITCH"
> -if swconfig list | grep -q switch0 ; then
> -	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/')
> -		link=$(echo "$line" | sed 's/.* link:\([^ ]*\).*/\1/')
> -		if [ "$link" == "up" ] ; then
> -			speed=$(echo "$line" | sed 's/.* speed:\([^ ]*\).*/\1/')
> -			duplex=$(echo "$line" | sed 's/.* \([^ ]*-duplex\).*/\1/')
> -		else
> -			speed="no link"
> -			duplex=""
> -		fi
> -		port="Port ${port}"
> -		echo "${port}: ${link} @ $speed $duplex"
> -	done
> +echo "-> BITRATEN-BEGRENZUNG"
> +if [ "$(uci -q get 'simple-tc.example.enabled')" == "1" ] ; then
> +	echo "Aktiv: ja"
> +else
> +	echo "Aktiv: nein"
> +fi
> +echo "Download-Limit: $(uci -q get 'simple-tc.example.limit_ingress') kBit/s"
> +echo "Upload-Limit: $(uci -q get 'simple-tc.example.limit_egress') kBit/s"
> +
> +if grep -q 'PORTORDER=' /etc/network.$board_name ; then
> +	portorder=$(awk -F= '/PORTORDER=/ { print $2 }' /etc/network.$board_name | sed "s/\"//g")
>  fi
>  
>  echo ""
> +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 ""
> +
> +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
> +
> +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
> +	fi
> +	printf '%-10s' "Port #${port}: "
> +	format_port "${line}"
> +done
> +
> +echo ""
>  echo "END"
> 

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 819 bytes
Beschreibung: OpenPGP digital signature
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20170820/09aa0985/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev