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

mail at adrianschmutzler.de mail at adrianschmutzler.de
Mo Apr 22 23:08:17 CEST 2019


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.

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__
> >>>
> >>>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 834 bytes
Beschreibung: nicht verfügbar
URL         : <https://{'listname': 'franken-dev-freifunk.net', 'hostname': 'lists.freifunk.net'}/pipermail/franken-dev-freifunk.net/attachments/20190422/3fdbaeb8/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev