fff-network: Make custom port configuration update-safe

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@adrianschmutzler.de>
Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Reviewed-by: Tim Niemeyer <tim@tn-x.org>
Signed-off-by: Tim Niemeyer <tim@tn-x.org>
 - Changed doc in network.mode
This commit is contained in:
Adrian Schmutzler 2017-08-21 18:46:28 +02:00 committed by Tim Niemeyer
parent b0974e0afc
commit 4dbf136a31
8 changed files with 139 additions and 57 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -2,7 +2,8 @@
## This file is used to configure the behavior of network interfaces
## if the routers interfaces differ from the standard WAN+4LAN-Ports
## +2Wireless APs.
## If you want to change their behavior, you can do so below.
## If you want to change their behavior, you should edit the file
## /etc/network.config
## After that you have to reboot the router with following command.
#reboot
#

View File

@ -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@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@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@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 }')

View File

@ -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__

View File

@ -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&auml;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&auml;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&auml;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&nbsp;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&uuml;sse</legend>
<table>
<tr>
<th style="width: 15em;text-align:left">Modus&nbsp;Anschluss&nbsp;0:</th>
<th style="width: 15em;text-align:left">Modus&nbsp;Anschluss&nbsp;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 &uuml;ber Ethernet Anschluss Verbindung zum Internet her.<br />
Client: Normale Clients stellen &uuml;ber Ethernet Anschluss des Knotens Verbindung zum Freifunk Netz her.<br />
BATMAN: Knoten stellt &uuml;ber Ethernet Anschluss Verbindung zu anderen MESH Knoten her.<br /><br />
Wenn diese Einstellung ver&auml;ndert wird, wird eine evtl. vorhandene manuelle Netzwerkkonfiguration in der
<tt>/etc/config/network</tt> &uuml;berschrieben.<br />
Anschlie&szlig;end wird der Router neugestartet.
</td></tr>
</table>
</fieldset>
</td></tr>
<% fi %>
</table>
</form>
<%in /www/ssl/cgi-bin/footer %>