[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