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

Submitted by Adrian Schmutzler on Oct. 15, 2017, 4:17 p.m.

Details

Message ID 1508084235-56866-1-git-send-email-freifunk@adrianschmutzler.de
State Accepted
Headers show

Commit Message

Adrian Schmutzler Oct. 15, 2017, 4:17 p.m.
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@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(-)

Patch hide | download patch | download mbox

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&auml;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&auml;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&uuml;sse am Router!<br />
+				<% fi %>
 				Einer (oder mehrere) der Ports sind keine Netzwerkanschl&uuml;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;
+}

Comments

Adrian Schmutzler Oct. 20, 2017, 3:49 p.m.
Ist schon seit mehr als einem Monat im Einsatz.

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

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of Adrian Schmutzler
> Sent: Sonntag, 15. Oktober 2017 18:17
> To: franken-dev@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@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&auml;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&auml;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&uuml;sse am
> Router!<br />
> +				<% fi %>
>  				Einer (oder mehrere) der Ports sind keine
> Netzwerkanschl&uuml;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@freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Tim Niemeyer Nov. 2, 2017, 9:21 p.m.
Hi

Ich habs mir angeschaut, habe aber bei einigen Sachen ein bisschen
Probleme da jetzt "offline" durchzusteigen.

Da das Feature aber grundsätzlich cool ist und die Herangehensweise auch
sehr gut ist, von mir:
Reviewed-by: Tim Niemeyer <tim@tn-x.org>

Ich würde es begrüßen, wenn jemand das einfach mal auf ein paar Geräte
testet. Noch schöner, wäre es, wenn das nicht immer die selben machen.
Wir haben hier ein schönes Patch, wo man mal ein bisschen in die
Entwicklung "reinschnuppern" kann.

Tim

Am Sonntag, den 15.10.2017, 18:17 +0200 schrieb Adrian Schmutzler:
> 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@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&auml;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&auml;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&uuml;sse am Router!<br />
> +				<% fi %>
>  				Einer (oder mehrere) der Ports sind keine Netzwerkanschl&uuml;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
>
Tim Niemeyer Nov. 3, 2017, 9:48 p.m.
Hi

Am Donnerstag, den 02.11.2017, 22:21 +0100 schrieb Tim Niemeyer:
> Hi
> 
> Ich habs mir angeschaut, habe aber bei einigen Sachen ein bisschen
> Probleme da jetzt "offline" durchzusteigen.
> 
> Da das Feature aber grundsätzlich cool ist und die Herangehensweise
> auch
> sehr gut ist, von mir:
> Reviewed-by: Tim Niemeyer <tim@tn-x.org>
> 
> Ich würde es begrüßen, wenn jemand das einfach mal auf ein paar
> Geräte
> testet. Noch schöner, wäre es, wenn das nicht immer die selben
> machen.
> Wir haben hier ein schönes Patch, wo man mal ein bisschen in die
> Entwicklung "reinschnuppern" kann.
Leider keine ernsthafte Rückmeldung erhalten.

Und Applied.

Tim

> Tim
> 
> Am Sonntag, den 15.10.2017, 18:17 +0200 schrieb Adrian Schmutzler:
> > 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@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&auml;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&auml;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&uuml;sse am Router!<br />
> > +				<% fi %>
> >  				Einer (oder mehrere) der Ports
> > sind keine Netzwerkanschl&uuml;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
> > 
> 
>