@@ -1,3 +1,5 @@
+PORTORDER="4 3 2 1"
+
WANDEV=eth0
SWITCHDEV=eth1
CLIENT_PORTS="1 2 0t"
@@ -1,3 +1,5 @@
+PORTORDER="5 4"
+
WANDEV=eth0
SWITCHDEV=eth0
CLIENT_PORTS="0t"
@@ -1,3 +1,5 @@
+PORTORDER="5 4"
+
WANDEV=eth0
SWITCHDEV=eth0
CLIENT_PORTS="0t"
@@ -1,3 +1,5 @@
+PORTORDER="1"
+
WANDEV=eth0
SWITCHDEV=eth1
WAN_PORTS=
@@ -1,3 +1,5 @@
+PORTORDER="4 3 2 1"
+
WANDEV=eth1
SWITCHDEV=eth0
CLIENT_PORTS="1 2 0t"
@@ -1,3 +1,5 @@
+PORTORDER="4 3 2 1"
+
WANDEV=eth1
SWITCHDEV=eth0
CLIENT_PORTS="1 2 0t"
@@ -1,3 +1,5 @@
+PORTORDER="2 3 4 1"
+
WANDEV=eth0
SWITCHDEV=eth1
CLIENT_PORTS="1 4 0t"
@@ -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 "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 %>
@@ -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 "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
%>
@@ -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>
@@ -218,3 +218,12 @@ pre {
.swport .stat {
font-size: 10px;
}
+
+.swport .assign {
+ font-weight: bold;
+ font-size: 11px;
+}
+
+.swport .vassign {
+ font-style: italic;
+}
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. 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-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(-)