[PATCH v4] fff-web: Extend switch port assignment display in ports.html

Adrian Schmutzler mail at adrianschmutzler.de
Fr Okt 20 17:49:48 CEST 2017


Ist schon seit mehr als einem Monat im Einsatz.

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

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
> Of Adrian Schmutzler
> Sent: Sonntag, 15. Oktober 2017 18:17
> To: franken-dev at freifunk.net
> Subject: [PATCH v4] fff-web: Extend switch port assignment display in
> ports.html
> 
> This adds information to the switch port overview and shows the VLAN
> configuration. For some routers the port order is provided, so the
physical
> arrangement is resembled in the Web UI.
> 
> Rebased onto the master from 2017-09-18.
> 
> Changes in v4:
> Add portorder for 1043 V4.
> 
> Changes in v3:
> Fix VLAN grep to also work on 1043 V1.
> 
> Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> ---
>  .../fff/fff-network/ar71xx/network.archer-c25-v1   |   2 +
>  src/packages/fff/fff-network/ar71xx/network.cpe210 |   2 +
>  src/packages/fff/fff-network/ar71xx/network.cpe510 |   2 +
>  .../fff/fff-network/ar71xx/network.gl-ar150        |   2 +
>  .../fff/fff-network/ar71xx/network.tl-wr1043nd-v4  |   2 +
>  .../fff/fff-network/ar71xx/network.tl-wr841n-v10   |   2 +
>  .../fff/fff-network/ar71xx/network.tl-wr841n-v11   |   2 +
>  .../fff/fff-network/ar71xx/network.tl-wr841n-v8    |   2 +
>  .../fff/fff-web/files/www/ssl/cgi-bin/ports.html   | 109
> ++++++++++++++++++---
>  src/packages/fff/fff-web/files/www/ssl/style.css   |   9 ++
>  10 files changed, 122 insertions(+), 12 deletions(-)
> 
> diff --git a/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1
> b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1
> index e524545..d7b95a1 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1
> +++ b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1
> @@ -1,3 +1,5 @@
> +PORTORDER="4 3 2 1"
> +
>  WANDEV=eth0
>  SWITCHDEV=eth1
>  CLIENT_PORTS="1 2 0t"
> diff --git a/src/packages/fff/fff-network/ar71xx/network.cpe210
> b/src/packages/fff/fff-network/ar71xx/network.cpe210
> index 6764c64..fe0b985 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.cpe210
> +++ b/src/packages/fff/fff-network/ar71xx/network.cpe210
> @@ -1,3 +1,5 @@
> +PORTORDER="5 4"
> +
>  WANDEV=eth0
>  SWITCHDEV=eth0
>  CLIENT_PORTS="0t"
> diff --git a/src/packages/fff/fff-network/ar71xx/network.cpe510
> b/src/packages/fff/fff-network/ar71xx/network.cpe510
> index 6764c64..fe0b985 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.cpe510
> +++ b/src/packages/fff/fff-network/ar71xx/network.cpe510
> @@ -1,3 +1,5 @@
> +PORTORDER="5 4"
> +
>  WANDEV=eth0
>  SWITCHDEV=eth0
>  CLIENT_PORTS="0t"
> diff --git a/src/packages/fff/fff-network/ar71xx/network.gl-ar150
> b/src/packages/fff/fff-network/ar71xx/network.gl-ar150
> index 61ce71a..600f641 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.gl-ar150
> +++ b/src/packages/fff/fff-network/ar71xx/network.gl-ar150
> @@ -1,3 +1,5 @@
> +PORTORDER="1"
> +
>  WANDEV=eth0
>  SWITCHDEV=eth1
>  WAN_PORTS=
> diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v4
> b/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v4
> index 93772f9..4ffb7b2 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v4
> +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v4
> @@ -1,3 +1,5 @@
> +PORTORDER="5 4 3 2 1"
> +
>  WANDEV=eth0
>  SWITCHDEV=eth0
>  CLIENT_PORTS="1 2 0t"
> diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v10
> b/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v10
> index 1d3f146..4d22fde 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v10
> +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v10
> @@ -1,3 +1,5 @@
> +PORTORDER="4 3 2 1"
> +
>  WANDEV=eth1
>  SWITCHDEV=eth0
>  CLIENT_PORTS="1 2 0t"
> diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v11
> b/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v11
> index 1d3f146..4d22fde 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v11
> +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v11
> @@ -1,3 +1,5 @@
> +PORTORDER="4 3 2 1"
> +
>  WANDEV=eth1
>  SWITCHDEV=eth0
>  CLIENT_PORTS="1 2 0t"
> diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v8
> b/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v8
> index c0e3817..af79caf 100644
> --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v8
> +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr841n-v8
> @@ -1,3 +1,5 @@
> +PORTORDER="2 3 4 1"
> +
>  WANDEV=eth0
>  SWITCHDEV=eth1
>  CLIENT_PORTS="1 4 0t"
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
> b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
> index 9d54be7..5912126 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
> @@ -1,6 +1,6 @@
>  #!/usr/bin/haserl
> 
> -<%
> 
> +<%
>  board_name=$(uci -q get board.model.name)  # write  if [
> "$REQUEST_METHOD" == "POST" ] ; then @@ -22,6 +22,54 @@ if [
> "$REQUEST_METHOD" == "POST" ] ; then
>  		MSG='<span class="green">Port Modus geändert!
> Router startet neu...</span>'
>  	fi
>  fi
> +
> +#helpers
> +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
> +		echo -n "<span class=\"assign\"
> style=\"color:black\">Multi-Link"
> +	elif echo "$clientports" | grep -q "${1}" ; then
> +		echo -n "<span class=\"assign\"
> style=\"color:orange\">CLIENT"
> +	elif echo "$batmanports" | grep -q "${1}" ; then
> +		echo -n "<span class=\"assign\"
> style=\"color:green\">BATMAN"
> +	elif echo "$wanports" | grep -q "${1}" ; then
> +		echo -n "<span class=\"assign\" style=\"color:blue\">WAN"
> +	else
> +		echo -n "<span class=\"assign\"
> style=\"color:red\">Unknown"
> +	fi
> +	echo "</span><br />"
> +}
> +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
> +	echo "<img src=\"/port_${link}.png\" alt=\"${link}\" /><br /><br
> />"
> +	format_state "${port}"
> +	echo "<span class=\"stat\">$speed<br />$duplex</span><br /><br
> />"
> +
> +	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
> +			echo "<span class=\"vassign\">tagged</span><br />"
> +		elif echo "$vports" | grep -q "${port}" ; then
> +			echo "<span class=\"vassign\">untagged</span><br
> />"
> +		else
> +			echo "<span class=\"vassign\">-</span><br />"
> +		fi
> +	done
> +}
> +
> +
>  %>
>  <%in /www/ssl/cgi-bin/header %>
>  <%in /www/ssl/cgi-bin/helpers %>
> @@ -36,22 +84,55 @@ fi
>  		<table>
>  			<tr>
>  				<%
> -				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/')
> +				echo "<td class=\"swport\"
> style=\"vertical-align:bottom\">"
> +				swconfig dev switch0 show | grep -E
> "VLAN\s[0-9]+:[ \t]*$" | while read line ; do
> +					vid=$(echo "$line" | sed 's/.*VLAN
> \([^:]*\).*/\1/')
> +					echo "<span class=\"vassign\"
> style=\"font-weight:bold;font-style:italic\">VLAN $vid </span><br />"
> +				done
> +				echo "</td>"
> +				echo "<td class=\"swport\"
> style=\"width:2em\"></td>"
> +
> +				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=$(echo "$line" | sed
> 's/.* speed:\([^ ]*\).*/\1/')
> -						duplex=$(echo "$line" |
> sed 's/.* \([^ ]*-duplex\).*/\1/')
> +						speed="connected"
>  					else
>  						speed="no link"
> -						duplex=""
>  					fi
> -					port="Port ${port}"
>  					echo "<td class=\"swport\">"
> -					echo "<span
> class=\"port\">${port}</span><br />"
> -					echo "<img
> src=\"/port_${link}.png\" alt=\"${link}\" /><br />"
> -					echo "<span
> class=\"stat\">$speed<br />$duplex</span>"
> +					echo "<span class=\"port\"
> style=\"color:blue\">WAN-Port</span><br />"
> +					echo "<img
> src=\"/port_${link}.png\" alt=\"${link}\" /><br /><br />"
> +					echo "<span class=\"assign\"
> style=\"color:blue\">WAN</span><br />"
> +					echo "<span
> class=\"stat\">$speed</span>"
> +					echo "</td>"
> +				fi
> +
> +				if grep -q 'PORTORDER='
> /etc/network.$board_name ; then
> +					portorder=$(awk -F= '/PORTORDER=/
> { print $2 }' /etc/network.$board_name | sed "s/\"//g")
> +				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/')
> +					echo "<td class=\"swport\">"
> +					echo "<span class=\"port\">Port
> #${port}</span><br />"
> +					format_port "${line}"
> +					echo "</td>"
> +				done
> +				if [ -n "$portorder" ] ; then
> +					echo "<td class=\"swport\"
> style=\"width:4em\"></td>"
> +				fi
> +
> +				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
> +					echo "<td class=\"swport\">"
> +					echo "<span class=\"port\">Port
> #${port}</span><br />"
> +					format_port "${line}"
>  					echo "</td>"
>  				done
>  				%>
> @@ -60,7 +141,11 @@ fi
>  		<table>
>  			<tr><td></td></tr>
>  			<tr><td>
> +				<% if [ -n "$portorder" ] ; then %>
> +				Dies zeigt die tatsächliche Zuordnung
> der Ports, wobei der WAN Port auf der linken Seite liegt. Die Nummerierung
> entspricht der internen Zuordnung!<br />
> +				<% else %>
>  				Die Nummerierung und Reihenfolge der Ports
> entspricht nicht notwendigerweise der der Netzwerkanschlüsse am
> Router!<br />
> +				<% fi %>
>  				Einer (oder mehrere) der Ports sind keine
> Netzwerkanschlüsse am Router sondern binden die Router CPU an
> den internen Switch an.
>  			</td></tr>
>  		</table>
> diff --git a/src/packages/fff/fff-web/files/www/ssl/style.css
> b/src/packages/fff/fff-web/files/www/ssl/style.css
> index b9e0d9f..d644b3a 100644
> --- a/src/packages/fff/fff-web/files/www/ssl/style.css
> +++ b/src/packages/fff/fff-web/files/www/ssl/style.css
> @@ -218,3 +218,12 @@ pre {
>  .swport .stat {
>  	font-size: 10px;
>  }
> +
> +.swport .assign {
> +	font-weight: bold;
> +	font-size: 11px;
> +}
> +
> +.swport .vassign {
> +	font-style: italic;
> +}
> --
> 2.7.4
> 
> --
> franken-dev mailing list
> franken-dev at freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net



Mehr Informationen über die Mailingliste franken-dev