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

Adrian Schmutzler freifunk at adrianschmutzler.de
Mi Sep 13 18:49:55 CEST 2017


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-08-20.

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-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 ++
 9 files changed, 120 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 bd2e158..1d58c9c 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 8180789..f90dbce 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 8180789..f90dbce 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 4e59b86..e573bd4 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-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 26de8d5..f162381 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
 
-<%                                                                                
+<%
 # write
 if [ "$REQUEST_METHOD" == "POST" ] ; then
 	sed -i '/^.*# set via WebUI/d' /etc/network.mode
@@ -8,6 +8,54 @@ if [ "$REQUEST_METHOD" == "POST" ] ; then
 	do_reboot=1
 	MSG='<span class="green">Port Modus geändert! Router startet neu...</span>'
 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 %>
@@ -22,22 +70,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
 				%>
@@ -46,7 +127,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



Mehr Informationen über die Mailingliste franken-dev