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

Submitted by Adrian Schmutzler on July 30, 2017, 3:08 p.m.

Details

Message ID 1501427309-2325-1-git-send-email-freifunk@adrianschmutzler.de
State Superseded
Headers show

Commit Message

Adrian Schmutzler July 30, 2017, 3:08 p.m.
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

Tested-by: Adrian Schmutzler <freifunk@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(-)

Patch hide | download patch | download mbox

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&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 "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&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

Christian Dresel July 30, 2017, 3:18 p.m.
hi

ich habs mir noch nicht genau angeguckt aber ist nicht folgendes vllt.
besser zum auslesen der Infos?

root@NeunhofGateway:~# uci show network.eth0_1.ports
network.eth0_1.ports='0t 4 5'
root@NeunhofGateway:~# uci show network.eth0_2.ports
network.eth0_2.ports='0t 1'
root@NeunhofGateway:~# uci show network.eth0_3.ports
network.eth0_3.ports='0t 2 3 5t'
root@NeunhofGateway:~# uci show network.eth0_4.ports
network.eth0_4.ports='0t 5t'

bzw. besser wohl uci get anstatt show dann lässt es sich besser parsen ;)

zum auslesen was es alles gibt,

uci show

oder

uci show network

Die eigentliche Darstellung kann ich mir ausm Code gerade nicht
vorstellen, dazu müsste ich das bei mir erstmal wo einspielen bevor ich
was dazu sagen kann. Da mangelt es aber grad zeitlich ein wenig.

mfg

Christian

On 30.07.2017 17:08, Adrian Schmutzler wrote:
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> Tested-by: Adrian Schmutzler <freifunk@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&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 "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&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;
> +}
>
Adrian Schmutzler July 30, 2017, 3:42 p.m.
Bild vom WebUI im Anhang, da ich vorhin vergessen habe, darauf hinzuweisen.

-----Original Message-----
From: Christian Dresel [mailto:fff@chrisi01.de] 
Sent: Sonntag, 30. Juli 2017 17:18
To: Adrian Schmutzler <freifunk@adrianschmutzler.de>;
franken-dev@freifunk.net
Subject: Re: [PATCH] fff-web: Extend switch port assignment display in
ports.html

hi

ich habs mir noch nicht genau angeguckt aber ist nicht folgendes vllt.
besser zum auslesen der Infos?

root@NeunhofGateway:~# uci show network.eth0_1.ports
network.eth0_1.ports='0t 4 5'
root@NeunhofGateway:~# uci show network.eth0_2.ports
network.eth0_2.ports='0t 1'
root@NeunhofGateway:~# uci show network.eth0_3.ports
network.eth0_3.ports='0t 2 3 5t'
root@NeunhofGateway:~# uci show network.eth0_4.ports
network.eth0_4.ports='0t 5t'

bzw. besser wohl uci get anstatt show dann lässt es sich besser parsen ;)

zum auslesen was es alles gibt,

uci show

oder

uci show network

Die eigentliche Darstellung kann ich mir ausm Code gerade nicht vorstellen,
dazu müsste ich das bei mir erstmal wo einspielen bevor ich was dazu sagen
kann. Da mangelt es aber grad zeitlich ein wenig.

mfg

Christian

On 30.07.2017 17:08, Adrian Schmutzler wrote:
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> Tested-by: Adrian Schmutzler <freifunk@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&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 "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&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;
> +}
>