[PATCH v7 2/2] fff-network: Make custom port configuration update-safe

Tim Niemeyer tim at tn-x.org
So Sep 17 16:11:00 CEST 2017


Hi

Reviewed und mit kleiner Doku-Änderung an der network.mode applied.

Tim

Am Montag, den 21.08.2017, 18:46 +0200 schrieb Adrian Schmutzler:
> 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
> 
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 488 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20170917/abe437d1/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev