From patchwork Sun Oct 15 16:17:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v4] fff-web: Extend switch port assignment display in ports.html From: Adrian Schmutzler X-Patchwork-Id: 594 Message-Id: <1508084235-56866-1-git-send-email-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Date: Sun, 15 Oct 2017 18:17:15 +0200 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 Tested-by: Adrian Schmutzler Reviewed-by: Tim Niemeyer --- .../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='Port Modus geändert! Router startet neu...' 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 "Multi-Link" + elif echo "$clientports" | grep -q "${1}" ; then + echo -n "CLIENT" + elif echo "$batmanports" | grep -q "${1}" ; then + echo -n "BATMAN" + elif echo "$wanports" | grep -q "${1}" ; then + echo -n "WAN" + else + echo -n "Unknown" + fi + echo "
" +} +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 "\"${link}\"

" + format_state "${port}" + echo "$speed
$duplex


" + + 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 "tagged
" + elif echo "$vports" | grep -q "${port}" ; then + echo "untagged
" + else + echo "-
" + fi + done +} + + %> <%in /www/ssl/cgi-bin/header %> <%in /www/ssl/cgi-bin/helpers %> @@ -36,22 +84,55 @@ 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/') - link=$(echo "$line" | sed 's/.* link:\([^ ]*\).*/\1/') + echo "" + echo "" + + 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 "" + 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 "" + done + if [ -n "$portorder" ] ; then + echo "" + 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 "" done %> @@ -60,7 +141,11 @@ fi
" + swconfig dev switch0 show | grep -E "VLAN\s[0-9]+:[ \t]*$" | while read line ; do + vid=$(echo "$line" | sed 's/.*VLAN \([^:]*\).*/\1/') + echo "VLAN $vid
" + done + echo "
" - echo "${port}
" - echo "\"${link}\"
" - echo "$speed
$duplex
" + echo "WAN-Port
" + echo "\"${link}\"

" + echo "WAN
" + echo "$speed" + echo "
" + echo "Port #${port}
" + format_port "${line}" + echo "
" + echo "Port #${port}
" + format_port "${line}" echo "
+ <% 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!
+ <% else %> Die Nummerierung und Reihenfolge der Ports entspricht nicht notwendigerweise der der Netzwerkanschlüsse am Router!
+ <% fi %> Einer (oder mehrere) der Ports sind keine Netzwerkanschlüsse am Router sondern binden die Router CPU an den internen Switch an.
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; +}