[PATCH v7 2/2] fff-network: Make custom port configuration update-safe
Adrian Schmutzler
freifunk at adrianschmutzler.de
Mo Aug 21 18:46:28 CEST 2017
This writes CLIENT/BATMAN/WAN port configurations for devices
with switches to a separate file. This file can be changed
based on the desired setup and is then preserved during
firmware upgrade. In case of a future bugfix concerning the
entries of a specific network.* file, this will still be
effective as only the port configurations reside in the
new file, while the other settings could be overwritten by
the upgrade.
For one- and two-port devices, adjustments have been made so
that their relevant settings also reside in the new file now.
This also adds a WebUI interface for setting the two-port
devices (CPE210 and CPE510).
Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
Tested-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
src/packages/fff/fff-network/Makefile | 2 +-
src/packages/fff/fff-network/ar71xx/network.cpe210 | 19 +----
src/packages/fff/fff-network/ar71xx/network.cpe510 | 19 +----
.../fff/fff-network/ar71xx/network.gl-ar150 | 13 +---
.../fff-network/files/usr/sbin/configurenetwork | 55 ++++++++++++++
.../files/etc/uci-defaults/99-fff-sysupgrade | 2 +-
.../fff/fff-web/files/www/ssl/cgi-bin/ports.html | 83 +++++++++++++++++++---
7 files changed, 137 insertions(+), 56 deletions(-)
diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile
index d34016c..23a1345 100644
--- a/src/packages/fff/fff-network/Makefile
+++ b/src/packages/fff/fff-network/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-network
-PKG_VERSION:=0.0.7
+PKG_VERSION:=8
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/fff-network
diff --git a/src/packages/fff/fff-network/ar71xx/network.cpe210 b/src/packages/fff/fff-network/ar71xx/network.cpe210
index 8180789..6764c64 100644
--- a/src/packages/fff/fff-network/ar71xx/network.cpe210
+++ b/src/packages/fff/fff-network/ar71xx/network.cpe210
@@ -8,20 +8,5 @@ ETHMESHMAC="w2ap"
. /etc/network.mode
-#LAN0: default: BATMAN
-if [ "${LAN0MODE}" = "BATMAN" ] ; then
- BATMAN_PORTS="${BATMAN_PORTS} 5"
-elif [ "${LAN0MODE}" = "CLIENT" ] ; then
- CLIENT_PORTS="${CLIENT_PORTS} 5"
-else
- WAN_PORTS="${WAN_PORTS} 5"
-fi
-
-#LAN1: default: BATMAN
-if [ "${LAN1MODE}" = "WAN" ] ; then
- WAN_PORTS="${WAN_PORTS} 4"
-elif [ "${LAN1MODE}" = "CLIENT" ] ; then
- CLIENT_PORTS="${CLIENT_PORTS} 4"
-else
- BATMAN_PORTS="${BATMAN_PORTS} 4"
-fi
+LAN0PORT=5
+LAN1PORT=4
diff --git a/src/packages/fff/fff-network/ar71xx/network.cpe510 b/src/packages/fff/fff-network/ar71xx/network.cpe510
index 8180789..6764c64 100644
--- a/src/packages/fff/fff-network/ar71xx/network.cpe510
+++ b/src/packages/fff/fff-network/ar71xx/network.cpe510
@@ -8,20 +8,5 @@ ETHMESHMAC="w2ap"
. /etc/network.mode
-#LAN0: default: BATMAN
-if [ "${LAN0MODE}" = "BATMAN" ] ; then
- BATMAN_PORTS="${BATMAN_PORTS} 5"
-elif [ "${LAN0MODE}" = "CLIENT" ] ; then
- CLIENT_PORTS="${CLIENT_PORTS} 5"
-else
- WAN_PORTS="${WAN_PORTS} 5"
-fi
-
-#LAN1: default: BATMAN
-if [ "${LAN1MODE}" = "WAN" ] ; then
- WAN_PORTS="${WAN_PORTS} 4"
-elif [ "${LAN1MODE}" = "CLIENT" ] ; then
- CLIENT_PORTS="${CLIENT_PORTS} 4"
-else
- BATMAN_PORTS="${BATMAN_PORTS} 4"
-fi
+LAN0PORT=5
+LAN1PORT=4
diff --git a/src/packages/fff/fff-network/ar71xx/network.gl-ar150 b/src/packages/fff/fff-network/ar71xx/network.gl-ar150
index 4e59b86..61ce71a 100644
--- a/src/packages/fff/fff-network/ar71xx/network.gl-ar150
+++ b/src/packages/fff/fff-network/ar71xx/network.gl-ar150
@@ -1,19 +1,12 @@
WANDEV=eth0
SWITCHDEV=eth1
WAN_PORTS=
+BATMAN_PORTS="0t"
+CLIENT_PORTS="0t"
ETHMESHMAC=eth1
ROUTERMAC=eth0
. /etc/network.mode
-if [ "$ETHMODE" = "CLIENT" ] ; then
- ## Activate Client:
- CLIENT_PORTS="1 0t"
- BATMAN_PORTS="0t"
-else
- ## Activate BATMAN:
- BATMAN_PORTS="1 0t"
- CLIENT_PORTS="0t"
-fi
-
+ETHPORT=1
diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
index 5b06009..c6b3113 100755
--- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
+++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
@@ -12,6 +12,61 @@
BOARD="$(uci get board.model.name)"
. /etc/network.$BOARD
+if [ -s /etc/network.config ] ; then
+ . /etc/network.config
+else
+ echo "CLIENT_PORTS='$CLIENT_PORTS'" > /etc/network.config
+ echo "BATMAN_PORTS='$BATMAN_PORTS'" >> /etc/network.config
+ if [ -n "$WAN_PORTS" ] ; then
+ echo "WAN_PORTS='$WAN_PORTS'" >> /etc/network.config
+ fi
+ if [ "$ONE_PORT" = "YES" ] || [ -n "$ETHPORT" ] ; then
+ echo "ETHMODE='$ETHMODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config
+ fi
+ if [ -n "$LAN0PORT" ] ; then
+ echo "LAN0MODE='$LAN0MODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config
+ fi
+ if [ -n "$LAN1PORT" ] ; then
+ echo "LAN1MODE='$LAN1MODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config
+ fi
+ echo "FORCEPARSE='0' # Parse at: 0=first boot only, 1=every reboot, 2=next reboot (once)" >> /etc/network.config
+fi
+
+if [ "$FORCEPARSE" = '2' ] ; then
+ sed -i '/^FORCEPARSE/d' /etc/network.config
+ echo "FORCEPARSE='0' # Parse at: 0=first boot only, 1=every reboot, 2=next reboot (once)" >> /etc/network.config
+ FORCEPARSE='1'
+fi
+
+if [ -n "$ETHPORT" ] ; then
+ #LAN at AR150: default: BATMAN
+ if [ "${ETHMODE}" = "BATMAN" ] ; then
+ BATMAN_PORTS="${BATMAN_PORTS} ${ETHPORT}"
+ else
+ CLIENT_PORTS="${CLIENT_PORTS} ${ETHPORT}"
+ fi
+fi
+if [ -n "$LAN0PORT" ] ; then
+ #LAN0 at two-port: default: BATMAN
+ if [ "${LAN0MODE}" = "BATMAN" ] ; then
+ BATMAN_PORTS="${BATMAN_PORTS} ${LAN0PORT}"
+ elif [ "${LAN0MODE}" = "CLIENT" ] ; then
+ CLIENT_PORTS="${CLIENT_PORTS} ${LAN0PORT}"
+ else
+ WAN_PORTS="${WAN_PORTS} ${LAN0PORT}"
+ fi
+fi
+if [ -n "$LAN1PORT" ] ; then
+ #LAN1 at two-port: default: BATMAN
+ if [ "${LAN1MODE}" = "WAN" ] ; then
+ WAN_PORTS="${WAN_PORTS} ${LAN1PORT}"
+ elif [ "${LAN1MODE}" = "CLIENT" ] ; then
+ CLIENT_PORTS="${CLIENT_PORTS} ${LAN1PORT}"
+ else
+ BATMAN_PORTS="${BATMAN_PORTS} ${LAN1PORT}"
+ fi
+fi
+
if ! uci -q get network.$SWITCHDEV > /dev/null || [ "$FORCEPARSE" = '1' ] ; then
SWITCHHW=$(swconfig list | awk '{ print $4 }')
diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
index 61f2d1f..ab6f2de 100644
--- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
+++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
@@ -7,6 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
/etc/dropbear/dropbear_dss_host_key
/etc/dropbear/dropbear_rsa_host_key
/etc/dropbear/authorized_keys
-/etc/network.mode
+/etc/network.config
/etc/config/system
__EOF__
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..9d54be7 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,18 +1,32 @@
#!/usr/bin/haserl
<%
+board_name=$(uci -q get board.model.name)
# write
if [ "$REQUEST_METHOD" == "POST" ] ; then
- sed -i '/^.*# set via WebUI/d' /etc/network.mode
- echo "ETHMODE=\"${POST_mode}\" # set via WebUI" >> /etc/network.mode
- do_reboot=1
- MSG='<span class="green">Port Modus geändert! Router startet neu...</span>'
+ if [ "$POST_change_mode" != "" ] ; then
+ sed -i '/^.*# set via WebUI/d' /etc/network.config
+ echo "ETHMODE=\"${POST_mode}\" # set via WebUI" >> /etc/network.config
+ sed -i '/^FORCEPARSE/d' /etc/network.config
+ echo "FORCEPARSE='2'" >> /etc/network.config
+ do_reboot=1
+ MSG='<span class="green">Port Modus geändert! Router startet neu...</span>'
+ fi
+ if [ "$POST_change_twoport" != "" ] ; then
+ sed -i '/^.*# set via WebUI/d' /etc/network.config
+ echo "LAN0MODE=\"${POST_mode0}\" # set via WebUI" >> /etc/network.config
+ echo "LAN1MODE=\"${POST_mode1}\" # set via WebUI" >> /etc/network.config
+ sed -i '/^FORCEPARSE/d' /etc/network.config
+ echo "FORCEPARSE='2'" >> /etc/network.config
+ do_reboot=1
+ MSG='<span class="green">Port Modus geändert! Router startet neu...</span>'
+ fi
fi
%>
<%in /www/ssl/cgi-bin/header %>
<%in /www/ssl/cgi-bin/helpers %>
<% show_msg %>
-<form method="POST">
+<form method="post">
<table style="width: 100%;">
<% if swconfig list | grep -q switch0 ; then %>
<%# Device has a switch %>
@@ -53,10 +67,11 @@ fi
</fieldset>
</td></tr>
<% fi %>
-<% if grep -q network.mode /etc/network.$(uci -q get board.model.name) ; then %>
+<% if grep -q "ONE_PORT" "/etc/network.$board_name" || grep -q "ETHPORT" "/etc/network.$board_name" ; then %>
<%
- # Device has only one or two ports and makes use of /etc/network.mode
+ # Device has a port set by $ETHMODE
. /etc/network.mode
+ . /etc/network.config
%>
<tr><td>
<fieldset>
@@ -66,9 +81,11 @@ fi
<th style="width: 1em;">Anschluss Modus:</th>
<td>
<select name="mode">
- <option value="WAN" <% [ "$ETHMODE" == "WAN" ] && echo -n selected %>>WAN</option>
- <option value="CLIENT" <% [ "$ETHMODE" == "CLIENT" ] && echo -n selected %>>Client</option>
- <option value="BATMAN" <% [ "$ETHMODE" == "BATMAN" ] && echo -n selected %>>BATMAN</option>
+ <option value="BATMAN" <% [ "$ETHMODE" == "BATMAN" ] && echo -n 'selected="selected" ' %>>BATMAN</option>
+ <option value="CLIENT" <% [ "$ETHMODE" == "CLIENT" ] && echo -n 'selected="selected" ' %>>CLIENT</option>
+ <% if grep -q "ONE_PORT" "/etc/network.$board_name" ; then %>
+ <option value="WAN" <% [ "$ETHMODE" == "WAN" ] && echo -n 'selected="selected" ' %>>WAN</option>
+ <% fi %>
</select>
</td>
</tr>
@@ -87,6 +104,52 @@ fi
</fieldset>
</td></tr>
<% fi %>
+<% if grep -q "LAN0PORT" "/etc/network.$board_name" || grep -q "LAN1PORT" "/etc/network.$board_name" ; then %>
+ <%
+ # Device has two ports
+ . /etc/network.mode
+ . /etc/network.config
+ %>
+ <tr><td>
+ <fieldset>
+ <legend>Ethernet Anschlüsse</legend>
+ <table>
+ <tr>
+ <th style="width: 15em;text-align:left">Modus Anschluss 0:</th>
+ <th style="width: 15em;text-align:left">Modus Anschluss 1:</th>
+ <th></th>
+ </tr>
+ <tr>
+ <td>
+ <select name="mode0">
+ <option value="BATMAN" <% [ "$LAN0MODE" == "BATMAN" ] && echo -n 'selected="selected" ' %>>BATMAN</option>
+ <option value="CLIENT" <% [ "$LAN0MODE" == "CLIENT" ] && echo -n 'selected="selected" ' %>>CLIENT</option>
+ <option value="WAN" <% [ "$LAN0MODE" == "WAN" ] && echo -n 'selected="selected" ' %>>WAN</option>
+ </select>
+ </td>
+ <td>
+ <select name="mode1">
+ <option value="BATMAN" <% [ "$LAN1MODE" == "BATMAN" ] && echo -n 'selected="selected" ' %>>BATMAN</option>
+ <option value="CLIENT" <% [ "$LAN1MODE" == "CLIENT" ] && echo -n 'selected="selected" ' %>>CLIENT</option>
+ <option value="WAN" <% [ "$LAN1MODE" == "WAN" ] && echo -n 'selected="selected" ' %>>WAN</option>
+ </select>
+ </td>
+ <td><input type="submit" name="change_twoport" /></td>
+ </tr>
+ <tr><td colspan="3"></td></tr>
+ <tr><td colspan="3">
+ WAN: Knoten stellt über Ethernet Anschluss Verbindung zum Internet her.<br />
+ Client: Normale Clients stellen über Ethernet Anschluss des Knotens Verbindung zum Freifunk Netz her.<br />
+ BATMAN: Knoten stellt über Ethernet Anschluss Verbindung zu anderen MESH Knoten her.<br /><br />
+
+ Wenn diese Einstellung verändert wird, wird eine evtl. vorhandene manuelle Netzwerkkonfiguration in der
+ <tt>/etc/config/network</tt> überschrieben.<br />
+ Anschließend wird der Router neugestartet.
+ </td></tr>
+ </table>
+ </fieldset>
+ </td></tr>
+<% fi %>
</table>
</form>
<%in /www/ssl/cgi-bin/footer %>
--
2.7.4
Mehr Informationen über die Mailingliste franken-dev