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

Adrian Schmutzler freifunk at adrianschmutzler.de
So Jul 30 17:08:29 CEST 2017


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

Tested-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
 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 ++
 8 files changed, 118 insertions(+), 12 deletions(-)

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-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..c0be168 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 "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
+			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 "VLAN\s" | 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



Mehr Informationen über die Mailingliste franken-dev