[PATCH v3 03/14] fff-network: Reorganize network initialization

Christian Dresel fff at chrisi01.de
Di Apr 23 11:04:10 CEST 2019


hi

On 22.04.19 23:08, mail at adrianschmutzler.de wrote:
> Hallo Robert,
>
> okay, dann kommt hier ein oneport als default rein.
>
> +	*)
> +		# Fallback for new or incorrectly named devices
> +		setupOnePort "eth0" "CLIENT"
> +		;;
>
> Das mit dem sleep ist wahrscheinlich wirklich Quatsch, ich teste das mal und werfe es dann raus.

stimmt, das sleep dürfte hier wirklich quatsch sein. Mit der
Fallback-Änderung von oben kannst du dann ein

Reviewed-by: Christian Dresel <fff at chrisi01.de>

dran hängen. Das gefällt mir soweit dann sehr gut.

Gruß

Christian

>
> Grüße
>
> Adrian
>
>> -----Original Message-----
>> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
>> Of robert
>> Sent: Montag, 22. April 2019 22:48
>> To: franken-dev at freifunk.net
>> Subject: Re: [PATCH v3 03/14] fff-network: Reorganize network initialization
>>
>> Hi Adrian,
>>
>> das find ich gut. Mach noch einen Default in die case.
>>
>> Bei 23-config-ipaddr sind noch die 5 Sekunden timeout drin. Wir machen da
>> doch nur uci- Zeugs. Ich denke, das braucht man nicht. Oder hast du das
>> getestet.
>>
>> Robert
>>
>>
>> Am 22.04.19 um 18:17 schrieb Adrian Schmutzler:
>>> Jo, wir haben ja keine Eile.
>>>
>>> Tatsächlich neige ich inzwischen dazu, einfach wie vorgeschlagen den
>> oneport als default zu setzen. Das ist so einfach und effektiv, das man das
>> sogar doch noch in den Patch mit reinbauen könnte. So geht dann zumindest
>> irgendein Port immer.
>>> Grüße
>>>
>>> Adrian
>>>
>>> On 22 April 2019 18:10:47 CEST, Christian Dresel <fff at chrisi01.de> wrote:
>>>> Hi
>>>>
>>>> lass mich mal ne Nacht drüber schlafen. Meine Erfahrung war bisher,
>>>> je weiter die Firmware fortgeschritten ist, umso umständlicher wurde
>>>> es neue devices ohne UART einzurichten weil man immer schwerer
>>>> "hinten rum irgendwie wieder drauf kam".
>>>>
>>>> Damit wirds jetzt dann praktisch nahezu unmöglich irgendwie auf das
>>>> Device zu kommen wenn der Name falsch ist. Gefällt mir nicht
>>>> sonderlich.
>>>>
>>>> Ansonsten gefällt mir das ganze aber sehr gut und hab so auch nix
>>>> mehr gefunden. Allerdings ist das genauso ein Patch, wo ich sehr sehr
>>>> gerne ein weiteres paar Augen drauf hätte
>>>>
>>>> Gruß
>>>>
>>>> Christian
>>>>
>>>> On 22.04.19 17:44, Adrian Schmutzler wrote:
>>>>> Hallo Christian,
>>>>>
>>>>> im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine
>>>>> network.devicename hatte.
>>>>>
>>>>> Man könnte aber durchaus überlegen, eine standardconfig per default
>>>>> case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen.
>>>> Odre
>>>>> wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht).
>>>>>
>>>>> Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern
>>>>> habe mich wie zuvor mit configurenetwork in der Logik bewegt, dass
>>>>> nur eingerichtete Devices gehen.
>>>>> Ich bin auch der Meinung, dass wir einen solchen default case
>>>>> separat behandeln sollten und nicht hier noch reinmatschen.
>>>>>
>>>>> Beste Grüße
>>>>>
>>>>> Adrian
>>>>>
>>>>> On 22 April 2019 17:33:27 CEST, Christian Dresel <fff at chrisi01.de>
>>>> wrote:
>>>>>     hi
>>>>>
>>>>>     noch eine Frage zum Verständnis:
>>>>>
>>>>>     Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein
>>>> ziemlich
>>>>>     kaputtes Gerät raus oder?
>>>>>
>>>>>     Es wird dann nichts aufgerufen und am Ende sollte diese File
>>>>> dann
>>>> als
>>>>>     Network File dienen:
>>>>>
>>>>>
>> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/
>>>> fff/fff-network/files/etc/config/network
>>>>>     damit geht dann vermutlich gar nix mehr an den Ethernets. Das
>>>> macht neue
>>>>>     Geräte einbinden ein bisschen umständlich, wenn man sich da
>>>> einmal im
>>>>>     Device Namen vertut, hat man sich wunderbar rausgesperrt und
>>>> kommt nur
>>>>>     seriell drauf um zu gucken was los ist oder?
>>>>>
>>>>>     Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber
>>>> schlafen ob
>>>>>     mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht
>>>> es dann
>>>>>     vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen?
>>>> Somit kommt
>>>>>     man zumindest am Ende irgendwie wieder an die Geräte ran.
>>>>>
>>>>>     Gruß
>>>>>
>>>>>     Christian
>>>>>
>>>>>     On 22.04.19 14:35, Adrian Schmutzler wrote:
>>>>>
>>>>>         This removes the configurenetwork script and replaces it by
>>>>>         some scripts run only during first boot. This introduces
>>>>>         several changes: - The different tasks dealt with in
>>>>>         configurenetwork are split. Thus, one script deals with
>>>>>         switch/port setup, one with br-mesh MAC address, one with
>>>>>         ETHMESHMAC, and one with IP addresses. This makes the whole
>>>>>         approach more modular, compared to the monolithic
>>>>>         configurenetwork. - Where configurenetwork contained
>>>>>         sophisticated, nested conditions to account for all possible
>>>>>         combinations of variables, the new approach is inspired by
>>>>>         OpenWrt's board.d subfiles. Instead of defining variables, we
>>>>>         now directly call function in a select-case. This is much
>>>> more
>>>>>         flexible, as we can just put code there for a special case
>>>>>         instead of bending configurenetwork for it. - The select-case
>>>>>         accounts for the various cases of similar/same parameters of
>>>>>         multiple devices, which can be grouped now. - Scripts are run
>>>>>         only at first boot. Later changes have to be done manually
>>>> (we
>>>>>         will provide some scripts later). Those will typically be
>>>>>         limited to changing only the ports; no need to run whole
>>>>>         network config again. - network.mode and network.config will
>>>>>         disappear. For switch-based devices, there is no advantage of
>>>>>         using network.config compared directly editing
>>>>>         /etc/config/network. Upgrade-safety can be established by
>>>>>         putting uci commands in an upgrade-safe script file (to be
>>>>>         provided in a later patch). After this patch, show_info and
>>>>>         the ports display in WebUI are broken. Those will be fixed in
>>>>>         a later patch. Signed-off-by: Adrian Schmutzler
>>>>>         <freifunk at adrianschmutzler.de>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> ---
>>>>>         Changed in v2: - Fixed archer-c60-v2 to v1 - Added network
>>>>>         functions file in uci-defaults/22c - Removed some -q from uci
>>>>>         - Removed all commands only needed for running devices (this
>>>>>         is uci only) - Added descriptions for functions in
>>>>>         networksetup Changed in v3: - Changed order of 22a and 22b -
>>>>>         uci del instead uci set for WAN on one-port - switch/vlanX
>>>>>         instead of eth#/eth#.# for switch-based devices
>>>>>
>>>> ---------------------------------------------------------------------
>>>> ---
>>>>>         bsp/default/root_file_system/etc/rc.local | 4 -
>>>>>         src/packages/fff/fff-network/Makefile | 4 +-
>>>>>         .../files/etc/uci-defaults/22a-config-ports | 89 +++++++
>>>>>         .../files/etc/uci-defaults/22b-config-routermac | 55 +++++
>>>>>         .../files/etc/uci-defaults/22c-config-ethmesh | 75 ++++++
>>>>>         .../files/etc/uci-defaults/23-config-ipaddr | 31 +++
>>>>>         .../files/lib/functions/fff/networksetup | 163 +++++++++++++
>>>>>         .../fff-network/files/lib/functions/fff/portorder | 31 +++
>>>>>         .../fff-network/files/usr/sbin/configurenetwork | 263
>>>>>         ---------------------
>>>> src/packages/fff/fff-sysupgrade/Makefile
>>>>>         | 3 +- .../files/etc/uci-defaults/99-fff-sysupgrade | 1 - 11
>>>>>         files changed, 446 insertions(+), 273 deletions(-) create
>>>> mode
>>>>>         100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-router
>>>> mac
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmes
>>>> h
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>>>         delete mode 100755
>>>>>         src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>>>         diff --git a/bsp/default/root_file_system/etc/rc.local
>>>>>         b/bsp/default/root_file_system/etc/rc.local index
>>>>>         59042c37..e02368a5 100755 ---
>>>>>         a/bsp/default/root_file_system/etc/rc.local +++
>>>>>         b/bsp/default/root_file_system/etc/rc.local @@ -2,10 +2,6 @@
>>>> #
>>>>>         Put your custom commands here that should be executed once #
>>>>>         the system init finished. By default this file does nothing.
>>>>>         -/usr/sbin/configurenetwork - -sleep 3 -
>>>>>         /usr/sbin/configurehood touch /tmp/started diff --git
>>>>>         a/src/packages/fff/fff-network/Makefile
>>>>>         b/src/packages/fff/fff-network/Makefile index
>>>>>         e9335884..11796797 100644 ---
>>>>>         a/src/packages/fff/fff-network/Makefile +++
>>>>>         b/src/packages/fff/fff-network/Makefile @@ -1,8 +1,7 @@
>>>>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-network
>>>>>         -PKG_VERSION:=10 -PKG_RELEASE:=1 +PKG_RELEASE:=11
>>>>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -34,7 +33,6 @@
>>>>>         endef define Package/$(PKG_NAME)/install $(CP) ./files/*
>>>> $(1)/
>>>>>         - test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/ endef
>>>>>         $(eval $(call BuildPackage,$(PKG_NAME))) diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
>>>> s
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
>>>> s
>>>>>         new file mode 100644 index 00000000..b8eaceab --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
>>>> s
>>>>>         @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>>>         board.model.name)" + +. /lib/functions/fff/networksetup +
>>>>>         +case "$BOARD" in + archer-c7-v2) + setupSwitch "eth1" "4 5
>>>>>         0t" "2 3 0t" "1 6" + setupWan "eth0" + ;; + archer-c25-v1|\ +
>>>>>         archer-c60-v1) + setupSwitch "eth1" "1 2 0t" "3 4 0t" +
>>>>>         setupWan "eth0" + ;; + cpe210|\ + cpe510) + # Default: LAN0:
>>>>>         WAN, LAN1: CLIENT + setupSwitch "eth0" "0t 4" "0t" "0t 5" +
>>>>>         setupWan "eth0.2" + ;; + gl-ar150) + # Default: CLIENT +
>>>>>         setupSwitch "eth1" "0t 1" "0t" + setupWan "eth0" + ;; +
>>>>>         tl-wdr3500-v1|\ + tl-wr741nd-v2|\ + tl-wr841-v7|\ +
>>>>>         tl-wr841-v9|\ + tl-wr841-v10|\ + tl-wr841-v11|\ +
>>>>>         tl-wr841-v12) + setupSwitch "eth0" "1 2 0t" "3 4 0t" +
>>>>>         setupWan "eth1" + ;; + tl-wdr3600-v1|\ + tl-wdr4300-v1|\ +
>>>>>         tl-wdr4310-v1|\ + tl-wdr4900-v1) + setupSwitch "eth0" "4 5
>>>> 0t"
>>>>>         "2 3 0t" "1 0t" + setupWan "eth0.2" + ;; + tl-wr841-v8|\ +
>>>>>         tl-wr842n-v2) + setupSwitch "eth1" "1 4 0t" "2 3 0t" +
>>>>>         setupWan "eth0" + ;; + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>>>>         tl-wr741nd-v4) + setupSwitch "eth0" "1 4 0t" "2 3 0t" +
>>>>>         setupWan "eth1" + ;; + tl-wr1043nd-v1) + setupSwitch "eth0"
>>>> "3
>>>>>         4 5t" "1 2 5t" "0 5t" + setupWan "eth0.2" + ;; +
>>>>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + setupSwitch "eth0" "1 2
>>>>>         6t" "3 4 6t" "5 6t" + setupWan "eth0.2" + ;; +
>>>>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + setupSwitch "eth0" "1 2
>>>>>         0t" "3 4 0t" "5 0t" + setupWan "eth0.2" + ;; + cpe210-v2|\ +
>>>>>         cpe210-v3|\ + tl-mr3020-v1|\ + tl-wa850re-v1|\ +
>>>>>         tl-wa860re-v1|\ + tl-wa901nd-v2|\ + ubnt-bullet-m|\ +
>>>>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>>>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi|\ +
>>>>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) + setupOnePort
>>>> "eth0"
>>>>>         "CLIENT" + ;; +esac diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
>>>> ermac
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
>>>> ermac
>>>>>         new file mode 100644 index 00000000..d1a5e50c --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
>>>> ermac
>>>>>         @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>>>         board.model.name)" + +. /lib/functions/fff/networksetup + +.
>>>>>         /lib/functions.sh +. /lib/functions/system.sh + +case
>>>> "$BOARD"
>>>>>         in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2|\ +
>>>>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + ROUTERMAC=$(cat
>>>>>         /sys/class/net/eth1/address) + ;; + cpe210-v2|\ + cpe210-v3|\
>>>>>         + tl-wa850re-v1|\ + tl-wa860re-v1|\ + tl-wa901nd-v2|\ +
>>>>>         tl-wdr3500-v1|\ + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>>>>         tl-wr741nd-v2|\ + tl-wr741nd-v4|\ + tl-wr841-v7|\ +
>>>>>         ubnt-bullet-m|\ + ubnt-loco-m|\ + ubnt-loco-m-xw|\ +
>>>>>         ubnt-nano-m|\ + ubnt-pico-m|\ + ubnt-power-m-xw|\ +
>>>>>         ubnt-unifi) + ROUTERMAC=$(cat
>>>>>         /sys/class/ieee80211/phy0/macaddress) + ;; + tl-wdr3600-v1|\
>>>> +
>>>>>         tl-wdr4300-v1|\ + tl-wdr4310-v1) + ROUTERMAC=$(cat
>>>>>         /sys/class/ieee80211/phy1/macaddress) + ;; +
>>>>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) +
>>>>>         ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0) + ;; + *) +
>>>>>         ROUTERMAC=$(cat /sys/class/net/eth0/address) + ;; +esac +
>>>> +uci
>>>>>         set "network.mesh.macaddr=$ROUTERMAC" +uci commit network
>>>> diff
>>>>>         --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
>>>> esh
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
>>>> esh
>>>>>         new file mode 100644 index 00000000..86c840c3 --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
>>>> esh
>>>>>         @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>>>         board.model.name)" + +. /lib/functions/fff/network +.
>>>>>         /lib/functions/fff/networksetup + +. /lib/functions.sh +.
>>>>>         /lib/functions/system.sh + +# macFlipLocalBit: +# use mac
>>>>>         address from phyX with 'locally administered' bit set to '1'
>>>>>         +# only possible, because wXmesh is created first and
>>>>>         therefore gets the 'universally administered address' + +case
>>>>>         "$BOARD" in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2)
>>>> +
>>>>>         ETHMESHMAC=$(cat /sys/class/net/eth0/address) + ;; +
>>>>>         archer-c25-v1|\ + archer-c60-v1|\ + tl-wr740n-v4|\ +
>>>>>         tl-wr740nd-v4|\ + tl-wr741nd-v2|\ + tl-wr741nd-v4|\ +
>>>>>         tl-wr841-v7|\ + tl-wr841-v9|\ + tl-wr841-v10|\ +
>>>>>         tl-wr841-v11|\ + tl-wr841-v12) + ETHMESHMAC=$(cat
>>>>>         /sys/class/net/eth1/address) + ;; + cpe210|\ + cpe210-v2|\ +
>>>>>         cpe210-v3|\ + cpe510|\ + tl-wa850re-v1|\ + tl-wa860re-v1|\ +
>>>>>         tl-wa901nd-v2|\ + tl-wr1043nd-v1|\ + ubnt-bullet-m|\ +
>>>>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>>>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi) +
>>>>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>>>         /sys/class/ieee80211/phy0/macaddress)") + ;; + gl-ar150|\ +
>>>>>         tl-mr3020-v1) + ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>>>         /sys/class/net/eth0/address)") + ;; + tl-wdr4900-v1) +
>>>>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>>>         /sys/class/ieee80211/phy1/macaddress)") + ;; +
>>>> tl-wr1043nd-v4)
>>>>>         + ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c) + ;; +
>>>>>         tl-wr1043n-v5) + ETHMESHMAC=$(macaddr_add
>>>> $(mtd_get_mac_binary
>>>>>         product-info 8) 1) + ;; + ubnt-unifiac-lite|\ +
>>>>>         ubnt-unifiac-mesh) + ETHMESHMAC=$(macFlipLocalBit
>>>>>         "$(mtd_get_mac_binary EEPROM 0x0)") + ;; +esac + +if [ -n
>>>>>         "$ETHMESHMAC" ]; then + uci set
>>>>>         "network.ethmesh.macaddr=$ETHMESHMAC" + uci commit network
>>>> +fi
>>>>>         diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
>>>> r
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
>>>> r
>>>>>         new file mode 100644 index 00000000..db500c15 --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
>>>> r
>>>>>         @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +. /lib/functions/fff/network +
>>>>>         +echo "Setting IPv6 addresses" +# Some time needed :( +sleep
>>>> 5
>>>>>         + +ROUTERMAC=$(uci get network.mesh.macaddr)
>>>>>         +prefix="fdff:0::/64" + +# Set $prefix as prefix +uci set
>>>>>         network.globals=globals +uci set
>>>>>         "network.globals.ula_prefix=$prefix" + +# Set $prefix::MAC as
>>>>>         IP +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" +uci
>>>>>         add_list "network.mesh.ip6addr=$addr" +uci set
>>>>>         network.mesh.proto=static + +# Set $prefix::1 as IP
>>>>>         +addr="$(ipAssemble "$prefix" "1")" +uci add_list
>>>>>         "network.mesh.ip6addr=$addr" + +# Set $prefix::link-local as
>>>>>         IP +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" +uci
>>>>>         add_list "network.mesh.ip6addr=$addr" + +uci commit network
>>>>>         diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>>>         new file mode 100644 index 00000000..ccc943df --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>>>         @@ -0,0 +1,163 @@ +# Copyright 2019 Adrian Schmutzler +#
>>>>>         License GPLv3 + +. /lib/functions/network.sh + +setAutoConf()
>>>>>         { + # Sets ipv6 auto configuration on an interface to on/off
>>>> +
>>>>>         # Usage: setAutoConf <interface> <[0|1]> + local iface=$1 +
>>>>>         local on=$2 + +
>>>>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" + echo
>>>>>         "# Generated from configurenetwork" > "$sysctlfile" + echo
>>>>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" +
>>>> echo
>>>>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>>>> "$sysctlfile"
>>>>>         + echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>>>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>>>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>>>>         = $on" >> "$sysctlfile" + echo
>>>>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" + +
>>>>>         /sbin/sysctl -p "$sysctlfile" +} + +enableAutoConf() { + #
>>>>>         Enables ipv6 auto configuration on an interface + # Usage:
>>>>>         enableAutoConf <interface> + local iface=$1 + + setAutoConf
>>>>>         "$iface" "1" +} + +disableAutoConf() { + # Disables ipv6 auto
>>>>>         configuration on an interface + # Usage: disableAutoConf
>>>>>         <interface> + local iface=$1 + + setAutoConf "$iface" "0" +}
>>>> +
>>>>>         +fixMac() { + # Update MAC address on live device/interface +
>>>>>         # + # fixMac <newmac> <interface> + # + # newmac: MAC address
>>>>>         to be set + # interface: Interface to be updated as in uci
>>>>>         (e.g. mesh) + + local newmac=$1 + local iface=$2 + local dev
>>>> +
>>>>>         + echo "Fixing MAC on $iface" + sleep 10 + +
>>>>>         network_get_physdev dev "$iface" + + uci set
>>>>>         "network.${iface}.macaddr=$newmac" + uci commit network + +
>>>> if
>>>>>         [ -n "$dev" ]; then + ip link set "$dev" down + ip link set
>>>>>         "$dev" address "$newmac" + ip link set "$dev" up + fi + +
>>>>>         /etc/init.d/network restart +} + +setupSwitch() { + # Set up
>>>>>         switch for switch-based devices + # This is intended for
>>>>>         initial setup, not for updates + # (changing ports will be
>>>>>         sufficient then) + # + # Usage: setupSwitch <SWITCHDEV, e.g.
>>>>>         eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>] + +
>> local
>>>>>         SWITCHDEV=$1 + local CLIENT_PORTS=$2 + local
>> BATMAN_PORTS=$3
>>>> +
>>>>>         local WAN_PORTS=$4 + local SWITCHHW + +
>> SWITCHHW="$(swconfig
>>>>>         list | awk '{ print $4 }')" + + uci set
>>>>>         "network.switch=switch" + uci set
>>>>>         "network.switch.name=$SWITCHHW" + uci set
>>>>>         "network.switch.enable=1" + uci set "network.switch.reset=1"
>>>> +
>>>>>         uci set "network.switch.enable_vlan=1" + + uci set
>>>>>         "network.vlan1=switch_vlan" + uci set
>>>>>         "network.vlan1.device=$SWITCHHW" + uci set
>>>>>         "network.vlan1.vlan=1" + uci set
>>>>>         "network.vlan1.ports=$CLIENT_PORTS" + + # This defines the
>>>>>         VLAN for WAN ports inside the switch. + # This is required
>>>>>         even if the WAN eth is separate, but the WAN port is in the
>>>>>         switch! + if [ -n "$WAN_PORTS" ]; then + uci set
>>>>>         "network.vlan2=switch_vlan" + uci set
>>>>>         "network.vlan2.device=$SWITCHHW" + uci set
>>>>>         "network.vlan2.vlan=2" + uci set
>>>>>         "network.vlan2.ports=$WAN_PORTS" + fi + + uci set
>>>>>         "network.vlan3=switch_vlan" + uci set
>>>>>         "network.vlan3.device=$SWITCHHW" + uci set
>>>>>         "network.vlan3.vlan=3" + uci set
>>>>>         "network.vlan3.ports=$BATMAN_PORTS" + + uci set
>>>>>         network.mesh.ifname="$SWITCHDEV.1 bat0" + uci set
>>>>>         network.ethmesh.ifname="$SWITCHDEV.3" + + uci commit network
>>>>>         +} + +setupWan() { + # Set up WAN for any device with
>>>>>         dedicated port (no one-port where mode is changed) + # This
>>>> is
>>>>>         intended for initial setup, not for updates + # (updates are
>>>>>         only possible by changing ports in a switch) + # + # Usage:
>>>>>         setupWan <WANDEV, e.g. eth0, eth0.2> + + local WANDEV=$1 + +
>>>> #
>>>>>         This defines the WAN interface. We use the VLAN ID only if we
>>>>>         do NOT have a separate eth. + # This is different from the
>>>>>         criterion for the WAN port dealt with above! + # If the
>>>> WANDEV
>>>>>         is different from the SWITCHDEV, but the WAN port is in the
>>>>>         switch, + # the WAN eth has to be connected to the switch
>>>>>         untagged! + enableAutoConf "$WANDEV" + uci set
>>>>>         network.wan.ifname="$WANDEV" + + uci commit network +} +
>>>>>         +setupOnePort() { + # Set up port mode for one-port devices +
>>>>>         # This is intended for initial setup and for updates + #
>>>>>         (latter will require network restart) + # + # Usage:
>>>>>         setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT,
>>>>>         WAN> + + local DEV=$1 + local ETHMODE=$2 + + uci set
>>>>>         "network.$DEV=interface" + uci set "network.$DEV.ifname=$DEV"
>>>>>         + if [ "$ETHMODE" = "WAN" ]; then + enableAutoConf "$DEV" +
>>>>>         uci set network.mesh.ifname="bat0" + uci set
>>>>>         network.wan.ifname="$DEV" + uci del network.ethmesh.ifname +
>>>>>         elif [ "$ETHMODE" = "CLIENT" ] ; then + disableAutoConf
>>>> "$DEV"
>>>>>         + uci set network.mesh.ifname="bat0 $DEV" + uci del
>>>>>         network.wan.ifname + uci del network.ethmesh.ifname + else #
>>>>>         default=BATMAN + disableAutoConf "$DEV" + uci set
>>>>>         network.mesh.ifname="bat0" + uci del network.wan.ifname + uci
>>>>>         set network.ethmesh.ifname="$DEV" + fi + uci commit network
>>>> +}
>>>>>         diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>>>         new file mode 100644 index 00000000..377c302f --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>>>         @@ -0,0 +1,31 @@ +# Copyright 2019 Adrian Schmutzler +#
>>>>>         License GPLv3 + +BOARD="$(uci get board.model.name)" + +case
>>>>>         "$BOARD" in + archer-c25-v1|\ + archer-c60-v1|\ +
>>>>>         tl-wr841-v10|\ + tl-wr841-v11|\ + tl-wr841-v12) +
>>>> PORTORDER="4
>>>>>         3 2 1" + ;; + cpe210|\ + cpe510) + PORTORDER="5 4" + ;; +
>>>>>         gl-ar150) + PORTORDER="1" + ;; + tl-wdr4300-v1) +
>>>> PORTORDER="1
>>>>>         2 3 4 5" + ;; + tl-wr841-v8) + PORTORDER="2 3 4 1" + ;; +
>>>>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + PORTORDER="5 4 3 2 1" +
>>>> ;;
>>>>>         +esac diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>>>         deleted file mode 100755 index 448bd04b..00000000 ---
>>>>>
>>>> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>>>         +++ /dev/null @@ -1,263 +0,0 @@ -#!/bin/sh -# This program is
>>>>>         free software; you can redistribute it and/or modify -# it
>>>>>         under the terms of the GNU General Public License as
>>>> published
>>>>>         by -# the Free Software Foundation; either version 3 of the
>>>>>         License, or -# (at your option) any later version. - -# This
>>>>>         program is distributed in the hope that it will be useful, -#
>>>>>         but WITHOUT ANY WARRANTY; without even the implied warranty
>>>> of
>>>>>         -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
>>>>>         the -# GNU General Public License for more details. - -.
>>>>>         /lib/functions/fff/network - -setupPorts() { - # Add a single
>>>>>         port to the *_PORTS config - # Usage: setupPorts <port id>
>>>>>         <port mode> - - local port=$1 - local mode=$2 - - #default:
>>>>>         BATMAN - if [ "$mode" = "WAN" ] ; then -
>>>>>         WAN_PORTS="${WAN_PORTS} $port" - elif [ "$mode" = "CLIENT" ]
>>>> ;
>>>>>         then - CLIENT_PORTS="${CLIENT_PORTS} $port" - else -
>>>>>         BATMAN_PORTS="${BATMAN_PORTS} $port" - fi -} - -setAutoConf()
>>>>>         { - # Sets ipv6 auto configuration on an interface to on/off
>>>> -
>>>>>         # Usage: setAutoConf <interface> <[0|1]> - local iface=$1 -
>>>>>         local on=$2 - -
>>>>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" - echo
>>>>>         "# Generated from configurenetwork" > "$sysctlfile" - echo
>>>>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" -
>>>> echo
>>>>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>>>> "$sysctlfile"
>>>>>         - echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>>>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>>>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>>>>         = $on" >> "$sysctlfile" - echo
>>>>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" - -
>>>>>         /sbin/sysctl -p "$sysctlfile" -} - -enableAutoConf() { - #
>>>>>         Enables ipv6 auto configuration on an interface - # Usage:
>>>>>         enableAutoConf <interface> - local iface=$1 - - setAutoConf
>>>>>         "$iface" "1" -} - -disableAutoConf() { - # Disables ipv6 auto
>>>>>         configuration on an interface - # Usage: disableAutoConf
>>>>>         <interface> - local iface=$1 - - setAutoConf "$iface" "0" -}
>>>> -
>>>>>         -BOARD="$(uci get board.model.name)" -. /etc/network.$BOARD -
>>>>>         -if [ -s /etc/network.config ] ; then - . /etc/network.config
>>>>>         -else - # Write network.config - 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 - setupPorts
>>>> "$ETHPORT"
>>>>>         "${ETHMODE}" -fi -if [ -n "$LAN0PORT" ] ; then -
>>>>>         #LAN0 at two-port: default: BATMAN - setupPorts "$LAN0PORT"
>>>>>         "${LAN0MODE}" -fi -if [ -n "$LAN1PORT" ] ; then -
>>>>>         #LAN1 at two-port: default: BATMAN - setupPorts "$LAN1PORT"
>>>>>         "${LAN1MODE}" -fi - -if ! uci -q get network.$SWITCHDEV >
>>>>>         /dev/null || [ "$FORCEPARSE" = '1' ] ; then - -
>>>>>         SWITCHHW=$(swconfig list | awk '{ print $4 }') - - uci set
>>>>>         network.$SWITCHDEV=switch - uci set
>>>>>         network.$SWITCHDEV.name=$SWITCHHW - uci set
>>>>>         network.$SWITCHDEV.enable=1 - uci set
>>>>>         network.$SWITCHDEV.reset=1 - uci set
>>>>>         network.$SWITCHDEV.enable_vlan=1 - - uci set
>>>>>         network.${SWITCHDEV}_1=switch_vlan - uci set
>>>>>         network.${SWITCHDEV}_1.device=$SWITCHHW - uci set
>>>>>         network.${SWITCHDEV}_1.vlan=1 - uci set
>>>>>         network.${SWITCHDEV}_1.ports="$CLIENT_PORTS" - - if [
>>>>>         "$WANDEV" = "$SWITCHDEV" ] || ! [ -z "$WAN_PORTS" ]; then -
>>>>>         uci set network.${SWITCHDEV}_2=switch_vlan - uci set
>>>>>         network.${SWITCHDEV}_2.device=$SWITCHHW - uci set
>>>>>         network.${SWITCHDEV}_2.vlan=2 - uci set
>>>>>         network.${SWITCHDEV}_2.ports="$WAN_PORTS" - -
>> enableAutoConf
>>>>>         "$WANDEV.2" - else - enableAutoConf "$WANDEV" - fi - - uci
>>>> set
>>>>>         network.${SWITCHDEV}_3=switch_vlan - uci set
>>>>>         network.${SWITCHDEV}_3.device=$SWITCHHW - uci set
>>>>>         network.${SWITCHDEV}_3.vlan=3 - uci set
>>>>>         network.${SWITCHDEV}_3.ports="$BATMAN_PORTS" - - uci set
>>>>>         network.mesh.ifname="$SWITCHDEV.1 bat0" - - uci set
>>>>>         network.ethmesh.ifname="$SWITCHDEV.3" - - if [ "$WANDEV" =
>>>>>         "$SWITCHDEV" ]; then - uci set network.wan.ifname=$WANDEV.2 -
>>>>>         else - uci set network.wan.ifname=$WANDEV - fi - - uci commit
>>>>>         network -fi - -if [ "$ONE_PORT" = "YES" ] && ( ! uci -q get
>>>>>         network.$SWITCHDEV.ifname || [ "$FORCEPARSE" = '1' ] ) ; then
>>>>>         - uci set network.$SWITCHDEV=interface - uci set
>>>>>         network.$SWITCHDEV.ifname=$SWITCHDEV - if [ "$ETHMODE" =
>>>> "WAN"
>>>>>         ]; then - enableAutoConf "$WANDEV" - uci set
>>>>>         network.mesh.ifname="bat0" - uci set
>>>>>         network.wan.ifname="$WANDEV" - uci del uci set
>>>>>         network.ethmesh.ifname - uci del network.eth0.macaddr - elif
>>>> [
>>>>>         "$ETHMODE" = "CLIENT" ] ; then - disableAutoConf "$WANDEV" -
>>>>>         uci set network.mesh.ifname="bat0 $SWITCHDEV" - uci set
>>>>>         network.wan.ifname="eth1" #eth1 because it is default in
>>>>>         config file - uci del network.ethmesh.ifname - uci del
>>>>>         network.eth0.macaddr - elif [ "$ETHMODE" = "BATMAN" ] ; then
>>>> -
>>>>>         disableAutoConf "$WANDEV" - uci set
>>>> network.mesh.ifname="bat0"
>>>>>         - uci set network.wan.ifname="eth1" #eth1 because it is
>>>>>         default in config file - uci set
>>>>>         network.ethmesh.ifname="$SWITCHDEV" - ETH0MAC="w2ap" - fi -
>>>>>         uci commit network -fi - -/etc/init.d/network restart - -if [
>>>>>         -n "$ETHMESHMAC" ]; then - if uci get network.ethmesh.macaddr
>>>>>         - then - echo "MAC for ethmesh is set already" - else - echo
>>>>>         "Fixing MAC on $SWITCHDEV.3 (ethmesh)" - sleep 10 - - uci set
>>>>>         network.ethmesh.macaddr=$ETHMESHMAC - uci commit network -
>> -
>>>>>         ifconfig $SWITCHDEV.3 down - ifconfig $SWITCHDEV.3 hw ether
>>>>>         $ETHMESHMAC - ifconfig $SWITCHDEV.3 up - /etc/init.d/network
>>>>>         restart - fi -fi - -if [ -n "$ROUTERMAC" ]; then - if uci get
>>>>>         network.mesh.macaddr - then - echo "MAC for mesh is set
>>>>>         already" - else - echo "Fixing MAC on br-mesh (mesh)" - sleep
>>>>>         10 - - uci set network.mesh.macaddr=$ROUTERMAC - uci commit
>>>>>         network - - ifconfig br-mesh down - ifconfig br-mesh hw ether
>>>>>         $ROUTERMAC - ifconfig br-mesh up - /etc/init.d/network
>>>> restart
>>>>>         - fi -fi - -if [ -n "$ETH0MAC" ]; then - echo "Fixing MAC on
>>>>>         eth0" - sleep 10 - NEW_MACADDR=$(cat
>>>>>         "/sys/class/net/${ETH0MAC}/address") - uci set
>>>>>         network.eth0.macaddr=$NEW_MACADDR - uci commit network -
>>>>>         ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR -
>>>>>         ifconfig eth0 up - /etc/init.d/network restart -fi - -if uci
>>>>>         -q get "network.mesh.ip6addr" > /dev/null -then - echo "IPv6
>>>>>         for mesh is set already" -else - echo "Setting IPv6
>>>> addresses"
>>>>>         - # Some time needed :( - sleep 5 - - for ip in $(ip -6 addr
>>>>>         show br-mesh | awk '/fdff/{ print $2 }'); do - ip -6 addr del
>>>>>         $ip dev br-mesh - done - - prefix="fdff:0::/64" - # Set
>>>>>         $prefix::MAC as IP - addr="$(ipMacAssemble "$prefix"
>>>>>         "$ROUTERMAC")" - ip -6 addr add $addr dev br-mesh - - uci -q
>>>>>         del network.globals - uci -q set network.globals=globals -
>>>> uci
>>>>>         -q set network.globals.ula_prefix=$prefix - uci -q add_list
>>>>>         network.mesh.ip6addr=$addr - uci -q set
>>>>>         network.mesh.proto=static - - # Set $prefix::1 as IP -
>>>>>         addr="$(ipAssemble "$prefix" "1")" - ip -6 addr add $addr dev
>>>>>         br-mesh - uci -q add_list network.mesh.ip6addr=$addr - - #
>>>> Set
>>>>>         $prefix::link-local as IP - addr="$(ipEUIAssemble "$prefix"
>>>>>         "$ROUTERMAC")" - ip -6 addr add $addr dev br-mesh - uci -q
>>>>>         add_list network.mesh.ip6addr=$addr - - uci -q commit network
>>>>>         - - /etc/init.d/fff-uradvd restart -fi diff --git
>>>>>         a/src/packages/fff/fff-sysupgrade/Makefile
>>>>>         b/src/packages/fff/fff-sysupgrade/Makefile index
>>>>>         90ef66af..0e6c08ec 100644 ---
>>>>>         a/src/packages/fff/fff-sysupgrade/Makefile +++
>>>>>         b/src/packages/fff/fff-sysupgrade/Makefile @@ -1,8 +1,7 @@
>>>>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-sysupgrade
>>>>>         -PKG_VERSION:=9 -PKG_RELEASE:=1 +PKG_RELEASE:=10
>>>>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git
>>>>>
>>>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>>>         index 7ff83f54..f5783687 100644 ---
>>>>>
>>>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>>>         @@ -7,7 +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.config
>>>>>         /etc/config/fff /etc/hoodfile __EOF__
>>>>>
>>>>>


Mehr Informationen über die Mailingliste franken-dev