[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